Содержание

Разработка

Почему в вашем коде так сложно разобраться

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

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

Читать далее


Пять продвинутых техник инициализации в C++: От reserve() до piecewise_construct

От операций с динамическими контейнерами до констант времени компиляции — C++ предлагает много интересных техник. В этой статье мы рассмотрим несколько продвинутых методов инициализации: от reserve() и emplace_back для контейнеров, до piecewise_construct и forward_as_tuple для кортежей. Благодаря этим техникам мы можем уменьшить количество временных объектов и более эффективно создавать переменные.

Читать далее


21 фича современного C++

Сообщество C++ дополняет стандарт чаще, чем Apple выпускает новые iPhone. Благодаря этому C++ теперь больше похож на большого слона, а съесть целого слона за один присест невозможно. Вот почему я решил написать эту статью, чтобы дать вашему путешествию по современному C++ своего рода отправную точку. Я отобрал ряд фич современного C++ и постарался объяснить их на лаконичных примерах, чтобы вы научились определять места, где их можно использовать.

Читать далее


Модули C++20 и GCC11

Одним из главных нововведений стандарта C++20 является добавление модулей. Модули призваны радикально изменить структуру кодовых баз C++ и, возможно, сигнализируют о грядущей кончине заголовков (но, скорее всего, не на моем веку). Они также потенциально открывают дорогу для внедрения унифицированной системы сборки и менеджера пакетов, наподобие Rust Cargo; хотя я не сомневаюсь, что стандартизация унифицированной системы сборки будет тем еще кровавым побоищем.

Читать далее


Малоизвестные возможности языка C

И язык C, и его стандартная библиотека довольно близки к к минимально возможному размеру. Текущая наиболее часто используемая версия языка, c99, принесла много новых возможностей, многие из которых совершенно неизвестны большинству программистов на C (в более старых спецификациях, очевидно, тоже есть свои темные уголки).

Читать далее


Go 1.20 и арена памяти

Одной из революционных особенностей Go в сравнении с другими компилируемыми языками стала сборка мусора. В то же время она может привести к потере производительности при передаче контроля процессу управления памятью, но альтернативного механизма в Go представлено не было. Начиная с Go 1.20 появляется поддержка экспериментального решения для управления памятью, которое позволяет совместить безопасное выделение динамической памяти и уменьшить влияние интегрированного в скомпилированный код управления памятью на производительность приложения. В этой статье мы рассмотрим основные аспекты использования Memory Arena в Go 1.20.

Читать далее


5 полезных паттернов параллельного программирования в Gо

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

Читать далее


Разбираем шаблоны проектирования

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

Читать далее


Скучный Python: повышаем качество кода

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

Читать далее


Объект многоточие в Python

В этой статье мы подробнее рассмотрим объект многоточия, где можно использовать его в повседневной практике программиста, и какие известные пакеты Python используют его.

Читать далее


Функции Python — это объекты первого класса

Их можно присваивать переменным, хранить в структурах данных, передавать в качестве аргументов другим функциям и даже возвращать в качестве значений из других функций. Интуитивное понимание этих понятий значительно облегчит понимание таких продвинутых функций Python, как лямбды и декораторы. А также поможет вам продвинуться на пути к техникам функционального программирования. В этом руководстве я приведу ряд примеров, которые помогут развить это интуитивное понимание.

Читать далее


Декораторы Python: пошаговое руководство

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

Читать далее


Разработка real-time приложений с Python и WebSocket

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

Читать далее


Чтобы ускорить работу Numba и кода NumPy, нужно понять, как работают процессоры

В этой статье мы:

  • Рассмотрим простую задачу обработки изображений.
  • Попытаемся (поначалу безуспешно) ускорить ее с помощью Numba.
  • Рассмотрим, почему современные процессоры такие быстрые, и каковы возможности компиляторов.
  • Опираясь на полученные знания, мы скорректируем наш код так, чтобы он выполнялся в 25 раз быстрее по сравнению с первоначальной версией.

Читать далее


Современный способ глубокого клонирования объектов в JavaScript

Вы знали, что теперь в JavaScript есть нативный способ делать глубокие копии объектов? Это стало возможным с помощью функции structuredClone, встроенной в среду выполнения JavaScript.

Читать далее


Кастомные хуки в React

Когда я искал свою первую работу в качестве Frontend-разработчика, меня часто спрашивали, умею ли я писать кастомные хуки в React. Тогда я только начинал изучать React и только-только запомнил основы, такие как useState и useEffect. Слово «кастомный хук» для меня было новым и сложным. Но теперь, когда я уже более опытный разработчик, знаю, что это значит и как их использовать.

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

Читать далее


Я пробовал GitHub Copilot, и я в восторге

