Log of Alprog
1.22K subscribers
89 photos
88 links
Download Telegram
Как я обсирался #1

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

Я учился в обычной провинциальной средней школе на окраине Владивостока. И хотя с 7-го класса благодаря какому-то частному спонсору у нас появился компьютерный класс, на уроках информатики мы все годы либо учились печатать в Word’e, либо рисовать в Paint’e. Ну ещё изредка чертили какие-то примитивные блоксхемы на бумаге в качестве контрольных. Я же был единственный, кто умел программировать на настоящем языке программирования, а потому считался местным компьютерным гением. В те времена я называл переменные транслитом и писал без табуляции, но этого было достаточно, чтобы иметь право не ходить на занятия и сдавать выпускные экзамены, просто показывая свои программы (я достаточно старый, что застал не ЕГЭ, а устные экзамены). Причём я так закрыл экзамен не только себе, но и моему старшему брату.

У меня вообще была лучшая успеваемость на параллеле и репутация умника. В старших классах я уже даже не заполнял дневник и не делал никакие домашние работы, кроме английского. Мне и так все рисовали пятёрки, заочно считая, что я всё знаю, и тянули на медаль. Это обычное дело для провинциальных школ: им для какой-то отчётности и бенефитов от министерства образования нужно выпускать медалистов. Для полноты образа добавлю, что на уроки я тогда гонял в дедовском пиджаке (который я носил иронично), а также был обладателем жиденьких усиков девственника (эти я носил неиронично, искренне полагая, что выгляжу так старше и круче). Короче, почти классический задрот, учительский любимчик. Почти, потому что при всём при этом крысой или омежкой я всё-таки не был, держался с коллективом. Булинг иногда, конечно, прилетал, но не чаще, чем другим беткам. В целом за интеллект одноклассники мне скорее респектовали, и эго у меня было соответствующее.

Но вернёмся к олимпиадам. Как я уже сказал, меня тянули на медаль, так что я даже как-то занял второе место на краевом конкурсе сочинений, даже не зная, что участвую в нём; но вот на олимпиаду по программированию меня отправили по-честному.

Олимпиада проходила на базе универа ДВГУ, который ныне часть ДВФУ. Первый тур проводился на бумаге. Там были какие-то тривиальные задания, которые нужно было написать от руки на любом языке программирования. Я с лёгкостью накатал что-то на бейсике и сдал работу в числе первых, только укрепившись в мысли, что и во втором туре всех порву в лоскуты.

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

В качестве исключения мне предложили VB.Net и даже посадили предварительно поупражняться, заявив, что это одно и то же. Я проковырялся где-то час, но так и не смог даже прочитать инпут из файла. Для понимания: я тогда вёл тетрадочку, в которую записывал как и что делать на VB6. Чтение и запись в файл у меня были записаны полным хардкодом, без малейшего понимания, что конкретно делают эти строки. И разумеется один-в-один этот код не заводился на .Net.

Дальше случился совсем стыдный кринж-момент. На школьную олимпиаду ехать надо было не самому, а с учительницей, роль которой выполняла моя мать (да-да, я ещё и учительский сыночек, хотя мама была скорее единственной, кто наоборот занижала мне отметки по русскому). Так вот. Мать присела на уши организатором про то, какой я вундеркинд-самоучка, и в итоге меня в качестве супер-дупер-исключения отправили решать олимпиаду из дома на VB6, под личную ответственность матери, что я не буду читерить и пользоваться интернетом.
Когда мы приехали домой, остальные участники уже отстрелялись и ждали результатов, а меня ждали два часа полного унижения. Даже если бы я вышел в интернет (который тогда был, кстати, по карточкам dial-up), мне бы это не помогло. Потому что на листочке с заданиями, который нам дали, были настоящие олимпиадные задачи, и я не имел ни малейшего представления, как к ним подступиться. В итоге я получил только 1 балл за наполовину решённую первую задачу и предпоследнее место в общем зачёте.

