Pull to refresh
18
0.2
Егор @Tujh

C & C++ Developer

Send message

Хорошие книги для gamedev AI программера

Level of difficultyEasy
Reading time9 min
Views5.3K

После статьи о книгах для саморазвития gamedev программиста, меня просили больше написать про аишную часть и том, что стоит почитать по этой теме. Для программиста ИИ в игрострое ситуация с книгами схожа, но с несколькими интересными особенностями. Здесь важна не только глубина знаний, сколько наработанность с инструментами, библиотеками и технологиями в целом, а с учетом что новые подходы развиваются с поразительной скоростью, поразительной для игростроя конечно. Казалось только лет 10 назад стали использоваться BT (behavior tree), но и они уже имеют редакцию 4.x (https://www.behaviortree.dev/). Но важно не зацикливаться на затаскивании в проект модных примочек, базовые знания остаются самым важным что можно получить. Это как в притче о удочке — дай человеку рыбу, и он накормит себя сегодня; дай ему удочку, и он будет кормить себя всю жизнь. Удочкой в этом случае выступает знание, как оно работает, а не как можно его использовать.

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

Читать далее

Как оптимизировать размер контейнерного образа в Docker

Reading time6 min
Views6.6K

Введение


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

Я для сравнения покажу различные варианты Dockerfile, а в конце этой статьи приведу таблицу, в которой будет показано, образы какого размера получаются из каждого файла. Так вам будет проще оценить, каково влияние от каждого варианта оптимизации.
Читать дальше →

TOTP без смартфона

Level of difficultyEasy
Reading time5 min
Views19K

Когда я решил избавиться от необходимости постоянно носить с собой смартфон, одной из проблем оказалась двухфакторная аутентификация (2FA, приложение Google Authenticator). Остаться без возможности авторизации на множестве сервисов было неприемлемо, нужна была альтернатива.

Беглый поиск вывел меня на утилиту oathtool: командная строка, POSIX, OSS — всё, как я люблю, проблема в принципе решена. Но, как и большинство CLI утилит, её удобно использовать в сочетании с другими утилитами, а для этого полезно написать скриптовую обвязку. Собственно этой обвязкой, а также опытом использования, я и решил поделиться.

Читать далее

Надежный обход блокировок в 2024: протоколы, клиенты и настройка сервера от простого к сложному

Level of difficultyMedium
Reading time46 min
Views268K

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

Вы, наверняка, помните отличный цикл статей на Хабре в прошлом году от пользователя MiraclePtr, который рассказывал о разных методах блокировок, о разных методах обхода блокировок, о разных клиентах и серверах для обходов блокировок, и о разных способах их настройки (раз, два, три, четыре, пять, шесть, семь, восемь, десять, десять, и вроде были еще другие), и можете спросить, а зачем еще одна? Есть две основные причины для этого.

Читать далее

Настройка CI/CD для самых маленьких разработчиков

Level of difficultyEasy
Reading time8 min
Views44K

Считается, что построение CI/CD - задача для DevOps. Глобально это действительно так, особенно если речь идет о первоначальной настройке. Но часто с докручиванием отдельных этапов процесса сталкиваются и разработчики. Умение поправить что-то незначительное своими силами позволяет не тратить время на поход к коллегам (и ожидание их реакции), т.е. в целом повышает комфорт работы и дает понимание, почему все происходит именно так.

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

Читать далее

Что ещё почитать игровому программисту?

Level of difficultyEasy
Reading time6 min
Views8.3K

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

Но, как справедливо написали в комментариях к прошлой статье, не стоит забывать классическую литературу, поэтому на первое место в этот раз я поставлю "Мертвые души" Гоголя. Произведение рассказывает историю о молодом и амбициозном человеке, который приезжает в провинциальный город с необычным предложением: он собирается купить "мертвые души" - крестьян, умерших или уходящих, но ещё "не снятых с учёта", чтобы заново зарегистрироваться их владельцем и получить на них кредиты и привилегии.

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

Читать далее

STM32. Процесс компиляции и сборки прошивки

Level of difficultyEasy
Reading time30 min
Views30K
Многие из начинающих разработчиков софта для микроконтроллеров реализуют свои проекты исключительно в средствах разработки, которые предоставляются производителем. Многое скрыто от пользователя и очень хорошо скрыто, из-за чего некоторые воспринимают эти процессы сродни настоящей магии. Я, в свою очередь, как человек в пытливым умом и природной любознательностью, решил попробовать собрать проект без использования IDE и различного рода автоматизаций.

Так родилась идея для этой статьи: не используя ничего, кроме текстового редактора и командной строки, собрать проект мигания светодиодом на отладочной плате STM32F0-Discovery. Поскольку я не до конца понимал, как происходит процесс компиляции и сборки проекта, мне пришлось восполнять пробелы в знаниях. Разобравшись с этим вопросом, я подумал — а почему бы не рассказать другим об этом?

Всем кому интересно — добро пожаловать под кат! 🙂

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

Создаем свою STL-совместимую реализацию std::allocator с лучшей производительностью

Reading time11 min
Views5.3K

Реализация защиты от сбоев из-за фрагментации кучи и повышение скорости выполнения с помощью STL-альтернативы std::allocator, работающей с блоками памяти фиксированного размера.

В этой статье описывается реализация STL-совместимого аллокатора, ориентированного на выделение и высвобождение блоков памяти фиксированного размера. Предложенный аллокатор предотвращает сбои, вызванные фрагментированной кучей, и обеспечивает стабильное время выполнения выделения/высвобождения памяти. Моей главной целью при создании stl_allocator было устранение ошибок памяти. Вдобавок использование STL-совместимого блочного аллокатора открывает возможность использования функций стандартной библиотеки шаблонов (STL) C++ в проектах, в которых иначе это было бы невозможно.

Читать далее

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

Level of difficultyMedium
Reading time10 min
Views4.1K

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

Читать далее

STM32. Подготавливаем среду разработки в Linux

Level of difficultyEasy
Reading time21 min
Views28K
В недавнем времени получилось так, что у меня появилась пара интересных проектов, где одна из составных частей — микроконтроллер STM32. И каждый раз при смене ноутбука или ОС на домашнем компе приходится настраивать окружение для разработки как в первый раз. Плюсом, последние проекты, которые я делал для STM32 — выполнял в Windows, в демо-версии Keil uVision. Но поскольку я давно переехал в Linux — возникла необходимость основательно разобраться и изложить процесс настройки окружения для будущих применений.

Всем, кому интересно — добро пожаловать под кат.

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

Как снять логи при краше мобильного приложения?

Level of difficultyMedium
Reading time4 min
Views14K

Всем привет! Я Tech Lead QA в мобильной разработке. При тестировании приложений иногда сталкиваемся со сбоем приложения. И в таких ситуациях очень важно уметь собирать логи с устройства, чтобы максимально быстро пофиксить ошибки. В этой статье я хотел бы рассказать, как мы это делаем в Альфа-Банке.

Осторожно, в статье много картинок.

Читать далее

Алгоритм поиска в глубину для процедурной генерации лабиринтов

Level of difficultyEasy
Reading time2 min
Views4.7K

В этой статье я расскажу об алгоритме процедурной генерации лабиринтов методом поиска в глубину (Randomized depth-first search with recursive backtracking).

Читать далее

Преобразование markdown в pdf на Python

Level of difficultyEasy
Reading time1 min
Views6.5K

Каждому, кто ходил извилистой тропкой автоматической генерации pdf из markdown файлов ведомы связанные с этой задачей пеньки решения: Pandoc, LaTex, wkhtmltopdf и т.п.

Хочу поделиться с сообществом новым (по крайней мере для меня) вариантом решения этой задачи в Python.

Этот вариант имеет следующие плюсы.

Читать далее

Автоматизация публикации Android приложений в Google Play и Huawei AppGallery — инструкция от А до Я

Level of difficultyHard
Reading time19 min
Views16K

Всё еще публикуете релизы Android приложений вручную? Почитайте наше подробное руководство как полностью автоматизировать публикацию Android приложений в Google Play и Huawei AppStore через Gradle и CI/CD. Подробно от А до Я.

Почитать инструкцию

C/C++ из Python (ctypes)

Reading time6 min
Views66K
main

Про то как вызывать Python из C написал в прошлой статье, теперь поговорим как делать наоборот и вызывать C/C++ из Python3. Раз начал писать об этом, то раскроем всю тему до конца. Тем более, что ни чего сложного здесь нет тоже.

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

Радиоуправляемая машинка на Arduino для преодоления мини-бездорожья

Reading time10 min
Views31K

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

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

Читать далее

Pytest-фикстуры на человеческом

Level of difficultyMedium
Reading time9 min
Views24K

Привет, сообщество.

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

Вероятно, даже продвинутый QA Automation найдет что-то новое, но моя цель объяснить на пальцах эту тему начинающим, ибо именно в ней зачастую происходят затыки.

Читать далее

Используем функционал Podman вместо docker-compose на примере Gitea

Reading time6 min
Views25K

В своем порыве использовать только технологии компании Red Hat, я решила освоить их first-party контейнерный стек. В основе стека лежит podman- движок для контейнеров, работающий без демон-процесса и без root привилегий по умолчанию. podmanинтегрируется в экосистему Red Hat - запуск контейнеров производится посредством systemd ; контейнеры интегрируются с SELinux. Конечно, самая главная причина использовать podmanвместо Docker - его включение по умолчанию в дистрибутив Red Hat Enterprise Linux и подобные.

Читать далее

Тактовая кнопка, как подключить правильно к "+" или "-"

Reading time5 min
Views24K

Вы ни когда не задумывались, почему в схемах иногда кнопки подтягивают к "+" питания, а иногда к общему проводу? Если прямо сейчас набрать в поиске: "тактовая кнопка ардуино" - то на большинстве картинок мы увидим именно прямое подключение, когда резистор подключен на землю. Но, если посмотреть схемы без участия ардуино, то ситуация меняется в корне, чаще можно будет встретить инвертированное включение. Так как же будет подключать кнопку правильнее? Давайте вместе попробуем разобраться в этом вопросе!

Читать далее

Разработка драйвера сетевого адаптера для Linux. Часть 1

Reading time25 min
Views27K

В этой статье мы рассмотрим как устроен драйвер сетевого адаптера для Linux.

Cтатью разделим на две части.

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

Хотя при разработке драйверов необходимо использовать стандартные ядерные фреймворки, такие как clock, reset, libphy и пр., поначалу мы будем работать с адаптером напрямую через регистры состояния и управления. Это позволит нам детально разобраться с аппаратной частью.

Во второй части статьи приведем драйвер к нормальному виду, с использованием стандартных фреймворков и описанием того, что надо указать в Device Tree, и рассмотрим как передавать сетевые пакеты.

Нам нужна макетная плата с сетевым адаптером, на которую можно поставить Linux. Возьмем Orange Pi Zero на платформе Allwinner H2+. В состав платформы входят четыре процессорных ядра Cortex-A7, поддерживается ОЗУ стандартов LPDDR2, LPDDR3, DDR3, широкий спектр соединений и интерфейсов, в том числе сетевой адаптер, для которого мы будем разрабатывать драйвер. Подробное описание платформы тут, документация на платформу Allwinner H3 Datasheet.

Читать далее
1
23 ...

Information

Rating
2,666-th
Location
Eindhoven, Noord-Brabant, Нидерланды
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer, Scrum Master
Lead
C++
C
Embedded system
Embedded Linux
Cmake
Bash
Docker
CI/CD
Git
Python