METANIT.COM – Telegram
METANIT.COM
6K subscribers
1.71K photos
81 videos
9 files
1.09K links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Кристоф Хелвиг (Christoph Hellwig), мэйнтейнер подсистем DMA, KVM, Slab Allocator и архитектуры PowerPC в ядре Linux, в своё время входивший в управляющий технический комитет организации Linux Foundation, отказался подтверждать пачти, связанные с поддержкой разработки драйверов на языке Rust. Предложенный патчи добавляли обвязки над несколькими функциями подсистемы DMA, позволяющие использовать DMA в драйверах на языке Rust.
Хелвиг предложил напрямую обращаться к исходному Си API DMA в каждом драйвере на языке Rust, чтобы не создавать дополнительных абстракций, от которых вынуждены будут зависеть сопровождающие ядра. Хелвиг также наложил вето на приём связанных с Rust патчей и сравнил патчи на Rust с раковой опухолью.
Суть проблем с сопровождением в том, что Rust-обвязки ставят сопровождающих в зависимость от кода на языке Rust. Соостветственно необходимо синхронизировать все изменения между кодом на Си и на Rust.
Отказ принимать код обвязки над вызовами DMA поставил разработчиков проекта Rust for Linux в тупик, так как без подобных обвязок разработка полноценных драйверов на языке Rust будет затруднена.
https://lore.kernel.org/rust-for-linux/
👍15
This media is not supported in your browser
VIEW IN TELEGRAM
КАк быстро измерить время выполнения функции на языке Python с помощью встроенных средств? Для этого можно использовать встроенную функцию timeit.timeit. Например, измерим время выполнения функции sum:

import timeit

def sum():
result = 0
for i in range(10000):
result +=i
return result

execution_time = timeit.timeit(lambda: sum(), number=100)

print("Время выполнения функции sum:", execution_time)
Зарплатные предложения для IT-специалистов выросли на 16% за год
Средний уровень предлагаемых зарплат для IT-специалистов в России вырос в 2024 году по сравнению с предыдущим годом на 16%, до 88,6 тыс. рублей. Об этом свидетельствуют результаты исследования платформы онлайн-рекрутинга hh.ru.
По данным платформы, самые высокие зарплаты предлагали следующим специалистам: DevOps-инженер - 247,9 тыс. рублей в среднем, руководитель группы разработки - 237,5 тыс. рублей, дата-сайентист - 234,7 тыс. рублей, системный аналитик - 178,3 тыс. рублей, директор по информационным технологиям (CIO) - 165,1 тыс. рублей.
https://tass.ru/ekonomika/23081179
😁6👎1
Шпаргалка по ключевым аспектам кэширования
🤨3🔥1🥰1👏1
Шпаргалка по регулярным выражениям
🔥101👏1
.NET 10, который должен выйти в ноябре 2025, обещает значительные улучшения в JIT-компиляторе, сокращая накладные расходы на абстракцию и повышая производительность. Улучшенное распределение стека, лучшая обработка массивов и оптимизированное встраивание — вот лишь несколько основных моментов
https://github.com/dotnet/runtime/issues/108913
🔥29
Принципы построения отказоустойчивых систем
8
Уровень безработицы в американском IT-секторе с декабря 2024 года вырос с 3,9 до 5,7%, сообщает WSJ. В абсолютных цифрах это означает, что на данный момент в активном поиске нового рабочего места находится 152 000 специалистов различных профилей, хотя еще два месяца назад эта цифра составляла 98 000.
При этом уровень безработицы в IT впервые за долгое время превышает общенациональный показатель, который на текущий момент равен 4%.
Одной из основных причин роста безработицы в секторе называют повышение уровня автоматизации в IT-компаниях и как следствие — сокращение штата.
Среди причин - отголоски сокращений раздутых на фоне ковида штатов. Также происходят активные сокращения удаленных сотрудников по причине частичного или полного возврата команд в физические офисы и те специалисты, которые несколько лет назад поверили в новую реальность рынка труда IT и выехали из региона физической локации компании, на текущий момент оказались в откровенно уязвимом положении.
Другой ключевой причиной роста безработицы в секторе называют повышение уровня автоматизации в IT-компаниях и как следствие — сокращение штата. Основная цель руководителей компаний и подразделений — сокращение расходов, а замена части сотрудников и передача их функций современным нейросетям — наиболее очевидный путь. Наибольший удар, как не удивительно, получили вакансии не офис-менеджеров или других управленцев, которые обычно попадают под сокращение в первую очередь, едва работодатель начинает задумываться об оптимизации и сокращении расходов, а вакансии разработчиков ПО.
https://www.wsj.com/articles/it-unemployment-rises-to-5-7-as-ai-hits-tech-jobs-7726bb1b
😢72🤔2🤬2👌1
Об индексах базы данных

