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

По всем вопросам @awkravchuk
Download Telegram
#лытдыбр #common_lisp

И вот библиотека cl-aseprite для чтения файлов пиксельного редактора анимаций Aseprite в новой версии 0.1.0 обзавелась комплектом тестов и красивой страничкой документации 😊

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

Вот так потихоньку вырисовываются черты ресурсной системы движка 😌
👏6
#лытдыбр #common_lisp

Закоммитил функцию, с помощью которой строил демонстрационную картиночку к митапу HealthSamurai. С помощью неё можно творить, например, вот такую красоту (см. рис. 1) 😊

Зато памяти жрёт чёртову прорву, когда я строил ту картиночку, бенчмарк для бедных системный макрос time мне сообщал, что она нагенерила ~700 кб мусора 😱
7😱1
#лытдыбр #common_lisp

Вчера натолкнулся на вот такой замечательный инструмент для построения графа зависимостей Common Lisp-овых систем — это так на CL-овском жаргоне по сути называется то, что в других языках зовётся библиотекой, только, как всегда, более гибкое 😊 Причём впервые такого рода инструмент у меня заработал без проблем, плюс в нём есть крутая фича по выводу лицензий всех зависимостей. Решил из интереса натравить его на последний проект, игру Cycle of Evil, и тут я с ужасом вижу в списке лицензий, помимо крайне либеральных MIT, zlib, и вовсе Public Domain, вирусную GPLv3 у библиотеки lisp-binary, от которой зависит моя новая либа для чтения Aseprite-файлов, и с ужасом же вспоминаю, почему я 4 года назад, когда делал разбор Aseprite-файлов в своём проекте d2clone-kit, не стал брать lisp-binary — хоть она клёвая и предоставляет удобный и мощный DSL для разбора бинарных файлов, вирусная GPL накладывает серьёзные ограничения на потенциальных пользователей моего кода.

Пришлось под шумок перелицензировать и Cycle of Evil, и либу cl-aseprite под той же GPLv3, чтобы её юзерам сразу было понятно, что почём 😩
Видимо, придётся-таки, как я и думал, хранить анимации в Tiled-файлах, но там тоже есть свои ограничения — остаётся надеяться на его, Tiled, быстрое развитие, хоть уже сам сдувай пыль со своих C++/Qt навыков и лепи пуллреквесты 😅
#анонс

Коллеги организуют, надеюсь и сам попробовать поучаствовать 😅
Forwarded from Haiku
Всем привет!
Ребята, присоединяйтесь к хакатону от Самураев с 26 по 28 июня. Отличная возможность для тех, у кого есть интересный проект/идея, но не доходят руки! 😉

Если коротко про формат, то:
Дата: 26-28 июня
Формат: оффлайн + онлайн
Приз: $1000
Проект: новый, без объемных наработок
Тема: любая (+1 балл за Health IT, FHIR, Aidbox)
Стек технологий: любой, можно использовать ИИ (за ФП – сердечко от оргов)
Команда: 2-9 человек
Победителя выбирают сами участники голосованием

А если ты в Черногории, то приходи к нам на виллу, похакатоним оффлайн. Будет бассейн, настольный теннис и разные приколюхи.

Участие бесплатно, необходимо зарегистрироваться здесь.
5
#лытдыбр #emacs

Что-то я всю эту неделю тюленил под кондиком, спасаясь от сорокаградусной жары пытался настроить почту в Emacs, ибо Thunderbird, которым я пользовался до этого, как в анекдоте про воздушные шарики, бракованный, потому что не радует 😅

