METANIT.COM – Telegram
METANIT.COM
5.87K subscribers
1.67K photos
81 videos
9 files
1.03K links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Как сделать цветной календарь на языке #Python
18🤮12🤔5👏1🥱1🐳1
Шпаргалка по SSH-туннелированию
👍13🥰4🔥3🤓2
Признаки кода, которые могут указывать на потенциальные проблемы в программе (по категориям):

1. Bloaters (раздуватели):
- Long Method: Слишком длинные функции/методы, которые следует разделить для улучшения читаемости и поддерживаемости.
- Large Class: Классы, выполняющие слишком много задач, что нарушает принцип единственной ответственности (SRP).
- Primitive Obsession: Чрезмерное использование примитивных типов данных вместо создания специализированных классов.
- Long Parameter List: Методы с большим количеством параметров, что затрудняет их использование.
- Data Clumps: Группы данных, которые всегда появляются вместе, что может указывать на необходимость создания нового класса.

2. Object-Orientation Abusers (нарушители объектно-ориентированного подхода):
- Switch Statements: Частое использование switch-операторов, что может быть заменено полиморфизмом.
- Temporary Field: Временное поле, используемое только при выполнении определенного условия - можно заменить на локальную переменную/параметр.
- Refused Bequest: Подкласс, который никак не изменяет функционал базового класса, что может указывать на неправильную иерархию.
- Alternative Classes with Different Interfaces: Классы с похожим поведением, но разными интерфейсами, которые можно объединить или извлечь общий интерфейс.

3. Change Preventers (препятствия изменениям):
- Divergent Change: Класс, который часто изменяется по разным причинам, что требует разделения на более мелкие классы.
- Shotgun Surgery: Мелкие изменения, разбросанные по многим классам, что указывает на плотное связывание и необходимость рефикторинга классов в модули.
- Parallel Inheritance Hierarchies: Добавление подклассов в одну иерархию требует добавления в другую, что можно заменить делегированием или композицией.

4. Dispensables (Излишние конструкции):
- Comments: Избыточные или устаревшие комментарии, которые лучше заменить самодокументируемым кодом.
- Duplicate Code: Повторяющийся код, который следует вынести в отдельный метод.
- Dead Code: Неиспользуемый код, который нужно удалить.
- Lazy Class: Класс с минимальной ответственностью, который можно объединить или удалить.
- Speculative Generality: Код, написанный для будущих нужд, который в текущий момент можно удалить, сфокусировавшись на текущийх потребностях

5. Couplers (Связыватели)
- Feature Envy: Метод обращается к данным другого класса чаще, чем к своим. Можно переместить метод в класс, к которому он относится.
- Inappropriate Intimacy: Классы слишком зависят друг от друга. Можно усилить инкапсуляцию и уменьшить зависимости.
- Message Chains: Длинные последовательности вызовов методов. Можно объединить в вспомогательные специальные методы.
- Middle Man: Класс, который в основном делегирует задачи другим. Можно удалить или объединить функциональность для упрощения.
👍28🤝42🔥1
Архитектуры управления данных: Озеро данных (Data Lake), Хранилище данных (Data Warehouse), Дом данных (Data Lakehouse) и Сетка данных (Data Mesh)
(описание в следующем посте)
Архитектуры управления данных: Озеро данных (Data Lake), Хранилище данных (Data Warehouse), Дом данных (Data Lakehouse) и Сетка данных (Data Mesh)
(описание к предыдущему посту)

* Озеро данных (Data Lake)
* Описание: Централизованное хранилище, которое хранит необработанные, неструктурированные и структурированные данные любого масштаба.
* Преимущества: Высокая масштабируемость, экономичность при хранении огромных объёмов данных, гибкость для специалистов по обработке данных и инженеров.
* Недостатки: Управление данными может быть сложным, а запросы к большим наборам данных могут быть неэффективными без надлежащего управления.

* Хранилище данных (Data Warehouse)
* Описание: Структурированная система хранения, оптимизированная для запросов и отчётности, обычно для бизнес-аналитики (BI).
* Преимущества: Оптимизированная производительность, идеально подходит для сложных запросов, обеспечивает надёжное управление данными.
* Недостатки: Меньшая гибкость для неструктурированных данных, более высокие затраты, медленная адаптация к данным в режиме реального времени.

