METANIT.COM – Telegram
METANIT.COM
5.76K subscribers
1.64K photos
80 videos
9 files
973 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Сравнение Rust vs C++
😁63👍16👎64🤔1
Сервис Cloudflare (обслуживает около 20% всего мирового веб-трафика) опубликовал годовой отчёт с анализом глобальных тенденций за 2025 год. Некоторые моменты:

- Самой популярной JS-библиотекой остаётся jQuery, на втором месте - Slick.
- Самые популярные JS-фреймворки: React (37%), далее следуют Vue.js - 19%, Next.js - 16%, Nuxt.js - 8.4%, Gatsby - 4.6%, RequireJS - 2.9%
- Популярные веб-фреймворки: Next.js - 38%, Express - 21%, Nuxt.js - 20%, ASP NET - 10%, Ruby on Rails - 4.9%, Yii - 2.3%, Spring - 2.1%, Django - 0.52%
- Популярные языки программирования: PHP - 45%, node.js - 33%, Java - 15%, Ruby - 2.2%, Python - 1.9%, Perl - 0.98%, C - 0.87%
- Популярные языки для клиентов для API: Go - 20% запросов, Python - 17%, Java - 11.2%, Node.js - 8.3%, .NET - 2.3%
- Самые популярные веб-браузеры: Chrome - 66.2%, Safari - 15.4%, Edge - 7.4%, Firefox - 3.7%, Samsung Internet - 2.3%
Для РФ доля Chrome - 44%, а Yandex Browser - 33%.
https://blog.cloudflare.com/radar-2025-year-in-review/
👍164👏2
This media is not supported in your browser
VIEW IN TELEGRAM
Наглядно про файловую систему в Linux
👍11🔥1👏1
Обязательную идентификацию владельцев доменов через «Госуслуги» утвердили в Госдуме

Комитет Госдумы по информполитике рекомендовал к принятию законопроект, вводящий обязательную идентификацию владельцев всех доменов в зонах .ru и .рф через «Госуслуги» и создание правительственного реестра аккредитованных регистраторов.
Вступить в силу нормы о новом порядке регистрации доменов могут с 1 сентября 2026 года.

https://www.kommersant.ru/doc/8293585
🤬25🤡14🌚3🤮21👍1👎1👏1🥴1
Что такое дескриптор процесса в Linux
(продолжение в следующем посте)
5
Что такое дескриптор процесса в Linux
(продолжение предыдущего поста)

Дескриптор процесса (process denoscriptor) в Linux — это централизованная структура данных (task_struct), которая содержит всю необходимую информацию о процессе и которая позволяет ядру Linux эффективно управлять процессами, их ресурсами и взаимодействием в многозадачной среде.. Он служит «паспортом» процесса: хранит его состояние, параметры, ссылки на ресурсы и связи с другими процессами и структурами ядра.

#### Структура дескриптора (task_struct)

На изображении представлена схема дескриптора процесса. Он состоит из множества полей, среди которых:

1. `state` — текущее состояние процесса (например, выполняется, спит, завершён).
2. `*stack` — указатель на стек процесса (область памяти для хранения локальных переменных и вызовов функций).
3. `flags` — битовые флаги, определяющие свойства процесса (например, приоритет, режим выполнения).
4. `*mm` — указатель на структуру mm_struct, описывающую виртуальную память процесса (включая таблицу страниц и PGD — Page Global Directory).
5. `exit_code` — код завершения процесса (используется для передачи статуса завершения родительскому процессу).
6. `*user` — ссылка на user_struct, содержащую информацию о пользователе, запустившем процесс.
7. `pid` — идентификатор процесса (Process ID), уникальный в рамках системы.
8. `*files` — указатель на files_struct, описывающий открытые файлы и ресурсы (файловые дескрипторы).
9. `*parent` — ссылка на дескриптор родительского процесса (важно для иерархии процессов).
10. `*signal` — указатель на signal_struct, хранящую информацию о сигналах, направленных процессу.

