Лисп в изгнании
230 subscribers
156 photos
21 videos
5 files
233 links
Авторский канал на околоайтишную тематику.

По всем вопросам @awkravchuk
Download Telegram
#соцсети

Тут подписчик подогнал стикеры с маскотом Common Lisp, за что ему большая благодарность 😊
7
#лытдыбр

Нет в мире IT вещи, которая бесит сильнее, чем Discord под Linux с его самой беспомощной в мире системой обновлений. Почуяв на своих серверах хоть дуновение запашка новой версии, он наглухо отказывается запускаться (см. рис. 1), любезно открывая тебе в браузере веб-страничку, где ты должен сам скачать (!) дистрибутив, аж в целых 2 (прописью: двух) вариантах: пакет для Debian-подобных линуксов и тарбол с бинарниками. И что же Discord делает после того, как ты вручную (!!) устанавливаешь его обновление? Качает, блядь, обновления (см. рис. 2).

Мне кажется, за такой способ обновления софта нужно всю команду разработки ссылать на урановые рудники, чтобы другим неповадно было 🤬
🔥10😁4🥴1
#лытдыбр #common_lisp

Вчера вечером закончил с пачкой давно назревших изменений в Docker-образе для сборки лисповых игр под Windows и Linux, docker-lisp-gamedev:

• бампнул версию компилятора SBCL до 2.5.1, в которую попал фикс моей проблемы со слишком зубодробительными макросами для UI;
• сделал сборку из исходников для линуксовых middleware-библиотек (liballegro, raylib и SDL2), чтобы не зависеть от мейнтейнеров убунты, и чтобы их версии и флаги компиляции плюс-минус совпадали с виндусовскими;
• наконец, самая мякотка — сделал автоматическое тестирование собранных Docker-образов посредством костылей, мусора и веточек pipewire и Xvfb, во всех вариациях ОС и middleware, аж целая матрица получилась 😎

Ещё вчера вечером чинил отвалившуюся сборку под MacOS в CI, но это уже другая история 😅

Так что теперь бампать версии софта внутри контейнера я могу одним лёгким движением руки, и если что-то где-то отъебнёт, я тут же про это узнаю и быстро, решительно починю. Обожаю возиться с автоматизацией сборки софта ☺️
8😁4🔥1🫡1
#мемасики

По мотивам поста в Lisp Forever: в лисповой записи
(-> obj foo bar baz)


меньше скобок, чем в семантически аналогичной мейнстримной

obj.foo().bar().baz()



Я помню, что обещал тёзке Commander_Trashdin поучаствовать в синтаксической специальной олимпиаде, показав красоту синтаксиса лиспов на практических примерах, но чёт навалилось столько дел, что нет времени на писькомерство, а надо бы 😅
👍8
#лытдыбр #common_lisp

Небольшой сник-пик новой библиотеки, над которой я работал последнюю пару недель и уже причёсываю для того, чтобы выложить в паблик. Кто пользовался этим веб-интерфейсом (для взаимодействия с которым библиотека), наверняка вздрогнул, увидев скриншот, такое не забывается 😅
😁4
#лытдыбр #common_lisp

Ну штош, отболев традиционную зимнюю ОРВИ, я наконец добил проект, который пилил пол-февраля, необходимый для отчётов об ошибках в играх: окошко "Hey guys, we got a big error here" со стек-трейсом — это, конечно, прикольная пасхалка, но рядовой пользователь никогда в жизни не будет его скриншотить, а тем более ещё искать, куда отправить. Шынмера для таких целей запилила целое своё серверное приложение по имени Feedback и клиент к нему в рамках своего движка Trial, увидев которые, мой внутренний software engineer немножко умер внутри, потому что же уже миллион лет существует готовое решение под названием Sentry, специально предназначенное для сбора ошибок в программах на огромном количестве языков, которое можно селф-хостить, а можно использовать в облаке бесплатную версию с довольно щедрыми лимитами.

Более того, я даже нашёл неофициальный клиент для Sentry на Common Lisp, под названием cl-sentry-client, но убедился, что для сдампанных в выполняемые файлы Lisp-программ он показывает довольно бесполезные стек-трейсы, а это чуть ли не главное, что нужно для понимания сути ошибки. Посмотрел ему под капот, и немножко умер внутри ещё раз — он, на секундочку, тащит зависимостью Swank, лисповую часть плагина к Emacs для работы на Common Lisp, просто для того, чтобы получать стек-трейсы (но всё равно обсирается, потому что расположение исходных файлов при сборке не обязательно совпадает с расположением исходных файлов на машине, где программу запускают, их там вообще скорее всего не будет). Поэтому я затеял проект по написанию полноценного Sentry-клиента на Common Lisp, который бы сохранял прямо в сдампанном образе все нужные исходники и заодно поддерживал бы нужные мне фичи протокола Sentry, вроде отправки файлов и пользовательских комментариев. Прошу любить, жаловать и ставить звёздочки: lisp-sentry 😊