* Дом данных (Data Lakehouse)
* Описание: Гибридный подход, сочетающий преимущества озера данных и хранилища данных, позволяющий хранить как необработанные, так и структурированные данные на одной платформе.
* Преимущества: Гибкость озёр данных с производительностью хранилищ, упрощённая архитектура, поддержка расширенной аналитики.
* Недостатки: Это новая технология с меньшим количеством зрелых решений по сравнению с автономными системами.

* Сетка данных (Data Mesh)
* Описание: Децентрализованный подход к архитектуре данных, где данные рассматриваются как продукт и управляются специализированными командами.
* Преимущества: Способствует масштабируемости и ответственности, поддерживает межфункциональное взаимодействие, повышает гибкость.
* Недостатки: Требует изменения корпоративной культуры, сложность в управлении.

Каждый подход имеет свои уникальные преимущества и компромиссы, поэтому лучший выбор зависит от размера организации и конкретных случаев использования.
👍8❤‍🔥2👏1
Шпаргалка по основам Git #git
👍16🍓3🤮2😱1
Наткнулся в интернете (не скажу, что я согласен, но рациональное зерно есть):
"""
Первое правило программирования: не делай ситуацию хуже, чем она есть.

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

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

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

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

Это не субъективный вопрос. Я постоянно вижу попытки оптимизации, которые оказываются контрпродуктивными.

Возможно, вы видите лишь старую и замусоренную кодовую базу. И считаете, что её, очевидно, нужно организовать по-другому. И, что важно, вы, возможно, правы!!! Но, что не менее важно, вы можете ошибаться.

Всегда помните, что вы знаете меньше, чем думаете, кем бы вы ни были. Мы все склонны переоценивать своё понимание программного обеспечения. Это в человеческой природе. Но научитесь постоянно сомневаться в себе, особенно когда вы работаете с зрелым, хорошо протестированным кодом.
"""
👍44🤔11👏21
По данным Superjob, зарплаты отечественных Unix-сисадминов показали крайне незначительный рост: они стали получать больше примерно на 5-6% год к году в среднем.
У джунов зарплата и вовсе не выросла. В то же время рост зарплат администраторов Windows-систем оказался выше - на 10%.
(На скриншотах уровни компетенций и зп в зависимости от компетенции)

https://www.cnews.ru/news/top/2025-08-21_rossijskie_unix-sisadminy
🤔9🤣42🤬1🍌1🫡1
Как выбрать шаблон проектирования?
(описание в следующем посте)
👍3🔥1👏1
Как выбрать шаблон проектирования?
(описание к предыдущему посту)

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

🔸 Созданием объектов? → Порождающие шаблоны
🔸 Сбором объектов? → Структурные шаблоны
🔸 Взаимодействием объектов? → Поведенческие шаблоны

Рассмотрим их подробнее.

1. Порождающие шаблоны
* Singleton: Используется, когда необходим единственный экземпляр класса. Примеры: ведение журнала и подключения к базе данных.
* Factory Method: Разделение создания объектов от их использования. Например, создание различных типов подключений к базе данных на основе конфигурации.
* Abstract Factory: Создание семейств связанных объектов. Например, создание парсеров для различных форматов файлов (JSON, XML, CSV).
* Builder: Поэтапное создание сложных объектов. Например, создание сложного объекта предметной области.
* Prototype: Создание дубликатов объектов и повторное использование кэшированных объектов для уменьшения обращений к базе данных.

2. Структурные шаблоны
* Adapter: Делает несовместимые интерфейсы совместимыми. Например, интеграция новой библиотеки ведения журнала в существующую систему с другим интерфейсом.
* Composite: Представление иерархий часть-целое. Например, графические объекты в приложении для рисования можно группировать и обрабатывать единообразно.
* Proxy: Контроль доступа к объектам. Например, отложенная загрузка изображения с высоким разрешением в веб-приложении.
* Decorator: Динамическое добавление/удаление поведения. Например, реализация сжатия или шифрования поверх потоков файлов.
* Bridge: Разделение абстракции от реализации. Например, отделение платформозависимого кода от основной логики.

