Pull to refresh
2
0.1

Пользователь

Send message

Алгоритм генерации столбцов (Column Generation)

Level of difficulty Medium
Reading time 16 min
Views 1.7K

Генерация столбцов - подход к решению задач смешанного линейного программирования (MIP) с большим кол-вом переменных или столбцов.

В статье представил теоретическую предпосылку, схему алгоритма и python реализацию подхода. В практической части рассмотрел решение двух задач: задача планирования расписания и задача раскроя.

Читать далее
Total votes 6: ↑6 and ↓0 +6
Comments 0

Выявление ошибок в работе с памятью в C и C++: Сравниваем Sanitizers и Valgrind

Reading time 24 min
Views 4.3K

В этой статье вашему вниманию представлено сравнение двух инструментов для поиска ошибок в работе с памятью в программах, написанных на memory-unsafe (небезопасных при работе с памятью) языках — Sanitizers и Valgrind. Эти два инструмента работают совершенно по-разному. Поэтому, хоть Sanitizers (разработанный инженерами Google) имеет ряд преимуществ перед Valgrind, у каждого из них есть свои сильные и слабые стороны. Следует сразу отметить, что проект Sanitizers имеет название во множественном числе, потому что он состоит из нескольких инструментов, которые мы рассмотрим в этой статье в совокупности.

Читать далее
Total votes 11: ↑10 and ↓1 +9
Comments 2

Правило трех и пяти в C++: что это такое и зачем они нужны?

Level of difficulty Easy
Reading time 5 min
Views 19K

Привет, Хабр!

Сегодня я хочу поговорить о двух правилах С++: правиле трех и правиле пяти.

Правильное понимание этих правил способно уберечь код от утечек и неопределенных поведений.

Читать далее
Total votes 37: ↑27 and ↓10 +17
Comments 10

Радикальная асинхронщина

Level of difficulty Medium
Reading time 11 min
Views 9.9K

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

Читать далее
Total votes 20: ↑17 and ↓3 +14
Comments 53

Итак, вы унаследовали старую кодовую базу на C++. Что дальше?

Level of difficulty Medium
Reading time 21 min
Views 14K

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

Теперь вы отвечаете за кодовую базу на C++. Она большая, сложная и своеобразная; достаточно слишком долго на неё посмотреть, как она начинает разваливаться разными интересными способами. Иными словами, это легаси.

Но баги всё равно как-то нужно устранять, а ещё добавлять новые фичи. То есть вам нельзя просто закрыть на неё глаза или что ещё лучше, взорвать её динамитом. Она важна для компании. По крайней мере, для тех, кто платит вам зарплату. А значит, важна для вас.

И что делать теперь?

Не волнуйтесь, у меня такое случалось очень много раз и в разных компаниях (кто-то язвительный может спросить: а разве кодовые базы на C++ бывают какими-то другими?), выход есть, он не особо сложен и поможет вам действительно устранять баги, добавлять фичи, а то и когда-нибудь переписать её.

В этой статье я расскажу о том, что оказалось полезным для меня, и о том, чего стоит всячески избегать.
Читать дальше →
Total votes 71: ↑70 and ↓1 +69
Comments 26

Полезные расширения VScode для работы с документацией

Reading time 2 min
Views 10K

Как правило, работа с документацией — это последний этап любого проекта, связанного с данными (data science, data visualization и т. д.), проектированием и разработкой ПО. Речь о создании и редактировании библиотек, файлов README, обучающих материалов и др. Среди всех преимуществ VScode — его уникальная экосистема расширений. И особенно впечатляют те, что помогают работать с документацией. В этой статье поделюсь самыми полезными из них.

Читать далее
Total votes 24: ↑22 and ↓2 +20
Comments 8

SDR приемник GPS на микроконтроллере

Level of difficulty Medium
Reading time 28 min
Views 18K

В этой статье я расскажу о том, как я делал самодельный SDR GPS приемник на микроконтроллере. SDR в данном случае означает, что приемник не содержит готовых GPS-модулей или специализированных микросхем для обработки GPS сигналов - вся обработка "сырых" данных выполняется в реальном времени на микроконтроллере (STM32 или ESP32).
Зачем я это сделал — просто Just for fun, плюс - получение опыта.

Читать далее
Total votes 162: ↑161 and ↓1 +160
Comments 160

Шпаргалка для алгособеса — алгоритмическая сложность, структуры данных, методы сортировки и Дейкстра

Level of difficulty Medium
Reading time 33 min
Views 88K

Привет, Хабр!

Так уж повелось, что любой уважающий себя работодатель перенимает передовые^✻ методики FAANG — по этой причине практически во всех IT-собесах есть она: секция алгоритмов. Кто-то ей рад, кто-то не очень, но секция есть и уходить пока не планирует. Поэтому нужно закатать рукава и достойно встретить суровую реальность.

Читать далее
Total votes 216: ↑214 and ↓2 +212
Comments 77

Настройка C++ проекта c OpenMP. Обертывание С++ для Python с помощью pybind11 и CMake