Индекс — это пара ключ-значение, где ключ используется для поиска данных вместо соответствующих индексированных столбцов, а значение — это указатель на соответствующие строки в таблице. Большинству баз данных требуется та или иная форма индексации для производительности. Чтобы максимально эффективно использовать БД, следует использовать тип индекса, соответствующий данной задаче.

1) B-дерево (b-tree index) — одна из наиболее часто используемых структур индексации, в которой ключи иерархически сортируются. При поиске данных дерево просматривается до листового узла, который содержит соответствующий ключ и указатель на соответствующие строки в таблице. B-дерево чаще всего используется из-за его эффективности в хранении и поиске по упорядоченным данным. Их сбалансированная структура означает, что ко всем ключам можно получить доступ за одинаковое количество шагов, что обеспечивает постоянную производительность.

2) Хэш-индексы (hash index) лучше всего использовать при поиске точных совпадений. Ключевым компонентом хэш-индекса является хэш-функция. При поиске определенного значения искомое значение передается в хэш-функцию, которая возвращает хэш-значение. Это хэш-значение сообщает БД, где в хэш-таблице находятся ключ и указатели.

3) Индексы битовой карты (bitmap index) используется для столбцов с несколькими уникальными значениями. Каждая битовая карта представляет уникальное значение. Битовая карта указывает на наличие или отсутствие значения в наборе данных с помощью 1 и 0. Для существующих значений позиция 1 в битовой карте показывает местоположение строки в таблице. Индексы битовой карты очень эффективны при обработке сложных запросов, где используется несколько столбцов.

При индексировании таблицы рекомендуется тщательно выбирать столбцы для индексации на основе наиболее часто используемых столбцов в предложениях WHERE.
Составной индекс может использоваться, когда несколько столбцов часто используются вместе в предложении WHERE. С составным индексом комбинация двух или более столбцов используется для создания конкатенированного ключа. Затем ключи сохраняются на основе стратегии индекса, например, опций, упомянутых выше.
👍16🔥1👏1
4 способа обновления данных в веб-приложении на стороне клиента в реалньом режиме времени: коротки и долгий опрос, SSE и веб-сокеты
👍8🔥2👏1
Механизмы аутентификации

[1.] 𝐀𝐏𝐈 𝐊𝐞𝐲
◾️ Простые уникальные идентификаторы, присваиваемые каждому клиенту или услуге.
◾️ Отправляется как заголовок или параметр запроса с каждым запросом.
◾️ Лучше всего подходит для внутренних служб, менее конфиденциальных API или для предоставления доступа к определенным функциям.
◾️ Простота внедрения и управления.
◾️ Не так безопасно, как методы на основе токенов. Подвержены утечке и краже

[2.] 𝐁𝐚𝐬𝐢𝐜 𝐀𝐮𝐭𝐡𝐞𝐧𝐭𝐢𝐜𝐚𝐭𝐢𝐨𝐧
◾️ Имя пользователя и пароль отправляются в заголовке Authorization в виде строки в кодировке base64.
◾️ Простота в реализации, но для обеспечения безопасности требуется HTTPS.
◾️ Подходит для простых сценариев с низкими требованиями к безопасности.
◾️ Широко распространена и проста для понимания
◾️ Уязвимв к атакам типа «человек посередине», если не используется HTTPS.
◾️ Пароли отправляются открытым текстом (даже в закодированном виде).

