brain_dump_etc
641 subscribers
101 photos
4 videos
3 files
402 links
Дампы мыслей, свалка ссылок, программизмы, вкусовщина!

Автор: @astynax
Донаты (patreon и прочее): https://astynax.me/support.html
Чат: https://xn--r1a.website/brain_dump_chat
Twitch: https://www.twitch.tv/astynax2hs
Discord: https://discord.gg/tJvze5
Download Telegram
Интересная штука - Urn, #lisp (Lisp-1) для #lua:
https://squiddev.github.io/urn

Умеет compile time макросы, выдаёт самодостаточные Lua-файлы, REPL тоже в наличии, разумеется. Есть pattern matching, что приятно. Есть threading macroses, как в #clojure. Вобщем, неплохой вариант в ситуации, когда нужно что-то написать для Lua VM, но именно на Lua писать не хочется или же просто хочется S-выражений :)
Захотелось недавно #generative_art потворить.

Сначала взял #elm. Наткнулся на проблему с фатальным недостатком подхода к генерации случайных значений в стандартной библиотеке (которую можно решить сторонней либой, но я тогда про неё ещё не знал). Потом ещё и 0.19 вышла, где "всё сломали". И на package.elm-lang.org теперь меня не пускает без проксирования.

Решил, "хватит с меня Elm, слишком сложно для простой задачи погенерировать картинки".

Вспомнил про Quil - это такая надстройка над Processing/ProcessingJS, которые как раз и предназначены для generative art. Подумал, "Пусть без типов, но и результат сразу виден, так что проживу как-нибудь". "Расчехлил" lein, создал проект из шаблона, запускаю REPL. Внутренняя ошибка внутри либы.

Пошел смотреть в Issues. Оказалось, что проблема с #processing: оный не работает на Java 9+. Что-то у них сломалось из-за изменений в рантайме. Но чинить совместимость с Java 9 смысла нет, потому как она уже не поодерживается. А в последующих версиях уберут (убрали уже?) средства для работы с GUI - по крайней мере те, которые используются в Processing. Авторы Processing не знают, когда получится сделать поддержку какой-то из более поздних версий рентайма. Вот такая вот стабильная платформа с долгим сроком поддержки...

Может быть я ещё вернусь к Quil - #clojurescript-версия использует ProcessingJS. Но эта библиотека отстаёт по фичам от "старшего брата". ClJS не умеет макросы в рантайме. Есть и пачка других ограничений. Да и toolchain вокруг ClJS не вызывает у меня приятных воспоминаний. А когда хочется "быстренько покреативить", то отвлекаться на настройку инструментария не хочется совершенно...

В итоге я взял #racket. И там просто всё работает :) Да, есть своя специфика и язык менее красив, чем #clojure. Но графическая библиотека 2htdp/image - отличная. В JS не скомпилить, поэтому в браузер генераторы картинок уже не экспортируешь. Но жажду творчества утоляет :)
В кои-то веки выходные провёл как настоящий программист - оба дня кодил что-то (по паре часов всего в день, но всё же ;)).

****************

В Субботу ходил во второй раз на Dojo по #clojure. В этот раз на команды разбивались случайным образом, что, на мой взгляд, значительно интереснее. И полезнее для networking - на clojure-тусовки я попадаю редко, поэтому лишний шанс познакомиться с людьми, которым небезразлично ФП, меня однозначно радует :)

В прошлый раз мы писали Conway's Game of Life: получилось это. Работали двумя парами и та, в которой был я, отвечала за логику. Сделали всё на множествах через операции над ними (пересечение, объединение). Всем понравилось.

В этот же раз писали игру 2048 втроём, поэтому решили не делиться - за одним компьютером вместе творили. Решили сделать упор на логику, а интерфейс пользователя (который сразу решили сделать текстовым ;)) оставить на потом. Логика игровая получилось довольно компактной: сделали только "сдвиг влево", а остальные операции получили через транспонирование и отражение матрицы! Тесты делать было лень, поэтому разработка проходила "по локти" в REPL, что тоже добавило веселья. В установленное время мы уложились и наша реализация 2048 вышла вполне играбельной :) У "соперников" были вариант на #clojurescript в браузере и реализация с "текстовым UI" в отдельном графическом окне (на этой штуке рогалики бы писать!).

