воскресенье, 26 декабря 2021 г.

Мои итоги года 2021

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

воскресенье, 12 декабря 2021 г.

Про C++ в GameDev

 Недавно набрёл на дискуссию:


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

Правда с некоторыми тезисами участников я умудрился в процессе сильно не согласиться. Но это даже обрадовало - я давно с чем-то серьёзно не соглашаЛся, да так чтобы это как-то волновало. 

Пример таких тезисов - утверждения Кирилла Шабордина о том, что т.к. вузы учат студентов C++, то плюсовиков просто полно и нанять их проще чем программистов на JS. Дело в том, что я успел понаблюдать за проблемами найма любителей C++ и геймдева в родном городе, и даже сравнить его, имея подобный опыт с PHP. И знаете что? PHPшников неожиданно в моём родном городе на несколько порядков больше чем плюсовиков. Да, хороших мало. Их всегда мало. Но опять же - плюсам в местных вузах учат. Но неглупый народ уходит с плюсов по многим причинам: сложный язык, сложная инфраструктура, пакетные менеджеры и.т.п.  Так что ситуация противоположная.

Ну и фразы о засилье C++ в геймдеве мне тоже кажутся натянутыми - впору говорить о тотальном засилье Unity/С#, хотя, если подумать, оно и нормально.

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


Boost 1.78.0 и MinGW-w64 x32 GCC 10+

На днях попытался собрать компилятором MinGW GCC 10.3.0 x32 Boost 1.77 и я упёрся в issue наподобие https://github.com/boostorg/build/issues/724 . Собственно, я сначала подумал, что и пожалуйста, не нужно и забил. Но потом вышел новый Boost 1.78 и я снова упёрся в эту проблему.

Внимательный читатель сразу заметит - зачем я вообще собираю x32 приложения в 2021 году? На то две причины: у меня есть небольшой парк старых машин на которые иногда хочется собраться, а вторая - историческая, как-то привычно и удобно на нём сидеть, программировать под него всё ещё можно. Но в этот раз, всё пошло немного наперекосяк.

Тем кому лень читать дальше, сообщу сразу - всё можно легко собрать, если вместо обычного "b2 toolset=gcc" использовать

b2 toolset=gcc address-model=32

Но это, правда странно и этот способ мне подсказали в самих репозиториях.

четверг, 11 ноября 2021 г.

Возня с фоном в Blender, Aseprite и прочее

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

О голосовых сообщениях в 2021

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

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

понедельник, 26 июля 2021 г.

Небольшая халтурка

 Пытаюсь немного в музыку, пока закину сюда свою робкую попытку.

воскресенье, 25 июля 2021 г.

extern "C" и namespaces в C/C++ или как я подгорел на выходных

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

TL;DR никогда ни за что, не мешайте extern "C" и пространства имён в определениях функций. Это не работает нормально ни в одном компиляторе и, как обычно, это описано только где-то в дебрях stackoverflow, хоть и разрешено в компиляторах MinGW и MSVC . 

Замечу, что эта проверка есть в SonarSource но почему-то в виденных мной учебниках плюсов это правило отсутствует, что принципиально неправильно.

суббота, 10 июля 2021 г.

О стримах по соревнованиям по играм

Я ни разу не киберкотлета, и обычно стримы по играм мне не заходят, как и по спорту в целом - слишком медленно и скучновато, а чаще всего проходит всё это проходит мимо меня, потому что непонятно за кого топить и почему меня вообще это должно волновать.

Но вот сегодня наконец был относительно большой (насколько возможно) чемпионат по моей любимой Mental Omega, транслировавшийся на https://www.twitch.tv/topazjuanmo и мне прямо сильно зашло. Во-первых, наконец-то RTS. Во-вторых, это был относительно весёлый опыт, потому что было не сильно жестко, иногда чувствовалось, что люди просто не успевают замечать что происходит. Это радует, ибо если глянуть на всяких монстров игры в RTS - то там просто люди как-то всё поспевают. Мне такое не заходит, ибо такое ощущение, что играют боты. А тут как-то всё душевнее и приятнее.  Я неожиданно обнаружил, что болею за одну из команд, хоть она и проиграла.

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

Следующее подобное мероприятие обещают в августе. Я надеюсь оно будет и планирую потратить своё время и насладиться зрелищем.

Такие дела.

пятница, 11 июня 2021 г.

Впечатления от Loria

Сейчас на GOG бесплатно раздают Loria  - и я само собой не удержался, чтобы не посмотреть на неё.

Геймплейно, это клон Warcraft III с графикой Warcraft II. И в целом, он меня этим порадовал - все элементы оригинала на месте, играется неплохо и нормальный ИИ сильно не выносит.  Судя по плашкам, у игры какие-то проблемы с финансированием  и разработкой и поэтому она... недоработана. Обидно, потому что пока это лучшая из новых RTS, которую я пока видел. 

