Хитрости объектно-ориентированного программирования. Часть 1: Искусство разделения команд и запросов
Это мини-серия статей по написанию поддерживаемого объектно-ориентированного кода без лишней нервотрепки.
У функций есть побочные эффекты. Иногда они изменяют состояние системы в самый неожиданный момент и...
Реализуем функцию управления взглядом с помощью SwiftUI, ARKit и SceneKit
Предлагаем изучить опыт создания на SwiftUI hands-free приложения с применением ARKit и SceneKit. Для лучшего понимания возвращаемых значений будет использован также фреймворк SwiftUI Charts.
Реализация интерфейсов в Golang
Интерфейсы — это инструменты для определения наборов действий и поведения. Они позволяют объектам опираться на абстракции, а не фактические реализации других объектов. При этом...
Как быстро создать PDF-файл с помощью Python
Научитесь создавать PDF-файлы за несколько минут с помощью Python и HTML-шаблонов. Предлагаем простой гайд в 3 шага.
Замыкания в Rust
В Rust можно создавать не только именованные функции, но и анонимные, которые называются замыканиями. Сами по себе они не так уж интересны, пока вы...
Докеризируем среду разработки в VS Code
Работая над последним проектом, я столкнулся с проблемой, которая заключалась в последовательном запуске проектов в нескольких ОС. Я потратил несколько недель, пытаясь исследовать файлы...
Делегаты в Kotlin для Android
Kotlin действительно красивый язык, в котором есть очень крутые фичи. Из-за них разработка приложений становится веселым и захватывающим опытом. Одна из этих фич — делегированные свойства....
Хитрости и приемы эффективного программирования на Kotlin
Проведем краткий обзор крутого функционала Kotlin. Начнем писать код по-котлиновски, сделав его более лаконичным и удобным для человеческого восприятия.
Сравниваем целочисленное и линейное программирование в Python
Разбираемся, в чем отличия между целочисленным и линейным программированием. Параллельно решаем распространенную задачу по математической оптимизации.
Модификатор Kotlin, которого не должно было быть
Большинство разработчиков Kotlin уверены в том, что свойство val здесь эквивалентно использующемуся в Java свойству final. А что, если я скажу, что это не...
Основы Go: ввод-вывод файловой системы
Введение
Чтение с диска и запись на диск, а также перемещение по файловой системе — это основной элемент в любом языке. Узнаем, как все это...
Как создавать анимированные графы в Python
Matplotlib и Seaborn — вполне приличные Python-библиотеки для создания превосходных графиков. Но такие графики получаются статичными, и крайне трудно подобрать для них красивое представление данных или...
Google Test: интеграция модульных тестов в C/C++ проекты
Научимся легко и просто интегрировать модульные тесты в C/C++ проекты.
Перестановка двух чисел на Си
Что такое перестановка двух чисел?
Перестановкой двух чисел называют обмен значениями двух переменных. Например, переменная num1 содержит значение 20, а num2 содержит значение 40. После перестановки...
Альтернатива switch в Python
Во многих языках программирования (например, JavaScript) есть операторы switch. Это блок кода, в котором значение сравнивается с цепочкой переключателей case. При обнаружении соответствия выполняется...
Развертывание приложений Python в Azure
Хотите легко создавать и использовать приложения, делая их доступными для других людей? Предлагаем пошаговый гайд по развертыванию рабочего приложения Python с помощью фреймворка Streamlit в облачной среде Azure.
Решение алгоритмических проблем: Поиск повторяющихся элементов в массиве
Проблема
Найти дубликат в массиве
Given an array of n + 1 integers between 1 and n, find one of the duplicates.
If there are multiple possible...
Все, что вам нужно знать о переходе на реляционную базу данных AWS
Каждая компания располагает огромным объемом данных, которыми нужно корректно управлять. Чтобы руководство принимало взвешенные решения, оно должно быть хорошо осведомлено о принципах деятельности своей...
Как отобразить индикатор выполнения на стандартной консоли с помощью Java
Как добиться того, чтобы прогресс выполнения консольного приложения показывался напрямую в консоли? Рассмотрим вариант реализации такого прогресс-бара.
Поддержание документации в актуальном состоянии с помощью Bit и GitHub
Написание документации для кода (будь то небольшая библиотека или полный набор микросервисов, взаимодействие с которыми необходимо другим разработчикам) — это занятие кропотливое и утомительное.
Основная...
Возможности C++, о которых должен знать каждый разработчик
С момента своего появления C++ очень хорошо развился как язык программирования.
Конечно, это не произошло моментально. Когда-то этому языку не доставало динамичности. В то время...
Как настроить отдельные SSH-ключи для нескольких учётных записей GitLab
Перейдём сразу к делу. Допустим, у вас есть один GitLab для личных проектов и один для работы. Проблем не возникнет, пока не придётся работать...
Ключевые вопросы для собеседования по Spring Boot в 2023 году. Часть 1
Хотите получить должность Java-разработчика или повысить свой профессиональный уровень? Ознакомьтесь с актуальными ответами на 50 ключевых вопросов по микросервисам Spring Boot для собеседования с кандидатами на должность Java-программиста или инженера ПО.
Команды Go и переменные среды, которые должен знать каждый разработчик
Как загружаются, кешируются и удаляются зависимости на Go, и что здесь изменилось с появлением GOPROXY и модулей? Как избежать ошибок сборки и обеспечить ее воспроизводимость?
Как и для чего использовать нативную библиотеку сериализации Kotlin
Вывод из статьи
В конце статьи вы узнаете, почему команда Kotlin создала новую библиотеку сериализации, несмотря на наличие многих продвинутых решений, таких как Moshi и Gson....
Лучшая IDE для Python-разработки в 2024 году
Обзор топовых сред разработки Python-проектов поможем понять, какая из них подходит именно вам. Помимо особенностей и возможностей каждой из них, вы получите рекомендации по началу работы с PyCharm - самой популярной IDE в профессиональном Python-сообществе.
Функциональные возможности Python, которые часто игнорируют
Простота Python позволяет быстро начать писать код, но не каждый разработчик достигает вершин в этом деле. Без овладения всеми функциональными возможностями современного Python невозможно стать профи, создающим эффективный код.
Фреймворк Executor в Java
Вплоть до Java 5 создавать потоки и управлять ими было возможно только на уровне приложения. Объекты Thread требуют значительного объема памяти. Таким образом, если...
Создание среды AWS Boto3 на Python с Docker Compose
Развернем всего из одного файла среду Boto3 с изолированными контейнерами разработки и продакшена. Рассмотрим типичные команды Dockerfile для сборки образов, организуем и автоматизируем ее с помощью Docker Compose.
Полезные Python модули, которыми мало кто пользуется
Python — это прекрасный язык с множеством встроенных модулей, цель которых — помочь нам писать более красивый и качественный код.
Цель
В данной статье мы будем работать с малоизвестными методами...
Почему стоит использовать GoFr для разработки Golang-бэкенда?
Разрабатываете микросервисы? Тогда вам обязательно нужно освоить GoFr. С этим фреймворком ваша работа станет намного проще и эффективней. Как надежный эксперт, он будет руководить каждым вашим шагом, обеспечив исключительную производительность.
Овладей Python, создавая реальные приложения. Часть 3
Создаем блокировщик сайтов в 3 шага
Предыдущие части: Часть 1, Часть 2
Технологии стремительно развиваются, как и мир в целом. Каждый день вы сталкиваетесь с чем-то, о чем раньше...
Переход на PgCat — прокси-сервер Postgres следующего поколения
Сравним функционал PgCat по временно́й задержке и корректности. Рассмотрим особенности балансировки нагрузки и отработки отказа реплики, клиентов с плохим поведением и поддержку сегментированных БД.
Как создать API-шлюз в Rust посредством библиотеки Hyper
Научимся создавать эффективный API-шлюз в Rust, задействуя библиотеку Hyper и YAML-файлы конфигурации. Кроме того, напишем модульные тесты для тестирования логики авторизации и проверим корректную работу API-шлюза.
Классификация текстов отзывов о фильмах с помощью Scikit-learn
Сначала мы посмотрим, как подготовить текстовые данные для подачи их в модель машинного обучения. Затем покажем, как использовать Scikit-learn для реализации модели классификатора, а...
Почему я перехожу с Python на Rust
Что может заставить программиста, который 10 лет предпочитал Python другим компьютерным языкам, перейти на Rust? Узнайте о 5 проблемах Python и о том, как Rust решил эти проблемы.
Как сделать калькулятор на C
В этой статье простым языком изложена вся необходимая информация для программирования калькулятора на языке C. Применяемая программа используется на лабораторных занятиях студентов инженерных специальностей...
Комбинации команд Unix/Linux, которые должен знать каждый разработчик
Экономьте свое время, используя комбинации команд в терминале и скриптах. Они полезны во многих ситуациях, в том числе при повторном выполнении команд, мгновенном переходе в только что созданный каталог и определении статуса долго выполняемой команды.
ТОП-5 законов для каждого UX-дизайнера
Когда люди слышат слово «дизайн», они обычно думают, что это творческая работа, которая подразумевает создание красивого внешнего вида. Но UX-дизайн доказывает, что привлекательный продукт...
Автоматизация создания файлов для нового экрана с плагином для Android Studio
Введение
Приходилось ли вам работать над проектом со сложной архитектурой, в котором для создания нового экрана нужно добавить несколько новых файлов с определенным содержимым? Например,...
Важные вопросы для собеседования по корутинам для опытных разработчиков Android
Рассмотрим преимущества корутин, создание и запуск, отличия от потоков, управление областью, приостанавливающие функции, обработка исключений, контекст и диспетчеры. Пошагово разберем выполнение фоновых задач, лучшие практики отмены корутин.
Сегментация по границам объекта и областям изображения с реализацией в Python
Рассмотрим такое понятие, как сегментация и два ее основных метода с выделением границ и областей, а также подкрепим примерами реализации в Python.
Изучаем Rust. Потоковая передача tar-архива
Сделаем подробную реализацию асинхронного потока с нетривиальным конечным автоматом, проверим в консоли создание tar-архива, полностью распознаваемого в API среды выполнения Docker. Выполним идеальную интеграцию результата в процесс загрузки файлов.
Parcel + Rust и WASM = идеальный ромком
Введение
Мне уже давно хотелось попробовать использовать Rust и WASM вместе. Причин для этого была масса: небольшой размер пакета, низкоуровневый доступ с надёжной производительностью и...
Полезные хитрости на Python от А до Я
Python — это один из самых популярных и востребованных языков программирования в мире. И на то есть множество причин:
· прост в изучении;
· мега-универсальный;
· огромное разнообразие модулей...
Уведомления о контактах
Android 11 мы делаем более ориентированным и выразительным для людей, переосмысливая то, как мы разговариваем по телефону, и создавая ОС, которая может распознавать и...
Подробнее о функциях высшего порядка
В JavaScript, функции являются “функциями первого класса”, соответственно они могут:
храниться в переменной, объекте или массиве.
передаваться как аргументы в другую функцию.
и даже...
Основы многопоточности
Вкратце знакомимся с понятием и принципами работы многопоточности, а также наглядно убеждаемся в преимуществах ее применения.
Вся правда об использовании навигационной библиотеки Jetpack в модульных проектах
Jetpack - популярный инструмент современного разработчика. Но так ли удобна эта библиотека для модульных проектов?
Секреты в Android. Часть 2
В этой части рассмотрим процесс получения секретов из удаленного хранилища (сервера) с помощью сервисов Firebase Remote Config, API Play Integrity и Firebase App Check. Такой подход значительно повысит безопасность приложений, и злоумышленникам будет сложнее получить секреты.
Контейнеры Docker и их связывание в сети
Создадим три файла Dockerfile с прямым подключением каждого к своему репозиторию GitHub, сделаем из них три пользовательских образа Docker, а из каждого образа - по одному контейнеру. Один изолируем в сети Development, два поместим в Production и проверим их взаимодействие.
Вопросы для собеседования iOS — Swift. Часть 2
Продолжаем разбирать вопросы. Рассмотрим конкретные и абстрактные типы, псевдоним типа, обработку исключений и спецификаторы доступа.
5 способов выйти из вложенного цикла в Python
Вложенные циклы - одна из самых непонятных тем для новичков в программировании, которые еще не разобрались в порядке итерации по циклу. Иногда может понадобиться прервать вложенный цикл, однако это не так просто, как кажется. Рассмотрим различные способы выхода из вложенных циклов.
Kepler.gl — инструмент для визуализации геоданных на Python
Познакомимся с отличным инструментом Kepler.gl и с его помощью создадим веб-приложение для визуализации геоданных на Python.
Вопросы для собеседования iOS — Swift. Часть 1
Рассмотрим самый важный и частый вопрос - шаблон делегирования. А также проверки времени выполнения, соответствие NSObject классу Swift, протоколы.
Как создать пользовательскую поисковую панель SwiftUI с LazyVStack
Решаем практическую задачу по созданию инструмента для выбора кода страны - реализуем пользовательскую поисковую панель LazyVStack, содержащую данные с разделами и их индексами.
PEG парсеры и Python
Несколько лет назад кто-то спросил, имеет ли смысл переключать Python на парсер PEG. Или на грамматику PEG. Не помню точно. Тогда я ещё не...
Создание и отслеживание первого рабочего потока Github Actions
Github Actions — это собственное решение Github для CI/CD (непрерывной интеграции и непрерывного развёртывания ПО). Оно стало доступно сообществу разработчиков с момента запуска Github...
Примитивы синхронизации в Go
Изучаем Mutex, WaitGroup и Once с примерами
В данной статье кратко рассмотрим некоторые конструкции низкоуровневой синхронизации, которые наряду с горутинами и каналами предлагает нам один...
7 способов повысить свою продуктивность в Python
Python — один из самых популярных среди языков современного поколения и наверняка останется таковым в ближайшие десять лет. Это фантастический язык программирования практически для...
Почему Python не станет языком программирования будущего
Причины популярности Python
Успех Python отражается в тенденциях Stack Overflow, рассчитанных по количеству тегов в постах, что является довольно хорошим показателем популярности языка, учитывая размер...
Руководство по модулю Python itertools
Ознакомьтесь с 10 наиболее полезными функциями модуля Python itertools. Они помогут вам подняться на новый уровень программирования и стать более эффективным Python-разработчиком.
Подробно о технологии «Издатель-подписчик» Redis
Подробно изучим эту модель и даже доберемся до уровня блоков памяти. Раскроем делали реализации и нюансы, сценарии применения.
7 фреймворков для работы с LLM
Предлагаем детальное описание 7 фреймворков с открытым исходным кодом для развертывания и обслуживания LLM. Сравните особенности, преимущества, ограничения и затратность таких фреймворков, как vLLM, Text Generation Inference, OpenLLM, Ray Serve, CTranslate2 и MLC LLM.
Руководство по наиболее востребованным базовым командам SQL
Изучим основные команды и операторы - базовые строительные блоки MySQL, применяемые в запросах к базе данных, а иногда и самостоятельно. Сохраните себе в закладках эту шпаргалку по SQL.
Утилитные классы в Kotlin с точки зрения Java-разработчика
Разобравшись, в чем заключаются различия в реализации утилитных классов в Kotlin и Java, вы сделаете важный шаг в освоении языка Kotlin. Будь вы опытный Java-разработчик, желающий расширить спектр своих навыков, или новичок в программировании, уделите внимание этому аспекту.
5 простейших приемов работы на C#
Эти приемы работы на C# должен знать каждый, а тем, кто знает, полезно повторить. Типы, допускающие значения «null», обнаружение пустых строк, readonly и константы, простой способ завершения приложения и разрыв строк с «newline».
Бенчмарки в Golang: тестируем производительность кода
Честно вам признаюсь — бенчмаркинг (тестирование производительности) не входит в число моих самых сильных сторон, к тому же и провожу я его не так...
Продвинутый поиск Meilisearch для приложения Golang
Применим упрощенный подход интеграции Meilisearch с Golang: обойдя процессы создания БД и вставки данных, получим данные напрямую из внешних источников и вставим их в Meilisearch. Реализуем функционал поиска, создав индексы, вставив в них данные, настроив поисковый запрос для функции поиска.
Автоматическое масштабирование CI с помощью Kraken CI
Kraken CI — это современная локальная система CI/CD с открытым исходным кодом, которая обладает высокой масштабируемостью и ориентирована на тестирование. Kraken CI имеет лицензию Apache 2.0....
Основы SQL: разница между GROUP BY и PARTITION BY
Несмотря на кажущуюся простоту, SQL может таить в себе немало особенностей, о которых лучше узнать заранее. Сегодня рассмотрим основные различия между операторами GROUP BY и PARTITION BY, а также их основные сценарии использования.
Потоковые и многопроцессорные модули на Python
Главная идея потоков заключается в выполнении последовательности таких инструкций внутри программы, которые могут выполняться независимо от другого кода.
Так в чём же разница между потоковой...
Решение крупномасштабных задач машинного обучения на Python
Представляем краткое руководство по использованию библиотеки xLearn. Алгоритмы, поддерживаемые этой библиотекой, позволят решать многие задачи машинного обучения.
Как скрывают секретные ключи и пароли в Python
Всякий раз, загружая свой проект или код на GitHub с общедоступным репозиторием, нужно помнить о безопасности. Ведь пользователи, которые запустят файл, содержащий секретные ключи...
Архитектура виртуальной машины Java: объяснение для начинающих
На собеседованиях часто требуется знание внутреннего устройства JVM. Но и в повседневной практике Java-разработчику полезно понимать, что происходит внутри при запуске кода. Разобраться поможет эта статья.
4 совета по работе с потоками и мьютексами в C++
C++ представляет собой отличный язык программирования, который принято ассоциировать с высокой производительностью, а также доступным управлением памятью и указателями. Тем не менее в нем...
Сетевое программирование в Go
Предлагаем пошаговый гайд по созданию надежного TCP-сервера с использованием Go. Такой сервер обеспечивает регистрируемую и контролируемую доставку потока одновременных соединений.
Корутины в Kotlin: топ-50 вопросов для собеседования с Android-разработчиками в 2024 году
Хотите поразить рекрутеров своими знаниями в области корутин или стремитесь повысить свой квалификационный уровень? В любом случае будет полезно изучить основные вопросы для собеседования по корутинам, актуальные для Android-разработчиков в 2024 году.
Docker: привязываем порты
Решаем вопрос с портами раз и навсегда
Вы когда-нибудь были на собеседовании на должность младшего разработчика, где от вас ожидали, что вы знаете, как работает Docker?...
10 отличных JavaScript библиотек на 2020 год
JavaScript — язык интернета. Вы можете запускать его в браузере или на сервере, а можете использовать для мобильных приложений.
Хотя он и хорош сам по...
3 инструмента для отслеживания и визуализации выполнения кода на Python
Для чего нужны новые инструменты?
Видели когда-нибудь такой вывод ошибок?
2 divided by 1 is equal to 2.0.
Traceback (most recent call last):
File "loguru_example.py", line...
Простая и эффективная утилита сжатия данных кодами Хаффмана на Haskell
Автор материала объясняет, как устроено кодирование Хаффмана, затем пишет простую и понятную реализацию на Haskell и оборачивает ее в интерфейс командной строки, а еще делится ссылкой на отчет профайлера, который показывает, что программа расходует один и тот же (константный, постоянный) объём памяти вне зависимости от размера входных данных.
SQL: загадки на сообразительность
Насколько хорошо вы владеете языком SQL? Всегда ли добиваетесь ожидаемых результатов? Попробуйте решить три головоломки по SQL, которые включают временную метку, зависимые и независимые фильтры, а также неправильно действующие левые объединения. Верные ответы прилагаются!
Знакомство с Anaconda: что это такое и как установить
Простое руководство по Anaconda и его установке на Ubuntu 16.04 (64-bit).
Что такое Anaconda?
Перед тем, как изучать Anaconda, рассмотрим Conda.
Цитируем определение Conda с официального блога:
Conda — это...
Жизненный цикл потока в Java
Эта статья направлена на объяснение различных состояний потока в мире Java. Если вы новичок в области многопоточного программирования, попробуйте сначала почитать про потоки что-нибудь...
Поддержка новых форм-факторов с помощью новой библиотеки Jetpack WindowManager
WindowManager — это недавнее дополнение к Android Jetpack, которое призвано помочь разработчикам приложений поддерживать новые форм-факторы устройств и обеспечить общее API для различных функций Window Manager...
Замеры производительности на Java с JMH
Практически каждому разработчику известна фраза, сказанная Дональдом Кнутом в 1974 году: “Преждевременная оптимизация — корень всех зол”. Но откуда мы должны узнать, что именно стоит оптимизировать?
С...
10 практических примеров использования функций высшего порядка при разработке Android
Функции высшего порядка могут значительно повысить качество и удобство сопровождения кода. Рассмотрим 10 полезных примеров того, как их можно использовать.
Объектно-ориентированное программирование в Golang
Давайте поучимся работать с объектно-ориентированной архитектурой в Golang. Здесь нет классов, зато есть структуры, работа с которыми является единственным способом поддержки объектно-ориентированной модели.
Создание структур...
Как оркестровать микросервисы с помощью Docker Compose
Развертывание приложений с микросервисной архитектурой - довольно громоздкий процесс, занимающий много времени. Уменьшить рабочую нагрузку позволяет Docker Compose, инструмент оркестрации контейнеров. Рассказываем об упрощенном создании микросервисных приложений на Spring Boot.
Введение в программирование на Rust
Rust — это перспективный язык программирования, набирающий рекордную популярность для низкоуровневых систем, таких как операционные системы и компиляторы.
В 2020 году по итогам опроса разработчиков...
Go: как циклы преобразуются в ассемблерную программу?
ℹ️ В статье речь идёт о Go 1.13.
Циклы в программировании — понятие мощное и довольно простое. Тем не менее возникает необходимость преобразовывать их в основные команды,...
Не автоматизируйте всё подряд
Я склонен попадать в ловушку, пытаясь автоматизировать все подряд.
Изучение и внедрение чего-то нового — это очень весело. Особенно если вы новичок в программировании: всё выглядит так,...
Выражение when в Kotlin
Рассмотрим особенности использования выражения when в Kotlin.
Базовый случай использования
На фрагменте ниже приведен базовый случай использования выражения when:
fun myFunction(valueToTest: Any) {
when...
Jetpack Compose: пользовательский интерфейс Twitter
Я решил протестировать Jetpack Compose, сделав простой клон пользовательского интерфейса Twitter после того, как наткнулся на этот твит Mariano Zorrilla:
Он использовал Flutter (отличный инструмент для...
Корутины: основы
Часть 1, Часть 2
Эта серия постов подробно посвящена отменам и исключениям в корутинах. Отмена важна тем, что она помогает избежать выполнения большего количества...
Краткое руководство по строкам и регулярным выражениям в R
Учимся управлять строками максимально эффективно - осваиваем наиболее актуальные функции, а также метасимволы для регулярных выражений.
Настройка компонентов и тем Material UI: современный подход
Воспользуйтесь руководством по созданию ультрамодульной библиотеки компонентов с помощью Bit и Material UI. Она обеспечит расширенный набор настраиваемых компонентов и тем с предварительным просмотром и документацией, а также многократно используемую среду разработки.
Как легко оптимизировать Jupyter Notebook. Часть 2
Руководство для начинающих о том, как сделать Jupyter Notebook быстрее, мощнее и круче
Часть 1, Часть 2
Магические команды (Magic)
Magic — это отличные команды, упрощающие нашу жизнь при решении определенных...
Что такое закрепление сертификата в Android
Закрепление или выбор сертификата - важный шаг при разработке приложений. Рассмотрим, какие бывают сертификаты, в чем заключаются особенности и как их лучше использовать.
Как собрать данные для DS-проекта с помощью Python: 3 шага
Начните свой проект по науке о данных с создания Python-скрипта, используя библиотеку Selenium для извлечения данных. Предлагаем узнать, как это выполнить в 3 шага.
3 чудо-приема JavaScript для ускорения разработки
Обзор трех эффективных приемов для JavaScript: создание асинхронного контекста, работа с именованными параметрами и обертывание блоков try/catch.
Понятие об умных указателях Rust
В этой статье мы разберемся, что именно представляют собой умные указатели, откуда они берутся и как работают.
Если по-простому, умный указатель — это абстрактный тип...
Худшие способы нанять хороших программистов
Хорошее собеседование — это просто неформальная беседа двух увлеченных программистов
Чарльз Баркли поразительно точно отметил:
Я не считаю себя тем, кто дает интервью. Я просто веду...