Это был мощнейший удар по моему эго, когда я узнал, что на самом деле мои навыки программирования полное днище по сравнению с учениками нормальных школ. И тогда же я заработал себе мой первый (и, слава богу, единственный) синдром самозванца. Потому что в универ я поступил только благодаря школьной серебряной медали, и первые пару месяцев боялся, что я там самый дибил. Позже, правда, выяснилось, что это далеко не так. На деле в универе я тоже оказался в числе лучших студентов и кодеров, но след эта история всё равно оставила во мне серьёзный. Возможно, именно поэтому я все эти годы за версту обходил олимпиадное программирование. Декабрьский advent of code фактически первое из этой области, к чему я притронулся с тех пор.

Вот такие пироги. А в следующий раз я расскажу про мои обсёры уже из профессиональной деятельности.
Приходите слушать подкаст про С++ со мной 12 января

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

https://www.youtube.com/watch?v=pIUymOJtE-E
DevGAMM Гданьск 2023

Казалось бы, совсем недавно я выступал на DevGAMM в Минске, а на самом деле уже целых 3 года прошло. Ужас просто, как время ускоряется. Так или иначе, мне на днях компания апрувнула билеты, так что в этом году я снова лечу на эту конференцию. На этот раз выступать не буду, в этот раз я обычный посетитель, но вы всё так же можете ловить меня. На этот раз в Гданьске 1-2 марта.
Название: Crunch House
Жанр: Песочница, симулятор геймдев студии, экономическая стратегия
Вдохновители: RimWorld, Factorio, Prison Architect

Движок: Godot
Репозиторий: GitHub
Начало проекта: 4 сентября 2023

Подробный симулятор геймдев студии с отловом багов, рефакторингом, фичекатами, bus-фактором, документацией, мерж-конфликтами, спагети-кодом, тех.собесами, мотивацией, кранчами, пицца-патями, харассментом, кондёрами и уборкой.

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

Так же планируется третья карта — мир игры.
Короче, по фану стартанул новый пет-прожект чуть больше недели назад. Буду пилить по вечерам после работы по мере возможности. Если не заброшу сразу, то скорее всего это долгострой. Но поскольку это песочница, в которой нет чёткого финального состояния, и которую можно улучшать и докручивать бесконечно; меня вполне устроит судьба вечного раннего доступа.

Однако это не оторванный от реальности долгострой. Амбиции и артстайл специально подгоняются так, чтобы это было мне по силам в соло. В качестве пруфа, что я адекватно представляю объём работ, вот пример крупного проекта, в котором я был лидом: Encased. Пока никого в команду не ищу. О возможности продать не думаю тем более. Ну а там посмотрим, как говорится.

Взял Godot, потому что принципиально не хочу Unity (у меня к ней старая нелюбовь, задолго до вчерашних новостей), Unreal слишком жирный для моего проекта, а Defold не особо удобен под 3D. К тому же мне импонирует опен-сорсовость и либеральность в плане языков.

GDScript осваивать не хочу, поэтому стартанул на C#, но вполне допускаю, что позже подключу силу С++ для трушности и какой-нибудь скриптинг для модинга. Не исключаю, что на каком-то этапе проекта психану и фана ради стану прикручивать к проекту мой второй пет-проджект — скриптовый язык ку-ку, который всё ещё в зачаточном состоянии. Ну или буду совершать какие-то другие неадекватные мувы по ходу разработки. Потому что это мой проект по фану. И если не реализовывать наркоманские хотелки, то зачем это всё?

Ах, да. Исходники пока планирую оставить публичными на GitHub. Там же, на github pages, будет вестись диздок, он же вики по игре. Однако OpenSource лицензию пока не прикрепляю, так что по умолчанию действует копирайт. Будет проект полностью опенсорсным или всё-таки коммерческим, решу когда-нибудь потом.
И снова кудах-кудах.

Мой пет CrunchHouse, анонсированный в сентябре, ожидаемо встал на паузу. Но не потому, что я потерял интерес или идея сдохла. Нифига. Это по-прежнему мой основной долгострой, которым я собираюсь упарываться ещё многие годы. А потому что если уж упарываться, то делать это основательно. Как и было предсказано, руки зачесались делать его не на чём попало, а непременно на своём скриптовом языке. Так что по вечерам моя девушка всё чаще слышит от меня фразу, что мне надо немного «покуковать», то есть позаниматься ku-ku.