Сначала попробовал вроде бы более популярный notmuch, но быстро понял, что там нужно построить целую машину Голдберга из шелл-скриптов для того, чтобы вся локальная почта правильно синхронизировалась с GMail. По ходу дела ещё выяснилось, что в GMail придётся включить авторизацию по "паролю приложения" и интерфейс поменять на английский (чтобы имена папок были правильные), и что Python (и, по продолжению, offlineimap) до сих пор не умеет правильно считывать мультиаккаунтный .netrc, лол. В итоге плюнул и всё сделал на mu4e + mbsync, и оказалось, что mu4e мало того, что гмыло поддерживает почти целиком из коробки, так ещё и невероятно красив и пугающе удобен, я уже с трудом понимаю, как я жил до него 😊

Последние пару дней вазюкался с неправильным удалением почты, аж тред на реддите создал, но таки в конечном итоге всё победил) Тут хочется сказать большое спасибо очень дружелюбному русскоязычному емакс-коммьюнити и отдельно Андрею Орсту 🫶

Ну и только что закоммитил все конфиги себе в репу с дотфайлами, чтобы сохранилось на века 😁
🔥72👍21
#проекты #clojure

На той неделе поучаствовал в летнем хакатоне HealthSamurai, где умудрился за три дня пройти от давно вынашиваемой идеи до рабочего прототипа и сделал на Clojure бота, уведомляющего об обновлениях версий используемых библиотек в произвольных проектах (ну как произвольных, пока только на Clojure и Python), этакий аналог Snyk, но в телеграме. Вот видос с таймкодом, где я рассказываю о том, что удалось сделать на хакатоне, а вот и сам бот — он пока в открытом бета-тесте и бесплатный 😊
👍82
#лытдыбр #проекты #common_lisp

Сегодня с утреца в рамках акции растаскивания кодовой базы моего старого проекта d2clone-kit на отдельные хорошо протестированные и задокументированные запчасти с чётким интерфейсом наконец доделал то, что собирался уже очень давно — вытащил в отдельную библиотеку макрос для изменения размера простых массивов Common Lisp, вот она: trivial-adjust-simple-array. Ну и по ходу дела зарефакторил ECS-библиотеку с её использованием.

Возможно, какой-нибудь седобородый лисп-старец, несмотря на мои подробные оправдания объяснения в Readme, зачем это, объяснил бы мне, что я делаю фигню и эта библиотека не нужна, но у меня таких знакомых нет 😅
🔥5
#лытдыбр

А ещё на той неделе впервые в жизни побывал на подкасте, посвящённом лиспам, брейкбиту, BSD-системам, климактическому кризису, многопользовательским текстовым адвенчурам и другим гиковским вещам, за авторством широко известного в узких кругах screwtape (он же screwlisp), подпишитесь на него, он странный, но клёвый. Правда, запись похерилась и из часа подкаста остались только первые 15 минут, да ещё и сайт с архивами подкаста вообще сейчас лежит 😅 Но вышло очень продуктивно — вынес пару идей по поводу того, на какие штуки стоит обратить внимание в разработке игрового движка на Common Lisp 😊
5🔥1
#лытдыбр #common_lisp

Дописал сегодня с утра тесты к фиче ECS-фреймворка, сделанной ещё в пятницу — возможности задать порядок выполнения систем; она у меня давно болталась на первых местах TODO-листа, даже вон люди про неё issue уже создают 😅

Оказалось, что "топологическая сортировка" только звучит страшно, а на самом деле — по сути банальный обход графа в глубину, который я на лиспе осилил сделать за пару часов 😊
🔥83
О, на видосике я и кондей 😋
This media is not supported in your browser
VIEW IN TELEGRAM
🇲🇪 В Черногории все еще красный уровень опасности из-за жары, температура сегодня будет около 40 градусов.

Черногория-Новости
😢53👍1🫡1
#common_lisp #лытдыбр

Немного инсайдерской инфы: судя по тому, что бессменный автор де-факто стандартного пакетного менеджера для CL Quicklisp, Zach Beane, запостил на той неделе issue по поводу warning'а компиляции в моей библиотеке cl-fast-ecs, входящей в Quicklisp, и развешал тегов canbuild и cantbuild в репозитории с заявками на включение в дистрибуцию, есть подозрение, что в ближайшее время нас может ждать новый релиз Quicklisp. Ну или нет 🤷‍♂️ с инсайдерской инфой всегда так)
👾1
#common_lisp #лытдыбр

