METANIT.COM – Telegram
METANIT.COM
5.79K subscribers
1.64K photos
79 videos
9 files
986 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Рабочий процесс Docker
(описание предыдущего поста)

#### Шаг 1: Написание кода приложения

Начните с создания вашего приложения с использованием предпочитаемого языка программирования (например, Node.js, Python или Java).
Убедитесь, что все зависимости проекта чётко определены в конфигурационных файлах, таких как package.json или requirements.txt.

#### Шаг 2: Создание Dockerfile

Dockerfile — это шаблон, определяющий, как будет собираться ваш образ.

Пример:

# Использование базового образа
FROM node:20

# Установка рабочего каталога
WORKDIR /app

# Копирование файлов проекта
COPY . .

# Установка зависимостей
RUN npm install

# Открытие порта приложения
EXPOSE 3000

# Команда для запуска приложения
CMD ["npm", "start"]


Этот файл гарантирует, что ваше приложение будет работать стабильно в любой среде.

#### Шаг 3: Сборка Docker-образа

Выполните команду для сборки вашего образа:

docker build -t myapp:latest .


Флаг -t присваивает вашему образу имя и версию. Docker считывает инструкции из Dockerfile и создаёт повторно используемый образ.

#### Шаг 4: Запуск Docker-контейнера

Используйте образ для запуска контейнера:

docker run -d -p 3000:3000 myapp:latest


Флаг -d запускает контейнер в фоновом режиме.
Флаг -p сопоставляет порт контейнера с портом вашего локального компьютера. Приложение теперь доступно локально по адресу localhost:3000.

#### Шаг 5: Управление контейнерами

- Список запущенных контейнеров:

  docker ps


- Остановка контейнера:

  docker stop <id_контейнера>


- Удаление контейнера:

  docker rm <id_контейнера>


- Удаление образа:

  docker rmi myapp:latest


#### Шаг 6: Использование Docker Compose (опционально)

Для приложений с несколькими контейнерами (например, приложение + база данных) используйте файл docker-compose.yml.

Пример:

version: '3'
services:
app:
build: .
ports:
- "3000:3000"
db:
image: mongo
ports:
- "27017:27017"


Запуск всех сервисов:

docker-compose up -d


#### Шаг 7: Публикация образов в Docker Hub

- Вход в Docker Hub:

  docker login


- Присваивание тега вашему образу:

  docker tag myapp username/myapp:v1


- Публикация в Docker Hub:

  docker push username/myapp:v1


Это позволяет другим пользователям (или вашему CI/CD конвейеру) загружать и развёртывать ваш образ.

#### Шаг 8: Развёртывание в продакшене

Используйте платформы вроде AWS ECS, Kubernetes или Docker Swarm для развёртывания в масштабе. Эти платформы загружают ваши образы и автоматически управляют оркестровкой контейнеров, сетью и масштабированием.
9👍4🐳2😁1💩1
Студентам самого известного колледжа Екатеринбурга пригрозили отчислением. За отказ установить MAX

В Екатеринбурге студентам колледжа имени Ползунова угрожали отчислениями — под раздачу попали те, кто отказался устанавливать мессенджер MAX.

Один из учащихся рассказал, что 23 октября в их группе провели собрание. Тех, кто не захотел подключаться к новой соцсети, под диктовку заставили написать заявление об отчислении по собственному желанию.

Заведующая одного из отделений колледжа собрала все заявления и дала обучающимся время до понедельника. Для наглядности текст заявления даже написали на доске в аудитории.
https://www.e1.ru/text/education/2025/10/23/76088087/
🤡34🤬12🤯6👍1💊1
Как LLM воспринимают мир
(описание в следующем посте)
Как LLM воспринимают мир
(описание к предыдущему посту)

Когда вы вводите фразу "Hello world" в ChatGPT или Claude, модель не обрабатывает эти буквы и пробелы так, как вы читаете этот пост прямо сейчас. Вместо этого она преобразует всё в числа посредством процесса, о котором большинство людей даже не задумывается.

Сначала происходит предварительная обработка. Текст нормализуется: символы Unicode, особенности пробелов и специальные символы очищаются и стандартизируются. Фраза "Hello world" превращается в формат, с которым модель может работать.

