This media is not supported in your browser
VIEW IN TELEGRAM
Покойся с миром, мой кумир.
Россия будет свободной.
Россия будет свободной.
❤12💩3👎1😁1
#проекты #devlog #common_lisp
И снова наступило время выкладывать девлог за неделю, на этот раз тоже не очень большой.
https://youtu.be/zX3GrSPboGw
И снова наступило время выкладывать девлог за неделю, на этот раз тоже не очень большой.
https://youtu.be/zX3GrSPboGw
YouTube
LISP Game Engine devlog #5
Weekly devlog of my Common Lisp-based game engine.
Common Lisp game tutorial: https://awkravchuk.itch.io/cl-fast-ecs/devlog/622054/gamedev-in-lisp-part-1-ecs-and-metalinguistic-abstraction
Tutorial repository: https://github.com/lockie/ecs-tutorial-1
Thoughtbound…
Common Lisp game tutorial: https://awkravchuk.itch.io/cl-fast-ecs/devlog/622054/gamedev-in-lisp-part-1-ecs-and-metalinguistic-abstraction
Tutorial repository: https://github.com/lockie/ecs-tutorial-1
Thoughtbound…
👍3
#лытдыбр
Вчера, в 1:55 ночи по тихоокеанскому стандартному времени, сам Роберт Смит, автор Coalton(строго типизированной надстройки над Common Lisp) одобрительно твитнул ссылку на 1 часть моего туториала по геймдеву на Common Lisp, а потом его ретвитнул, на секундочку, сам Пол Грэм, популяризатор лиспов ещё с девяностых, автор книг «On Lisp» и «ANSI Common Lisp» и сооснователь Y Combinator.
Ещё её Сионеску репостнул, но это уже не так впечатляюще, хотя тоже человечек в наших кругах известный)
В принципе, жизнь можно считать прожитой не зря 😊
Вчера, в 1:55 ночи по тихоокеанскому стандартному времени, сам Роберт Смит, автор Coalton
X (formerly Twitter)
'(Robert Smith) (@stylewarning) on X
A great getting-started article by @awkravchuk to do game programming in Common Lisp: https://t.co/yldQzTR2Ig
🔥20👍3👏2
#лытдыбр #clojure
Между делом тут решил сделать небольшой пет-проект на злобу дня в виде вебсервиса на Clojure. Примерно прикинул используемый стек и куда и как буду развёртывать, начал писать код, разбирая шаблон Luminus на отдельные запчасти и выкидывая ненужные. И вот встал вопрос взаимодействия вебсервиса с БД, и тут я задумался.
Штука в том, что в подавляющем большинстве случаев в Java и, как следствие, в Clojure вопросы масштабирования всегда решаются тред-пулами, хотя вот уже лет десять как самый модный подход для их решения — асинхронщина на основе интерфейсов мультиплексирования ввода-вывода а-ля, не то что лисперский чатик, в котором мы только и знаем, что про коммунизм сраться 😅 . Там мне объяснили, что нужно не выёживаться и использовать тред-пулы 😁 Я решил показать преимущества асинхронного подхода на примере и вчера уже к ночи сделал бенчмарк на чистой сишечке, чтобы не оглядываться на рантайм языка.
Как бенчмарк устроен:
1. Два варианта, синхронный и асинхронный. Оба запускаются с заданным количеством тредов и запускают в каждом серверный цикл, с помощью флажка
2. Сценарий обработки следующий: дожидаемся конца запроса от клиента (путём поиска
3. Синхронный вариант ждёт ответа от БД в блокирующем режиме; таким образом, для него 1 тред = 1 обрабатываемый в данный момент клиент.
4. Асинхронный вариант отправляет запрос в БД, закидывает сокет соединения с БД в общий eventloop и уходит на следующую его итерацию, таким образом, один тред с одним циклом событий может "одновременно" обрабатывать сколь угодно много клиентов. Всегда мечтал поиспользовать C-шный интерфейс к
5. Для теста использовал
По результатам асинхронный вариант изи достиг максимальной производительности в два потока (строго говоря, даже в один, но что я, зря код для многопоточного epoll писал 😂). В то же время синхронному варианту для этого понадобилось 100 тредов, да и то была парочка таймаутов; собственно, по дефолту в PostgreSQL
Написал в кложа-чатике, но там меня снова убедили, что с тред-пулом по сути всё то же самое, просто нужно аккуратно его настроить, и накидали ссылок для изучения ❤️
Между делом тут решил сделать небольшой пет-проект на злобу дня в виде вебсервиса на Clojure. Примерно прикинул используемый стек и куда и как буду развёртывать, начал писать код, разбирая шаблон Luminus на отдельные запчасти и выкидывая ненужные. И вот встал вопрос взаимодействия вебсервиса с БД, и тут я задумался.
Штука в том, что в подавляющем большинстве случаев в Java и, как следствие, в Clojure вопросы масштабирования всегда решаются тред-пулами, хотя вот уже лет десять как самый модный подход для их решения — асинхронщина на основе интерфейсов мультиплексирования ввода-вывода а-ля
epoll(7)
в Linux или kqueue(2)
в *BSD. Полез подробнее изучать вопрос, выяснилось, что на самом деле в топе известных бенчмарков от Techempower по Clojure находится решение с асинхронным жабовским сервером Undertow и очень экспериментальным асинхронным драйвером БД от наших финских коллег из Metosin porsas. Поспрашивал в русскоязычном чатике по Clojure, кстати, очень крутое сообществоКак бенчмарк устроен:
1. Два варианта, синхронный и асинхронный. Оба запускаются с заданным количеством тредов и запускают в каждом серверный цикл, с помощью флажка
SO_REUSEPORT
на серверном сокете.2. Сценарий обработки следующий: дожидаемся конца запроса от клиента (путём поиска
\r\n\r\n
в конце буфера), делаем в PostgreSQL запрос SELECT pg_sleep(5)
, отвечаем клиенту HTTP/1.0 204 No Content
, обрываем соединение.3. Синхронный вариант ждёт ответа от БД в блокирующем режиме; таким образом, для него 1 тред = 1 обрабатываемый в данный момент клиент.
4. Асинхронный вариант отправляет запрос в БД, закидывает сокет соединения с БД в общий eventloop и уходит на следующую его итерацию, таким образом, один тред с одним циклом событий может "одновременно" обрабатывать сколь угодно много клиентов. Всегда мечтал поиспользовать C-шный интерфейс к
libpq
в асинхронном режиме, вот и довелось, правда, место в документации, где этот вариант описывается, зачитал до дыр, прежде чем сделал 😅5. Для теста использовал
wrk
с 10 одновременными соединениями в течение минуты, таким образом, максимальная теоретическая производительность в этом бенчмарке — 10 / 5 = 2 запроса в секунду; напомню, запрос обрабатывается минимум 5 секунд из-за эмуляции медленных запросов в базе через pg_sleep(5)
.По результатам асинхронный вариант изи достиг максимальной производительности в два потока (строго говоря, даже в один, но что я, зря код для многопоточного epoll писал 😂). В то же время синхронному варианту для этого понадобилось 100 тредов, да и то была парочка таймаутов; собственно, по дефолту в PostgreSQL
max_connections
как раз 100, и мне было лень его подкручивать выше.Написал в кложа-чатике, но там меня снова убедили, что с тред-пулом по сути всё то же самое, просто нужно аккуратно его настроить, и накидали ссылок для изучения ❤️
GitLab
Andrew Kravchuk / async-benchmark · GitLab
❤6🔥1
#проекты #devlog #common_lisp
Очередная суббота, очередной девлог игрового движка на Common Lisp 😊
https://youtu.be/wdLd_mzMd2k
Очередная суббота, очередной девлог игрового движка на Common Lisp 😊
https://youtu.be/wdLd_mzMd2k
YouTube
LISP Game Engine devlog #6
Weekly devlog of my Common Lisp-based game engine.
SBCL builds compatible with Windows7: https://github.com/lockie/sbcl-w7
Docker images for Common Lisp game development: https://hub.docker.com/r/lockie/docker-lisp-gamedev
Common Lisp game template: htt…
SBCL builds compatible with Windows7: https://github.com/lockie/sbcl-w7
Docker images for Common Lisp game development: https://hub.docker.com/r/lockie/docker-lisp-gamedev
Common Lisp game template: htt…
❤3👍3
#мемасики
Заорал, как говорится, в голоса потом вспомнил, что я на ноутбуке Manjaro уже несколько месяцев не обновлял 😭
Заорал, как говорится, в голос
😁6
#проекты #devlog #common_lisp
И уикэнд снова начинается с девлога игрового движка на Common Lisp за неделю ☺️
https://youtu.be/weEOTK879MI
И уикэнд снова начинается с девлога игрового движка на Common Lisp за неделю ☺️
https://youtu.be/weEOTK879MI
YouTube
LISP Game Engine devlog #7
Weekly devlog of my Common Lisp-based game engine.
My mastodon: https://functional.cafe/@awkravchuk
Premultiplied alpha PNG issue: https://github.com/liballeg/allegro5/issues/1531
Part 1 of Common Lisp game tutorial: https://awkravchuk.itch.io/cl-fast-e…
My mastodon: https://functional.cafe/@awkravchuk
Premultiplied alpha PNG issue: https://github.com/liballeg/allegro5/issues/1531
Part 1 of Common Lisp game tutorial: https://awkravchuk.itch.io/cl-fast-e…
🔥5
#лытдыбр
Представьте себе, что у вас есть старенькая эргономическая клавиатура с механическими свичами, например, Dygma Raise, и худо-бедно она вас устраивала, но в какой-то момент в ней от старости начали дребезжать контакты и некоторые кнопки начали срабатывать по два и более раз от одного нажатия, и вы психанули и составили подробную таблицу-сравнение всех эргономических механических клавиатур, чтобы выбрать новую.
Представили? А мне и представлять не надо 😅
Представьте себе, что у вас есть старенькая эргономическая клавиатура с механическими свичами, например, Dygma Raise, и худо-бедно она вас устраивала, но в какой-то момент в ней от старости начали дребезжать контакты и некоторые кнопки начали срабатывать по два и более раз от одного нажатия, и вы психанули и составили подробную таблицу-сравнение всех эргономических механических клавиатур, чтобы выбрать новую.
Представили? А мне и представлять не надо 😅
👍2😭1
#проекты #devlog #common_lisp
Итак, подъехал небольшой девлог игрового движка на Common Lisp 😊
https://youtu.be/9Bg-gBnsUI8
Итак, подъехал небольшой девлог игрового движка на Common Lisp 😊
https://youtu.be/9Bg-gBnsUI8
🔥5
#лытдыбр
На этой неделе ничего не постил, потому что в прошлое воскресенье, намереваясь почесать глаз, ткнул в него так, что повредил роговицу 🙈 Был у liječnik oftalmolog, вроде уже зажило, но пока тяжко смотреть в монитор больше получаса, начинает болеть.
В рамках постепенного возвращения к трудовой деятельности хватился, что вышел новый релиз SBCL 2.4.3, так что сделал новый билд инсталлятора под виндус с поддержкой W7 и Docker-образов для геймдева на Lisp 😊
На этой неделе ничего не постил, потому что в прошлое воскресенье, намереваясь почесать глаз, ткнул в него так, что повредил роговицу 🙈 Был у liječnik oftalmolog, вроде уже зажило, но пока тяжко смотреть в монитор больше получаса, начинает болеть.
В рамках постепенного возвращения к трудовой деятельности хватился, что вышел новый релиз SBCL 2.4.3, так что сделал новый билд инсталлятора под виндус с поддержкой W7 и Docker-образов для геймдева на Lisp 😊
👀6
Лисп в изгнании
#лытдыбр Представьте себе, что у вас есть старенькая эргономическая клавиатура с механическими свичами, например, Dygma Raise, и худо-бедно она вас устраивала, но в какой-то момент в ней от старости начали дребезжать контакты и некоторые кнопки начали срабатывать…
#лытдыбр
Посмотрите-ка, какая красотка ко мне подъехала 😊 (только на крошки от печенья на столе не смотрите, мне стыдно))
Как всегда в генте, пришлось конпелировать ядро, чтобы перепрошить дефолтное расположение некоторых клавиш. Ну и этот текст неиронично набирал минуты три, потому что ортолинейная раскладка чудовищно непривычна 🙈
Посмотрите-ка, какая красотка ко мне подъехала 😊 (только на крошки от печенья на столе не смотрите, мне стыдно))
🔥12😱1🙏1🙈1
#лытдыбр
Мужчины такие типа "да нет у меня депрессии", а сами потом заменяют оконный менеджер на написанный на Haskell XMonad, чтобы почувствовать хоть что-то 😅
Мужчины такие типа "да нет у меня депрессии", а сами потом заменяют оконный менеджер на написанный на Haskell XMonad, чтобы почувствовать хоть что-то 😅
😁4💯3👍2😢1🏆1
#лытдыбр #haskell
Между делом потихоньку обживаю XMonad. Нравится гораздо больше i3, потому что в последнем очень часто в каких-то мелочах окна на рабочем столе ведут себя неким конкретным ненастраиваемым образом, и ты такой с лицом грустной лягушки думаешь, "ну вот, теперь я так живу", а в XMonad можно тонко настроить любую мелочь.
Ну и да, у нейросетей тоже едет крыша от попыток писать код на Haskell (см. рис. 1) 😂
Между делом потихоньку обживаю XMonad. Нравится гораздо больше i3, потому что в последнем очень часто в каких-то мелочах окна на рабочем столе ведут себя неким конкретным ненастраиваемым образом, и ты такой с лицом грустной лягушки думаешь, "ну вот, теперь я так живу", а в XMonad можно тонко настроить любую мелочь.
Ну и да, у нейросетей тоже едет крыша от попыток писать код на Haskell (см. рис. 1) 😂
😁5
#лытдыбр #мемасики #clojure
Создал так называемый интернет-мэм, начитавшись в социальной сети Тваттер срачей "Авторизация через OAuth-провайдеров vs классическая самодельная по паролю", в которых апологеты последней всё никак не могут внятно сформулировать, чем плоха авторизация с помощью провайдера таковой, который уже решил все вопросы с безопасностью, "GOOGLE BAD" и всё тут.
В веб-сервисе на Clojure, который я пилю в свободное от работы время, конечно, авторизация будет отдана на аутсорс (уже наладил через Google), я пока не настолько сошёл с ума, чтобы вручную реализовывать такую важную вещь, или полагаться на Clojure-овский buddy, который, мягко говоря, заброшен 😅
Создал так называемый интернет-мэм, начитавшись в социальной сети Тваттер срачей "Авторизация через OAuth-провайдеров vs классическая самодельная по паролю", в которых апологеты последней всё никак не могут внятно сформулировать, чем плоха авторизация с помощью провайдера таковой, который уже решил все вопросы с безопасностью, "GOOGLE BAD" и всё тут.
В веб-сервисе на Clojure, который я пилю в свободное от работы время, конечно, авторизация будет отдана на аутсорс (уже наладил через Google), я пока не настолько сошёл с ума, чтобы вручную реализовывать такую важную вещь, или полагаться на Clojure-овский buddy, который, мягко говоря, заброшен 😅
👍3
#лытдыбр #common_lisp
Good news, everyone! В этом году состоится регулярный весенний Lisp Game Jam, только организаторы его зачем-то сдвинули на месяц, так что он будет проходить с 17 мая по 27. Как раз самое время, чтобы вытащить себя из депрессивной фазы и напилить кодовых заготовочек к началу джема, чем я завтра и займусь — традиционно отмечу праздник труда, собственно, ударным трудом 😋
Good news, everyone! В этом году состоится регулярный весенний Lisp Game Jam, только организаторы его зачем-то сдвинули на месяц, так что он будет проходить с 17 мая по 27. Как раз самое время, чтобы вытащить себя из депрессивной фазы и напилить кодовых заготовочек к началу джема, чем я завтра и займусь — традиционно отмечу праздник труда, собственно, ударным трудом 😋
itch.io
Spring Lisp Game Jam 2024
A game jam from 2024-05-17 to 2024-06-03 hosted by David Thompson & technomancy. Lisp Game Jam is a recurring game jam taking place for a full 10 days. After the jam has finished, 3 days are given to everyone to try out the game su...
👏7🔥1
Надо же, ASMR установка Gentoo ASMR, или Autonomous Sensory Meridian Response, если кто не в курсе, это жанр видео, в которых симпатичные девушки шепчут и шкрябают коготками в выкрученный на полную чувствительность микрофон .
Попробовать, что ли, себя в этом жанре. Так и представляю, ASMR "выгоревший сеньор клепает видеоигры на Common Lisp" 😅😂
Попробовать, что ли, себя в этом жанре. Так и представляю, ASMR "выгоревший сеньор клепает видеоигры на Common Lisp" 😅😂
😁3😍1
Forwarded from memory heap (Artyom "avp" Poptsov)
#linux
Wolfgang, "ASMR Installing Gentoo Linux":
https://youtu.be/CopPj3S3YQ0
Я не любитель ASMR, но выглядит занятно — процесс установки хорошо показан, ничего особо лишнего. Напомнило, как в былое время я сам устанавливал Gentoo (в том числе, в режиме повышенной сложности — Hardened Gentoo.) Полезный опыт был, не жалею, что время потратил на изучение нюансов настройки и сборки ядра, а также окружения.
Зажигание свечи на перед настройкой и сборкой ядра (таймкод 10:00) очевидно призвано отпугнуть тёмные силы перед началом священного процесса, как пользователи отметили в комментариях к видео на YouTube. 😉 Хотя я бы на месте автора зажёг пять свечей и поставил системный блок в центр получившегося круга.
Wolfgang, "ASMR Installing Gentoo Linux":
https://youtu.be/CopPj3S3YQ0
Я не любитель ASMR, но выглядит занятно — процесс установки хорошо показан, ничего особо лишнего. Напомнило, как в былое время я сам устанавливал Gentoo (в том числе, в режиме повышенной сложности — Hardened Gentoo.) Полезный опыт был, не жалею, что время потратил на изучение нюансов настройки и сборки ядра, а также окружения.
Зажигание свечи на перед настройкой и сборкой ядра (таймкод 10:00) очевидно призвано отпугнуть тёмные силы перед началом священного процесса, как пользователи отметили в комментариях к видео на YouTube. 😉 Хотя я бы на месте автора зажёг пять свечей и поставил системный блок в центр получившегося круга.
YouTube
ASMR Installing Gentoo Linux (No Talking, Mechanical Keyboard, 4K)
The long-awaited rework of my 2018 ASMR video is finally here! This time with binaural sound, a new CPU and in glorious 4K.
I cut out most of the long compilation segments, (as well as me stumbling through menuconfig), the installation itself took about 10…
I cut out most of the long compilation segments, (as well as me stumbling through menuconfig), the installation itself took about 10…
👍1🔥1
#лытдыбр #common_lisp
Наконец на этой неделе в рамках подготовки к предстоящему весеннему Lisp Game Jam (уже в следующую пятницу! 😱) и заодно раздербанивания кода
Получившуюся библиотеку
Наконец на этой неделе в рамках подготовки к предстоящему весеннему Lisp Game Jam (уже в следующую пятницу! 😱) и заодно раздербанивания кода
d2clone-kit
на отдельные красивые слабо связные компоненты, взял на себя труд начать делать TODO-шку, которой уже года два минимум, а именно — переписать по-человечески парсер формата aseprite для одноименного редактора спрайтов. Взял для этого библиотеку lisp-binary, которая позволяет не только описать в декларативном виде внутренности формата (см. рис. 1), но и легко расширяется кастомным кодом, запускаемым во время разбора файла, в общем, невероятно клёвая и мощная штука — по сути, за пару дней я смог накатать парсер довольно нетривиального бинарного формата.Получившуюся библиотеку
cl-aseprite
выложу в паблик чуть позже (она требует основательного причёсывания), а в понедельник можно начать поверх неё делать загрузку персонажей в заготовочку для геймджема 😊🔥5❤1👍1