Да, баланс не очень. Да, как-то сильно много копирования Warcraft III в плохом смысле: опять эта любовь к требованию высокого APM, что есть форменное болото. Да, опять нет редактора карт (я скучаю по редактору карт WIII ужасно). Игра бы взлетела, думаю, в коопе - но увы, сетевой игры нет.

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

Я всё же надеюсь, что она со временем допилится, хотя судя по мертвой ссылке на дискорд - ожидать не стоит.

Исходники Периметра уже на GitHub

Наконец-то исходники Периметр есть на GitHub . Если кто не помнит - это была такая стратегия в середине нулевых с довольно интересной историей, и, что особенно отрадно - это была отечественная RTS. 

Самое приятное - в ней сейчас, это то, что есть комьюнити в чате TG, которое взяло игру под своё крыло и потихоньку допиливает. Я там есть, но, увы, поактивничать мне не даёт отсутствие времени.

Конечно, исходники там довольно сложные, читаются тяжело и много сильно устаревших на 2021 год вещей, но со стороны community уже есть WIP работа под студией 2019, портирование на CMake и много чего другого. А самое приятное - это то, что можно самому сесть и наконец посмотреть в чём дело, разобраться со старыми багами если хочется и есть время. Врать не буду, в своём отрочестве я о таком мог только мечтать. What a time to be alive! Надеюсь, что на него появятся со временем интересные моды и, само собой, карты. 

четверг, 25 февраля 2021 г.

Дискретная математика и ML

 Недавно пришлось снова поглазеть на нейросети по долгу службы. Сказано сделано - запилил датасет, почистил, сделал входы и выходы. Чтобы не сильно заморачиваться сделал их бинарными, т.е. наборами нулей и единиц, само собой большими. В итоге поймал себя на мысли, что можно в лоб добиться неплохого результата (но с оверфитом), если не делать никаких градиентных спусков, а тупо запилить набор логических функций через СДНФ и СКНФ. Думаю, что дело всё же в синтетичности проблемы - вряд ли с пикселами и сложными структурами такое прокатит.

понедельник, 1 февраля 2021 г.

History export from Skype and Discord

Я как-то писал про историю сообщений в Skype, но как-то руки не доходили до скриптов, которые бы позволили нормально собрать историю в HTML-файлы, разбитые по дням. Зачем это нужно? В первую очередь, иногда интересны именно старые диалоги, которые непонятно как искать. Иногда просто хочется полной внятной истории переписок, так как по умолчанию показываются последние сообщения, а скроллить вверх миллион раз неудобно. К этому присовокупилось желание иметь подобное для Discord.

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

Для Discord нашёл DiscordChatExporter, но он экспортирует всё одним файлом, а хотелось разбиения по дням. 

В результате сделал пару скриптов на PHP для облегчения жизни и экспорта истории из Discord и Skype. Скрипты набросал на скорую руку, так что там, конечно, говнокод. Само собой, выложил их на GitHub и скачать их можно отсюда.  

Процесс такой.

1. Перед началом в каждой из папок "skype" и "discord" выполнить  composer install.

Для Discord

2. Использовать DiscordChatExporter, и экспортировать в нём историю в HTML

3. Создать структуру папок, где результат будет расположен (что-то типа папки "outdiscord" и папки "data" в ней, рядом со скриптами в папке "discord)". Скачать иконки гильдии и аватарки и положить их в папку "data".

4. Отредактировать и запустить discord/split.php, используя переменные в начале скрипта, чтобы разбить историю по дням.

5. Отредактировать и запустить discord/downloadpreview.php, используя переменные в начале скрипта, чтобы скачать превью картинок и расположить их в папке outdiscord/data.

6. Использовать скрипт "template/stringstomenu.php" и файлы HTML в папке "template", чтобы сформировать индексные файлы и меню на основе index.html и menu.html. Индексные файлы скопировать в выходную папку ("outdiscord")

Для Skype

2. Найти и скопировать main.db, вытащив оттуда id нужного разговора.

3. Создать структуру папок, где результат будет расположен (что-то типа папки "outskype" и папки "data" в ней, рядом со скриптами в папке "discord)". Скачать иконки гильдии и аватарки и положить их в папку "data". Последние можно сделать самому - например на основе дискордовских.

4. Отредактировать и запустить "skype/parser.php", используя переменные в начале скрипта

6. Использовать скрипт "template/stringstomenu.php" и файлы HTML в папке "template", чтобы сформировать индексные файлы и меню на основе index.html и menu.html. Индексные файлы скопировать в выходную папку ("outskype")

Тестировал их на новом PHP 8.0 - всё работает, за исключением превью для Youtube. Надо будет покопаться, что там не так, но пока на это нет времени. Процессы получились довольно громоздкими, но это из-за того, что это разовое действие, которое пока потребовалось только один раз.