Разработка
10 полезных команд Git
В этой статье мы рассмотрим набор команд, которые немного облегчат вам жизнь и повысят продуктивность. Прежде чем приступить к изучению команд, давайте познакомимся с несколькими важными терминами Git. Это поможет вам лучше понять команды и предотвратить путаницу в дальнейшем.
Что должен знать каждый разработчик о вычислениях на GPU
Большинство программистов отлично разбираются в работе процессоров и последовательном программировании, поскольку с самого начала пишут код для CPU. Однако многие из них меньше знают о том, как устроены графические процессоры (GPU) и в чем заключается их уникальность. За последнее десятилетие GPU стали чрезвычайно важны благодаря широкому применению в глубоком обучении, и сегодня каждому разработчику необходимо обладать базовыми знаниями о том, как они работают. Цель этой статьи — дать вам это понимание.
9 open source библиотек для вашего следующего проекта
Разработчики часто сталкиваются с выбором, какие инструменты использовать для своего следующего проекта. Даже если вы серьёзно настроены на разработку продукта, проблема остаётся той же.
В этой статье я расскажу о 9 библиотеках с открытым исходным кодом, которые улучшат ваш будущий проект.
Как улучшить свои навыки работы с Git с помощью GitHub CLI
Использование Git в командной строке (CLI) может повысить вашу скорость разработки и эффективность. В этой статье рассмотрим 8 полезных команд для работы с GitHub через терминал.
Как использовать GitHub Copilot в IDE: советы, приёмы и лучшие практики
В этой статье я расскажу о том, что я делаю на каждодневной основе, чтобы получить максимальную отдачу от GitHub Copilot. Надеюсь, эти советы помогут вам стать более эффективным и продуктивным пользователем ИИ-помощника.
Руководство: Создаем свою STL-совместимую реализацию std::allocator с лучшей производительностью
В этой статье описывается реализация STL-совместимого аллокатора, ориентированного на выделение и высвобождение блоков памяти фиксированного размера. Предложенный аллокатор предотвращает сбои, вызванные фрагментированной кучей, и обеспечивает стабильное время выполнения выделения/высвобождения памяти. Моей главной целью при создании stl_allocator
было устранение ошибок памяти. Вдобавок использование STL-совместимого блочного аллокатора открывает возможность использования функций стандартной библиотеки шаблонов (STL) C++ в проектах, в которых иначе это было бы невозможно.
Еще раз про асинхронную машину состояний и где именно там аллокации
В данной статье мы подробно рассмотрим машину состояний, сгенерированную компилятором C# из асинхронного метода для понимания принципа работы асинхронности в C#.
Руководство: Как создать YouTube GIF Maker с использованием Next.js, Node и RabbitMQ
Идея приложения — дать пользователям возможность создавать GIF-файлы из видеороликов с YouTube. Для этого нужно просто указать ссылку на нужное видео, а также задать время начала и окончания GIF.
Функциональные возможности приложения:
- Создание GIF из видео на YouTube с определённым временным диапазоном.
- Предварительный просмотр результата перед выполнением фактической конвертации.
Краткий обзор развития лямбда-выражений в C++11, C++14, C++17 и C++20
Рассмотрим лямбда-выражения в C++ и их эволюцию с момента появления в стандарте C++11 и до последних обновлений в C++20.
Лямбда-выражения в C++ — это анонимные функции, которые позволяют писать инлайн-выражения прямо там, где они используются. С их помощью можно легко определять функции обратного вызова, передавать их в функции высшего порядка или использовать для инициализации функциональных объектов.
15 тенденций в области разработки программного обеспечения в 2024 году
- Интеграция искусственного интеллекта и машинного обучения
- Блокчейн за пределами криптовалют
- Микросервисы с множественными средами выполнения
- Кибербезопасность
- Дальнейшее внедрение VR и AR
- Устойчивая разработка программного обеспечения
- Внесерверная обработка данных (FaaS)
- Расширение облачных вычислений
- Всплеск периферийных вычислений
- Квантовые вычисления: новый рубеж
- Python
- Рост числа пользователей языка Rust
- Рост числа low-code и no-code платформ
- Рост числа прогрессивных веб-приложений (PWA)
- Разработка кросс-платформенных приложений
Celery для новичков
Celery – это асинхронная распределенная очередь задач, написанная на Python, она предназначена для обработки сообщений в реальном времени при помощи многозадачности. Используя Celery, можно организовать выполнение задач в фоновом режиме, не загружая основной поток приложения.
Используя Celery, можно легко организовать выполнение фоновых задач.
Кратко про протоколы взаимодействия в микроконтроллерах: SPI, IDC, UART, CAN
Протоколы в микроконтроллерах позволяют устройствам «понимать» друг друга и работать вместе, создавая общую систему. Протоколы определяют, как устройства подключаются, обмениваются данными, синхронизируют действия, управляют форматированием, временем и последовательностью сообщений между микроконтроллерами и другими компонентами в системах.
В этой статье рассмотрим такие протоколы взаимодействия, как SPI, IDC, UART, CAN.
Всё ещё используете If/else валидацию в Spring 6.0+ / SpringBoot 3.0+?
Чтобы избежать влияния несанкционированных параметров на ваш бизнес, в ваших веб-сервисах должна быть реализована проверка параметров на уровне контроллера! В большинстве случаев параметры запроса можно разделить на два следующих вида:
- POST и PUT-запросы, использующие requestBody для передачи параметров.
- GET-запросы, использующие requestParam/PathVariable для передачи параметров.
Мемоизация в React: я почитал документацию вместо вас
В статье рассмотрены три инструмента мемоизации в React: useMemo, useCallback, memo. Главный источник информации: документация React.
Правило трех и пяти в C++: что это такое и зачем они нужны?
В этой статье поговорим о двух правилах С++: правиле трех и правиле пяти. Правильное понимание этих правил способно уберечь код от утечек и неопределенных поведений.
Разработка под Android в 2024 году
Эта статья отражает моё личное мнение и профессиональные взгляды, учитывающие различные точки зрения в сообществе Android-разработчиков. Кроме того, я регулярно просматриваю руководства от Google для Android.
Веб-скрапинг с Scrapy на Python
В этой статье поговорим о хорошем инструменте для веб-скрапинга, который зарекомендовал себя, библиотеке Scrapy для Python.
Динамическое программирование на Python
Динамическое программирование полезно при решении оптимизационных задач и задач на вычисление, где присутствует большое количество повторяющихся подзадач. По сравнению с другими алгоритмическими подходами, динамическое программирование позволяет ускорить процесс вычисления за счет сохранения результатов выполнения подзадач. Основные его идеи:
- Переиспользование решений подзадач
- Мемоизация
- Табуляция
26 техник, которыми геймдизайнеры манипулируют игроком в видеоиграх
В области геймдизайна наджи (англ. nudge) или «подталкивания» — это такие тонкие элементы дизайна, стимулы, которые направляют игроков по намеченному геймдизайнером пути, улучшая их игровой опыт, но не навязывая им каких-либо действий напрямую. Ниже вашему вниманию представлен список таких техник подталкивания игрока с их описанием, применением и реальными примерами использования в видеоиграх.
Кратко про класс CompletableFuture в Java
Асинхронное программирование уже давно является полноценной частью Java. С появлением Java 8 и введением класса CompletableFuture
, асинхронное программирование стало более доступным.
CompletableFuture
— это класс в пакете java.util.concurrent
, предоставляющий возможности для асинхронного программирования. Он поддерживает выполнение задач в фоновом режиме, цепочки задач, обработку исключений и многое другое.
Создание простейшего back-end на Node.js с использованием PostgreSQL
В этой статье мы продемонстрируем, как создавать back-end приложения на Node.js c PostqreSQL. В качестве примера создадим простейший back-end на Node.js с использованием PostgreSQL.
Разгоняем C++ с кастомными аллокаторами
В этой статье мы обратим свой взор на производительность в C++, и как ни странно, нашими главными героями станут не библиотеки или сложные алгоритмы, а казалось бы, простые аллокаторы. Но не просто аллокаторы, а кастомные, которые могут заметно ускорить работу приложений.
Полезные фичи в Java для новичков: мой список
В Java никогда не бывает скучно, особенно когда речь заходит о вещах, которые делают нашу жизнь проще и код — чище. В этой статье я хочу рассказать вам о четырех фичах в Java, которые сам активно использовал в своих проектах и которые, на мой взгляд, заслуживают внимания.
JavaScript Clean Code: руководство для начинающих разработчиков
Это руководство посвящено написанию чистого и удобного кода на JavaScript и TypeScript. Мы рассмотрим лучшие практики работы с функциями, переменными и методами, чтобы ваш код был не только эффективным, но и понятным как вам, так и другим разработчикам. Статья будет полезна для новичков, которые хотят улучшить свои навыки кодирования.
Расширенная шпаргалка по корутинам Kotlin
Предположим, что вы уже какое-то время работаете с Kotlin-корутинами и знакомы с базовыми концепциями, такими как приостанавливаемые (suspend
) функции и билдер launch
. Однако по мере усложнения проектов вы всё чаще сталкиваетесь с необходимостью искать решения для более продвинутых задач и обращаетесь к поисковым системам или искусственному интеллекту за помощью.
Эта шпаргалка создана как удобный справочник для сложных сценариев работы с корутинами и содержит ключевые идеи, накопленные автором за всё время работы.
Архитектура
Микросервисы и RabbitMQ в Docker
Микросервисная архитектура предполагает декомпозицию монолитного приложения на несколько полностью независимо развёртываемых и масштабируемых сервисов. За пределами этого базового определения, то, что представляет собой микросервис, может быть несколько субъективным. Хотя есть несколько проверенных в бою практик, принятых такими гигантами, как Netflix и Uber, которые всегда следует принимать во внимание. И я расскажу о некоторых из них.
Чистая архитектура для начинающих
Разработка приложений и написание кода есть процесс достаточно увлекательный и результатом такой интересной разработки может стать беспорядочный код, представляющий собой спагетти-архитектуру, в которой сложно разобраться, и которая нуждается в некоторой структуризации.
Тестирование
Знакомьтесь, SafeTest — новый подход к тестированию фронтенда
В этой статье мы поговорим о SafeTest — революционной библиотеке, которая предлагает свежий взгляд на сквозные (E2E) тесты для веб-приложений с пользовательским интерфейсом.
13 инструментов для тестирования методом «чёрного ящика»
Инструменты для тестирования методом «чёрного ящика» (black box) сосредоточены на анализе входных и выходных данных программного обеспечения, его поведения и функциональности с точки зрения конечного пользователя. Они используются для различных типов тестирования, включая функциональное, системное и приёмочное, не требуя доступа к исходному коду.
Интеграционные тесты
Интеграционные тесты помогают определить, правильно ли работают после соединения разные юниты программного обеспечения, которые были разработаны независимо друг от друга. Термин «интеграционные тесты» стал размытым даже в рамках неточных стандартов индустрии программного обеспечения, поэтому я использую его в своих работах с осторожностью. В частности, многие считают, что интеграционные тесты обязательно должны быть широкими по охвату, в то время как при более узком охвате они могут быть даже более эффективными.
10 лучших инструментов управления тестированием
Инструментов управления тестированием существует большое множество, и понять, какой из них подходит для конкретного проекта, бывает довольно сложно. Будучи руководителем QA-отдела, я протестировал, проанализировал и оценил самые популярные инструменты управления тестированием и составил спиок лучших из них:
- PractiTest
- Tuskr
- TestRail
- Tricentis qTest
- Tricentis Test Management
- Xray
- Kualitee
- TestMonitor
- Testiny
- aqua ALM
Подробнее о каждом из инструментов читайте в статье.
Параметризованные тесты в Pytest: обзор с примерами
Хотите сделать процесс тестирования более эффективным и покрыть больше случаев с меньшим количеством кода? Тогда параметризованные тесты в Pytest — именно то, что вам нужно. В этой статье мы разберёмся, как с помощью параметризации можно существенно ускорить и упростить тестирование вашего приложения.
Руководство по нагрузочному тестированию для начинающих
Из этого руководства узнаем: зачем проводить нагрузочное тестирование, что от него зависит, какова архитектура, какой подход обеспечит его успешное проведение, как настроить среду, лучшие практики, а также актуальные инструменты для нагрузочного тестирования, доступные на рынке.
Django-аутентификация: просто о сложном
Аутентификация является фундаментальной частью любого веб-приложения. Мы рассмотрим различные способы реализации аутентификации в Django, начиная от стандартных методов и заканчивая более крутыми техниками, например как 2FA и OAuth2.
Как awk заменяет 10 команд Bash
Когда только автор начинал работать с Linux, каждую задачу обрабатывал через кучку пайпов. Потом его коллега сказал ему: «Завязывай с этим, попробуй awk». И автор попробовал. И это действительно удобно. В этой статье он рассказывает, как awk может заменить несколько привычных команд bash.
Мастерство работы с Java Stream
В этой статье рассмотрим, как использовать Stream для написания более элегантного кода на Java на основе нескольких примеров, а также кратко описали фактическую роль каждого API.
Информационная безопасность
SQL инъекции для продолжающих: ломаем настоящий сайт
Про SQL инъекции написано огромное количество статей. Все знаю про пресловутые ‘ OR 1 = 1
и аналогичные конструкции, но далеко не все реализовывали их на практике. В этой статье мы разберем на практике некоторые способы реализации SQL инъекций на примере уязвимого сайта.
Статья предназначена для тех, кто хочет на практике разобраться с тем, что такое SQL инъекции.
Безопасность CI/CD
Рассмотрим обеспечение безопасности конвейера, построенного на основе Jenkins. Но сначала рассмотрим краткое описание этого решения, что Jenkins из себя представляет и для чего используется.
Препарируем слои образов Docker
Технологии контейнеризации сейчас являются неотъемлемой частью процессов DevOps. Контейнеры активно используются в микросервисных архитектурах для изоляции отдельных микросервисов. Наиболее распространенным решением по контейнеризации на сегодняшний день является Docker, и именно о небезопасной работе с контейнерами Docker мы и будем сегодня говорить.
Инфраструктура и сетевые технологии
Tcpdump на разных уровнях
В этой статье мы рассмотрим различные варианты использования утилиты Tcpdump для более глубокой фильтрации трафика.
Тюнинг Wireshark
Анализатор пакетов Wireshark является мощным инструментом как для сбора, так и для анализа трафика. В этой статье мы рассмотрим различные приемы гибкой настройки данного инструмента для того, чтобы сделать работу с ним более удобной и эффективной.
Анализируем HTTP трафик в Wireshark
В этой статье в качестве примера мы рассмотрим ситуацию, когда у нас имеется дамп трафика, в котором содержится HTTP сессия пользователя. Для упрощения ситуации будем считать, что мы получаем HTTPS трафик в уже расшифрованном виде.
Кратко про сетевые протоколы в Golang: TCP, QUIC и UDP
В этой статье мы кратко рассмотрим то, как реализовать такие протколы, как TCP, UDP и QUIC в Golang.
Grafana Stack: закрываем все современные потребности Observability
Ни одна система не может функционировать без сбоев, всегда могут возникнуть ситуации, когда в работе софта возникают проблемы. И здесь важное значение имеет observability — понятие, включающее в себя мониторинг и наблюдаемость. С помощью мониторинга мы можем определить, когда возникла проблема, а наблюдаемость позволяет нам понять, почему она возникла.
В этой статье мы поговорим о том, как можно реализовать observability с помощью сервисов стека Grafana.
Работа с данными и базами данных
Основные настройки для управления ресурсами в PostgreSQL: настройка памяти, CPU и I/O
При работе с PostgreSQL (да и в целом с любой БД) важно правильно настраивать и управлять ресурсами, такими как память, процессорное время и дисковые операции, и так далее для обеспечения лучшей производительности и стабильности работы БД.
В этой статье мы как раз и поговорим кратко о том, как управлять ресурсами в PostgreSQL.
Три основных способа оптимизировать ваши запросы в PostgreSQL
Оптимизация запросов — это искусство, сродни мастерству кошки. Это не просто задача, а настоящий мастхев. Поэтому мы в этой статье рассмотрим три способа для оптимизации запрсоов в PostgreSQL и научимся делать наши запросы быстрыми и эффективными. Начнем с базы — индексирование.
Четыре частых вопроса по SQL джуну-аналитику и три задачи на собеседовании
Для аналитиков, владение SQL — это база. И от познаний в SQL зачастую зависит, отправит ли вам компания, где вы собеседуетесь — оффер. В статье мы обсудим три области вопросов, которые могут встретиться на собеседованиях по SQL. А в конце рассмотрим три задачки.
Три фичи PostgreSQL, которые будут полезны каждому новичку
В этой статье я хочу поговорить о трех фичах PostgreSQL, которые помогут сделать работу более продуктивной и вдохновить меня на создание более сложных и интересных проектов.
Эти фичи уже не раз выручали меня в сложных проектах, и я уверен, что они станут надежными помощниками и в вашей разработке.
Настройка автовакуумирования в PostgreSQL
В этой статье поговорим о том, как правильно настраивать автовакуумирование в PostgreSQL — одном из механизмов, который позволяет базе данных оставаться «в форме» и поддерживать производительность на должном уровне. Если неправильно подойти к настройке, можно столкнуться с деградацией скорости обработки запросов и внезапным ростом объема данных.
Шаблоны проектирования для баз данных
Существуют различные шаблоны проектирования облачных сервисов. Про тот же Sidecar или Ambassador, я думаю, слышали многие. Шаблоны предназначены для решения определенных задач и те два шаблона, о которых речь пойдет в сегодняшней статье, тоже нужны для конкретной задачи — работы с базами данных.
Регулярные выражения в SQL
Представьте, что вам нужно найти иголку в стоге сена, но стог — это ваша БД, а иголка — данные со сложным шаблоном. Дефолтные операторы LIKE
и IN
тут не помогут — слишком уж они прямолинейны. Но зато здесь отлично зайдут регулярные выражения, которые позволяют выполнять сложные поиски и преобразования строк.
База, которую нужно знать про JSON Schema
В этой статье мы рассмотрим одну из тем, которая, как ни странно, остаётся недооценённой — JSON Schema. Если ты аналитик (или хочешь им быть) и в твоей работе часто мелькают JSON-файлы, то наверняка знаешь, как сложно порой бывает держать всё это под контролем. В этой статье мы разберём всё, что тебе нужно знать про JSON Schema.
Триггеры в PostgreSQL: основы
В этой статье поговорим про триггеры в PostgreSQL. Начнём с базы: триггер в PostgreSQL — это такая функция, которая запускается автоматически при определённом событии в таблице. С триггерами можно автоматизировать массу рутины и освободить приложение от сложных проверок и вычислений, но это палка о двух концах.
Где PostgreSQL выигрывает у Oracle DB
Если вы стоите перед выбором между PostgreSQL и Oracle DB, то эта статья для вас. Разберем где PostgreSQL побеждает Oracle. Будет код и примеры — всё, что нужно для практического сравнения.
Ускоряем PostgreSQL с помощью Tuned
Администраторам баз данных всегда хочется, чтобы их СУБД работали быстрее. Всегда кажется, что можно прооптимизировать определенные настройки, и запросы начнут отрабатывать быстрее.
Есть множество различных параметров и настроек, которые позволяют оптимизировать работу БД PostgreSQL. В этой статье мы не будем пытаться охватить их все и поговорим об оптимизации параметров операционной и файловой систем, а также памяти на самом сервере СУБД.
Мы ускорили JOIN в ClickHouse… в 100 раз
Недавно мы представили два новых пул-реквеста в ClickHouse, которые будут доступны в ClickHouse 24.4. Эти изменения повышают производительность JOIN’ов во многих производственных сценариях, в некоторых случаях увеличивая скорость выполнения запросов на несколько порядков.
Apache Kafka: типовые проблемы и способы их решения
Apache Kafka — это решение для распределенной потоковой передачи сообщений. Проект, построенный на основе Scala и Java, направлен на создание единой платформы с высокой пропускной способностью и низкой задержкой для управления потоками данных в реальном времени. Основными возможностями платформы потоковой передачи данных является возможность публиковать потоки записей и подписываться на них, подобно очереди сообщений или системе бизнес‑обмена сообщениями. Также большое значение имеет возможность обрабатывать потоки записей по мере их поступления и хранить их отказоустойчивым и долговечным способом.
Машинное обучение
Методы очистки данных в Pandas
Аналитики данных часто сталкиваются с грязными данными, которые могут существенно замедлить процесс анализа. Грязные данные – это пропущенные значения, дубликаты, неконсистентные данные. Пропущенные значения заставляют нас гадать, что же было замыслено нашим коллегой; дубликаты вводят в заблуждение, умножая одно и то же на количество их копий, а неконсистентные данные заставляют нас сомневаться в каждой цифре.
Очищать грязные данные можно c Pandas. Рассмотрим основные методы.
FinRL: Библиотека глубокого обучения с подкреплением для автоматизированной торговли акциями
Этой статьей я открываю цикл, посвященный обзору возможностей и практике работы с библиотекой FinRL.
Пять лучших NLP инструментов для работы с русским языком на Python
В этой статье рассмотрим пять лучших библиотек Python, предназначенных специально для работы с русским языком в контексте NLP. От базовых задач, таких как токенизация и морфологический анализ, до сложных задач обработки и понимания естественного языка.
Анализ новостей с помощью сегментации и кластеризации временных рядов
В Отусе я прошла курс ML Advanced и открыла для себя интересные темы, связанные с анализом временных рядов, а именно, их сегментацию и кластеризацию. Я решила позаимствовать полученные знания для своей дипломной университетской работы по ивент-анализу социальных явлений и событий и описать часть этого исследования в данной статье.
Автоматизированная торговля акциями с использованием глубокого обучения с подкреплением
В этой статье мы начнем рассматривать практическое применение библиотеки FinRL для построения торгового агента.
Операции машинного обучения (MLOps) для начинающих: полное внедрение проекта
В этой статье я узнаете о некоторых основных практиках и инструментах MLOps на примере реализации проекта от начала до конца. Это поможет вам эффективнее управлять ML-проектами, начиная с разработки и заканчивая мониторингом в продакшене.
cgroups и namespaces в Linux: как это работает?
В этой статье рассмотрим изоляции процессов и управления ресурсами в Linux, изучив возможности cgroups и namespaces. Разберёмся, как работают контейнеры изнутри и научимся создавать собственное изолированное окружение без Docker.
Управление
Тимлид, которого не любят
Есть у нас такая традиция – начальство не любить. А как быть, если начальство – ты сам? Хочется ж быть хорошим, всегда и для всех. Но получается так, увы, редко.
Как понять, что про вас думают сотрудники, как повлиять на эти мысли, что нужно делать, чтобы помимо оценок «не бесит» иногда проскакивали и «отличный руководитель!» давайте разберемся в статье.
Kanban метод: инструкция к применению
Есть три основных принципа управления изменениями и шесть Канбан-практик, общих для любых применений Канбана. Принципы:
- Начните с того, что есть сейчас (то есть возьмите текущий процесс в том виде, в котором он есть);
- Придите к соглашению об эволюционном развитии (договоритесь, что будете меняться);
- Поощряйте проявления лидерства на всех уровнях (поощряйте идеи и желание менять на всех уровнях).
Стартер-пак книг для продуктового аналитика (и не только)
Автор пообщался с командой аналитики о том, что бы можно было порекомендовать тем, кто хочет прокачаться в продуктовой аналитике. Вспоминали кейсы, делились историями «до» и «после» прочтения некоторых книг. Так вот, этот список — это не просто «лучшие бестселлеры по версии Google», а те книги, которые изменили подход меня и моих коллег к работе.
Научно-популярное
Когнитивные искажения, о которых стоит помнить
Из-за когнитивных искажений мы иногда принимаем иррациональные решения, а также выносим суждения на основе информации, которую мы обрабатываем. Фактически, когнитивные искажения — это запрограммированная ошибка в нашем мозге.
В этой статье мы сделаем обзор 151 искажения, которым мы все часто бываем подвержены в своей повседневной жизни: как в личной, так и в профессиональной.
Как разивать системное мышление?
В этой статье рассмотрим целый набор мыслительных навыков, которые в совокупности составляют способность мыслить системно. Выделив эти отдельные компетенции, можно практиковать каждый навык в отдельности. Такой подход поможет овладеть всеми необходимыми навыками до того, как вы попытаетесь соединить их воедино в реальной ситуации.
Системное мышление: основополагающие концепции
Слова имеют свою силу. В системном мышлении используются некоторые специфические слова, которые намеренно определяют набор действий, отличный от общепринятого мышления. Такие понятия, как «синтез», «эмерджентность», «взаимосвязанность» и «петли обратной связи» кому-то могут показаться непростыми. И поскольку они имеют специфическое значение по отношению к системам, позвольте мне начать с изучения шести ключевых тем.