#### Связи с другими структурами ядра

Дескриптор процесса не ограничивается только внутренними полями — он содержит указатели на другие ключевые структуры ядра:

- `mm_struct` — управляет виртуальной памятью процесса, включая таблицы страниц (pgd — указатель на глобальную директорию страниц) и связь с физической памятью (pagedir[]).
- `user_struct` — хранит данные о пользователе (UID, GID и т. д.), от имени которого запущен процесс.
- `files_struct` — описывает открытые файлы, сокеты и другие ресурсы, доступные процессу.
- `signal_struct` — содержит информацию о сигналах (например, SIGTERM, SIGINT), которые могут быть отправлены процессу.

#### Зачем нужен дескриптор процесса?

1. Управление процессами: ядро использует дескриптор для планирования, переключения контекста, синхронизации и завершения процессов.
2. Изоляция ресурсов: каждый процесс имеет свой дескриптор, что обеспечивает защиту памяти и ресурсов.
3. Взаимодействие процессов: через поля *parent, *signal и другие реализуется связь между процессами (например, передача сигналов, ожидание завершения дочерних процессов).
4. Учёт и аудит: дескриптор хранит данные для логирования (PID, пользователь, код завершения).
7👍4💯3
65% разработчиков используют ИИ-ассистенты. Теперь некоторые не могут кодить без них

Считается, что программирование с использованием ИИ обеспечивает разработчикам программного обеспечения беспрецедентный прирост производительности.
Например, согласно опросу Stack Overflow, около 65% разработчиков используют инструменты на основе ИИ еженедельно. Это связано с возможностью быстрого написания тестов, исправления ошибок и объяснения незнакомого кода.

Однако исследование показало, что хотя некоторые разработчики сообщают о значительных улучшениях продуктивности, объективные тесты демонстрируют замедление процесса программирования на 19%.

Так, в статье приводится пример инженера из компании Companion Group по имени Лучано Нойен, который активно пользовался ИИ-ассистентами на основной работе — там их предоставляли бесплатно. Но когда он начал сторонний проект без доступа к этим инструментам, то обнаружил, что не справляется с задачами, которые раньше решал автоматически. "Я чувствовал себя таким тупым, — признается Нойен. — Вещи, которые раньше были инстинктом, превратились в ручную, иногда даже громоздкую работу". По его мнению, сохранить навыки можно только как спортсменам — регулярно практикуя базовые упражнения.

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

В добавок по прежнему существуют большие технические ограничения при использовании ИИ: большие языковые модели имеют ограниченную рабочую память ("контекстное окно"), что затрудняет обработку крупных кодовых баз и ведет к ошибкам.

Некоторые считают, что технологии позволяют сосредоточиться на стратегических аспектах проектирования, другие же разочарованы невозможностью достичь существенного роста продуктивности.
Например, по словам Нико Вестердейла, CTO ветеринарной компании IndeVets, чтобы получить максимум от ИИ-инструментов, разработчикам придется отказаться от контроля над отдельными строками кода и сосредоточиться на архитектуре. Это принципиально другой набор навыков — и пока непонятно, как к нему готовить следующее поколение программистов, если джуниорские позиции исчезают быстрее, чем появляются новые карьерные траектории.

https://www.technologyreview.com/2025/12/15/1128352/rise-of-ai-coding-developers-2026/
🤡10🤷‍♂32😢2💯2👎1
🤡22🤔843🤮1🎅1
Архитектурный паттерн Command Query Responsibility Segregation (CQRS)
(продолжение в следующем посте)
4👍3👏1
Архитектурный паттерн Command Query Responsibility Segregation (CQRS)
(продолжение предыдудщего поста)

→ CQRS — это архитектурный шаблон, разделяющий операции чтения (запросы) и операции записи (команды).
→ Команды изменяют состояние системы.
→ Запросы лишь считывают данные и никогда их не модифицируют.
→ Такое разделение позволяет каждой из сторон масштабироваться, оптимизироваться и развиваться независимо.