Затем наступает очередь токенизации. Здесь начинается самое интересное. Модель разбивает текст на токены, и существует несколько подходов к этому:

1. Посимвольная токенизация разбивает текст на отдельные символы. Фраза "Hello world" становится ["H", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]. Этот метод прост, но неэффективен.

2. Пословная токенизация разбивает текст на целые слова. ["Hello", "world"]. Такой подход выглядит более чистым, но сталкивается с трудностями при обработке редких слов и создаёт огромные словари.

3. Подсловная токенизация — это то, что фактически используют современные LLM. GPT, Gemini, Claude — все они полагаются на этот метод. Фраза "Hello world" преобразуется примерно так: ["Hell", "o", "world"]. Этот метод обеспечивает баланс между эффективностью и гибкостью, обрабатывая редкие слова путём разбиения их на известные подсловные части.

Последний шаг — это присвоение идентификаторов токенов. Эти подсловные части сопоставляются с числами, например, [15496, 345, 995]. Каждый идентификатор токена соответствует вектору встраивания внутри модели. Именно эти векторы обрабатывает нейронная сеть.
👍5🔥3🖕2👎1
Шпаргалка по основным базовым функциям языка Python #python
13🤮3🤡3🔥1👏1
Трехслойная нейронная сеть. Она состоит из трех основных слоев: входного, скрытого и выходного. Каждый слой включает несколько нейронов, которые соединены между собой с помощью весов (обозначены как W).

Основные элементы сети:
- Входной слой: Принимает входные данные P и передает их на первый скрытый слой.
- Скрытый слой: Выполняет обработку данных с использованием весов W1 и смещений b1. Результат обработки передается на второй скрытый слой.
- Выходной слой: Генерирует итоговый результат, используя веса W3 и смещения b3.

Формулы:
1. Для первого слоя: a1 = f1(W1p + b1).
2. Для второго слоя: a2 = f2(W2a1 + b2).
3. Для третьего слоя: a3 = f3(W3a2 + b3).

Обозначения:
- P — входные данные.
- W1, W2, W3 — матрицы весов для каждого слоя.
- b1, b2, b3 — смещения для каждого слоя.
- f1, f2, f3 — функции активации.
9🔥8🤯7🤣1🖕1
Фантомные чтения
(подробное описание в следующем посте)

#sql #mysql #postgresql #database
Фантомные чтения
(описание к предыдущему посту)

В PostgreSQL и MySQL возможно, что одинаковые запросы SELECT в рамках одной транзакции могут возвращать разные результаты.

Рассмотрим пример с базой данных, в которой работают два клиента. Клиент A начинает транзакцию и выполняет SELECT всех заказов с общей ценой > 100 долларов. Пока он продолжает выполнять другие запросы, клиент B вставляет в таблицу новый заказ и фиксирует изменения (COMMIT). Наконец, клиент A снова запрашивает заказы с общей суммой > 100 долларов, но на этот раз видит новую строку, добавленную клиентом B!

Допускается ли такое поведение, зависит от настроенного уровня изоляции.

По умолчанию PostgreSQL использует уровень READ COMMITTED, который допускает фантомные чтения. Отдельные запросы получают согласованное представление базы данных, но между запросами в рамках одной транзакции могут наблюдаться изменения, зафиксированные другими транзакциями.

Как и PostgreSQL, MySQL имеет четыре настраиваемых пользователем уровня изоляции. Использование строгого уровня, такого как SERIALIZABLE, предотвращает фантомные чтения, в то время как более свободные уровни, такие как READ COMMITTED, допускают их (по умолчанию в MySQL используется REPEATABLE READ).

Почему бы не установить везде уровень SERIALIZABLE? Всё дело в производительности! Более строгие уровни требуют большего количества блокировок и снижают производительность, в то время как более свободные уровни обеспечивают более высокую производительность за счёт возможных несоответствий.

#sql #mysql #postgresql #database
3
Переписанные на Rust версии GNU Core Utils (uutils) стали причиной проблем в недавно выпущенной Ubuntu 25.10.
Так, портированная на Rust команда «date» имела серьезные проблемы, из-за которых не срабатывали автоматические проверки обновлений Ubuntu.

Стоит отметить, что клон «date» на базе Rust проходит только 2 из 8 тестов утилиты — это 75% отказов. А некоторые другие клоны Core Utils на базе Rust показывают ещё худшие результаты.

