Обновить
529
94.1
Sergei Kushnirenko@dalerank

Люблю (ш)кодить, алгоритмы и старые авто.

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

Сказка про собес наоборот

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели36K

Вы помните свое первое собеседование? Я свое помню отлично, преподаватель дольше обычного гонял мою плис в симуляторе Keil-C, придирался к любой мелочи, докапывался до каждой запятой в коде прошивки. А потом начал гонять по алгоритмам трассировки печатных плат, которые мы должны были проходить только в следующем семестре. Я уже мысленно готовился на допсу, видно же что валит, как и предыдущих двух одногруппников. Но в конце сдачи лабы по проектированию мк преподаватель спросил хочу ли я делать "железное железо для железной дороги?" (с). Студенту второго курса ИТМО, которого кормили родители, и подрабатывавшего разгрузкой вагонов ночами, это было сродни офферу в гугль. С тех пор я много раз побывал с обеих сторон стола, и в качестве испытуемого, и как придирчивый лид (отнюдь этим не горжусь, но и не стыжусь), и как группа поддержки у коллег из соседних отделов. Всегда хотелось надеяться, что наши собеседования - это не таинственные квесты, где каждая задача - это каст сложного заклятия, а ошибки не выкидывают с данжа.

Но сначала сказка о том, как к нам попал Миша: однажды в славном городе Панкт-Сетербург погромист-джедай по имени Михаил отправился на собеседование в компанию "Кодозавры". Он был уверен, что знает все, и даже изучил новейшие фреймворки "NoScript" и "Unreal С--". Как он думал, ничто не может его остановить. Когда Миша пришел на собеседование, его встретил HR-менеджер по имени Анна. Она с улыбкой спросила: "Расскажите, как вы бы пояснили своей бабушке, что такое мьютекс?". Ага, прям с порога наш доблестный HR накинул Мишке затравочный вопрос. Ну а чё, это ж сказка, герои на белых самокатах и все такое...

Налево пойдешь, мидла потеряешь...

Федя, дичь

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели33K

В мире программирования существует огромное количество багов, и если бы каждый баг стал бабочкой, то программеру в раю уже давно оставлена пара полян для развития навыков энтомолога. Несмотря на все совершенства этого мира: компиляторы, pvs‑studio и другие статические анализаторы, юниттесты и отделы QA, мы всегда находим способы преодолеть преграды кода и выпустить на волю парочку новых красивых и удобных видов. Есть у меня txt файлик, которому очень много лет, и куда я складываю интересные экземпляры. Все примеры и действия описанные в статье вымышленные, ни один стажер, джун или студент уволены не были. Hello, World! Where are your bugs?

Hello, World! Where are your bugs?

Когда private, но очень хочется public

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели23K