Основные понятия

Команда — действие, изменяющее данные (*CreateOrder*, *UpdateProfile*).
Запрос — запрос, извлекающий данные (*GetOrderById*, *ListUsers*).
Модель записи — обрабатывает бизнес‑правила, валидацию и изменения состояния.
Модель чтения — оптимизирована для быстрого извлечения данных (часто денормализованная).

Как это работает

→ Клиент отправляет команду → Обработчик команд → Модель записи → База данных.
→ Клиент отправляет запрос → Обработчик запросов → Модель чтения → Оптимизированное хранилище для чтения.
→ Команды и запросы используют раздельные пути и могут работать с разными базами данных.

Простая аналогия: банковская система

→ Команды = Внесение или снятие денег (изменяет баланс).
→ Запросы = Проверка баланса счёта или истории операций (только чтение).
→ Вы не обновляете баланс при его проверке — обязанности чётко разделены.

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

→ Повышенная производительность для систем с высокой нагрузкой на чтение.
→ Независимое масштабирование операций чтения и записи.
→ Чёткое разделение обязанностей.
→ Упрощённая оптимизация моделей данных для конкретных сценариев использования.
→ Хорошая совместимость с системами, управляемыми событиями.

Недостатки

→ Повышенная сложность архитектуры.
→ Возможная несогласованность данных между моделями чтения и записи (согласованность в конечном счёте).
→ Больший объём инфраструктуры для управления (несколько моделей, хранилищ).
→ Избыточность для небольших или простых приложений.

Лучшие практики

→ Применяйте CQRS только тогда, когда сложность оправдана.
→ Сочетайте CQRS с Event Sourcing, если требуется аудит.
→ Делайте команды сфокусированными на задаче и явными.
→ Оптимизируйте модели чтения под нужды интерфейса, а не ради чистоты домена.
→ Грамотно обрабатывайте возможную несогласованность данных в интерфейсе.

Когда применять

→ Системы с существенным дисбалансом операций чтения и записи.
→ Сложные бизнес‑домены с множеством правил.
→ Приложения, требующие масштабируемости и высокой производительности.
→ Системы, управляемые событиями, или системы на основе микросервисов.
5👍3👏1
Генеральный директор Amazon Web Services Мэтт Гарман назвал «одной из самых глупых идей» сокращение вакансий для начинающих разработчиков из‑за внедрения ИИ.

По словам Гармана, полная замена младших сотрудников искусственным интеллектом не имеет никакого смысла, поскольку такие сотрудники зачастую лучше разбираются в инструментах ИИ ввиду своей молодости. Нынешние выпускники вузов выросли в эпоху новых технологий, поэтому им проще адаптироваться, говорит гендиректор AWS. Как правило, молодые специалисты находят новые быстрые способы написания кода и выясняют, как добиться наилучших результатов работы от ИИ‑агентов.

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

По слова гендиректора AWS, руководители компаний, которые заменяют начинающих разработчиков искусственным интеллектом, таким образом демонстрируют неспособность к долгосрочному планированию. Полагающаяся лишь на инструменты ИИ компания в конечном итоге столкнётся с нехваткой персонала, говорит Гарман.

https://www.wired.com/story/the-big-interview-podcast-matt-garman-ceo-aws/
👍28💯6🤝41😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Символы ASCII вместо графики как основа для создания видеоигр
🔥445🤯2😭1🤝1
Система видеонаблюдения на основе ИИ ввела режим изоляции в средней школе имени Лоутона Чайлза в штате Флорида после того, как приняла за оружие кларнет ученика.
Прибывшая полиция объявила о прекращении режима изоляции, указав, что детям ничего не угрожало.

