Как стать автором
Обновить
3
0
Герман Цветков @NihtRaven

Программист низкоуровнего ПО

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

Пишем мультиметоды из Lisp в С++

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


В статье разберёмся что такое мультидиспетчеризация и как её можно воссоздать на С++

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

Использование final для повышения производительности в C++

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

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

Читать далее
Всего голосов 22: ↑16 и ↓6+14
Комментарии19

Библиотека Pygame / Часть 1. Введение

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

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

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

Staff Engineer в Booking.com и основатель Getmentor.dev о практиках найма в зарубежные компании

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

 Компания Geekfactor cовместно с Getmentor.dev проводит программу подготовки к трудоустройству в зарубежные стартапы (бесплатно помогаем подготовиться к интервью и показываем резюме классным компаниям) — почитать о ней подробней и зарегистрироваться можно тут. Первый бесплатный вебинар с экспертами программы пройдёт уже завтра - 2-го ноября. Сегодня же мы решили поговорить с основателем Getmentor Георгием Могелашвили (aka glamcoder) про его опыт в сфере найма как со стороны кандидата, так и со стороны нанимающего.

Как нанимают за рубеж?
Всего голосов 8: ↑5 и ↓3+3
Комментарии1

Создание и использование динамических библиотек в Rust

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

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

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

Особенности работы с POSIX-сигналами

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

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

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

DAM. Как работать с docker на суше, а не в облаке

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

В статье хочу познакомить читателя с идеей, что образы docker - это такие же простые приложения, как apt пакеты. А утилита DAM (Docker Application Manager) - пример их пакетного менеджера.

Статья может быть полезна:
- тем, кто работает с docker на автономных системах или с ограниченным доступом к интернет;
- кому нравится идея - один пакетный менеджер для разных архитектур и операционок;
- кто пробует запихать свое легаси с linux дистрибутива в контейнеры и контролировать его обновление;
- или интересна тому, кто просто проектирует микросервисные архитектуры

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

От стесняшки до архитектора: какими бывают DevOps и как стать одним из них

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

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

Индивидуальный план развития →
Всего голосов 13: ↑5 и ↓8-2
Комментарии6

Быстрый, мощный интерфейс на Python

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

Dear PyGui принципиально отличается от других фреймворков GUI Python. Рендеринг на GPU, более 70 виджетов, встроенная поддержка асинхронности — это лишь некоторые возможности Dear PyGui. Руководством по работе с этим пакетом делимся к старту курса по разработке на Python.

Читать далее
Всего голосов 54: ↑51 и ↓3+57
Комментарии48

Java. Abstract Factory Pattern in Game Server

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

Абстрактная фабрика - это шаблон проектирования, который позволяет создавать семейства связанных объектов без указания их конкретных классов.

Проблема

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

Семейство сопутствующих игровых вещей, например: chest + unit + hero.

Несколько игровых событий. Например, продукты Chest + Unit + Hero доступны в следующих ивентах: Pirate, Space, Default.

Нам нужен способ создавать отдельные игровые предметы, чтобы они соответствовали другим предметам из того же ивента. Игрокам очень не нравится, когда они видят скины из разных ивентов.

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

Решение

Первое, что предлагает шаблон «Абстрактная фабрика» - это явное объявление интерфейсов для каждого отдельного игрового предмета из ивента (например, сундук,  юнит или герой). Затем вы можете заставить все варианты предметов следовать этим интерфейсам. Например, все варианты сундуков могут реализовывать интерфейс Chest; все варианты юнитов могут реализовывать интерфейс Unit и так далее.

Следующим шагом будет объявление абстрактной фабрики - интерфейса со списком методов создания для всех предметов, входящих в ивент (например, createChest, createUnit и createHero). Эти методы должны возвращать абстрактные типы продуктов, представленные интерфейсами, которые мы извлекли ранее: Chest, Unit, Hero и так далее.

Читать далее о абстрактной фабрике
Всего голосов 3: ↑2 и ↓1+2
Комментарии1

10 топовых плагинов для IntelliJ IDEA, которые ты не должен пропустить

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

Хотя IntelliJ IDEA является полноценной IDE (Интегрированная среда разработки), вы наверняка захотите ее персонализировать. В JetBrains Marketplace есть множество плагинов с полезными функциями, которые могут удовлетворить ваши личные или деловые потребности.

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

Напоминаем, что все плагины можно установить через Настройки/Параметры | Плагины или на вкладке Плагины на экране приветствия.

Погнали!
Всего голосов 21: ↑16 и ↓5+13
Комментарии5

Я подарю тебе маленькую вселенную

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

CyberHeart


Эстетика навесного монтажа обладает особой притягательной силой. Есть в этом что-то одновременно и от скульптуры, и от handcraft ювелирки. Вот и у меня давно "чесались руки" собрать какой-нибудь незамысловатый но симпатичный электронный гаджетик в таком стиле. И тут же хочется добавить: "… так что, как только я сложил вместе рамку и сердечко, мое воображение немедленно дорисовало все остальные компоненты и мне ничего не оставалось, кроме как соединить их воедино". Но нет. В действительности затея эта пылилась у меня в столе почти десяток лет, пока не дождалась неожиданного в своей простоте "инсайта", вдохновившего меня доделать некогда задуманное.

Итак, все началось почти декаду назад...
Всего голосов 22: ↑22 и ↓0+22
Комментарии14

[Личный опыт] «Разработчики не читают польские контракты, и очень зря». IT-инженер в Польше: документы, подводные камни

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