В 2016 году меня пригласили помочь с разработкой экшн-очков "ORBI", это такие водонепроницаемые очки с несколькими камерами, которые могут стримить 360видео сразу на смартфон, ну а если с ними поплавать, тоже ничего сломаться не должно. (https://www.indiegogo.com/projects/orbi-prime-the-first-360-video-recording-eyewear#/). Собственно моей задачей было написать алгоритм склейки видео потока с четырех камер в одно большое 360* видео, на тот момент задача не очень сложная, но требующая немного специфичных знаний opencv и окружения. Но статья не об этом, потому что теперь это все оберегаемое IP, а про то как мы легальными и не очень средствами языка С++ писали тестовое окружение для используемых классов и соответственно алгоритмов. Да вы скажете, что там такого - сделал гетеры да тестируй себе на здоровье. А если гетера нет или переменная класса спрятана в private секцию и возможность изменить хедер отсутствует. Или вендор либы забыл положить хедеры, и прислал только скан исходников (китайские друзья они такие), а тестировать это надо? Помножив желание написать тесты на утренний кофф и приплюсовав дикий энтузиазм, можно получить очень много ошибок компиляции интересного опыта. Как говорил один мой знакомый лид: "Нет такого кода, который мы не сможем порефакторить, особенно за утренним кофф".

private not public?

Записки ездового кота, разное

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели8.3K

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

Коты на выезде

Соник, который не смог или проклятье четырех девяток

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели5.1K

В начале двухтысячных друзья подарили мне Sega Dreamcast, топовую японскую приставку, которая прожила у меня чуть больше месяца, после чего я от неё избавился, сменяв на вторую плойку черного цвета - игр в городе для этого чужеземца в то время было ровно одна - MDK2. И больше местные бизнесмены уездного города N предложить не могли. И только лет через десять, мне выпала возможность попробовать что же это была за консоль, которая полюбилась многим, и оставила теплые воспоминания в сердцах игроков, но прожгла дыру в бюджете создателей. Её жизненный цикл оказался очень коротким, всего 3 с небольшим года, после чего Sega свернула не только производство самой консоли, но и вообще покинула ряды платформодержателей. При том, что сама приставка попала в книгу рекордов по количеству проданных устройств за 24 часа. Сейчас Dreamcast, как и почти все ретро-консоли переживает вторую молодость, энтузиасты умудряются найти почти новые, а иногда и вовсе не распакованные образцы. Что удивительно, до сих пор за счет комьюнити и фанов, существуют сервера для некоторых онлайн-игр. А вот с запчастями все сложнее с каждым годом и даже великий китайский Алибаба не всегда может предложить замену. Не меньшим сюрпризом для меня стало и то, что для приставки все еще выходят игры, и вообще эксклюзивы. Не ждите от статьи какой-то аналитики, просто небольшой экскурс в историю, если вы её еще не слышали. Интересно как так вышло?

It's thinking

Ветераны второй консольной

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели4.6K

Если детство ваше выпало на советско-девяностые, то наверняка игровая консоль "Dendy", которая в девичестве NES (Nintendo Entertainment System в Штатах), Famycom (FAMIly COMputer в Японии), с большой вероятностью была у вас в хозяйстве. Пару недель назад я набрел на "живой оригинал" на местной барахолке, и конечно не мог устоять перед возможностью вернуться в свой 1994. Когда по стране миллионными тиражами шагала армия "фамиклонов", отец с Германии притащил оригинал, чем неоднократно были недовольны мои друзья, потому что консоль часто не "видела" неоригильные картриджи. Немного поиграл, получил порцию ностальгии и пошел смотреть, что там еще было, консольные войны прошли мимо меня.

Press start

Записки ездового кота, продолжение

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели5.8K

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

Едем дальше...

Записки ездового кота

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели7.2K

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

Поехали...

Новый дом для Фараона (Pharaoh)

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели7.2K

Я давний поклонник сити‑билдеров компании Impressions Games © и Саймона Бредбури, если кто не знает — его гений дал жизнь таким играм как Caesar 1/2/3, Space Colony и всей серии Stronghold, который по сей день трудится в студии Firefly Studios. Цезарь стал хитовым проектом и был продан более чем 400к копий на дисках за два года с 1998 по 2000. Но лучшей игрой серии считается Pharaoh + Cleopatra.

click to start

Зачем в Switch SDK три разных sin?

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели10K

Работая в компании Gaijin несколько лет назад, мне довелось поучаствовать в портировании пары игр компании на консоль Nintendo Switch, тогда вовсю завоевывающую новые рынки. Для меня это стало первым крупным проектом на этой платформе. А с учетом, что ни команда, ни разработчик движка с платформой, системой сборки и вообще экосистемой Нинтендо знакомы не были, то все грабли приходилось искать и бережно на них наступать. Чтобы опробовать возможности новой платформы, параллельно с портированием игры, был написан внутренний middleware (связка dagor engine + nxsdk + jam) и код обрастал всевозможными тестами, build matrix, бенчмарками, прогоном стабильности и другими внутренними проверками. Надо отметить что на момент 2018 года, в самом switch sdk не было реализовано часть posix функций вроде poll и send/receive, и большая часть функций для работы с файлами, posix прослойку нужно было писать самим. Дошли тогда руки и до написания различных бенчмарков для функций стандартной библиотеки, и были замечены некоторые аномалии в поведении части тригонометрических функций в различных режимах сборки. Для справки, sdk использует урезанный вариант musl libc (https://www.musl-libc.org/), все статически линкуется в один большой бинарник clang'ом от Нинтендо 9 версии (2018 год), который потом запускается на консоли. Доступа к исходникам самой libc в исполнении Нинтендо у нас не было, но всегда можно посмотреть дизасм и боле менее представить что происходит.

Раскопки на месте

Имя enum'a C++ в рантайме

Время на прочтение10 мин
Охват и читатели9K

Получение имени типа, не важно это структура или перечисление, в C++ — проблема. То, что тривиально известно компилятору на этапе парсинга исходников, не получится перевести в человеко-читаемый вид в рантайме. Можно использовать std::type_info::name, который не является переносимым решением, потому что зависит от реализации манглинга в компиляторе. Некоторые компиляторы (например, MSVC, IBM, Oracle) создают "удобное" имя типа, а вот gcc и clang, возвращают искаженное имя, котороe можно преобразовать в удобочитаемую форму с помощью дополнительных функций, например abi::__cxa_demangle. Чтобы вся эта магия работала нужно подключить RTTI, который тоже не всегда доступен, а иногда и вообще-то вреден, потому что сжирает драгоценную производительность, но можно сделать по другому.

follow the white rabbit

Кручу, верчу, imgui loader нарисовать хочу…

Время на прочтение7 мин
Охват и читатели10K

В одном из сайд-проектов с использованием imgui понадобилась "вертячка" (loader, spinner, анимация загрузки). Из коробки этот ui-фреймворк таких виджетов не предоставляет, поэтому решил сделать свой: код простой, математики почти нет. Показал ocornut-y, ему тоже понравилось, теперь базовый виджет на очереди интеграции в imgui. Поискал интересные спинеры на разных сайтах для веб-интерфейсов - десятки видов на любой вкус и цвет, есть и 3д, но все в основном или пререндеры в виде (gif) или векторные анимации, которые для отрисовки требует отдельного фреймворка вроде cairo, а алгоритмов или описания как это работает, почти нет. Все спинеры сделаны в стиле "что вижу, то и пою", немного математики синусы/косинусы для координат, и тестировать пока не будет похоже на решение от UI дизайнера. Да-да, я понимаю, что когда космические корабли бороздят просторы большого театра DALL·E 2 рисует "улыбку мадонны", писать что-то на плюсах, да еще для UI...

Много анимаций, мало кода

Торопиться не надо… (Про спинлоки)

Время на прочтение13 мин
Охват и читатели19K

После небольшой статьи про особенности при работе с кэшем (https://habr.com/ru/post/687146/) мне в личку прилетело несколько замечаний про работу спинлоков и приглашение на собес от пчелайнов, приятно, что технические статьи читают не только технари... лирика. Возвращаясь к обсуждению спинлоков, вышедших за рамки хабра, если это вызвало интерес, почему бы не написать про работу с этими примитивами синхронизации. Тема действительно интересная, да и разработчики придумали более десятка разновидностей спинлоков под разные вкусы и нужды. Все опять будет с тестами и примерами работы. @tbl Линус действительно прав, в юзерспейсе спинлоки "зло злющее", но как обычно есть нюансы...

Читать далее

Cache pollution? Запасайтесь тестами

Время на прочтение16 мин
Охват и читатели13K

Всем ведь приходилось заниматься улучшением производительности? Для игр особенно актуально, ну может какая-то три-в-ряд не страдает этим. Как обычно серебряной пули нет, начинаем со структур данных, алгоритмов, спускаемся ниже если не помогает, придумываем SoA, AoS шаблоны. Если проблема не решается, подтягиваем профайлеры и предметно разбираем узкие места, но все чтобы мы не делали зачастую таким узким местом всегда будет "железо". Можно сколько угодно оптимизировать другие места, но CPU c его гигагерцами будет простаивать 90% времени если его неправильно "кормить" данными. Одной (только одной из проблем) проблемой организации эффективной работы с данными будет меньше, если знать и уметь работать с кэшами разных уровней. Тут на вики описано, как "на пальцах" быстренько убить перф на обходе массива, простого и общего решения для такого обхода нет. Можно и дальше увеличивать размер кэша, что собственно и делают (гдето здесь на хабре была новость, что Интел при переходе на L1 кэш размером 32кб, заново спроектировал блок доступа к нему, сорян не нашел ссылку), но это дорого, неэффективно на масштабах современных процов, и всегда найдутся данные, которые этот кэш отравят, опять. Интересно как починить? го под кат...

Читать далее

Анастасия, извините, наболело…

Время на прочтение2 мин
Охват и читатели19K
Наверное любая большая компания, с большим объемом найма, пытается привлечь новых сотрудников разными способами, это скорее всего подразумевает большое количество HR-спецов. Пропорционально растет и шанс того, что какой-то из них дико «лажанет» с неподходящим кандидатом. Думаю, это просто вопрос времени… Уважаемые hr'ы, ну загляните в профиль того человека, к которому обращаетесь, перед отсылкой спама. К вам ведь будут относиться также, и даже если не к вам лично, то к фирме, приславшей такое, уважения у потенциального кандидата точно будет меньше. Надеюсь у компании, в которой собрались лучшие IT-профессионалы восточной Европы, найдется возможность сделать своих HR не менее профессиональными.

Читать дальше →

Timetracker для Youtrack: DIY

Время на прочтение5 мин
Охват и читатели4.9K
Есть замечательное приложение T-REC позволяющее трэкать время, потраченное на задачи в Youtrack, и записывающее его в таску. Но автор забросил его больше двух лет назад, плюс старые зависимости, постоянная загрузка одного ядра (тут видимо виноват electron) и периодические падения привели к тому, что пользоваться им стало «неудобно». Решил написать свой, с тем же функционалом, только на плюсах, так появился Honsu…


Читать дальше →

Когда хочется красивый GUI, а gpu нет

Время на прочтение3 мин
Охват и читатели18K
Обычно для рабочих утилит не требуется вменяемый UI, с кнопками, списками, окнами, поддержкой мыши и прочей мелочевкой, большинство рабочих «хотелок» можно упаковать в скрипты и иногда запускать их с параметром --help, и так будет даже правильней с точки зрения настройки и масштабирования. Все становится хуже, когда тулами начинают пользоваться не только команда разработки, но и сторонние люди. А они не всегда готовы вникать в стройные мысли, уложенные в строчки кода. И тогда приходится городить UI, а он у разработчиков выходит обычно простой, квадратный, функциональный и совсем скучный. Некоторое время назад я работал над небольшой системой управления вентиляцией/обогрева/камерами и еще того «что придумает вон тот дядечка в желтой каске» для подземной автостоянки.


Читать дальше →

Caesar3 все таки open

Время на прочтение2 мин
Охват и читатели21K


Некоторое время назад, примерно с 2008 года, у меня был хобби-проект по воссозданию довольно знаменитого конце ХХ века ситибилдера Caesar III ©, в процессе работы над игрой был написан ряд статей по механике игры и её внутреннему устройству (например эта).
Дайте же сорцы, наконец

Caesar III: game loop

Время на прочтение27 мин
Охват и читатели70K
Если бы меня спросили, какая часть технической реализации игры «Цезарь» мне интересна больше других, я бы вспомнил о расчете одного «дня» городской жизни. Отдельные компоненты математической модели города тоже интересны в реализации, но эти «шестеренки» будут крутиться только в сборе. Большая часть игры проходит внутри «игрового цикла», в котором проводятся вычисления параметров компонентов, выполняются перемещения игровых объектов, создаются новые события и объекты. Если вам интересно узнать, как была устроена симуляция города в одной из лучших игр 1998 года — добро пожаловать под кат. Описания, псевдокод и схемы помогут вам лучше узнать об используемых алгоритмах.


Читать дальше →

Ремейк Caesar III: математическая модель города

Время на прочтение6 мин
Охват и читатели69K
Я помню как играл первый раз в Цезарь 3, это удивительно умная и сбалансированная игра, создает чувство, что город живет своей жизнью и после завершения миссии. Можно провести часы, наблюдая за городом и не вмешиваться в его жизнь: плебеи будут бегать по городу в поисках работы, а патриции жаловаться на неважные условия жизни, торговцы, школьники, лодки, жрецы — этот мир замирает лишь в минуты пауз, давая игроку возможность продумать следующий шаг. Исследуя внутренние алгоритмы игры, я не перестаю удивляться с какой точностью авторы сложили кусочки мозаики, под названием «баланс». За время, проведенное над восстановлением кода оригинальной игры скопилось достаточно материала по макромеханике игры, которым я хочу поделиться с хабрасообществом.


Plebs are needed!

Информация

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

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

Десктоп разработчик, Разработчик игр
Старший
От 300 000 ₽
Git
C++
Многопоточность
Прикладная математика
ООП