Как стать автором
Обновить
3
0.1
Игорь Баклыков @IGR2014

Software engineer

Отправить сообщение

Дорожная карта навыков разработчика на C++

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров63K

Джеймс Гослинг как-то сказал, что Java — это C++, из которого убрали все пистолеты, ножи и дубинки, однако практика показывает, что «ножи и дубинки» становятся классным инструментом в руках опытных разработчиков. В общем, немалая часть проклятий в адрес C++ объясняется элементарным «вы просто не умеете его готовить». Мы в «Лаборатории Касперского» умеем готовить «плюсы» и поэтому любим их. C++ — низкоуровневый язык, который позволяет работать с железом и писать быстрый код и при этом содержит массу возможностей. В экосистеме «плюсов» куча проработанных паттернов, best practices и готовых библиотек под разные задачи. Язык динамично развивается — но сохраняет обратную совместимость. 

В этом посте мы с помощью карты покажем, какие навыки и знания нужны разработчику на C++. Естественно, разбирать путь развития «плюсистов» будем на собственном примере — тем более что у нас в «Лаборатории Касперского» много очень разных проектов с отличающимися задачами. Однако наша карта по большей части универсальна и будет полезна всем, кто хочет развиваться в С++-разработке.

Отправляемся
Всего голосов 34: ↑26 и ↓8+30
Комментарии94

Понимаем обычное дерево отрезков

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров13K

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

Читать далее
Всего голосов 20: ↑19 и ↓1+24
Комментарии4

Как сделать простой UPS для NAS

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров24K

Как известно, большинство UPS подключаются между розеткой 220В и NAS. При этом ничто не мешает разместить UPS внутри корпуса NAS или хотя бы позаботиться об этом заранее.

Рассмотрим вариант дизайна такого UPS, который можно разместить внутри корпуса для тех NAS, которые для работы требуют только одного напряжения питания 12В.

Всё ещё хочешь собрать UPS?
Всего голосов 66: ↑65 и ↓1+80
Комментарии89

Разбираемся в MAVLink. Часть 1

Время на прочтение8 мин
Количество просмотров61K
Для обмена данными многие современные дроны, собираемые энтузиастами, коммерческие или даже промышленные, используют протокол MAVLink. Я бы хотел поделиться своим опытом работы с этим протоколом в этой, а может и в последующих статьях.

image
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии13

Фотографии кристалла процессора Intel 8008, который дал жизнь первым ПК

Время на прочтение3 мин
Количество просмотров47K

Фотография кристалла микропроцессора Intel 8008 под микроскопом (см. фотографию большего разрешения 3565×2549)

Энтузиаст микропроцессоров и зарядных устройств Кен Ширрифф (Ken Shirriff) хорошо известен в сообществе электролюбителей. Он раньше публиковал обстоятельные хорошо иллюстрированные репортажи с разбором крохотного зарядного устройства для iPhone, десятка других зарядных устройств, среди которых великолепное изделие Apple даже не самое лучшее. В 2013 году он провёл реверс-инжиниринг ALU в процессоре Z80 по его фотографиям (это процессор из Osborne 1, TRS-80 и Sinclair ZX Spectrum).

Сейчас Шеррифф обратил внимание на исторический процессор Intel 8008 — первый 8-битный центральный процессор, выпущенный фирмой Intel 1 апреля 1972 года, то есть почти 45 лет назад, по цене $120. Микросхема Intel 8008 позиционировалась для продвинутых калькуляторов, но в итоге нашла своё место в первых персональных компьютерах.
Читать дальше →
Всего голосов 40: ↑39 и ↓1+38
Комментарии20

C++ по итогам 2022-го

Время на прочтение15 мин
Количество просмотров29K

Должен признать, что в некоторые из предыдущих лет C++ мог ощущаться немного «скучным» и «стабильным». Новые фичи, новый стандарт каждые три года, встречи, конференции... обычная жизнь (не считая некоторых дополнительных событий с в мире, экономике и эпидемиологической ситуации). Прошедший год отличается, потому что выглядит как «переломный» в истории C++... и кто знает, куда это заведёт нас.

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

Читать далее
Всего голосов 38: ↑36 и ↓2+47
Комментарии23

Поддержка C++ на avr в gcc

Время на прочтение9 мин
Количество просмотров39K
Компилятор avrgcc поддерживает C++, однако в его поставку не входит ни стандартная библиотека, ни реализация ABI: служебных функций, вызовы которых вставляет сам компилятор. В результате люди пытаются реализовать те части, которые им нужны, самостоятельно и зачастую делают это не очень хорошо. Например, часто предлагается отстрелить себе ногу определив пустую функцию __cxa_pure_virtual(void) {} или подложить себе грабли, написав заглушки для __cxa_guard_acquire, __cxa_guard_release и __cxa_guard_abort. В данной статье я предлагаю разобраться, чего не хватает для счастья, где это взять или как написать.
Я знаю, что немло людей считает, что C++ на микроконтроллере не нужен. Их я прошу прочитать последний раздел статьи перед тем, как писать комментарии.
Читать дальше →
Всего голосов 36: ↑32 и ↓4+28
Комментарии33