3. Поведенческие шаблоны
* Strategy: Определение семейства алгоритмов. Например, предоставление пользователям возможности выбирать различные алгоритмы сортировки или сжатия.
* Observer: Поддержание согласованного состояния путем уведомления об изменениях, например, уведомление подписчиков о событиях в системе обмена сообщениями.
* Command: Инкапсуляция запроса в объект. Например, реализация функций отмены/повтора в текстовом или графическом редакторе.
* State: Инкапсуляция поведения, специфичного для состояния. Например, обработка различных состояний элемента пользовательского интерфейса (включен, отключен, выбран).
* Template Method: Определение скелета алгоритма в операции, раскладывание некоторых шагов на подклассы и реализация базового класса для модульного тестирования с настраиваемыми шагами настройки и завершения.
👍112🥰2
Вышла новая версия IDE NetBeans - Apache NetBeans 27, которая предоставляет поддержку языков программирования Java SE, Java EE, PHP, C/C++, JavaScript, Rust и Groovy. Готовые сборки сформированы для Linux (snap, flatpak), Windows и macOS.
Основные изменения:

- В редакторе кода появилась возможность сравнения содержимого папок, улучшена поддержка разметки TextMark/Markdown и добавлена возможность предпросмотра изображений в формате SVG.

- Движок тем оформления FlatLaf обновлён до версии 3.6.1.

- Обеспечена совместимость с системой сборки Gradle 9 и добавлена возможность использования Gradle 9 в новых проектах.

- Улучшена поддержка систем сборки Maven и Ant. Инструментарий Maven обновлён до версии 3.9.11. Добавлено дополнение Njord.

- Расширены возможности серверов LSP (Language Server Protocol) и применения плагинов для VSCode.

- Для Java реализована возможность рефакторинга отдельных Java-файлов, не являющихся частью проектов. Добавлена частичная поддержка импорта Java-модулей. Улучшены возможности для отладки и анализа стека. Встроенный в NetBeans Java-компилятор nb-javac (модифицированный javac) обновлён до версии JDK 25b31.

- Для PHP улучшена подсветка синтаксиса и разрешено использование собственных HTML-тегов в скриптах PHP.

- Добавлена поддержка новых версий сервера приложений GlassFish - 7.0.24 и 8.0.0-M11. Улучшено автодополнение jsf-классов. Реализован HTTP Monitor для javax.servlet и jakarta.servlet. Улучшена поддержка тегов JSF. Для Payara 5.x включена поддержка JDK 21.

- Для web-проектов добавлена поддержка media-query CSS. Реализован анализатор семантики JSON. Расширены возможности по встраиванию vuе-файлов.

https://github.com/apache/netbeans/releases/tag/27
https://netbeans.apache.org/front/main/index.html
👎3🔥32👏1
Шпаргалка по структуре Kubernetes API
5🔥2👍1🥰1
Разработчика приговорили к тюремному заключению за взлом сети бывшего работодателя. с помощью вредоносного ПО

Карьера 55-летнего Дэвиса Лу (Davis Lu) в Eaton продолжалась более 10 лет – с 2007 по 2019 г. На ее пике Лу занимал должность старшего программиста . В 2018 г. компания провела реструктуризацию, в результате которой Лу был понижен в должности. Осознав, что в Eaton его не слишком ценят и, возможно, в будущем просто уволят, разработчик решил заранее подготовиться и обеспечить себе возможность отомстить за возможное несправедливое увольнение.

Для этого Лу внедрил на сервер Eaton программу, которая в случае утраты им доступа к сети организации лишила бы его и всех остальных сотрудников. Код программы был написан на языке Java и занимался тем, что порождал все новые и новые потоки в бесконечном цикле.

Такая программа при выполнении на протяжении довольно длительного промежутка времени должна была поглотить все свободные ресурсы сервера и привести к его зависанию.
Программа вела мониторинг статуса учетной записи Лу в службе каталогов Microsoft Active Directory и ожидала его изменения “Disabled”

9 сентября 2019 года компания Eaton уволила Лу и отключила ему доступ к сети, что привело к сбою программы Java, перегрузке сети, блокировке доступа тысяч сотрудников Eaton по всему миру и удалению некоторых корпоративных данных.