P.S. Понравилось, планирую продолжать посещать.

****************

В Воскресенье я к генератору подсайтика с #daily_art прикрутил генерацию миниатюр. А потом решил, что текущие правила для #shake "костыльноваты" и решил переписать :) Получившийся вариант генерации динамических правил мне нравится и важные фишки shake, вроде кэширования результатов сборки, так же работают. Результат можно посмотреть тут, а здесь можно глянуть на исходники.

P.S. Надо бы написать статейку про Shake для ruHaskell.
Через полтора месяца пройдёт очередной Lisp Game Jam. Напоминаю на всякий случай, вдруг кто соберётся поучаствовать? :) Можно присылать работы, созданные с помощью CL, #clojure, Scheme (#racket) и даже Emacs Lisp!

#gamedev #event
Забыл написать, что этот свой Pollen generated site я запихал в #docker контейнер с lighttpd, чтобы самораздавайка получилась.

А контейнер задеплоил на VDS, на котором Dokku бегает — такой вот PaaS у меня для микропроектиков. Вот только heroku-style deploying через гит я не люблю, да и Heroku CLI мне не особо нравится. Поэтому загружаю образы целиком через docker save | ssh ... — для моих поделок на "не самых популярных стеках" самое то. Уже успешно "задоккивал" проект на #Clojure, Web-приветмир на #Racket.

Кому-то это всё покажется детскими играми. Но я не умею в этот ваш DevOps современный да и не очень-то и хочу уметь. Из современного освоил только Docker, а вся автоматизация на Makefiles сделана — не могу в k8s, зато могу в GNU m2e! И мне норм :)
(продолжение)

И всё бы ничего, вот только Roam стоит не таких уж маленьких денег, да и является закрытым внешним сервисом. Что лишает меня контроля — да, я хочу контролировать и этот аспект. Народ создаёт свои аналоги, например, Athens (опенсорс на #Clojure!), но ждать их взросления долго. Зато Athens можно будет хоcтить и у себя, так что я лично послежу. Себе же взял OrgRoam — надстройку над Org Mode, которая добавляет обратные ссылки и убирает структуру (за счёт отказа от одного outline в пользу отдельных файлов). Пробую что-то записывать, может быть прикручу публикацию в таком виде — минималистично, статично, обратно-ссылочно! А может быть и откачусь на голый Org, буду всё держать в больших файлах — так тоже живут (внимание, это тоже кроличья нора, легко провалиться).

Есть ещё одна опция: самодельное решение. Так тоже делают. Плюс тут один: полный контроль над всеми аспектами. Делай себе инструменты сам, как говорят (и пишут). И над этим вариантом я тоже думаю. Может получится скрестить Gitit и Org Mode в то, что подойдёт лично мне…

Вот, дампнул немножко мозгов. Сумбурно вышло, но пока я не готов это структурировать — сначала нужно придумать, как! ;)
​​Под конец прошлого года вышла статья про то, как автор сделал карту для Doom, которая содержит машину, складывающую десятичные числа. И работает этот своеобразный калькулятор не только на современных вариантах оригинального движка Doom, но даже на Vanilla Doom 2 без каких либо дополнений и модификаций!

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

Даже про само по себе кодирование булевой логики читать интересно, но автор не пожалел времени и снабдил статью не только иллюстрациями и анимациями, но и приложил интерактивный симулятор, показывающий то, как происходит суммирование и формирование ответа на "сегментированном индикаторе" — красота!

А ещё кому-то будет интересно почитать про то, как автор генерировал WAD-файл с картой, а делал он это с помощью… #Clojure, которая позволила и DSL использовать для описания диаграмм решений, и на ней же был реализован оптимизатор "кода", позволяющий сэкономить место на карте.
🔥22