Корутины C++20 и многозадачность на примере контроллеров stm32

Время на прочтение12 мин
Количество просмотров16K

На Хабре уже неоднократно появлялись статьи, посвященные применению современных стандартов C++ при программировании микроконтроллеров, в том числе и появившихся в c++20 корутин.

Предлагаю спуститься со сложных решений типа целой операционной системы и рассмотреть вопросы примитивного планирования задач с применением сопрограмм.

Читать далее
Всего голосов 22: ↑21 и ↓1+28
Комментарии30

Как я создал собственный 3D движок и игру на нём за 20 месяцев

Время на прочтение5 мин
Количество просмотров37K

Речь идёт о игре Speebot, которая была выпущена в Steam в 2017 году.

Я разрабатывал эту игру с января 2016 года в своё свободное время в одиночку. Мною выполнено всё программирование, дизайн игрового процесса, создание графики и музыки. Кроме того, я написал собственный игровой движок с нуля.

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

Читать далее
Всего голосов 99: ↑99 и ↓0+99
Комментарии38

Особенности реализации STL в Clang, GCC и Microsoft С++

Время на прочтение21 мин
Количество просмотров20K

Любая программа состоит из данных и алгоритмов их обработки. Для написания программ на C++ в начале 90-х годов прошлого века Александр Степанов с коллегами разработал библиотеку STL. Я, Михаил Полукаров из команды разработки VK Teams, заглянул под капот этой библиотеки чтобы разобраться, как правильно ей пользоваться, в каких случаях лучше использовать другие библиотеки, а в каких стоит написать что-то своё. 

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

Читать далее
Всего голосов 57: ↑55 и ↓2+75
Комментарии12

Основы рендеринга с wgpu на Rust

Время на прочтение16 мин
Количество просмотров9.9K

В данной статье мы рассмотрим базовую теорию и практику рендеринга с помощью кроссплатформенного графического API wgpu. Данный API основан на стандарте WebGPU и предоставляет удобные, унифицированные и безопасные абстракции для взаимодействия с GPU. Используя wgpu мы инициализируем графическое устройство, создадим графический конвейер и нарисуем треугольник.

Читать далее
Всего голосов 26: ↑26 и ↓0+26
Комментарии4

Операционные усилители. Часть 4: Активный детектор. Умножение и деление на ОУ. Источники питания. Усилители мощности

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров28K

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

В данной публикации цикла мы научимся с помощью ОУ производить операции деления и умножения, находить модуль, определять знак, сравнивать числа и находить наибольшее из них. Для этого мы разберём работу ряда схем на ОУ с «обвязкой» из транзисторов и диодов.
Читать дальше →
Всего голосов 42: ↑40 и ↓2+54
Комментарии91

Домашний веб-сервер для чайников

Время на прочтение14 мин
Количество просмотров266K

Привет, Хабр! Относительно недавно после пары лет перерыва в айти, потраченных на изучение японского языка, мне пришлось срочно обновлять свои знания на работе. Ну знаете, искать возможности исполнить все хотелки начальника, как и положено эникею. Меня ждало много увлекательных открытий, но при этом, как водится, и немало боли и борьбы с непонятками. Docker, контейнеры, реверс DNS и реверс прокси, получение TLS сертификатов. В какой-то момент я наконец дошёл до удобного решения, которым я теперь хочу поделиться.

В своё время домашний сервер очень облегчил бы мне понимание Docker’а, да и удобство работы с ним неслабо бы повысил. Поэтому возникла идея написать эту статью, после прочтения которой любой человек даже с поверхностными знаниями в информационных технологиях сможет поставить себе постоянно доступный домашний сервер на базе Docker Swarm с удобной веб-мордой, простым получением TLS-сертификатов и Heroku-подобным функционалом (для чего будем использовать PaaS CapRover). 

Статья, в общем-то, рассчитана на новичков, обладающих какими-то техническими знаниями — школьников старших классов, студентов и просто любителей — а потому вряд ли будет интересна серьёзным профессионалам.

Читать далее
Всего голосов 24: ↑22 и ↓2+23
Комментарии29

Какая стратегия освобождения памяти используется в C и С++ ядре PVS-Studio?

Время на прочтение5 мин
Количество просмотров4.7K

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

Читать дальше →
Всего голосов 15: ↑11 и ↓4+10
Комментарии2

Анатомия асинхронных фреймворков в С++ и других языках

Время на прочтение20 мин
Количество просмотров43K
Привет! В этой статье я расскажу об устройстве асинхронных движков с корутинами и без них. Для начала сосредоточимся не на конкретном движке, а на том, почему во всех популярных языках программирования появились корутины и чем они так хороши. Это может быть интересно не только C++-разработчикам, но и всем, кто занимается разработкой сетевых приложений или интересуется архитектурой современных фреймворков.