Но когда Лу пришло время сдать свой корпоративный ноутбук, выяснилось, что он использовал его для осуществления своего плана. История поиска показала, что он искал информацию о том, как удалить данные, повысить привилегии и скрыть следы процессов. Он также удалил большой кусок зашифрованных данных.
Кроме того, он назвал свой вирус “IsDLEnableinAD” - аббревиатура фразы “Is Davis Lu enabled in Active Directory”, благодаря которой можно установить ее автора и механизм активации. Кроме того, готовую программу Лу загрузил на сервер с использованием собственной корпоративной учетной записи.
И менее чем через месяц после срабатывания программы Лу был арестован.

https://www.theregister.com/2025/08/22/worlds_dumbest_it_admin_gets/
🫡21🤣18👌4🙈4
Вкратце современный стек разработки ПО
👍30👾5🤬2
Глава Coinbase Брайан Армстронг рассказал, что уволил часть команды разработчиков, которая не захотела осваивать нейросетвые инструменты. Точное количество пострадавших сотрудников не уточняется.

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

Изначально компания планировала обучить разработчиков пользоваться нейросетями в течение квартала, но в один момент Армстронг решил, что это слишком долго. Он написал в Slack, что у разработчиков есть неделя на прохождение онбординга. Для тех, кто не уложится в сроки, глава пообещал назначит личную встречу.

Некоторые сотрудники и правда не успели пройти обучение. В итоге в компании оставили только тех, у кого были уважительные причины пропустить обучение, остальных — уволили.
https://habr.com/ru/news/939948/
🤮26👎6😱5🤣42
Ключевые компоненты архитектура микросервисного приложения

1. API Gateway: Центральный компонент, который управляет входящими запросами и направляет их к соответствующим сервисам.
2. Service Registry: Хранилище информации о доступных сервисах и их адресах.
3. Service Layer: Уровень сервисов, включающий Service A, Service B и Service C, которые взаимодействуют друг с другом.
4. Authorization Server: Сервер авторизации, обеспечивающий контроль доступа к административным функциям.
5. Database Layer: Уровень базы данных, включающий репликации и очереди для обеспечения отказоустойчивости.
6. Distributed Cache: Распределенный кэш для ускорения доступа к данным.
7. Distributed Messaging: Система обмена сообщениями между сервисами.
8. Metrics Visualization: Инструменты для визуализации метрик, такие как Prometheus и Grafana.
9. Logs Visualization: Система для анализа и визуализации логов, включающая Logstash, Elasticsearch и Kibana.
👍86👏1
В С++ константности хоть отбавляй, наверное, самый константный язык программирования #cpp #cplusplus
😁39😭3🫡3👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Таблицы булевых выражение и законы Де Моргана
6👍1💩1👻1
how many cycles each CPU instruction costs.jpeg
4.3 MB
Матрица инструкций или сколько циклов требуется процессору для выполнения определенных инструкций

В максимальном качестве доступна в репозитории Googla:
https://github.com/google/highway/blob/master/g3doc/instruction_matrix.pdf
4👍2
В Business Insider вышло интервью с Джадом Тарифи который в Google основал первую команду по генеративному ИИ, а в 2021-м запустил Integral AI. Джад высказал мнение, что сейчас не стоит браться за длинные образовательные треки, к которым он отнес получение PhD (кандидата наук) в большинстве областей — обучение займет слишком много времени, а мир вокруг меняется очень быстро.

Вместо получения PhD, Тарифи советует "просто сфокусироваться на реальном мире". По его словам, так вы будете двигаться быстрее, получите больше знаний и поймете, как адаптироваться к стремительно меняющимся правилам.
https://www.businessinsider.com/google-ai-team-too-late-phd-ai-hype-jad-tarifi-2025-8

P.S. Сам учился в аспирантуре, правда, давно - 2006-2007 год, но не вижу, что то, что было актуально тогда (что касается фундаментальных знаний), сегодня устарело.
Не говоря уже о том, что даже сейчас часто советуют Кнута, Кернигана и Ричи, банду четырех и прочие книги, написанные черт знает когда.
И уж тем более не говоря о том, что при разработке AI во многом используются принципы, которые также были открыты или разработаны десятилетия назад
Просто при (само)обучении важно различать фундаментальное и преходящее и в зависимости от этого сообразовывать свой план обучения и основные приоритеты
13👏10🖕4❤‍🔥2🤨2🤔1