Level of difficulty Medium
Reading time 10 min
Views 3K

В статье описан практический пример настройки проекта на языке C++ с использованием, в качестве примера, библиотеки для многопоточных вычислений OpenMP , а также дальнейшее обёртывание для использования в проектах написанных на Python при помощи библиотеки Pybind11. В качестве системы сборки используется CMake. Основное внимание уделено именно сборке проекта. В качестве инструмента обёртывания используется библиотека pybind11, в качестве системы сборки CMake.

Читать далее
Total votes 6: ↑6 and ↓0 +6
Comments 4

Что нам недодали в C++

Level of difficulty Medium
Reading time 12 min
Views 23K

C++ последний десяток с лишним лет стремительно развивается. Тем не менее в наших кодовых базах все еще присутствуют многочисленные helper-файлы и классы, которые помогают восполнить пробелы в стандартной библиотеке языка. Как же так вышло, что там в этих ваших helper-файлах, и когда это закончится?

Читать далее
Total votes 85: ↑83 and ↓2 +81
Comments 177

Малоизвестные и интересные особенности C и C++

Level of difficulty Medium
Reading time 43 min
Views 43K

В C и C++ есть особенности, о которых вас вряд ли спросят на собеседовании (вернее, не спросили бы до этого момента). Почему не спросят? Потому что такие аспекты имеют мало практического значения в повседневной работе или попросту малоизвестны.

Целью статьи является не освещение какой-то конкретной особенности языка или подготовка к собеседованиям, и уж тем более нет цели рассказать все потайные смыслы языка, т. к. для этого не хватит одной статьи и даже книги. Напротив, статья нужна для того, чтобы показать малоизвестные и странные решения, принятые в языках C и C++. Своего рода солянка из фактов. Вопрос “что делать с этими знаниями?” я оставляю читателю.

Если вы, как и я, любите и интересуетесь C/C++, и эти языки являются неотъемлемой частью вашей жизни, в том числе и его углубленного изучения, то эта статья для вас. По большей части я надеюсь, что эта статья сможет развлечь и заставить поработать головой. И если получится, рассказать что-то, чего вы, возможно, еще не знали.

Читать далее
Total votes 161: ↑160 and ↓1 +159
Comments 61

Эльфы и пингвины: что такое ELF и как он работает в Linux?

Level of difficulty Easy
Reading time 37 min
Views 20K

image


Всем привет! С вами как всегда я, Аргентум. Сегодня я расскажу и поведаю вам древние тайны, которые хранят горные старцы-сисадмины — тайны об эльфах, и как они взаимодействуют с древним народцем пингвинов. Дамы и господа, встречайте — статья о работе ELF и двоичных файлов в Linux!


Что такое ELF? Чем он отличается от PE в Windows? И многие другие ответы на ваши вопросы.


Перед тем как погрузиться в технические детали, будет нелишним объяснить, почему понимание формата ELF полезно. Это позволяет изучить внутреннюю работу операционной системы. Когда что-то пошло не так, эти знания помогут лучше понять, что именно случилось, и по какой причине. Также возможность изучения ELF-файлов может быть ценна для поиска дыр в безопасности и обнаружения подозрительных файлов. И наконец, для лучшего понимания процесса разработки. Даже если вы программируете на высокоуровневом языке типа Go или Rust, вы всё равно будет лучше знать, что происходит за сценой.


Итак, зачем изучать ELF?


  • Для общего понимания работы операционной системы
  • Для разработки ПО
  • Цифровая криминалистика и реагирование на инциденты (DFIR)
  • Исследование вредоносных программ (анализ бинарных файлов)
Читать дальше →
Total votes 58: ↑52 and ↓6 +46
Comments 22

11lc — инновационный компилятор для нового языка программирования

Reading time 23 min
Views 17K
Данная статья посвящена находящемуся на стадии проектирования компилятору 11lc. В ней перечисляются наиболее яркие особенности этого компилятора.

Отсутствие скрытой неэффективности


Это свойство скорее языка программирования 11l, нежели компилятора. Однако оно настолько важно и настолько отличает язык 11l от C++, D или даже Nim, что я решил разобрать его подробно в данной статье.

Уолтер Брайт, создатель языка D, писал:
Templates in C++ have evolved from little more than token substitution into a programming language in itself. Many useful aspects of C++ templates have been discovered rather than designed.

Так вот, как я считаю, нечто похожее произошло и с семантикой перемещения (move semantics). И в C++ и в D она появилась достаточно поздно, и если бы эти языки проектировались с опорой на семантику перемещения изначально, то в них было бы гораздо меньше скрытой неэффективности (hidden inefficiency). О чём идёт речь? Рассмотрю это на примере C++.
Читать дальше →
Total votes 39: ↑36 and ↓3 +33
Comments 57

Современный С++ в разработке девайсов

Level of difficulty Medium
Reading time 12 min
Views 16K

Привет, Хабр.