[3.] 𝐉𝐒𝐎𝐍 𝐖𝐞𝐛 𝐓𝐨𝐤𝐞𝐧𝐬 ( 𝐉𝐖𝐓 )
◾️ Автономные токены, которые в виде JSON содержат информацию о пользователе и его атрибуты
◾️ Выдается сервером аутентификации после успешного входа в систему, затем отправляется клиентом в заголовке Authorization
◾️ Широко используется для аутентификации без сохранения состояния в микросервисах, едином входе (SSO) и авторизации
◾️ Не хранит состояние, безопасный, компактный и может содержать дополнительные атрибуты
◾️ Требуется надлежащее управление ключами для подписи и проверки

[4.] 𝐎𝐀𝐮𝐭𝐡 2.0
◾️ Система, позволяющая сторонним приложениям получать ограниченный доступ к ресурсам от имени владельца ресурса (пользователя) без предоставления учетных данных
◾️ Использует различные типы верификации (код авторизации, учетные данные клиента и т. д.) для получения токенов доступа и токенов обновления
◾️ Широко используется для авторизации пользователей и делегированного доступа к API
◾️ Предоставляет стандартизированный способ безопасного доступа к ресурсам без предоставления учетных данных.
◾️ Может быть сложным в реализации и требует тщательного рассмотрения уязвимостей безопасности

[5.] 𝐎𝐩𝐞𝐧𝐈𝐃 𝐂𝐨𝐧𝐧𝐞𝐜𝐭 (𝐎𝐈𝐃𝐂)
◾️ Уровень идентификации поверх OAuth 2.0, который обеспечивает аутентификацию пользователя и предоставляет информацию о профиле
◾️ Использует идентификационный токен вместе с токеном доступа для предоставления идентификационной информации пользователя
◾️ Используется для аутентификации совместно с OAuth 2.0 для авторизации
◾️ Упрощает аутентификацию, стандартизируя способ получения информации о пользователе
◾️ Требуется интеграция с поставщиком OIDC (например, Google, Okta)

[6.] 𝐌𝐮𝐭𝐮𝐚𝐥 𝐓𝐋𝐒 (𝐦𝐓𝐋𝐒)
◾️ Клиент и сервер аутентифицируют друг друга с помощью сертификатов X.509
◾️ Для выдачи и управления сертификатами требуется центр сертификации (CA)
◾️ Лучше всего подходит для защиты связи между внутренними службами или высокочувствительными API
◾️ Надежная защита благодаря взаимной аутентификации и шифрованию.
◾️ Более сложен в настройке и управлении по сравнению с другими механизмами.
🔥11👍51👏1
This media is not supported in your browser
VIEW IN TELEGRAM
уровни сетевой модели OSI и соответствующие им кибератаки
🔥10💊52
Шпаргалка по операторам в языке Python #python
🥱11👍3
Основные принципы объектно-ориентированного программирования
👍11❤‍🔥2👏1
Вышла новоая версия языка Go - Go 1.24.
https://go.dev/doc/go1.24
Основные изменения в новой версии:

Go 1.24 теперь полностью поддерживает псевдонимы обобщённых типов (generic type alias) — псевдоним типа может быть параметризирован, как и впервые определяемый тип (при определении псевдонима типа теперь допускается указание параметров типа);

Оптимизация среды выполнения снизила нагрузку на процессор на 2–3%. Оптимизации включают новую реализаций операций со словарями на основе хэш‑таблиц Swiss Table, более эффективное распределение памяти для небольших объектов и новую реализацию внутреннего мьютекса во время выполнения