Пройдёмся по разным архитектурам построения серверов — от самой простой синхронной к более интересным, посмотрим на типичную архитектуру корутинового движка, а после окунёмся в дебри C++ и взглянем на самое страшное на примере нашего фреймворка userver.

Пишем синхронный сервер


Представьте, что у вашего сервиса очень маленькая нагрузка — 100 rps, и вам дали задачу написать простой сервер, понятный каждому второму школьнику. У вас получится что-то наподобие следующего:

void naive_accept() {
  for (;;) {
    auto new_socket = accept(listener);

    std::thread thrd([socket = std::move(new_socket)] {
      auto data = socket.receive();
      process(data);
      socket.send(data);
    });

    thrd.detach();
  }
}
Читать дальше →
Всего голосов 56: ↑53 и ↓3+63
Комментарии32

Советы по разработке игр от создателя Civilization Сида Мейера

Время на прочтение14 мин
Количество просмотров32K

В своей книге «Сид Мейер: Жизнь в мире компьютерных игр» знаменитый разработчик рассказывает о ключевых моментах карьеры, много шутит и через всю книгу дает советы и лайфхаки по разработке игр. А в этой статье основные из них — перевод под катом.

Читать далее
Всего голосов 63: ↑63 и ↓0+63
Комментарии27

Кросс-компиляция с Clang – это просто

Время на прочтение15 мин
Количество просмотров22K

Разберемся с кросс-компиляцией при помощи Clang на пальцах, попутно посмотрим на CMake, не оставим без внимания Conan, соберем самый настоящий .deb пакет и конечно же - максимально контейнеризируем и автоматизируем весь процесс. Посмотрим зачем нам тут Clang, и почему иногда не обойтись без него.

Кросс-компилировать
Всего голосов 14: ↑13 и ↓1+16
Комментарии19

3D своими руками. Часть 3: чем дальше в лес, тем меньше дом

Время на прочтение28 мин
Количество просмотров14K

В этой статье мы узнаем что такое камера в 3D пространстве (матрица вида) и как она работает, узнаем как сделать те объекты что дальше - меньшего размера (матрица перспективной проекции). 

Мы продолжим работу над кодом, который у нас получился в финале 2-й части.  И начнем с обсуждения камеры в пространстве (м.б. в 3D игре).

Продолжить обучение
Всего голосов 21: ↑21 и ↓0+21
Комментарии2

Самый по-человечески написанный учебник компьютерной архитектуры наконец-то выходит на русском языке и для RISC-V

Время на прочтение9 мин
Количество просмотров77K

В 2015 году скачивания первого русского издания учебника Харрис & Харрис завалили сайт британской компании Imagination Technologies. Книгу стали использовать в МФТИ, ВШЭ МИЭМ, МГУ, МИЭТ, ИТМО и других вузах. С тех пор вышло еще два издания - для ARM и для MIPS, и вот в январе 2022 года выходит новое - для RISC-V и оно уже доступно для предзаказа.

"Цифровая схемотехника и архитектура компьютера: RISC-V" вероятно станет стандартным учебником в российских вузах, как и источником информации для тех, кто хочет попроектировать процессоры на ПЛИС. Ничего лучшего на рынке нет. Паттерсон-Хеннесси не привязан к курсам по языкам описания аппаратуры и не обсуждает тайминг цифровой логики, а Таненбаум устарел.

Кроме этого, архитектура RISC-V становится билетом в будущее для российских процессорных компаний - Ядро купило Syntacore, Байкал Электроникс инвестировал в CloudBear, Миландр выпустил микроконтроллер с архитектурой RISC-V.

Если же вы не хотите работать в российских компаниях, а хотите пройти интервью на проектировщика чипа в Apple, Intel, NVidia, то и в таком случае учебник Харрисов - это самый эффективный способ начать этот путь.

О Харрисах, содержание и почему RISC-V
Всего голосов 39: ↑33 и ↓6+36
Комментарии41

Она могла стать Первой: история процессорной архитектуры Alpha (часть 1)

Время на прочтение10 мин
Количество просмотров15K

Впервые об архитектуре Alpha я узнал вскоре после обретения своего первого ПК, осенью 2001 года. Это были не слишком свежие (примерно 1997-1998 года) страдания неизвестного автора о платформе AlphaPC, материнской плате удивительной производительности и поражающих возможностей в формате АТХ. С тех пор эта архитектура запала мне в душу, долгое время борясь за место в сердце с не менее прорывным Pentium Pro. Сейчас представители обоих направлений располагаются в коллекции «Digital Vintage» на расстоянии менее 1 см друг от друга.
Читать дальше →
Всего голосов 48: ↑47 и ↓1+62
Комментарии10

Информация

В рейтинге
3 089-й
Откуда
Одесса, Одесская обл., Украина
Дата рождения
Зарегистрирован
Активность