Меня зовут Андрей Белобров. Я тимлид одной из команд, разрабатывающих приложения для умных девайсов Сбера.

На прошедшей недавно конференции Салют, OS DevConf! я выступил с докладом, в котором рассказал, как мы с командой разрабатываем приложения на С++ для умных устройств с виртуальным ассистентом. А также о том, как инструменты статического и динамического анализа помогают поддерживать единый стиль и высокое качество кода в проекте.

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

Все наши устройства должны уметь взаимодействовать c виртуальным ассистентом, проигрывать музыку, обновлять прошивку, выполнять аутентификацию пользователя и т.д.. Такая функциональность реализована в едином для всех платформ приложении, работающем в пользовательском режиме на каждом из наших устройств, будь то умная колонка, ТВ-приставка или умный телевизор.

Язык С++ позволяет писать эффективный и переносимый между различными платформами код, поэтому выбор языка программирования для нашего приложения был очевиден. При этом язык известен своей сложностью и возможностью выполнить одну и ту же задачу несколькими способами.
Чтобы успешно разрабатывать большой проект на языке C++, необходимо хорошо настроить процесс разработки в команде (а это несколько десятков инженеров). Также можно значительно осовременить разработку на C++ за счет использования подходящих инструментов статического и динамического анализа, и правильной интеграции их в процесс разработки.

Читать далее
Total votes 28: ↑25 and ↓3 +22
Comments 36

Моя б̶е̶з̶умная колонка или бюджетный DIY голосового ассистента для умного дома

Level of difficulty Easy
Reading time 7 min
Views 27K

В свете широкого внедрения систем домашней автоматизации возникает потребность в более естественном взаимодействии с «умным домом». Как средство натурального взаимодействия между человеком и машиной, голосовой интерфейс заслуженно занимает высокую популярность. В данной статье я поделюсь своим опытом создания бюджетного автономного голосового ассистента для систем умного дома.
Читать дальше →
Total votes 87: ↑87 and ↓0 +87
Comments 33

System Design 101

Level of difficulty Medium
Reading time 42 min
Views 66K



О сложных системах простыми словами.


В шпаргалке на высоком уровне рассматриваются такие вещи, как протоколы коммуникации, DevOps, CI/CD, архитектурные паттерны, базы данных, кэширование, микросервисы (и монолиты), платежные системы, Git, облачные сервисы etc. Особую ценность представляют диаграммы — рекомендую уделить им пристальное внимание. Полагаю, шпаргалка будет интересна всем, кто хоть как-то связан с разработкой программного обеспечения и, прежде всего, веб-приложений. Буду признателен за помощь в уточнении/исправлении понятий, терминологии, логики/алгоритмов работы систем (в рамках того, что по этому поводу содержится в оригинале), а также в обнаружении очепяток.


Выражаю благодарность Анне Неустроевой за помощь в редактировании материала.


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


System Design (сборник на английском языке).

Читать дальше →
Total votes 79: ↑79 and ↓0 +79
Comments 17

Создаем свой VPN с защищенным от блокировок протоколом AmneziaWG, или WireGuard на максималках

Reading time 4 min
Views 140K


Всем привет! Возможно уже совсем скоро разные новостные и  IT-ресурсы будут подчищать информацию о способах обхода блокировок. А пока этого не случилось, запасаемся полезными гайдами и разворачиваем свои собственные VPN с защищенными от блокировок протоколами. Расскажу как это сделать, как изменилась Amnezia и как мы защитили WireGuard от блокировок.

Читать далее
Total votes 115: ↑113 and ↓2 +111
Comments 123

Behavioral-интервью в IT: что это и как подготовиться? (вопросы с ответами для Software Developer + грамматика)

Reading time 8 min
Views 9.2K

Многоэтапный процесс интервью в IT иногда занимает до 40 дней, но как правило большинство кандидатов отваливаются именно после одного из первых этапов отбора - behavioral interview.

Обычно behavioral questions включают в себя вопросы на следующие темы...

Читать далее
Total votes 24: ↑20 and ↓4 +16
Comments 2

Стань героем мемов! Делаем гифки со своим лицом с помощью нейросетей

Level of difficulty Medium
Reading time 5 min
Views 15K

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

Читать далее
Total votes 32: ↑29 and ↓3 +26
Comments 6

Магия степеней двойки, или Запуск кучи docker контейнеров

Level of difficulty Medium
Reading time 8 min
Views 7.5K

Праздник «день программиста» отмечается в 256-й день года, а это 2⁸, т.е. два в степени восемь. Это не просто так — на степенях двойки многое завязано в компьютерах и программировании, они повсюду. Настолько повсюду, что иногда даже слишком.

Благодаря празднику я вспомнил, что давно хотел написать эту статью, и поделиться несколькими техническими байками, где числа, являющиеся степенями двойки, вставляли «палки в колёса» мне или моим коллегам.

Читать байки
Total votes 15: ↑14 and ↓1 +13
Comments 9

Information

Rating
2,498-th
Registered
Activity