Команда go теперь предоставляет механизм отслеживания зависимостей инструментов для модуля. Определение утилит в файле go.mod производится через директиву tool, для добавления которой в текущий модуль предложена команда go get ‑tool (например, go get ‑tool golang.org/x/tools/cmd/stringer). Для запуска утилиты, указанной в директиве tool, добавлена команда «go tool имя_утилиты».

В команды go build и go install добавлена опция ‑json для вывода в формате JSON

Добавлена переменная окружения GOAUTH для задания параметров аутентификации, необходимых для извлечения модулей, доступ к которым ограничен.

В команде go vet реализован новый анализатор тестов (test analyzer), выявляющий типовые ошибки при включении тестов, fuzzing‑инструментов, утилит проверки производительности и примеров приложений;

В стандартную библиотеку добавлены реализации криптоалгоритмов из стандарта FIPS 140–3. Помимо FIPS 140, несколько пакетов, которые ранее были в модуле x/crypto, теперь доступны в стандартной библиотеке.

В пакет testing добавлен метод B.Loop для выполнения тестов производительности. Применение for b.Loop() {... } вместо обычных циклов позволяет исключить выполнение компилятором полной оптимизации тела цикла и вынести из цикла стадии настройки и очистки теста

Добавлен тип os.Root, позволяющий изолировать операции с файловой системой заданным каталогом.

В среду выполнения добавлен новый механизм финализации runtime.AddCleanup, более гибкий и эффективный, чем runtime.SetFinalizer.

Добавлен пакет weak c реализацией слабых указателей, которые не владеют объектом, не увеличивают счётчик ссылок и не препятствуют освобождению объекта

Добавлены пакеты crypto/mlkem с реализацией криптоалгортимов ML‑KEM-768 и ML‑KEM-1024 (Kyber), стойких для подбора на квантовом компьютере; crypto/hkdf c реализацией функции формирования ключа на базе HMAC (RFC 5869); crypto/pbkdf2 c реализацией функции формирования ключа на базе пароля (PBKDF2, RFC 8018); crypto/sha3 c реализацией хэшей SHA-3;

Добавлен экспериментальный пакет testing/synctest с функциями для тестирования многопоточности;

Улучшена поддержка WebAssembly. Добавлена возможность сборки Go‑приложений в форме библиотеки или обработчика WASI (WebAssembly System Interface). Реализована директива go:wasmexport для экспорта функций для использования в WebAssembly;

В утилиту objdump добавлена поддержка дизассемблирования для архитектур LoongArch (GOARCH=loong64), RISC‑V (GOARCH=riscv64) и S390X (GOARCH=s390x).
7🔥2👍1🥰1
Распространенные сокращения, что они все означают
🔥12
Языки программирования, проблемы и их решения
😁62🗿3👍2🤓2💊2🔥1🤔1💯1
Архитектурный шаблон Модульный монолит

В мире архитектуры программного обеспечения уже давно лидируют два доминирующих шаблона.

🔸 Монолитная архитектура
Классический подход, при котором все компоненты приложения тесно интегрированы в единое целое.

🔸 Архитектура микросервисов
Приложение разбито на небольшие независимые службы, которые взаимодействуют по сети.

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

Он направлен на решение следующих проблем:

◾️ Проблемы с поддержкой монолитов
- Благодаря внедрению модульности кодовая база становится более организованной, простой для понимания и менее подверженной синдрому «big ball of mud».
◾️ Сложность микросервисов
- Он позволяет избежать операционных издержек, характерных для распределенных систем, что делает его более доступным вариантом для небольших команд или проектов, которым не требуется полный масштаб микросервисов.

📌 Основные характеристики модульных монолитов
Модульный монолит = Монолитная простота + Модульная гибкость ]