Команда Ubuntu знала, что частота сбоев Rust «uutil» была настолько критической, когда они решили заменить хорошо проверенную GNU Core Utils. К счастью, эта проблема была исправлена.

Но учитывая большое количество известных сбоев тестов «uutils» на Rust — и тот факт, что эти существующие тесты охватывают лишь малую часть общей функциональности GNU Core Utils, которую эти версии Rust призваны заменить (то есть большинство отсутствующих функций и ошибок не будут обнаружены тестами), можно предположить, что это только начало проблем, с которыми Ubuntu столкнется в ближайшее время
🤣46😐8💩4🤯3🤮2
Уравнение яйца
🤓52👍20🔥13🤣53😁1🤔1
Быстрый совет по Linux:

Если у вас есть файлы журналов, сжатые в формате .gz, вам не нужно их распаковывать, чтобы прочитать содержимое или выполнить поиск.

Используйте инструменты с префиксом «z» напрямую:

* zcat — просмотр содержимого файла
* zless — постраничный просмотр файла
* zgrep — поиск по содержимому
* zegrep — поиск с использованием расширенных регулярных выражений
* zfgrep — поиск точных строк
* zcmp/zdiff — сравнение файлов

Эти команды позволяют просматривать сжатые логи без предварительной распаковки, что идеально подходит для быстрого устранения неполадок.

#linux
🔥174👍3😁2🙏1
Apple выпустила Swift SDK для Android
Благодаря этому язык Swift теперь можно использовать для разработки кроссплатформенных мобильных приложений как для iOS, так и для Android.
SDK по умолчанию включён в установщик Swift для Windows. Отдельно его можно скачать для macOS и Linux. Вместе с этим выпустили библиотеку swift-java, которая обеспечивает взаимодействие между этими языками программирования. Команда проекта рассказала, что более 27% пакетов из Swift Package Index уже собираются под Android.

Например, так выглядит код для вывода фразы «Hello from Swift» на экран Android-смартфона:
import Android

@_cdecl("Java_org_example_helloswift_MainActivity_stringFromSwift")
public func MainActivity_stringFromSwift(env: UnsafeMutablePointer<JNIEnv?>, clazz: jclass) -> jstring {
let hello = ["Hello", "from", "Swift", "❤️"].joined(separator: " ")
return hello.withCString { ptr in
env.pointee!.pointee.NewStringUTF(env, ptr)!
}
}

https://www.swift.org/blog/nightly-swift-sdk-for-android/

#swift
😁29👍10👏5🤮2🥴2🖕2
stat in brief.jpeg
975.2 KB
Статистика вкратце
😨21👍8🥰7🤯3💩3😁2🖕21
Необычное восприятие операций на множествах: объединения и пересечения множеств
🤣46👍11😁9🐳1🤓1
Газета The Washington Post рассказала о новом термине «996», который пришёл из Китая и популяризирует жёсткий график с шестидневкой и 12-часовым рабочим днём. Теперь, на фоне гонки за развитие искусственного интеллекта, этот термин продвигают многие стартапы в Кремниевой долине и Нью-Йорке.

Они продвигают хардкорную культуру как образ жизни, расширяя границы рабочего времени, требуя от сотрудников быстрой адаптации, чтобы быть первыми на рынке. Некоторые даже позиционируют культуру «996» как показатель «упорства» компании. «Тот, кто первым разработает ИИ, захватит рынок с окном возможностей в два-три года, так что вам лучше бежать быстрее всех остальных», — отмечает Иньяки Беренгер, управляющий партнёр венчурной компании LifeX Ventures.

В ИИ-стартапе Sonatic из Сан-Франциско уже ввели 10-часовой рабочий день с перерывами на обед, спортзал и игру в пиклбол. Гендиректор Кинджал Нанди считает, что такой рабочий день может показаться слишком обременительным, но компания также предлагает своим сотрудникам такие бонусы, как бесплатное жильё в общем доме, кредиты на доставку еды и бесплатную подписку на сервис знакомств Raya.

Mercor, ИИ-стартап подбора сотрудников из Сан-Франциско, опубликовал вакансию инженера по работе с клиентами, заявив, что кандидаты должны быть готовы к шестидневке.