8000 километров, 5 часовых поясов — и вот за окном не Красноярск, а Варшава. Мы рассказывали, как тут живётся, а теперь поговорим, как работается в Польше. Попросили IT-специалистку рассказать про свой опыт переезда и работы в Варшаве: какие документы потребуются и какие могут быть подводные камни при переезде. Передаем ей слово!




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

Проводим нагрузочное тестирование скоростных USB-библиотек для STM32F103C8T6

Время на прочтение10 мин
Количество просмотров4.5K
В предыдущей статье я показывал предельную скорость шины USB у микроконтроллера STM32F103 со штатной библиотекой MiddleWare. В комментариях мне показали сразу две самодельных библиотеки, выжимающих из USB FS все соки. Но автор одной из библиотек высказал мысль, что быстро-то они работают быстро, а насколько надёжно – не ясно. Он считал, что было бы полезно провести нагрузочное тестирование с какими-то полезными данными. Только если они не потеряются и не исказятся, можно будет сказать, что библиотеки имеют право на жизнь.



Само собой, я еле дождался выходных, чтобы провести проверки. Давайте рассмотрим результаты испытаний. А чтобы было интересней, попутно рассмотрим технологию отображения переменных «на лету», без остановки процессорного ядра. Ну, и технологию визуальной отладки elf-файлов, собранных пакетными компиляторами.
Читать дальше →
Всего голосов 18: ↑17 и ↓1+26
Комментарии5

Фриланс-разработка электроники. Что, Как и Зачем?

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

▍Как все начиналось


Начну немного издалека, чтобы было понятно с чего все изначально началось.

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

После окончания ВУЗа, работаю по сей день ведущим инженером на одной из атомных станций. Работа веселая и ответственная, но дома надо чем-то занять вечера, не пиво же пить и лежать у телевизора. Для поддержания на должном уровне своей квалификации освоил Ардуино, Attiny, STM, ESP32. Вспомнил давно забытую Java и C++. Освоил заново Easyeda, Altium, Eagle. Свободно работаю во многих программах CAD моделирования. Теоретически я подготовлен хорошо, но нужна была практика в электронике и желательно по очень высоким стандартам.
Читать дальше →
Всего голосов 78: ↑71 и ↓7+85
Комментарии123

Embedded Linux в двух словах. Первое

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

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

Платформой послужит плата BeagleBone Black с процессором производства Техасских Инструментов AM3358 и ядром Arm Cortex-A8, и, чтобы не плодить мигающие светодиодами мануалы, основной задачей устройства будет отправка смайлов в топовый чат, широко известного в узких кругах, сайта,  в соответствии с командами от смайл-пульта. Впрочем, без мигания светодиодами тоже не обошлось.

Читать далее
Всего голосов 34: ↑32 и ↓2+43
Комментарии15

Прямоугольные тайловые миры

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

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

Огромное множество игр на самом деле содержат тайлы - так просто проще представлять игровой мир. Такая упорядоченность помогает геймдизайнерам строить игровые механики, упрощает жизнь художников и делает код программистов понятнее. Самих видов тайлов тоже огромное количество - сегодня поговорим о прямоугольных и изометрических.

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

Ontol: подборка видео-лекций и каналов для продвинутых программистов

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

Недавно на HackerNews обсуждали видео и каналы, где можно поучиться продвинутому программированию. Под катом — подборка из 30 полезняшек.

В перерывах между полетами на реактивном ранце и переводами материалов Y Combinator, я делаю проект «Ontol» — такое место в сети, где максимальная концентрация полезного, апгрейдящего мировоззрение материала (ценного на горизонте 10+ лет, например, такого), которым можно делиться бесплатно в 1 клик. (канал в телеграм: t.me/ontol)

Вот мои предыдущие бесплатные образовательные подборки:


Всего голосов 27: ↑25 и ↓2+37
Комментарии1

Разработка firmware на С++ словно игра в бисер. Как перестать динамически выделять память и начать жить

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

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

Читать далее
Всего голосов 37: ↑35 и ↓2+48
Комментарии87

C и C++: межъязыковые интерфейсы

Время на прочтение11 мин
Количество просмотров16K
Как известно, C и C++ — это родственные языки между которыми есть много общего. Но их пути, с годами, расходятся всё сильнее. В общих чертах дело обстоит так: код, написанный на одном из этих языков, не может быть скомпилирован под видом кода, написанного на другом. Этому мешает множество больших и маленьких различий между языками. Причём, речь идёт не только о синтаксических различиях. Некоторые общие синтаксические конструкции могут иметь разную семантику. Поэтому обычно нет никакого смысла в том, чтобы компилировать код, написанный на C, с помощью C++-компилятора. Не стоит доверять тем, кто утверждает обратное.

Правда, есть одна сфера, где обычно наблюдается согласие между C и C++. Это — ABI (Application Binary Interface, двоичный интерфейс приложений). Структуры данных и функции одного языка могут быть, в той или иной мере, использованы в другом языке. C и C++, кроме того, достаточно сильно пересекаются в области спецификаций интерфейсов, вследствие чего один и тот же заголовочный файл можно использовать из кода, написанного на обоих языках.



В этом материале я постараюсь собрать то общее, что есть у C и C++ и предложу некоторые рекомендации, которые позволят достаточно хорошо сочетать эти языки. Это, правда, будет всего лишь рассказ, иллюстрирующий точку зрения C-программиста, который хочет создавать интерфейсы для C++.
Читать дальше →
Всего голосов 31: ↑25 и ↓6+37
Комментарии11

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Embedded Software Engineer
Middle