GitHub Copilot позиционирует себя как «ваш помощник по написанию кода на базе ИИ». Copilot выводит машинное обучение на совершенно новый уровень — он интегрируется с IDE по вашему выбору и предоставляет в ваше распоряжение мощную систему AI-driven кода, обученную на миллиардах строк опенсорсных проектов на GitHub на дюжине с лишним языков.

Читать далее


Clean Architecture

Как многие разработчики, я прекрасно понимаю, насколько важно создавать приложения, которые будет легко поддерживать, расширять и развивать в долгосрочной перспективе. Именно поэтому принципы Clean Architecture (Чистая архитектура) стали неотъемлемой частью моей работы. В этой статье я расскажу о том, почему следование принципам Clean Architecture так важно и какие преимущества эти принципы могут дать.

Читать далее


Управление командой

Зарплата по результатам собеседования — лучший способ сократить отклики на вакансию, а тестовые задания — избыточны

Какой HR (или рекрутер) не сталкивался с этой проблемой? Думаю, что все. Сколько копий сломано на эту тему? Сейчас мы сломаем еще одно! Предполагаю, что сейчас все кадровики начнут кидать в меня тапками. Но умные и опытные вполне себе поймут, что мои тезисы защищают не только интересы разработчиков, но и интересы службы персонала. И вот почему.

Читать далее


Как я провожу технические собеседования за 30 минут

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

Читать далее


Почему оценка задач сломала Agile

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

Читать далее


Настройка и администрирование Linux

Дисковая подсистема в ОС Linux

В сегодняшней статье мы поговорим об устройстве дисковой подсистемы в ОС Linux. Конечно, многие скажут, что на эту тему написано уже множество статей и все и так прекрасно знают, как устроен Линукс и в том числе, как он работает с дисками. Однако, как показывает практика, даже многие администраторы при работе с дисковой подсистемой ограничиваются только начальным разбиением диска при установке операционки. Да и то, с параметрами по умолчанию. Так что я предлагаю подробнее рассмотреть такие вопросы дисковой подсистемы, как: работу с правилами правила системы udev, инструменты для работы с блочными устройствами и планировщики системы ввода/вывода.

Читать далее


Сбор и анализ логов в Linux

Журналирование событий, происходящих в системе является неотъемлемой частью функционала любого серьезного программного обеспечения. Операционная система или приложение должны в обязательном порядке рассказывать о своей жизни: регистрировать входы в систему, сбои, ошибки и другие значительные события. В этой статье мы будем говорить о том, как устроено логирование событий в ОС Linux. В качестве примера будет рассматриваться Ubuntu Linux 22.04, однако в других дистрибутивах основные элементы будут сходными.

Читать далее


Тонкая настройка сети в Linux

Начнем нашу настройку мы с внесения изменений в параметры ICMP. Широковещательные ICMP пакеты могут использоваться для реализации атаки с затоплением. В чем заключается ее суть?

Читать далее


Файловая система BTRFS

Файловая система BTRFS (B-Tree Filesystem) предназначена для работы в Unix-подобных операционных системах. Она была разработана компанией Oracle в 2007 году. BTRFS построена по принципу CoW (Copy on Write), то есть при чтении области данных используется общая копия, в случае изменения данных — создается новая копия. Данная технология используется для оптимизации многих процессов, происходящих в операционной системе.

Читать далее


Тестирование

Почему хорошие разработчики пишут плохие юнит-тесты

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

Читать далее


Пишем чистые тесты на JavaScript с использованием принципов BASIC

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

Читать далее


Как использовать JMeter для тестирования производительности

Apache JMeter — это инструмент для проведения нагрузочного тестирования, представляющий собой десктопное приложение с открытым исходным кодом на базе Java. JMeter позволяет определить, может ли тестируемое веб-приложение удовлетворять требованиям высокой нагрузки или нет. В этом руководстве мы проводим анализ производительности Google.com для 1000 пользователей с использованием различных инструментов тестирования производительности.

Читать далее


Работа с данными и администрирование БД

Резервное копирование и восстановление СУБД PostgreSQL

Резервное копирование является одной из основных задач администрирования баз данных. Отсутствие бэкапа может привести к катастрофическим последствиям при эксплуатации базы данных. Однако недостаточно только настроить регулярное создание резервных копий, необходимо также регулярно проверять созданные копии на способность к восстановлению БД. В этой статье мы поговорим от том, как правильно настраивать резервное копирование в БД PostgreSQL.

Читать далее


Сравнение MySQL и PostgreSQL в 2023 году

PostgreSQL и MySQL — это надежные, безопасные и масштабируемые базы данных, которые существуют уже много лет. Каждая из них имеет уникальные сильные и слабые стороны, что делает какую‑либо из них более подходящей для конкретных нужд. В этой статье мы проведем их сравнение, чтобы помочь с принятием обоснованного решения.