Директор школы Мелисса Лаудани заявила, что в учебном заведении действует многоуровневая безопасность, включая автоматизированную систему, которая обнаруживает потенциальные угрозы. По её словам, ученик держал кларнет как оружие, что привело к срабатыванию системы.

Аналогичный случай произошел в штате Мэриленд: там школьная система безопасности на базе ИИ приняла за пистолет пачку чипсов Doritos в руках старшеклассника. В двух этих случаях системы позволили ИИ принять решения без какого-либо вмешательства со стороны человека.

https://futurism.com/future-society/ai-surveillance-school-clarinet
🤣8👎6😐31😁1🤔1
Шпаргалка по командам для тестирования и отладки сети в Windows, Linux и MacOS
9👍5🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
C++: Расположение данных в памяти и директивы компилятора
(продолжение в следующем посте)
👍63🤔2
C++: Расположение данных в памяти и директивы компилятора
(продолжение предыдущего поста)

Визуализация показывает, как три директивы компилятора C++ существенно изменяют размер и организацию простой структуры данных, управляя выравниванием и добавлением отступов в памяти.

Разница между стандартным (8 байт) и упакованным (5 байт) расположением критически важна для производительности и передачи данных!

Варианты расположения данных:

- Стандартное (Default): естественное выравнивание. После типа char добавляются 3 байта отступа, чтобы выровнять тип int по границе в 4 байта.
Размер: 8 байт.

- Упакованное (Packed): отступы не добавляются. Тип int начинается сразу после char, но для доступа к невыровненным полям может потребоваться несколько инструкций процессора — это сводит на нет выгоду от экономии памяти.
Размер: 5 байт.

- Выровненное (Aligned): заданное выравнивание (например, aligned(16) или aligned(32)) может добавлять значительные отступы в конце, чтобы гарантировать, что последующие структуры начинаются с требуемой границы.

Почему расположение данных компилятором имеет значение:

- Сетевые протоколы: использует упакованные структуры для минимального «формата передачи», чтобы не отправлять лишние байты отступов.

- Аппаратные интерфейсы: применяет конкретное выравнивание для ввода‑вывода с отображением в память, когда аппаратное обеспечение ожидает данные на определённых границах.

- Оптимизация производительности: использует выровненный доступ для векторизации (SIMD), чтобы ускорить обработку данных.

- Кроссплатформенная совместимость: обеспечивает согласованное размещение памяти при компиляции кода на разных архитектурах.
👍82👏1
Обобщённые инвертированные индексы (Generalized Inverted Indexes / GIN)
(продолжение в следующем посте)
3👍2🔥2
Обобщённые инвертированные индексы (Generalized Inverted Indexes / GIN)
(продолжение предыдущего поста)

Generalized Inverted Indexes (Обобщённые инвертированные индексы или GIN) — мощный инструмент СУБД, в частности, в Postgres.

Они отлично подходят для инвертирования типичного сценария использования индексов.

Вместо сопоставления «строка с ID 2 содержит значение „become a database expert“» вы переворачиваете это так: «токен „database“ сопоставляется со строками с ID 1, 2 и 3, а токен „expert“ — со строкой с ID 2».

Индексам GIN передаётся набор значений для каждой строки, которую вы хотите проиндексировать. Каждое уникальное значение становится ключом в индексе и сопоставляется с набором CTID (идентификаторов строковых кортежей), содержащих это значение.

У такого подхода есть несколько вариантов применения, один из которых — полнотекстовый поиск! В MySQL есть специальный тип индекса FULLTEXT, тогда как в Postgres для создания аналогичной функциональности используются более универсальные индексы GIN. Как это сделать?

(а) Добавьте в таблицу столбец tsvector:
CREATE TABLE post (
author TEXT,
publish_date DATE,
content TEXT NOT NULL,
search_vector tsvector);


(б) Заполните его лексемами (нормализованными словами):
UPDATE post
SET search_vector =
to_tsvector('english', content);


(в) Создайте индекс, используя лексемы в качестве ключей:
CREATE INDEX post_search_idx
ON post USING GIN(search_vector);


