У меня наметилась тенденция каждые два года делать небольшой пост-итоги года, в котором писать, в основном, про программирование и всякое такое. В этот раз программирование тоже будет, но не только.
воскресенье, 26 декабря 2021 г.
воскресенье, 12 декабря 2021 г.
Про C++ в GameDev
Недавно набрёл на дискуссию:
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. Надо будет покопаться, что там не так, но пока на это нет времени. Процессы получились довольно громоздкими, но это из-за того, что это разовое действие, которое пока потребовалось только один раз.