Напоминаю, что концепция ku-ku сформулирована как «typed lua meets intelligent json». Простой язык, как lua, заточенный под лёгкий модинг, но с типами и с 1st-class citizen сериализатором. Причём таким, что сериализует сразу в байткод виртуальной машины. А десериализация, соответственно, тупо сводится к исполнению этого кода. Такой подход позволит в теории писать всякие конфиги и префабы на сабсете языка, и всё это будет подсвечиваться, автокомплититься и рефакториться в IDE ровно так же, как и сам код (для этих целей у меня с самого начала разработки используется Language Server Protocol). Ну и сейвы со сценами заодно тем же механизмом будут сериализоваться.

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

На повестке дня сейчас вызов функций. Затем Debug Adapter Protocol, чтобы можно было подебажить выполнение скрипта в VS Code (ну или Emacs и Neovim). Это всё проблем вызывать не должно. Но затем надо будет вернуться к семантическому анализу и линковке. Это пока наиболее проблемная часть для меня. Так что смотрю в будущее с немного обосранными от ужаса глаза, но всё-таки делаю потихоньку.
Что случилось с Dark Crystal Games? Делаю Forward, где Слава всё раскидал, поскольку описаны события после релиза (когда я уже ушёл). Слава, кстати, Senior геймдиз на BG3.
Forwarded from Slava
Привет.
В начале 2022 шли к закату (летели я бы сказал). Релиз игры в сентябре 2021 был не самый удачный, не супер плохо, но не хит. Все продажи забирал издатель. У владельца была возможность получить инвестиции на будущее, но он поверил что дальше будет рост как в 2020-2021 :) Решили своими силами дальше пилить. При этом начались метания, как и что делать, даже в крипту 🙄 пытались залезть.
Когда ёбнула война владелец понял что теперь точно никаких инвестиций не получить да и в принципе ёбнул кризис в геймдеве, я думаю вы заметили это в 2022-2023. Разочаровался в геймдеве и постепенно слил студию. Сначала половину штата распустили, думали что ещё дадут время на прототип или бетку чтобы выйти в РД или найти инвестиции, но по итогу в июле-августе закрыли, почти одним днём :)
В итоге проект сейчас болтается на аккануте у издателя, не знаю как они планируют возвращать его назад и кому, когда кончатся права. Там есть потуги выпустить на консоли и как то перезапустить всё это дело, но они пока не уверенные и теоретические. В свободном полёте, даже патч издатель не выпустил.
Ребята которые работали - многие разошлись по приличным заведениям типа Owlcat, Mundfish, mail.ru, Saber и в том числе иностранным конторам, как Алпрог.
Roblox, VR и немного HL:Alyx

В декабре недельку поковырял программирование Roblox под VR. Давайте расскажу немного про впечатления.

Началось всё с того, что около года назад у меня значительно расширился состав шведских полуродственников, среди которых оказался в том числе и фанат роблокса соответствующего возраста. Чтобы впечатлить мелкого, я по дурости заявил, что вообще-то для такого крутого разраба, как я, сделать игру в роблокс — плёвое дело. Разумеется, этот комментарий был интерпретирован не иначе, как прямое обещание, и с тех пор припоминался мне при каждой встрече. Мои наивные надежды, что оно как-то само собой забудется через пару месяцев, не оправдались: рост у детей короткий, а вот память длинная. Хуже того, уже близилась рождественская посиделка, которая в этом году хостилась у меня дома, так что отвертеться как-нибудь красиво не получалось совсем. Нужно было что-то делать.
Звёзды сошлись ещё и таким образом, что в качестве новогоднего подарка самому себе я как раз купил Meta Quest 3, так что игру делать я начал не куда-нибудь, а именно под VR.

Для начала изучил, что там вообще есть в этом вашем роблоксе. Короткое исследование выявило, что в популярном правят балом всевозможные вариации на тему кликеров, которые на местном сленге гордо зовутся «жанром симулятора»; а также всякие паркур-игры (то бишь просто платформеры). Надо сказать, что Roblox Studio из коробки предоставляет весьма богатый функционал именно для таких игр (ну или чего-то GTA-подобного): тут есть персонаж со скинами, стандартный контроллер с камерой от первого и третьего лица, позволяющий прыгать и плавать (но не приседать, например), инвентарь и система переключения предметов в руках, транспорт. Наборчик на первый взгляд достаточно типичный, но самая главная фишка Роблокса, что всё это стандартное барахло изначально спроектировано для мультиплеера!

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