◾️ Кодовая база разделена на четко определенные модули, каждый из которых инкапсулирует определенную бизнес-возможность или домен.
◾️ Каждый модуль инкапсулирует собственные данные, логику и уровни представления, способствуя разделению задач и удобству обслуживания.
◾️ Модули взаимодействуют через понятные интерфейсы (API), способствуя слабой связанности и независимой эволюции.
◾️ Модули могут совместно использовать общие библиотеки или утилиты для повышения эффективности, сохраняя при этом инкапсуляцию.
◾️ Приложение развертывается как единое целое, что упрощает операции по сравнению с распределенными микросервисами.

📌 Когда следует рассмотреть?
◾️ Проекты на ранних стадиях
◾️ Меньшие команды или ограниченные ресурсы
◾️ Приложения средней сложности
◾️ Переход от монолита
- Модульный монолит может стать ступенькой на пути к микросервисам.

📌 Некоторые проблемы и их решения при работе с модульными монолитами
◾️ Поддержание модульности
- Требует дисциплины и постоянного рефакторинга, чтобы избежать «спагетти-кода» по мере роста приложения.

◾️ Межмодульная связь
- Разрабатывайте четкие шаблоны общения (внутрипроцессные звонки или легкие сообщения), чтобы избежать тесной связи.

◾️ Тестирование
- Тщательно протестируйте взаимодействие модулей, чтобы убедиться, что приложение работает как единое целое.

◾️ Масштабируемость
- Масштабирование отдельных модулей может оказаться более сложным, чем масштабирование независимых микросервисов.
👍4🤩41👏1
Правительство РФ утвердило параметры эксперимента по внедрению системы добровольного подтверждения компетенций для разработчиков ПО. Это возможность для работодателей и образовательных учреждений точнее определять уровень ИТ-компетенций и подбирать подходящих сотрудников, а для специалистов — проверить свои знания и получить сертификат, подтверждающий их уровень. С 31 мая 2025 года любой желающий, независимо от уровня образования, сможет пройти тесты и выполнить практические задания. В этом году на платформе планируется разместить материалы по 21 направлению (Python, Java, Git и другие).

С 14 февраля 2025 года по 31 декабря 2026 года в России пройдёт эксперимент по внедрению системы добровольного подтверждения компетенций для разработчиков программного обеспечения.

Суть эксперимента заключается в предоставлении специалистам бесплатного инструмента для проверки собственного уровня владения различными ИТ-компетенциями. Речь идёт о цифровой платформе, воспользовавшись которой программисты смогут пройти тесты и выполнить практические задания.

В случае успешного прохождения испытаний они получат сертификат, подтверждающий их знания и навыки работы. Он будет отправляться в личный кабинет на портале Госуслуг. Срок его действия составит 1 год.

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

Участвовать в эксперименте смогут разработчики ПО независимо от уровня образования.

Оператор эксперимента будет отобран на конкурсной основе до 31 марта 2025 года. Его определением займётся президиум правительственной комиссии по цифровому развитию.

Практическая стадия эксперимента начнётся с 31 мая 2025 года, когда ИТ-специалисты получат доступ к платформе подтверждения своих компетенций и смогут пройти тесты и выполнить задания.

https://news.1rj.ru/str/mintsifry/2436
http://government.ru/news/54223/
🤡16😁6👍2🔥1💊1
Представлен новый рейтинг TIOBE. Его авторы отмечают продвижение «быстрых» языков, которые позволяют обрабатывать растущие объёмы данных в условиях, когда «железо» не может удовлетворять рост потребностей.
Так, на втором месте C++, Go прочно вошёл в топ-10, а Rust достиг рекордной доли на рынке в 1,47%. В топ-50 пытаются войти языки Mojo и Zig, которые уже занимают 51-ю и 56-ю позиции соответственно.
Особняком стоит Python, который занимает 1-е место и известен как медленный язык. Это потому, что в настоящее время есть еще один драйвер, кроме производительности: насколько легко выучить новый язык программирования. Авторы рейтинга связывают это с простотой языка и с тем, что рынку требуется больше программистов, при этом вузы не закрывают потребность в инженерах ПО, а в программирование приходят специалисты из других сфер, которые предпочитают Python.