"Ни месяца без новой опенсорсной библиотеки", — под таким жизнеутверждающим лозунгом выложил новый микрофреймворк на Common Lisp для нахождения маршрутов в играх алгоритмом A*, cl-astar. Почему микрофреймворк? Потому что там всё на макросах, я ж у мамы амбассадор лингвистической абстракции 😊 Библиотека выстроена вокруг макроса DEFINE-PATH-FINDER, в который прокидываются результаты вызова других вспомогательных макросов и лямбд, задающих требуемые параметры — тип координат, функция стоимости передвижения, эвристика оценки расстояния до цели, определение соседей у узла маршрута, способ обработки результата и прочее, и этот супермакрос из всех этих веточек и мусора собирает функцию, которая и будет искать маршрут. Причём результирующая функция сильно вылизана с точки зрения оптимизации, по результатам бенчмарков находит путь в рандомном лабиринте из 100x100 узлов чуть меньше, чем за миллисекунду, что не сильно медленнее реализаций этого алгоритма на C++ 💪

Уже переписал с использованием этого микрофреймворка передвижение персонажей в последнем шедевре Cycle of Evil, и оно сразу стало более адекватным. Собственно, микрофреймворк уже доступен в Quicklisp-репозитории LuckyLambda и распространяется по либеральной MIT-лицензии, так что призываю к его использованию в ваших проектах 😊
🔥18👍2
#лытдыбр #мемасики #scheme #common_lisp

Наткнулся тут в недавней статье про Medley/Interlisp на шикарное сравнение:
• Scheme — это экзотический спорткар. Быстрый. На ручной коробке. Без радио.
• Emacs Lisp — это Subaru GL 4WD 1984 года: "машина, которая всегда впереди тебя".
• Common Lisp — это Ходячий замок Хаула 🤣
😁5
#лытдыбр #проекты

Принял стратегическое решение отключить бота для слежения за обновлениями — популярностью он не пользоваться, рекламой заниматься я не умею, а если начинать учиться, то с другими моими проектами получится, как на приложенном мемасике 😅

Благо, удалось извлечь из этого проекта пользу: он был развёрнут на FreeBSD и PostgreSQL поверх OpenZFS, и теперь я из практики знаю, как обращаться с этим ультрахардкорным стеком 😊
🔥6👍1🙈1
#лытдыбр #common_lisp

Сделал ещё один маленький шажок к ресурсной системе игрового движка на CL — теперь при запуске автоматически происходит переход в каталог с ресурсами, причём хоть при загрузке кода в Emacs, хоть при запуске из сдампанного lisp-образа, хоть из линуксового AppImage 😊

Соответствующие изменения уже есть в последней версии нашего крайнего шедевра Cycle of Evil, в шаблоне игры на Common Lisp и в туториале по cl-fast-ecs я уже вот-вот накоплю силы для второй части, честно-честно 😅
🔥13
#мысль_в_душе #common_lisp

По результатам обсуждения макросов CL в коммьюнити Lisp forever пришла в голову такая мысль: не секрет, что в большинстве лиспов у функций сохраняется информация об исходном коде, так что, например, при возникновении исключительной ситуации в стек-трейсе можно написать что-то в духе (foo) from foo.lisp line 42. Почему бы не сохранять также для каждой строчки инфу о раскрытых макросах, которые были на этой строчке, чтобы ещё можно было написать, типа, (foo) from macro expansion of (with-open-file) in foo.lisp line 42?

С каждым днём мне всё труднее удерживать себя от того, чтобы бросить всё и начать пилить свой супербыстрый и суперкрутой диалект лиспа 😅
5👍3