Теперь ничто не мешает приступить на выходных к джему 7DRL, который начнётся уже в эту полночь по UTC 🙈
🔥16👍4
У всех есть дома пакет с пакетами, а это закреп с закрепами 😅

#видео | Открытый урок "Функциональщина на C"
#статьи | ARPG на Scheme
#проекты | Roadmap d2clone-kit
#видео | Мой Twitch
#видео | Why Lisp?
#соцсети | Мой Mastodon
#видео | Волосатое лексическое окружение
#проекты | Библиотека cl-fast-ecs
#видео | Пишем свой Лисп
#проекты | Курс Clojure Developer
#проекты | SBCL с поддержкой Windows 7
#проекты | Шаблон игры на Common Lisp
#статьи | Common Lisp в разработке игр
#проекты | Игра Thoughtbound
#видео | Онлайн Lisp митап #2
#видео | Паттерн ECS и металингвистическая абстракция
#видео | Benchmarking cl-fast-ecs performance
#видео | When the code works the first time
#проекты | Библиотека cl-liballegro-nuklear
#статьи | LISP в космосе
#статьи | Геймдев на Lisp. Часть 1
#проекты | Игра Mana Break
#статьи | Мой рейтинг языков программирования
#видео | Devlog игрового движка на Common Lisp #0
#видео | Devlog #1
#видео | Devlog #2
#видео | Devlog #3
#видео | Devlog #4
#статьи | Software Should Be Memory Safe
#видео | Devlog #5
#статьи | Производительность асинхронщины на Clojure
#видео | Devlog #6
#видео | Devlog #7
#видео | Devlog #8
#проекты | Библиотека cl-aseprite
#проекты | Игра Cycle of Evil
#видео | Devlog #9
#видео | Писать игры на Lisp — кайфово!
#видео | Результат хакатона HealthSamurai
#проекты | Библиотека trivial-adjust-simple-array
#проекты | Библиотека cl-astar
#соцсети | Мой Telegram-канал с щитпостом
#статьи | Геймдев на Lisp. Часть 2
#проекты | Игра Lispy Rogue
#соцсети | Стикеры с маскотом Common Lisp
#проекты | Библиотека lisp-sentry
#соцсети | Телеграм-канал нашей инди-студии LuckyLambda
🔥192👀2😁1
Лисп в изгнании pinned «У всех есть дома пакет с пакетами, а это закреп с закрепами 😅 • #видео | Открытый урок "Функциональщина на C" • #статьи | ARPG на Scheme • #проекты | Roadmap d2clone-kit • #видео | Мой Twitch • #видео | Why Lisp? • #соцсети | Мой Mastodon • #видео | Волосатое…»
#лытдыбр #проекты

Штош, вчера в полночь по CET закончился геймджем 7DRL, и за несколько минут до этого я отправил на него игру, сделанную за ту неделю, которая оказалась весьма провальной 🙈 Я всего-то и хотел, что подшаманить внутреннюю архитектуру своего предыдущего рогалика и добавить новых мобов с новыми типами магического урона, придуманных моим товарищем, но вместо этого в начале недели решал всякие технические проблемы (старый добрый yak shaving), а потом в середине недели залип в перфекционизм и вылизывал до блеска механизмы передвижения и collision detection, опомнившись только в субботу, когда у меня нет ни UI, ни боёвки, ни экипировки, ни генерации мобов, а дедлайн уже через 48 часов. Начал в спешке всё пилить и в итоге ни фига не успел, так что отправил игру на джем с пометкой "Incomplete" — там ведь суть челленджа в том, чтобы создать за 168 часов законченный рогалик.

В общем, хорошо, что успел переделать нормально движение и учёт коллизий, и заодно начал делать атрибуты персонажей в рамках ECS архитектуры. Также стала очевидной пара технических проблем, на которые нужно обратить внимание. В общем, теперь пора сконцентрироваться на предстоящем в этом году релизе игры в Steam и его маркетинге 💪
👍10🔥3
#лытдыбр #common_lisp #проекты