(г) Выполняйте запросы!
SELECT * FROM post
WHERE search_vector @@
to_tsquery('english', 'database & expert');
👍6👏32
Выпускники IT-специальностей сталкиваются с апокалипсисом на рынке труда

Издание Rest of World опубликовало статью о том, что ИИ «уничтожил позиции для начинающих специалистов в техиндустрии».

Так, студент престижного инженерного колледжа в Индии рассказал, что из 400 его однокурсников «менее 25% получили предложения о работе», а «в кампусе царит паника». Индийские IT-компании сократили количество вакансий начального уровня на 20-25% благодаря автоматизации и ИИ.

Студенты инженерных колледжей в Индии, Китае, Дубае и Кении сталкиваются с «апокалипсисом на рынке труда», поскольку ИИ заменяет людей на позициях начального уровня. Задачи, которые раньше поручали недавним выпускникам, такие как отладка, тестирование и рутинное обслуживание программного обеспечения, теперь всё чаще автоматизируются. За последние 3 года число недавних выпускников, нанятых крупными технологическими компаниями по всему миру, сократилось более чем на 50%.

«Пять лет назад шла настоящая война за программистов и разработчиков. Была борьба за найм, и 90% нанимаемых сотрудников шли на готовые технические должности, то есть на позиции, требующие использования готовых технологических продуктов, а не внутренней разработки. С появлением ИИ это резко изменилось. Теперь я не уверен, что показатель достигает хотя бы 5%», — сказал Вахид Хагзаре, директор рекрутинговой компании Silicon Valley Associates Recruitment в Дубае.

Хотя в 2024 году найм немного восстановился, только 7% среди новых сотрудников оказались недавними выпускниками. При этом в ходе опросов до 37% менеджеров заявили, что предпочли бы использовать ИИ, чем нанимать сотрудников поколения Z.

«Поскольку спрос на вакансии для начинающих специалистов снижается, даже высококвалифицированные выпускники инженерных специальностей испытывают трудности с трудоустройством в сфере технологий, особенно в крупных технологических компаниях», — отмечают аналитики. При этом такие компании ожидают от недавних выпкскников выполнения «дополнительных обязанностей», таких как управление проектом или руководство продажами. Некоторые студенты пересмотрели свои амбиции, чтобы соответствовать требованиям работодателей. Так, Нишант Каушик, изучавший информатику в другом престижном колледже на востоке Индии, решил искать работу в сфере продаж или маркетинга.

Развитие ИИ также снизило актуальность инженерных специальностей: требования на рабочем месте теперь отличаются от того, чему учат в колледжах. Рита Санде Лукале, студентка программы электронной инженерии в Техническом университете Кении, надеялась после окончания учебы устроиться на работу в сектор системной архитектуры. Однако за последние несколько лет она наблюдала, как такие должности исчезают. Теперь выпускники «должны обладать навыками более высокого уровня, необходимыми для понимания алгоритмов и использования инженерного подхода для устранения неполадок в сложных и автоматизированных системах».

От недавних выпускников ожидается не только понимание и эффективное использование новейших инструментов, «от них требуют увеличить производительность на 70%, потому что “они используют ИИ”», — сказал Лиам Фэллон, руководитель отдела разработки продуктов в рекрутинговой компании GoodSpace AI. В результате студенты сталкиваются с быстро меняющейся отраслью, которая требует от них самостоятельного повышения квалификации вне рамок учебной программы. Эксперты считают, что университеты не в состоянии достаточно быстро адаптировать свои академические практики. Нынешняя система, в которой студент посвящает от трёх до пяти лет изучению компьютерных наук, «нежизнеспособна», а студенты в итоге «проваливаются в яму и не знают, как из неё выбраться», заключают они.

https://restofworld.org/2025/engineering-graduates-ai-job-losses/
💊12😢7🤔3🤯3🤬21😁1