Вернее не совсем lua, а luau. И это не может не порадовать более искушенных в программировании людей. Luau делает с lua примерно то же самое, что typescript делает с javascript. Это суперсет, который привносит в язык аннотации типов и прочие вкусности, что делает из полной динамики что-то гораздо более юзабельное и надёжное. Вместе с местным автокомплитом ощущается довольно освежающе, и на самом деле это, пожалуй, моё лучшее впечатление от Roblox.

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

Впрочем, я и не собирался городить BG3, мне нужно было собрать демонстрационный уровень на 5 минут геймплея для рождественской пати. За основную концепцию был взят паркур в его минимально-возможном исполнении — «пол это лава»! Но до и после я разбавил это дело VR-фишками: стрельбой из пистолетов руками, а также в качестве кульминации сделал в конце прыжок веры в бассейн. Причём сделать это нужно было именно шагнув в пропасть собственными реальными ногами, потому что ходьбу стиками в этом месте я специально отключал (так в разы круче ощущается).
Проблема была только в том, что стандартный контроллер ходьбы, само собой, заточен в первую очередь под мобилки и PC. Поэтому если ты играешь от первого лица в VR и шагаешь собственными ногами, то ты просто выходишь из тела персонажа.

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

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

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

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

Ну а после праздников я смог добраться до того, ради чего брал себе Meta Quest — к Half Life Alyx. Игра, кстати, абсолютный топ. Вернула мне детский восторг от новых игровых ощущений. Да ещё и в любимой вселенной. После прохождение за 5 дней подряд по 3-4 часа в день, ещё какое-то время ловил прикольные эффекты дереализации в реальности и трёхмерные галюны перед сном. Ну и не без удовольствия заметил, что из всех схем управления, которые есть в Alyx, самая классная совпадает с той, как я делал в роблоксе.
А у меня тут подкаст внезапно

Помните, три года назад я пытался замутить что-то типа подкаста? Тогда это ещё было в, прости господи, clubhouse. В общем, представляю вашему вниманию попытку номер два. На этот раз на более традиционных платформах, а вернее на всех основных: от Apple Podcast до Youtube. Спотифая пока нет, но тоже будет (как объяснили наши лучшие специалисты, его надо отдельно через жопу регать).

Случилось всё, как водится, спонтанно. Мой знакомый ещё по Калининграду геймдиз @web_lain, автор канала Осмысляя культуру (кстати, подписывайтесь), твитнул, что, дескать, хочет мутить подкаст. Я ему тут же сосватал в соведущие Марка — нашего сценариста с Encased. Там же, в твиттере, и по поводу первого гостя сразу порешали. Встречайте: Дмитрий Хомак, автор lurkmore и легенда рунета. Изначально я думал, что останусь крёстным отцом подкаста, но как-то слово за слово, и в общем я тоже у микрофона.

Всё это безобразие называется Синдром Утёнка. Концепция проста: зовём классных гостей из индустрии и около неё, казуально общаемся про всякое медиа и игры в частности. На этот раз никакого технического занудства. По крайней мере в первых двух выпусках обошлось без этого. А там как пойдёт.

Послушайте пилот, и обязательно отпишите, насколько кринж.

00:00:01:11 — Представляемся
00:00:54:05 — GTA: серия скатилась?
00:16:15:20 — Хомак и русский игрожур
00:28:40:04 — Как Сапковский потерялся в лесу
00:33:33:17 — Закат бумажных игровых журналов
00:35:14:03 — Нейросети отнимут твою работу
00:42:56:20 — Почему хорошая локализация — это сложно
00:48:49:14 — Нейронки, религия и Макаронный Монстр
00:55:22:22 — Как игрожур умер окончательно
01:07:18:21 — Играет ли Хомак в игры сейчас?
01:08:56:19 — Про кринжовый игровой секс и не только
01:14:59:07 — Плавно закругляемся
01:15:17:02 — Внезапная история напоследок

Ссылка на все ссылки:
https://su.mave.digital
Сделал сайт для нашего подкаста. И там совершенно случайно уже есть новый выпуск со Святославом Ториком. Говорят, я там болтал уже побольше, чем в пилоте. И вообще там уже ближе к разработке разговор идёт: про геймдизайн и всё такое.

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

https://ducksyndrome.github.io/