Читать далее


Знакомимся с архитектурой Apache Kafka

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

Читать далее


Малоизвестные полезные библиотеки Python для анализа данных

В этой статье мы рассмотрим некоторые полезные библиотеки Python для задач обработки данных, с которыми, возможно, вы еще не знакомы. Хотя для задач машинного обучения на ум приходят такие библиотеки, как pandas, numpy, scikit-learn, keras, tensorflow, matplotlib и т.д., но всегда полезно знать о других предложениях Python, особенно если это поможет улучшить ваши проекты.

Читать далее


Анализ и проектированием систем

Проектирование архитектуры для микросервисов с использованием gRPC

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

Читать далее


Архитектура высоконагруженных телеграм-ботов на Python

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

Читать далее


Архитектурные антипаттерны в микросервисах и как их избежать

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

Читать далее


Docker и сети

Сейчас без преувеличения можно сказать, что контейнеризация прочно вошла в нашу жизнь. Контейнеры используются в различных программных продуктах, начиная от микросервисов и заканчивая решениями ИБ, такими как песочницы. Однако, контейнеры не были бы столь удобным инструментом построения распределенной архитектуры, если бы они не могли взаимодействовать между собой, а также обмениваться данными с внешними сетевыми ресурсами. В этой статье мы подробно рассмотрим механизмы, позволяющие контейнерам работать с сетями.  

Читать далее


Математика

Искусство прогнозирования: погружение в Марковские цепи

Особенно интересным применением Марковских цепей является их использование в области компьютерной графики и киноиндустрии. Благодаря этой модели можно сгенерировать реалистичные анимации и эффекты спецэффектов в кино. Также Марковские цепи используются в обработке естественного языка и генерации текстов.

В данной статье мы рассмотрим основы Марковских цепей, а также реализуем Марковские цепи на Python.

Читать далее


Алгоритмы быстрого возведения в степень

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

Возведение числа в степень является одной из основных операций в математике. Что вообще такое возведение в степень? Как нам известно еще со школы — это многократное умножение числа на себя. Но проблема кроется в том, что при возведении больших чисел в очень большие степени вычисления могут занять много времени.

Читать далее


Для начинающих

Самые распространенные логические ошибки

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

Читать далее


Основы операционных систем

Цель данной статьи — разобраться в основах операционных систем. Мы рассмотрим то, что делает ОС достаточно функциональными и эффективными, поговорим об их истории и технологиях. Статья будет интересна новичкам, которым интересно разобраться в основах ОС.

Читать далее


10 игр для изучения JavaScript

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

Читать далее


Roadmap для изучения Java

В статье я перечислю ряд ресурсов вместе с описанием их содержания. Но по большому счету процесс обучение Java делится на 3 этапа: основы Java, шаблоны проектирования и производительность Java.

Читать далее


Принципы ООП в примерах для начинающих

Как создатель и руководитель курсов по C# я вижу, что часто у людей, начинающих изучать этот язык, принципы Объектно-Ориентированного Программирования вызывают затруднения в понимании. А так как один из лучших способов что-то понять, это посмотреть применение на примерах, то я решил написать статью с примерами принципов. Рекомендую найти какую-нибудь статью или книгу, где прочитать основную теорию, а в этой статье уже посмотреть примеры применения этой теории, чтобы понять её лучше.

Читать далее


Исчерпывающее руководство по различным типам API

API (Application Programming Interface, программный интерфейс приложения), является жизненно важным компонентом в современном ландшафте разработки программного обеспечения, обеспечивая строительные блоки для взаимодействия приложений друг с другом. В этой статье рассмотрим пять основных типов API: REST, SOAP, WebSocket, gRPC и GraphQL, чтобы получить более четкое представление об их функциях, особенностях и идеальных сценариях использования.

Читать далее


Научно-популярное

Зачем нам нужны колонии за пределами Земли

В последнее время занимаюсь все больше языковыми моделями и тем, что сейчас принято называть искусственным интеллектом. Ощущаю себя на передовом крае технологии. И часто задумываюсь о том, что нас, людей, движет вперед? Поэтому, сегодня захотелось поговорить на отвлеченную тему, а именно об освоении космоса. Хочу заранее предупредить, что не являюсь специалистом в данной области. Многое из того, что будет сказано в статье, не более, чем гипотезы. Так что, не судите строго. Со своей стороны могу гарантировать, что в статье будет несколько небанальных моментов, о которых вы возможно не слышали. Надеюсь, вам будет интересно.

Читать далее


Мы живем в компьютерной симуляции. Мнение программиста

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

В этой статье я буду ссылаться на некоторые научные данные, на случаи из моей жизни и рассказы людей, которым я доверяю.

Читать далее

Большой дайджест: лучшие статьи за 2023 год в блоге OTUS на Хабр