Между делом в рамках подготовки демо будущей игры (это уже третья итерация рогалика, лол) напилил в своём ECS-микрофреймворке для лиспа новых крутых фичей: хелпер-функции для сброса состояния компонента на дефолтные значения, макрос DEFENTITY для определения глобальных переменных с автоматически инициализируемыми сущностями, и самая мякотка — генерируемые слоты у компонентов, прямо как в SQL GENERATED STORED, потому что уже надоело городить костыли для автоматического подсчёта номера тайла исходя из координат на экране 🙈 Надо будет разобраться с выкладыванием в Guix и зафейленными тестами, лол, и делать новый релиз 0.7.

Ещё и переписал всю внутрянку библиотеки для деревьев поведения cl-fast-behavior-trees, чтобы было легче менять деревья на лету во время разработки, но эти изменения пока не закоммитил — надо опробовать либу в деле, на демо рогалика 😊

В общем, в планах в ближайшее время сбацать клёвое демо и далее работать над ним, чтобы можно было его показывать незнакомым людям после фразы "а я вообще-то в виде хобби видеоигры разрабатываю" 😁
👍11🔥2
#common_lisp

Меж всем тем, в январе этого года тихо и незаметно вышла новая версия самой распространённой middleware-библиотеки для создания игр SDL, 3.2, которая ломает совместимость с существовавшей уже лет десять SDL2. Биндинги Common Lisp к SDL были традиционно низкого качества и кишели багами и фичами-медвежьими услугами, и вот тут человечек из CL-сообщества подсуетился и сделал бинды к SDL3. Вроде на первый взгляд выглядят неплохо, т.к. написаны, судя по всему, вручную, а не через кривой генератор, как к SDL2. Я-то уже прикипел к менее распространённому middleware liballegro, но cl-sdl3 стоит взять на заметку лисперам-игроделам, привыкшим к обилию туториалов и документации по используемым инструментам 😊
🔥13
#лытдыбр #common_lisp

А сегодня с утра тихо и незаметно вышла новая версия 0.7 моего ECS-микрофреймворка для Common Lisp cl-fast-ecs. Из крутых изменений, как я уже проспойлерил, макрос DEFENTITY для определения глобальных сущностей, генерируемые слоты, дженерик RESET-COMPONENT и дженерик ASSIGN-COMPONENT. Не обошлось и без поломанной обратной совместимости: функция BIND-STORAGE удалена, вместо неё достаточно вызвать MAKE-STORAGE для инициализации фреймворка; а feature expression :ECS-UNSAFE, добавляющий процентов 5 производительности ценой возможности переопределения компонентов был переименован в :ECS-RELEASE. Соответствующие изменения уже внесены в обе части туториала, а документация теперь всегда соответствует версии библиотеки в репозитории Lucky Lambda 🎉

Теперь можно заниматься дальше деревьями поведения и дёмкой будущего рогалика 😊
👍11🔥32
#лытдыбр #соцсети

Наконец осилил сделать телеграм-канал нашей с товарищем игровой студии для целей продвижения среди не-программистов 😅

Подпишитесь и расскажите о нас друзьям)
12👍6
#лытдыбр

Угадайте, кто вчера был на стендапе самой недооценённой комикессы России? 🤚😊
🔥21👏5
#лытдыбр #common_lisp

Наконец закоммитил огромный внутренний рефакторинг своей библиотеки для деревьев поведения cl-fast-behavior-trees. Проверил на практике (в демо нашего нового рогалика, оставайтесь тунцом — завтра, даст Будда, выложу в паблик), работает без сучка без задоринки 😊

Версию библиотеки пока не стал бампать, есть ещё идея, как там ещё чутка соптимизировать, хотя, казалось бы, куда уж дальше — теперь на одно дерево поведения создаётся только один ECS-компонент и одна система, а не целая пачка, как раньше 😅

В общем, происходит буйство перфекционизма))
🔥12
Forwarded from LuckyLambda
В этот погожий субботний день мы хотим влиться в традицию рассказывать о прогрессе разработки инди-игр за неделю, известную как #ScreenShotSaturday, и наконец поделиться с вами текущей версией демо нашей игры 😊

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

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

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

Буквально в последний момент добавили перезапуск уровня по нажатию клавиши 0, так что можно полюбоваться различными процедурно генерируемыми подземельями ☺️

Демо можно скачать по ссылке или установить из клиента платформы Itch, который почти такой же удобный, как клиент Steam 😌. Пишите в комментариях здесь или на itch.io, что вы думаете о демо и что хотели бы увидеть в дальнейшем, мы читаем все комментарии и прислушиваемся к вашему мнению!
🔥4