METANIT.COM – Telegram
METANIT.COM
5.95K subscribers
1.69K photos
81 videos
9 files
1.07K links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Компании «Группа Астра», Axiom JDK и Haulmont представили OpenIDE — новую среду разработки с открытым исходным кодом. Решение ориентировано на госсектор и крупный бизнес. Для вывода платформы на рынок учредили совместную компанию — ООО «Открытая среда разработки».
Платформа основана на IntelliJ IDEA Community Edition. Первая версия сейчас находится на финальной стадии бета‑тестирования. В состав OpenIDE входит Axiom JDK — российская реализация JDK, доступная для промышленного использования. Также в решение добавлен бесплатный плагин Amplicode от Haulmont, предоставляющий базовую поддержку Spring. «Группа Астра» планирует добавить в OpenIDE интеграцию с платформой GitFlic.
В платформе нет проприетарных компонентов, а сервера с дистрибутивами и исходным кодом, как и команда, которая занимается ее сборкой, развитием и сопровождением, находятся в России. Также планируется добавить в платформу открытый маркетплейс, где будет поддержка российских плагинов.
https://astra.ru/about/press-center/news/openide-novaya-otechestvennaya-sreda-razrabotki-dlya-nadezhnykh-i-bezopasnykh-it-proektov/
🤡19👍10🔥4🤮2💩21👎1👏1🤝1💊1👾1
Семантическое управление версиями (SemVer) — это схема управления версиями программного обеспечения, цель которой — передать смысл основных изменений в выпуске.

🔹 SemVer использует трехкомпонентный номер версии: MAJOR.MINOR.PATCH.

- Старшая версия (MAJOR): увеличивается при наличии несовместимых изменений API.
- Младшая версия (MINOR): увеличивается при добавлении функциональности с сохранением обратной совместимости.
- Версия патчей (PATCH): увеличивается при внесении обратно совместимых исправлений ошибок.

🔹 Пример рабочего процесса
1 — Начальная фаза разработки
Начинаем с версии 0.1.0.

2 - Первый стабильный релиз
Выпуск стабильной версии: 1.0.0.

3 - Последующие изменения
Выпуск патча: Требуется исправление ошибки для 1.0.0. Обновите до 1.0.1.
Второстепенный релиз (увеличиваем младшую версию): новая, обратно совместимая функция добавлена ​​в 1.0.3. Обновление до 1.1.0.
Основной релиз (увеличиваем старшую версию): В версии 1.2.2 введено существенное изменение, несовместимое с предыдущими версиями. Обновление до версии 2.0.0.

4 - Специальные версии и предварительные релизы
Предварительные версии: 1.0.0-alpha, 1.0.0-beta, 1.0.0-rc.1.
Метаданные сборки: 1.0.0+20130313144700.
👍13🔥21👏1
Иллюстрация к предыдущему посту про сематическое версионирование
👍141🔥1
Краткая шпаргалка по регулярным выражениям
🔥14👍6👏3🥰1
6 базовых архитектурных паттернов
👍3🔥1👏1
Тестирование API вносит значительный вклад в обеспечение надежности, безопасности, функциональности и эффективности приложений за счет оценки маршрутов связи между компонентами программного обеспечения.
Рассмотрим 6 наиболее распростраенных форм тестирования API:

🔹 Тестирование рабочего процесса (Workflow Testing)
Проверяет, правильно ли работает последовательность вызовов API для завершения определенного процесса.
Часто такие тесты рабочего процесса связаны с какой-либо бизнес-целью, например, с совершением покупки на платформе электронной коммерции.

🔹 Тестирование производительности (Performance Testing)
Он оценивает скорость, отзывчивость и стабильность API в различных условиях, чтобы убедиться, что он соответствует контрольным показателям и ожиданиям пользователей.
Он оценивает ключевые факторы, такие как скорость обработки, использование памяти, нагрузка на соединение, время отклика и пропускная способность сети, чтобы выявить потенциальные узкие места.
Цель состоит в том, чтобы убедиться, что система выдает ожидаемые ответы в разумные сроки, даже при различных уровнях нагрузки.

🔹 Тестирование безопасности (Security Testing)
Выявляет уязвимости, которые потенциально могут привести к несанкционированному доступу или утечке данных.
Он включает в себя строгие проверки, чтобы гарантировать, что меры безопасности достаточно надежны, чтобы предотвратить атаки и утечки данных.
Он использует такие методы, как тестирование на проникновение (penetration testing) и нечеткое тестирование (fuzz testing) для выявления уязвимостей. В качестве отправной точки можно начать со списка безопасности API OWASP.

