METANIT.COM – Telegram
METANIT.COM
5.79K subscribers
1.64K photos
79 videos
9 files
986 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Согласно внутренней утечке, Amazon Web Services уволила до 40% DevOps-инженеров, заменив их экспериментальной AI-системой автоматического управления инфраструктурой с целью снизить расходы и ускорить обслуживание облака. Новая AI-система вроде как способна автоматически исправлять ошибки IAM, восстанавливать виртуальные сети, перезапускать инстансы и даже откатывать неудачные деплои Lambda без участия человека.

Однако через несколько дней после запуска системы AWS столкнулась с масштабным сбоем, который затронул Snapchat, Roblox и другие крупные сервисы. Инженеры утверждают, что именно новая автономная система спровоцировала каскадные ошибки при синхронизации кластеров.

Amazon официально не комментирует ситуацию. Но по cлухам, внутри компании идёт обсуждение — стоит ли давать ИИ слишком много контроля над критической инфраструктурой.
https://80.lv/articles/amazon-allegedly-replaced-40-of-aws-devops-workers-with-ai-days-before-crash
😁34🤡19🤮6🤪5❤‍🔥21
Компания JetBrains на днях выпустила отчёт о состоянии экосистемы разработчиков в 2025 году. В нем приняли участие 24 534 разработчика из 194 стран

Некоторые выводы

Наиболее используемый язык - Python

TypeScript демонстрирует самый впечатляющий рост в реальном использовании за последние пять лет. Rust, Go и Kotlin тоже постепенно укрепляют свои позиции, хотя их успехи не столь заметны, как у TypeScript.
А PHP, Ruby и Objective-C продолжают уверенно терять популярность.

Индекс Language Promise от JetBrains оценивает языки по трём критериям: рост, стабильность и готовность разработчиков их осваивать. Согласно этому индексу, в 2025 году наибольший потенциал роста демонстрируют TypeScript, Rust и Go, тогда как JavaScript, PHP и SQL, судя по всему, достигли стадии зрелости.

Список самых высокооплачиваемых разработчиков возглавлавила Scala — 38%, хотя этот язык является основным всего у 2% специалистов. Похоже, сказывается узкая специализация

https://devecosystem-2025.jetbrains.com/
🤝127🖕5💩2
В руководство по языку Java добавлены новые статьи:

Переменные volatile в многопоточных приложениях
https://metanit.com/java/tutorial/8.16.php

Атомарность и Atomics. Потокобезопасность без блокировок в многопоточных приложениях
https://metanit.com/java/tutorial/8.17.php

#java
👍22👾3
Рабочий процесс Docker
(подробное описание в следующем посте)
4💩43🐳2
Рабочий процесс 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