В некоторых стартапах требуется только офисная работа. Так, в StarSling, занимающемся ИИ, есть две инженерные вакансии, которые предлагают шестидневку в офисе. В описании вакансии инженера нью-йоркской Rilla предлагают кандидатам работать около 70 часов в неделю при личном присутствии в офисе.

Джаред Слипер, партнёр нью-йоркской венчурной компании Avenir, недавно составил рейтинг «уровня усердия» публичных софтверных компаний. Он использовал данные Glassdoor.

«В подразделении искусственного интеллекта Google соучредитель Сергей Брин считает 60 часов в неделю “золотой серединой” для продуктивности», — отмечает Independent.

https://www.msn.com/en-us/news/technology/why-these-companies-insist-on-a-72-hour-workweek/ar-AA1OO4fz
💩37🤡124👎3😁2🤣2💊1
Алгоритм Луна для верификации номеров кредитных карт
👏28❤‍🔥8😨8🥰1
В Apple попросили сотрудника Sam Sung не представляться своим именем
Уникальная история произошла 13 лет назад, но стала известна только сейчас

Компания Apple попросила своего сотрудника Сэм Сунга (Sam Sung) не представляться настоящим именем, чтобы избежать путаницы с конкурирующим брендом
Как рассказал Сэм Сунг, до взрослого возраста он никогда не сталкивался с какими-либо проблемами, связанными с именем, если не считать глупых детских кричалок. Но все кардинально изменилось, когда кто-то сфотографировал его рабочий бейджик из магазина Apple и выложил в соцсеть Reddit

Так или иначе, сотрудники Apple связались с ним и попросили не представляться по настоящему имени, когда он общается с клиентами, а потом и вовсе забрали все его визитные карточки. А когда в магазин заглядывали люди в поисках «Сэма Сунга», то молодой человек просто притворялся, что такой здесь не работает. Благо шумиха улеглась за несколько месяцев.

Спустя год после инцидента Сэм по собственному желанию ушел с работы в Apple и начал карьеру в сфере подбора персонала — после чего принял решение официально поменять свое имя. Сейчас Сэм живет под фамилией Струан
https://www.businessinsider.com/sam-sung-goes-viral-why-changed-name-after-apple-fame-2025-10
😁21😢143🤡1😭1
Архитектура микросервисов
(продолжение в следующем посте)
Архитектура микросервисов
(продолжение предыдущего поста)

### Обзор

* Разбивает крупное приложение на небольшие, независимые и слабо связанные сервисы
* Каждый микросервис отвечает за определённую бизнес-функцию
* Обеспечивает гибкость, масштабируемость и более быстрые обновления

### Компоненты

* Клиенты → Потребители веб-, мобильных сервисов или API, запрашивающие услуги
* API Gateway → Центральная точка входа для маршрутизации, балансировки нагрузки и обеспечения безопасности
* Микросервисы → Независимые сервисы, такие как Пользователь, Товар, Заказ, Оплата и Уведомления
* Базы данных → Каждый сервис имеет собственную базу данных для независимого управления данными
* Вспомогательные сервисы → Инструменты логирования, мониторинга, настройки и обнаружения сервисов

### Принцип работы

* Клиенты отправляют запросы → API Gateway их маршрутизирует → Конкретный микросервис обрабатывает → Взаимодействует со своей базой данных → Ответ возвращается через шлюз

### Преимущества

* Независимая разработка и развёртывание
* Изоляция сбоев между сервисами
* Масштабируемость на уровне сервиса
* Гибкость в использовании различных технологических стеков
* Непрерывная доставка и более быстрые инновации

### Недостатки

* Повышенная сложность эксплуатации
* Сложность управления межсервисным взаимодействием
* Проблемы с согласованностью данных
* Требуются продвинутые настройки DevOps и мониторинга

### Рекомендации по применению

* Определение чётких границ сервисов (ограниченных контекстов)
* Использование асинхронной коммуникации (события, очереди)
* Внедрение централизованного логирования и мониторинга
* Обеспечение безопасности коммуникации через API Gateway
* Автоматизация развёртываний с помощью CI/CD-пайплайнов

### Когда использовать

* Крупные и сложные системы, требующие модульности
* Приложения, нуждающиеся в независимом масштабировании
* Команды с опытом работы с распределёнными системами
5👍2🔥2