🔹 Тестирование на основе данных (Data-driven Testing)
Передает различные наборы и типы входных данных в API, чтобы гарантировать его корректную работу в различных сценариях.
Он включает в себя использование таблицы входных данных, сопоставленных с ожидаемыми выходными данными, прогон этих входных данных через систему и проверку того, соответствуют ли фактические выходные данные ожидаемым результатам.

🔹 Тестирование конечной точки (Endpoint Testing)
Проверяет, правильно ли отдельные конечные точки API реагируют на запросы и возвращают ли ожидаемый ответ, данные, коды состояния и сообщения об ошибках.

🔹 Тестирование контракта (Contract Testing)
Проверяет, что взаимодействие между поставщиком API и потребителем соответствует предопределенному соглашению / контракту, включая ожидаемые структуры запросов, форматы ответов и типы данных.
Его основная задача — гарантировать, что поставщик API не вносит критических изменений, которые могут повлиять на потребителей, использующих API.
🔥10
Шпаргалка по наиболее распространенным размерам данных
👍9🔥1👏1
При построении отпимальной архитектуры часто обрщают внимание на две концепции: отказоустойчивость (Failover) и репликация ( Replication). Что представляют эти две концепции?

➤ Отказоустойчивость (Failover) заключается в переключении систем/узлов, когда один из этих узлов выходит из строя. Есть два типа реализации данной концепции:

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

Активный узел - Пассивный узел: один узел работает, другой ждет.
Плюсы: легче управлять, меньше конфликтов
Минусы: простои во время переключения, возможная потеря данных в случае задержки репликации.


➤ Репликация (Replication) — это хранение одних и тех же данных в разных местах. Здесь распространены два типа реализации:

Одна ведущая реплика (Single-Leader): один узел пишет, остальные читают.
Плюсы: Более простая последовательность
Минусы: одно узкое место при записи, задержка при чтении реплик

Несколько ведущих реплик (Multileader): запись могут осуществлять несколько узлов.
Плюсы: Все могут писать, более высокая доступность
Минусы: конфликты данных, сложное согласование данных


Что это значит:
1. Репликация НЕ означает нулевую потерю данных.
2. Отказоустойчивость НЕ означает нулевое время простоя.
3. Не стоит выбирать шаблон на основе популярности, а стоит выбирать на основе времени восстановления, допустимой задержки и требований к согласованности.
👍6🔥1🥰1
Иллюстрация к предыдущему посту: Отказоустойчивость и репликация
👍3
Краткая история развития AI
❤‍🔥11👎2🤔2🔥1
Как работает NAT (Network Address Translation)
👍8🍓4🔥3🤷‍♂1
Иностранные компании снова активно нанимают российских IT-специалистов
По итогам 2024 года они наняли порядка 5 тыс. сотрудников, что в два раза больше, чем годом ранее. Среди наиболее активных работодателей, утверждают отечественные разработчики, китайские Huawei, Alibaba и Tencent, однако активизировались и европейские SAP, Delivery Hero и американские Amazon, OpenAI и т.д.. Спрос на российские IT-кадры вырос и со стороны ОАЭ, особенно в финтех-сегменте, а также есть рост со стороны индийских IT-аутсорсеров
Теперь иностранные компании не только напрямую нанимают сотрудников в качестве фрилансеров. Часть найма происходит через договоры оказания услуг, когда коллективы российских инженеров фактически работают над задачами зарубежных вендоров, не меняя своей юрисдикции
В Минцифры в курсе ситуации, но подчеркивают, что речь идет о частных случаях и массового характера они не носят.
https://www.kommersant.ru/doc/7675878
👍12🙏2
20 распространенных концепций для системного дизайна
9
Добавлено руководство по созданию графических приложений с помощью GTK на C#
https://metanit.com/sharp/gtk/1.1.php
#csharp #gtk
👍33🔥63🤨3💩1
Concurrency (конкурентность) и Parallelism (параллелизм) — два термина, которые часто путают. Но понимание параллелизма и конкурентности имеет важное значение для создания высокопроизводительных и эффективных программных решений.
Конкурентность предполагает управление несколькими задачами одновременно, их смешивание для оптимизации использования ресурсов.
Параллелизм предполагает выполнение нескольких задач одновременно.
Как лаконично выразился Роб Пайк (один из создателей Golang): «конкурентность — это работа с большим количеством вещей одновременно. Параллелизм — это выполнение большого количества вещей одновременно».

Что такое конкурентность?
В современных системах конкурентность обусловлена принципами проектирования, которые гарантируют эффективную работу задач или процессов независимо от того, имеет ли оборудование один или несколько процессоров.
Даже при наличии одного процессора/ядра шаблоны конкурентности позволяют задачам эффективно разделять процессорное время. Это создает иллюзию параллельного выполнения.
Эти шаблоны также позволяют выполнять части программы не по порядку, а в частичном порядке, сохраняя при этом предполагаемое поведение программы.

