Как написать на Java функцию, подобную sizeof в C
В качестве упражнения реализуем функцию sizeOf() на Java, чтобы без проблем получать размеры разных типов данных, как в C.
Хитрости объектно-ориентированного программирования. Часть 5: Правило бойскаутов
Всегда оставляйте лагерь чище, чем вы его застали
Это мини-серия статей по написанию поддерживаемого объектно-ориентированного кода без лишней нервотрепки.
Предыдущие части: Часть 1, Часть 2, Часть 3 и Часть 4.
Энтропия
Энтропия — это отсутствие порядка...
C++: полное руководство по кортежам
Изучим реальные применения кортежей на практике и расширенные операции. Обозначим типичные проблемы и их решения.
5 проверенных методов для создания сверхбыстрых трейдинговых систем с низкой задержкой на Java
Создание эффективных трейдинговых систем на Java требует не только знания алгоритмов, но и ювелирной работы с памятью и процессором. Возьмите на вооружение пять рекомендаций, которые ускоряют обработку ордеров в разы — от выбора структур данных до битовых операций.
Что такого в языке Go?
Сегодня я хочу поговорить не о чем ином как о Golang. Как и в случае с Node.js, термин Golang встречается мне несколько раз в...
Как создать бессерверное приложение с помощью AWS Chalice
Недавно я наткнулся на AWS Chalice и был очарован его простотой и удобством пользования.
AWS Chalice — это бессерверная платформа, которая позволяет создавать бессерверные приложения...
Python Django и OSRM: маршрут на интерактивной онлайн-карте
Python Django, Folium, Leaflet и OSRM API для веб-приложения с функционалом Google Maps
Создаем настраиваемую цепочку обязанностей в Go
Цепочка обязанностей или цепочка команд — это шаблон проектирования, позволяющий передавать запросы по цепочке Handlers. Каждый Handler решает, нужно ли обработать и расширить запрос или же...
Эффективные шаблоны архитектуры программного обеспечения
Ознакомьтесь с востребованными шаблонами архитектуры программного обеспечения и их практическим применением. Четкое представление о том, какие из шаблонов наиболее эффективно работают в определенных ситуациях, - ключ к созданию оптимальной архитектуры.
Сможете ли вы решить эти 3 «простые» задачи на Python?
Правильное решение вас удивит
Попробуйте решить эти задачи самостоятельно, а потом проверьте себя по готовым ответам.
Подсказка: У всех задач есть нечто общее. Так что если разобраться...
Spring Boot: реализация фабричного метода
Шаблон Factory упрощает создание новых объектов и помогает прятать логику, ненужную для клиента. Предлагаем рассмотреть вариант реализации шаблона фабрики для простого приложения на Spring Boot.
Компонентный подход: преодоление сложности в Android-приложениях. Часть 1
Как Android-разработчик, вы должны иметь четкое представление о компонентном подходе и его преимуществах. Это позволит избежать чрезмерной сложности в приложениях и значительно ускорить рабочие процессы.
Раскройте потенциал VS Code для программирования на Ruby
Рассмотрим расширения и библиотеки для повышения продуктивности при работе с кодом на Ruby. Настроим альтернативную RubyMine, бесплатную среду разработки.
Введение в Navigation Architecture Component
Среди компонентов Jetpack, самым интересным является Navigation Architecture Component. Навигация управляет перемещением между destinations. Destinations обычно представлены фрагментами, однако поддерживают activities и другие пользовательские...
Корутины: основы
Часть 1, Часть 2
Эта серия постов подробно посвящена отменам и исключениям в корутинах. Отмена важна тем, что она помогает избежать выполнения большего количества...
Как создать простой планировщик событий в Go
Базовый рабочий механизм представляет собой следующее: запланированное событие добавляется в базу данных, из которой оно будет выполняться в определенное время. Другая задача будет запускаться...
Обзор инструментов для автоформатирования кода Python
Краткое руководство по установке, настройке и работе с инструментами автоформатирования кода Python перед выполнением коммита: хуки pre-commit, библиотеки black и isort.
Скрейпинг PDF с нуля на Python: библиотеки tabula-py и Pandas
Специалисту в области науки о данных приходится анализировать данные в любой форме, ведь они хранятся как в специальных SQL-базах, вроде PostgreSQL и MySQL, так...
Базовый класс Android ViewModel за 5 минут
Класс ViewModel служит прослойкой между View и Model в структурном паттерне проектирования MVVM. Рассмотрим особенности реализации ViewModel на реальном примере.
3 классные малоизвестные функции Pandas
Я и раньше писал о Pandas по очевидным причинам — это изумительная библиотека для анализа данных и даже для визуализации. Предыдущая статья была о функциях, которые...
Комментарии к коду: почему больше не всегда значит лучше
Многие программисты злоупотребляют комментариями, что приводит к неправильному пониманию назначения и логики кода. Рассмотрим случаи, когда комментарии необходимы, а когда от них лучше воздержаться.
В гостях у GitHub Package Registry
Сервис управления пакетами GitHub Package Registry был разработан и представлен в середине 2019 компанией Microsoft. Его создание, наряду с приобретениями GitHub и NPM, говорит...
Отладка зависимостей в Gradle
Узнайте, как с помощью dependencyInsight отлаживать версии транзитивных зависимостей в Android-приложении. Переопределение транзитивных версий зависимостей позволит избежать конфликта версий, ведущим к сбоям работы приложений.
TrendNow: создание новостного Android-приложения с помощью Jetpack Compose. Часть 1
Это 1-я часть серии статей, посвященных современной Android-разработке на примере создания новостного агрегатора "TrendNow" с помощью Jetpack Compose. В 1-й части предлагается подробное руководство по созданию базовой функциональности новостного приложения.
Набор инструментов Go для работы с микросервисами
REST и gRPC: идеальное сочетание
Микросервисы обычно работают на фреймворках HTTP и RPC, таких как REST и gRPC.
REST построен на основе объектно-ориентированного проектирования — подхода,...
Подробно о технологии «Издатель-подписчик» Redis
Подробно изучим эту модель и даже доберемся до уровня блоков памяти. Раскроем делали реализации и нюансы, сценарии применения.
Шаблон «Стратегия» на Go
Изучим нюансы шаблона: когда, зачем, как и где применяется. Поэтапно отследим его реализацию, проиллюстрируем кодом.
10 примеров для изучения модуля JSON в Python
Модуль json - мощный инструмент Python для работы с данными JSON. Рассмотрим 10 примеров, демонстрирующих общие задачи, которые можно выполнять с помощью этого модуля.
Преобразование речи в текст с помощью ИИ на Python: пошаговый гайд
Давно мечтали о виртуальном собеседнике на базе искусственного интеллекта? Представляем подробное руководство по созданию такой модели с помощью языка Python.
Принципы SOLID в инженерии данных. Часть 3
Выясним, как с принципами SOLID сочетается функциональное программирование, каковы их достоинства и недостатки. Продемонстрируем на примерах нарушение и соблюдение этих принципов.
Принципы SOLID в инженерии данных. Часть 2
Построим реальный конвейер данных: реализуем объекты с классами, обеспечив соблюдение принципов SOLID применением подхода программной инженерии. Узнаем, как они используются в приложениях обработки данных на Python. Вторая часть.
Использование Kotlin Flow для отображения наблюдаемого состояния UI на экране в Android
Узнайте, что такое реактивное программирование и как оно реализуется в Android с помощью Kotlin Flow. Понимание разницы в использовании различных типов Flow позволит создавать отзывчивые, неблокирующие и реактивные пользовательские интерфейсы.
Как ваша программа использует память
Программирование на языках, которые позволяют взаимодействовать с памятью на более низком уровне, как например в C и C++, иногда доставляет немало проблем, с которыми...
Django Google SEO: поисковая оптимизация сайта на Python для индексации в Google
Показываем четыре простых шага для повышения рейтинга сайта в поисковой системе Google благодаря улучшению Django Search Engine Optimization.
MVI на Eventbrite
Архитектура MVI обеспечивает приложениям Eventbrite четкое разделение задач, предсказуемый поток данных и централизованное управление состоянием. Изучите подробно эту архитектуру, оцените ее преимущества перед MVVM и узнайте, как имплементировать ее в приложение.
Признания начинающего главного инженера-программиста. Часть 2
В этой части признаний начинающего главного инженера речь пойдет о внедрении в процесс разработки BDD-методологии. Вы узнаете о ее преимуществах, увидите продвинутые сценарии BDD-тестирования, составленные с использованием синтаксиса Gherkin, и сможете оценить результаты BDD-подхода.
Ссылки на методы в Java
Ссылки на методы появились вместе с лямбда-выражениями в Java 8, и с тех пор упрощают жизнь разработчикам. Но у их применения есть некоторые ограничения. Как обойти одно из них - на использование метода с параметром - расскажем в этом материале.
Обработка файлов на C
Какие функции используются для открытия, редактирования и закрытия файлов? Рассмотрим особенности их применения с текстовыми и двоичными файлами.
Знакомство с Kotlin для Android за один день
Имея за плечами опыт с Java, я понял, что синтаксис Kotlin похож на Java, но в то же время может сильно отличаться. Kotlin — очень мощный...
Порты Docker: что вы на самом деле открываете?
Docker - превосходный инструмент, но по умолчанию небезопасный. И дело тут не в портах, которые могут оказаться общедоступными. Дело в людях, которые сидят за клавиатурой. Подключайтесь к решение этой проблемы.
Как восстановить положение прокрутки виджета RecyclerView
Возможно, у вас была проблема, когда RecyclerView терял позицию прокрутки при повторном создании Activity/Fragment. Обычно это происходит из-за того, что данные Adapter загружаются асинхронно...
4 ситуации из жизни лямбда-функций в Python
Начнем с того, что лямбда-функции не пользуются особой популярностью у программистов Python, да и у меня они вызывают смешанные чувства. Новичкам непросто в них...
Управляем зависимостями: возможности каталога версий и convention-плагина
В Android-разработке нужно учитывать множество факторов. Откройте для себя технологию каталога версий Gradle и силу convention-плагина, которые позволяют забыть о конфликтах версий и сбоях из-за несовместимости.
Полиморфизм с интерфейсами в Golang
Интерфейсы в Golang работают в совершенно особенной манере в сравнении с интерфейсами на других языках серверного программирования. Прежде чем углубляться в тему, начнём с...
Удалённые вызовы процедур в Golang
Что такое удалённые вызовы процедур?
Удалённый вызов процедур (RPC) — это подпрограмма в распределённых вычислениях. Реализация RPC напоминает реализацию локальных вызовов, но обычно они не идентичны. Как...
Scrum: 5–3–5–3–3
В начале работы с Agile и Scrum, оказывая помощь коллегам, я обычно использовал комбинацию 3–5–3, где:
первые “3” — три роли Scrum;“5” — пять событий...
Как создать Open Source библиотеку Android
Пошагово пройдем процесс проектирования. Спланируем надежную стратегию согласно жизненным циклам проекта ПО с открытым исходным кодом - от проектирования до выпуска.
Логи в Python. Настройка и централизация
Введение
Встроенный в Python модуль логирования разработан для того, чтобы дать вам детальное представление о приложениях с минимальными настройками. Начинаете ли вы работу или уже...
3 принципа Rust-разработки, которыми старшие бэкендеры никогда не пренебрегают
Почему код опытных Rust-разработчиков стабильно работает под любой нагрузкой? Секрет в соблюдении трех принципов Rust-разработки, которые делают ошибки невозможными. Следуйте им — и ваш код выдержит испытание временем.
JSON и Python: есть контакт!
В центре внимания - обработка и создание данных JSON в Python. Раскроем понятие JSON, познакомимся с методами Python для работы со строками/файлами JSON и узнаем, как улучшить читаемость данных JSON.
Функциональные возможности Python, которые часто игнорируют
Простота Python позволяет быстро начать писать код, но не каждый разработчик достигает вершин в этом деле. Без овладения всеми функциональными возможностями современного Python невозможно стать профи, создающим эффективный код.
Создание API в R при помощи Plumber
Что это за инструмент - Plumber - и как с его помощью можно легко вывести собственное приложение R в продакшен-среду? Ответ на примере создания простого API.
Полное руководство по тестированию контрактов с помощью PACT и Go
Расскажем, как преодолеть трудности с интеграцией микросервисов благодаря контрактному тестированию: в чем его преимущества, как написать контрактные тесты и для сервера, и для клиента, а также зачем нужен PACT-брокер.
PostgreSQL и MySQL: подробное сравнение
Изучим преимущества, ограничения и сценарии этих двух баз данных. Сравним их по многим аспектам, поможем сделать правильный выбор.
Класс данных в Kotlin
Что такое «класс данных» и чем он отличается от обычного класса? Какие проблемы решаются в Kotlin с помощью классов данных? Рассмотрим классы данных и разберемся, почему их используют вместо обычных классов.
Kotlin Coroutines для Android — Прощай RxJava?
Недавно JetBrains анонсировала новую фичу, которая известна как coroutines (coroutines является экспериментальной функцией в Kotlin 1.1+). Кстати, jetbrains — это место, где можно найти настоящее сокровище,...
Отправка push-уведомлений с помощью Firebase Cloud Messaging
Познакомимся с инструментом для отправки уведомлений на одно или несколько устройств и разберем, какие типы уведомлений существуют и как их можно реализовать.
Quarkus — горячий тренд Java-разработки
С революционным фреймворком Quarkus разработка на Java станет еще проще, быстрее и эффективнее. Оцените его ключевые особенности и преимущества по сравнению со Spring Boot.
Как и для чего использовать нативную библиотеку сериализации Kotlin
Вывод из статьи
В конце статьи вы узнаете, почему команда Kotlin создала новую библиотеку сериализации, несмотря на наличие многих продвинутых решений, таких как Moshi и Gson....
Утилитные классы в Kotlin с точки зрения Java-разработчика
Разобравшись, в чем заключаются различия в реализации утилитных классов в Kotlin и Java, вы сделаете важный шаг в освоении языка Kotlin. Будь вы опытный Java-разработчик, желающий расширить спектр своих навыков, или новичок в программировании, уделите внимание этому аспекту.
Изучаем AndroidManifest.xml: <service> как подэлемент <application>
Чтобы сервисы приложения обнаруживались и запускались системой, они должны быть представлены в файле AndroidManifest.xml элементом . Разберем ключевые атрибуты элемента и посмотрим на примерах, как они работают.
Реализация «бесконечного» пейджера в Jetpack Compose
Хотите превратить стандартный пейджер в "бесконечный", чтобы повысить удобство и вовлеченность пользователей? Предлагаем простые стратегии реализации бесконечного скроллинга с минимальными изменениями кода.
Шаблон «запрос-ответ» в RabbitMQ: подход на основе EventListener в Node.js
Поиск нестандартных инженерных решений - всегда захватывающий процесс. Предлагаем ознакомиться с одним из таких решений, позволивших модифицировать стандартную реализацию шаблона "запроса-ответ" так, чтобы она соответствовала конкретному случаю использования.
Чему вас может научить запуск приложения в продакшен
Написать код приложения — полдела. Настоящее испытание для разработчика начинается в тот момент, когда продукт попадает в руки реальных пользователей. Сегодня вы узнаете, чему меня научил первый запуск приложения в продакшен и почему этот опыт важнее любого туториала.
Знакомство с Papermill
Как превратить Jupyter Notebook в рабочий процесс по обработке данных
1. Введение
Jupyter Notebook — это «золотой стандарт» в разведочном анализе данных (EDA-анализ) и отличный инструмент для документирования...
10 практических примеров использования функций высшего порядка при разработке Android
Функции высшего порядка могут значительно повысить качество и удобство сопровождения кода. Рассмотрим 10 полезных примеров того, как их можно использовать.
Базовая торговая стратегия, позволяющая переиграть рынок
Предлагаем руководство по созданию на Python и бэктесту простой, но эффективной торговой стратегии. Используя всего два базовых финансовых показателя, она обеспечит быстрый и стабильный рост дохода в течение длительного времени.
Запечатанный класс
Часто нам приходится представлять ограниченный набор возможностей: веб-запрос либо успешно выполняется, либо не выполняется, User может быть либо про-пользователем, либо обычным.
Чтобы смоделировать это, мы...
Расшифровка собеседования разработчика в Cisco 2024: Java, Spring Boot, Hibernate
Разберем полную запись технической части для продвинутых. Все это актуальные вопросы и ответы для желающих работать в Cisco Systems.
Следующий уровень бэкенда: почему каждой компании скоро понадобится инфраструктура для агентов ИИ
Еще несколько лет назад добавление ИИ в продукт означало простой вызов API модели. Но сегодня подход "приложение = промпт + ответ" уже перестает работать для серьезных систем. Компании приходят к пониманию: модели бесполезны без инструментов, памяти и планирования. Наступает эра нового бэкенд-слоя — инфраструктуры для агентов ИИ.
Создание GUI PyWebIO для удаления пакетов Python
Как правило, эксперименты с новыми проектами заканчиваются установкой множества библиотек Python. В связи с этим периодически возникает необходимость их чистить, удаляя старые и уже ненужные.
Swift: 7 секретов оптимизации
Обзор 7 функциональностей Swift для создания качественного кода: ключевое слово indirect, атрибут @autoclosure, свойства Lazy и другие.
Язык С: типы данных
Типы данных в языке C - это обширная система, используемая для объявления переменных или различных функций. Тип переменной определяет, сколько места она занимает в памяти и как интерпретируется хранящийся битовый паттерн.
5 команд Linux, которые облегчают жизнь программистам
Повысьте свою производительность с помощью эффективных команд Linux. Они значительно упростят выполнение повседневных задач - от эффективного управления файлами и папками до навигации по каталогам и запоминания команд.
Как создать загрузчик с вращающимися кругами в Jetpack Compose
Хотите порадовать пользователей анимацией с вращающимися разноцветными кругами? Выполнить ее в Jetpack Compose позволит функция SpinningCirclesLoader. Предлагаем руководство с несколькими вариантами ее использования.
Функциональное программирование - будущее компьютерной науки?
Функциональное программирование (ФП) существует уже на протяжении последних шести десятилетий, и на данный момент не прекращает попыток преодолеть повсеместное доминирование объектно-ориентированного программирования (ООП). В...
Максимальная производительность Pandas Python
В этой статье мы докажем, что использование Nuclio и RAPIDS, бесплатной open-source платформы для ускорения обработки данных от NVIDIA, может значительно увеличить производительность Python.
Я...
Golang — изящная обработка ошибок
Несмотря на то, что в go предусмотрена простая модель ошибок, на деле все не так уж и просто. В данной статье я хочу рассказать...
Что нового в системной трассировке Android Studio
В Android Studio 4.0 мы пересмотрели UI профилировщика (Profiler), чтобы обеспечить более интуитивно понятный рабочий процесс записи работы ЦПУ. Мы продолжали вносить улучшения, основываясь...
Bash, Python или JavaScript: какой язык лучше для автоматизации?
Предлагаем сравнение преимуществ и недостатков Shell-сценариев на основе Bash, Python и JavaScript. Выбирайте язык программирования в соответствии с вашими потребностями.
Знакомство с фабричным методом
Фабричный метод упрощает процесс создания объектов, делает код более удобным в обслуживании и обеспечивает ряд других преимуществ. Разберем принцип его работы на реальном примере создания игровых персонажей.
CHRONOS: современный мониторинг работоспособности приложений
Познакомимся с Chronos, бесплатным инструментом для отслеживания, записи и отображения метрик с привычным npm-пакетом. Вот что рассказывают разработчики Chronos о его текущих и планируемых возможностях.
Слияние больших языковых моделей с помощью mergekit
Слияние — инновационный способ создания передовых языковых моделей. В сегодняшнем гайде рассмотрим слияние с помощью библиотеки mergekit, подробно опишем, как работают механизмы SLERP, TIES, DARE и passthrough, а также приведем примеры конфигураций.
Kepler.gl — инструмент для визуализации геоданных на Python
Познакомимся с отличным инструментом Kepler.gl и с его помощью создадим веб-приложение для визуализации геоданных на Python.
Многозадачность и параллелизм: руководство для начинающих
Многие новички в программировании путают понятия "многозадачность" и "параллелизм". Большинство ошибочно считает, что это одно и то же. Разберемся в сути этих понятий с помощью простых примеров, ярких образов и прозрачных аллегорий.
Как загружать файлы и изображения в приложении Django
Вы каждый день загружаете какой-нибудь контент, будь то документы коллегам по работе или же различные файлы в любимую социальную сеть. В этом гайде вы узнаете, как это делается в приложении Django.
5 достойных альтернатив спискам в Python
В Python наиболее популярным контейнером, вероятно, является list. Благодаря присущей ему гибкости список можно повсеместно использовать в проектах для хранения различных видов данных: целых...
От Pandas к Pyspark
Если Pandas удобно использовать для небольших наборов данных, то Pyspark - отличный инструмент для распределенных вычислений огромных массивов данных. Возьмите на заметку готовую инструкцию по преобразованию кода Pandas в Pyspark.
Компонентный подход: реализация экранов с помощью библиотеки Decompose. Часть 2
В этой части рассмотрим с позиций компонентного подхода реализацию сложных экранов с использованием библиотеки Decompose. Используя описанные методы, вы сможете управлять экранами любой сложности.
Ключевые вопросы для собеседования по Spring Boot в 2023 году. Часть 1
Хотите получить должность Java-разработчика или повысить свой профессиональный уровень? Ознакомьтесь с актуальными ответами на 50 ключевых вопросов по микросервисам Spring Boot для собеседования с кандидатами на должность Java-программиста или инженера ПО.
Python PyQt5: современные графические интерфейсы для Windows, MacOS и Linux
Установка и настройка Python PyQt5 для новичков: кнопки, поля ввода, всплывающие окна и событийно-ориентированное программирование.
Как использовать перечисления в Golang
Изучим способы создания перечислений с идентификатором iota и структурными тегами. Проверим поведения на тестовых сценариях.
Контейнеры Docker и их связывание в сети
Создадим три файла Dockerfile с прямым подключением каждого к своему репозиторию GitHub, сделаем из них три пользовательских образа Docker, а из каждого образа - по одному контейнеру. Один изолируем в сети Development, два поместим в Production и проверим их взаимодействие.
Поддержание документации в актуальном состоянии с помощью Bit и GitHub
Написание документации для кода (будь то небольшая библиотека или полный набор микросервисов, взаимодействие с которыми необходимо другим разработчикам) — это занятие кропотливое и утомительное.
Основная...
15 бизнес-идей агентов на основе ИИ в 2025 году
Агенты на базе ИИ открывают невероятные возможности перед предпринимателями. Они помогают достичь успехов в самых различных бизнес-сферах - будь то автоматизация поддержки клиентов, оптимизация продаж или разработка инновационных SaaS-решений. Не упустите и вы свой шанс извлечь выгоду с помощью ИИ в 2025 году!
3 приема для определения функций в Python
Пополним копилку знаний по Python полезными приемами для определения функций. Разберем применение аргументов по умолчанию, подсказок типов, конструкции *args и **kwargs.
Формирование эффективной и целостной культуры ревью кода
Погрузимся в различные ситуативные контексты ревью кода, рассмотрим их цели и содержание. На основе полученных знаний сформулируем рекомендации для авторов и рецензентов, позволяющих улучшить процесс ревью.
10 рекомендаций, которые повысят производительность разработки на Flutter в 2023 году
Flutter предлагает множество функций и инструментов, которые могут значительно повысить производительность при разработке мобильных приложений. Предлагаем подробное руководство по использованию этих возможностей.
Рабочая очередь в Go с RabbitMQ
Мы создадим систему рабочих очередей, в которой будут появляться новые задания. Обработчики (workers) будут следить за очередью и выполнять работу по мере поступления. Система...
Как с легкостью создать установщик пакетов Android
Ищете простой способ создания установщика пакетов Android? Библиотека Ackpine позволит выполнить этот процесс, избавив вас от многих забот и большого объема кода.
Технологии фронтенд-разработки, утратившие свою актуальность
Вы наверняка подумали о jQuery и PHP. Однако речь пойдет не о них, а о технологиях, незаметно исчезнувших из новых проектов, пока все спорили о jQuery. Поговорим о пяти компетенциях, которые пришли на смену устаревшим навыкам и стали чрезвычайно важны для карьеры современного фронтенд-разработчика.
Псевдоклассы CSS, на которые стоит обратить внимание
Согласно определению из "CSS: The Definitive Guide" Эрика Майера (Eric Meyer) и Эстеля Вейля (Estelle Weyl):
С помощью (псевдо) селекторов можно назначать стили так называемым...
Изучите эти основы JavaScript и станьте лучшим разработчиком
В языке JavaScript есть примитивы, объекты и функции и все они рассматриваются в качестве объектов, даже примитивы.
Примитивы
Число, булевый (логический) тип данных, строка, undefined и...
Как правильно объявлять API устаревшими и не сломать пользователям код
Как сделать переход плавным для вас и ваших пользователей, чтобы он ни для кого не стал неожиданностью, а внедрение нового функционала можно было спланировать? Рассмотрим критические изменения и техники их безопасного распространения.
Как писать лог-файлы, которые экономят время
Сначала позвольте немного поразглагольствовать: программа, поддержкой которой я занимаюсь по работе, содержит много милых особенностей. “Произошла ошибка” — не то, что достойно такого описания....








































































