Что такое параллелизм?
В то время как параллелизм заключается в обработке многих задач одновременно (управление задачами), параллелизм заключается в выполнении многих задач одновременно (выполнение задач).
Параллелизм требует аппаратной поддержки, например многоядерных или многопроцессорных систем, чтобы обеспечить одновременное выполнение различных задач.

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

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

Отличным примером является Node.js, который применяет конкурентность в однопоточной модели с использованием обратных вызовов и циклов событий.
Между тем, многопоточные среды (например, C#) способствуют как параллелизму, так и конкурентности. Они обеспечивают как конкурентное выполнение задач, так и настоящее параллельное выполнение на нескольких процессорах или ядрах одновременно.
👍18🔥2👏2
This media is not supported in your browser
VIEW IN TELEGRAM
(Анимация к предыдущему посту)
👍23🔥5👎1👏1
Как работает криптография публичных ключей
👏4🔥2🥰1
11 ключевых аспектов проектирования системы и системного дизайна:

1. Основы проектирования систем
Основа дизайна приложений представляют следующие концепции: масштабируемость, типы архитектуры, прокси, балансировщики нагрузки, монолит/микросервисы.

2. Сетевое взаимодействие и коммуникация
Принципы работы служб — от IP-адресации и межсетевых экранов до REST и gRPC, TLS, шлюзов API и обнаружения служб.

3. Кэширование
Стратегии кэширования и связанные темы — Redis, TTL, аннулировании кэша, CDN и локальных и глобальных уровнях кэширования.

4. Балансировка нагрузки
Эффективное распределение трафика, такие стратегии, как Round Robin, Least Connections, IP Hash, global LB, sticky sessions и проверки работоспособности.

5. Управление данными
Управление выбором базы и схемы данных с учетом принципов SQL/NoSQL, ACID или BASE, сегментирования, репликации и разделения данных.

6. Асинхронная обработка
Отвязывание систем друг от друга, применение очередей, событийно-ориентированная архитектура, Pub/Sub, веб-хуки, очереди повторных попыток (retry queue) и такие шаблоны, как исходящие сообщения (outbox) и источник событий (event sourcing).

7. Системы хранения и файловые системы
Неструктурированные и структурированные данные с помощью S3, EFS, BLOB-объектов, фрагментации, сжатия, озер данных и последовательного хеширования.

8. Последовательность и доступность
Обеспечение корректности распределенных систем с помощью строгой/конечной согласованности (strong/eventual consistency), протоколов консенсуса (consensus protocols), распределенных блокировок (distributed lock), векторных часов (vector clock) и кворума (quorum).

9. Отказоустойчивость
Проектирование систем, которые сами восстанавливаются с помощью повторных попыток, автоматических выключателей (circuit breaker), переборок (bulkhead), хаос-инжиниринга и стратегий постепенной деградации.

10. Мониторинг
Отслеживание, отладка и оптимизация производительности с помощью метрик, трассировок, стека ELK, OpenTelemetry, проверок работоспособности и инструментов оповещения.

11. Безопасность и аутентификация
Защита системы с помощью OAuth, JWT, RBAC, защиты от CSRF/XSS, TLS и поставщиков удостоверений, таких как Auth0 и Okta.
👍6👏2🔥1
(Иллюстрация к предыдущему посту)
🔥9🥰1👏1
9 ключевых паттернов проектирования для ООП
👍19🔥2👏1
Вышла новая версия популярного набора компиляторов GCC - GCC 15 (формально GCC 15.1). Напомню, что каждый новый релиз мажорной версии выходит раз в год (так GCC 14 вышел в мае 2024 года.)
Основные изменения в GCC 15:

- добавлен интерфейс компилятора COBOL;
- доработаны интерфейсы GCC на языках D и Modula-2, а также интерфейс Fortran.
- улучшена поддержка новых стандартов языков C и C++ (для C по умолчанию применяется стандарт C23);
- добавлена поддержка новых процессоров (AMD Zen 5 и znver5 среди других новых оптимизаций AMD Zen, Intel Xeon 7 Diamond Rapids, поддержка Intel AVX10.2, больше возможностей Intel Advanced Performance Extensions APX, удалена поддержка Xeon Phi, улучшения в работе с OpenMP);
- доработаны возможности ISA;
- улучшена поддержка для языка Rust (для gccrs);
- бекэнд AMDGPU для графических процессоров AMD теперь также поддерживает стандартную библиотеку C++ (libstdc++);
- улучшена экспериментальная поддержка для универсальных устройств;
- бекэнд NVIDIA NVPTX с GCC15 также поддерживает libstdc++;

https://gcc.gnu.org/gcc-15/changes.html
🔥9👍42👏1