Size: a a a

2020 December 09
brain_dump_etc
По просьбе читателей даю ссылку на код приложения из предыдущей записи:
https://github.com/astynax/pixcell-elm

Код я не причёсывал, многое сделано "лишь бы работало" библиотеки применял только там, где самому делать было не интересно или сложно.

А вот одна из предыдущих инкарнаций проекта (не помню, писал ли я тут про неё): pixcell-clj.recursive.one — эта как раз всё в URL хранит, так что не шибко быстрая :P "clj" в имени намекает, на чём эта реализация написана ;)
источник
2020 December 17
brain_dump_etc
​​Промежуточный отчёт о прогрессе работы над PixCell/Elm.

Сейчас:
- Реализованы все инструменты, которые я обычно делал в других версиях
- Имеется выгрузка в PNG,
- Перерисованы все пиктограммы для кнопок с использованием самого редактора (выгрузил в PNG, закодировал в Base64, положил в константы, подставляю в SVG в процессе рисования GUI)
- GUI мастшабируется под размер экрана (ага, PNG мылятся, oldschool!), опробован на iPad — работает пристойно

Хотелки:
- Сохранение текущего состояния в URL, чтобы можно было "в закладку положить"
- Выпадающие меню для инструментов на манер docks у NeXTSTEP
- Сохранение результатов работы в Local Storage

Варианты путей для эволюции:
- Анимации на базе сохранённых в Local Storage "кадров" (уж больно не хочется делать управление задержкой между кадрами...)
- Большой коллаж из "тайлов" в Local Storage. Тут вам и некое подобие "знакомест" с фиксированными палитрами на тайл, и, опять же потенциально, редактор карт из тайлов. Можно даже PETSCII Art замутить, предварительно нарисовав все нужные символы, даже палитра для Commodore 64 уже есть (вторая из трёх, помимо EGA (первой) и Apple II (третьей)).

Вчера максимально быстро и лениво накидал галереею примеров того, что можно в редакторе нарисовать. Буду пополнять.
источник
2020 December 29
brain_dump_etc
В этом году опять не нашёл времени добить AdventOfCode, однако 46 звёздочек из 50 считаю неплохим результатом. Если что, AoC, это такой марафон по решению задачек с помощью кода. Я про него уже писал.

Решал я задачки на #Haskell, как водится. Довольствовался "просто нормальными решениями", которые было приятно реализовывать без необходимости погружаться в оптимизации. Итоги: удовольствие получено, нервов затрачено немного, руки размяты.

А вот общее впечатление от задачек в этого года, увы, смешанное. Возможно, дело в том, что это AoC'2019 был очень хорош, а нынешний просто получился "как раньше": с задачками на вида "пишите уже процедурщину, иначе не дождётесь окончания вычисления" (это могу терпеть) и "вспомнил известный алгоритм — решил, не вспомнил — не решил" (вот такое не люблю!). А ещё в этом году были самоповторы: три вариации конвеевской "Жизни" с незначительными отличиями, это не то, чего ждёшь от авторов. Возможно, год выдался тяжёлым и для них…

Так или иначе, advent calendars — это здорово! Подкину таковых на разные темы:

-   "Advent of Haskell 2020" — познавательно-развлекательные статейки о #Haskell
-   "Kotlin Christmas" — то же самое, но про #Kotlin
-   "QEMU Advent Calendar 2020" — традиционный уже календарь всякого забавного, что можно запустить в QEMU (про этот календарь я тоже писал); день №12, например, это всё та же "Жизнь", но в виде самозагружаемой (без ОС!) программы на #Rust

Из прошлогодних могу упомянуть "‘A Language a Day’ — Advent Calendar 2019": 25 разных языков программирования по одному на день со ссылками на документацию и примерами кода.

Наконец, возвращаясь к AoC, отмечу, что в этих наших интернетах множество людей делится своими решениями в виде статей и прочих стримов. Вот, например, репозиторий со ссылками на решения AoC на куче языков (ЯП и не очень вроде jq) — вдруг кому захочется свои решения посравнивать с чужими.

И да, всех с Новым Годом!
источник
2021 January 05
brain_dump_etc
Рубрика "дичь, которую творил я когда-то": всё те же часы, только в железной версии (ATMega8).

Корпус из монтажной коробки, пена от коврика, светофильтр из ткани 3M, трубочки для коктейля в роли световодов, вот это вот всё. Макетка и сдвиговый регистр старше меня (макетка — сильно старше).

Забавно, что "часики-то тикают", хотя цать лет назад я даже не очень свежую батарейку ставил :)
источник
brain_dump_etc
источник
brain_dump_etc
источник
brain_dump_etc
источник
2021 January 23
brain_dump_etc
​​Повозился тут со штуками вокруг Gemini (см выше).

Серверы

Именно статический "сайт" поднимать не особо хотелось, но таки поднял: gemini://recursive.one (он же через проксю). Раздаётся с помощью Agate, минималистичного Gemini-сервера, написанного на #Rust. Agate кроме раздачи статики ничего не умеет, так что пока статическая страница и повисит %)

Потыкал пакеты из набора haskell-gemini: пока сыровато. Так что #Haskell с Gemini я подружу позже.

Зато приятно оказалось пользоваться Jetforce. Это фреймворк для #Python такой. Построен на Twisted, внутри типы проаннотированы, async тут и там, при этом код выглядит "как Flask", то есть как набор декорированных функций — современненько!

Мне интересно было именно "Gemini приложение" написать, то есть что-то, создающее контент на лету. Получилось вполне прилично: основная функциональность в Jetforce уже есть. Нужно только будет написать eDSL для более удобного (чем захват регулярками) описания параметров в путях.

Клиенты

На десктопе попробовал пожить с Castor, графическим клиентом, написанным на #Rust, опять же. Но клиент пока слишком юн, и им не слишком удобно пользоваться.

В итоге пересел на Lagrange. Вот этот — красавец! Написан на C11 и SDL, аппаратно ускоряет отрисовку, красиво показывает текст, может и графику показать inline, управляется хоткеями. Даже "лого" генерирует для ресурсов на основе их имени — как умолчательные аватары на GitHub, вы такие точно видели. Пока я крайне доволен пользованием, рекомендую!

На Android пока остановился на deedum. Он не слишком красив, но крайне шустр и нетребователен к ресурсам.

Контент

В Gemlogs — это такие дневники в Geminiverse — народ пишет, есть что почитать. А ещё есть зеркала Lobste.rs и HackerNews, даже с комментариями. Ту же Wikipedia можно почитать через такой прокси. Словом, уютненько :^)
источник
brain_dump_etc
Я вам скажу, с вводом данных в #Gemini работать не скучно: аналога POST в Gemini нет, как нет и URL encoded параметров! И cookies тоже отсутствуют, как класс, как вы помните. Да, вы можете привязаться к пользовательскому сертификату и таким образом реализовать сессионность, но это уже будет сквозное состояние, чего хотелось бы избежать.

Зато Gemini сервер может запросить строку специальным ответом. После чего клиент покажет пользователю диалог с заданным приглашением, а результат ввода отправит обратно на сервер в виде query string. Соответственно, если вы хотите получить несколько значений, то вам нужно будет каждое запросить отдельно и сохранить в URL (кроме последнего, которое будет в query string). При этом размер запроса ограничен килобайтом на всё про всё — много не попостишь. Но тем интереснее!

Лелею идею написать FSM, которая взяла бы на себя весь этот сбор параметров, чтобы в обработчике запроса уже иметь все данные введёнными. Для Jetforce описание параметров можно будет оформить как "eDSL #Python-style" — на декораторах.

Также было бы интересно попробовать воплотить в Gemini интерактивность, подобную той, что использует #Racket в своих Stateful Servlets. Там вы тоже пишете код так, что данные вводятся "запросами к пользователю": вы отравляете пользователю форму, и получаете результат тут же в коде. Внутри всё реализовано на сохранении состояния в URL и рэкетовых continuations, снаружи же выглядит как магия — люблю такое ;) А уж насколько магически выглядят Web Cells: вы имеете переменную, которая помнит состояние между вызовами обработчика запроса, и таких переменных даже может быть несколько!
источник
2021 February 18
brain_dump_etc
Сил оформлять полноценные статьи пока нет, выдам выжимку того, чем я сейчас занимаюсь. Может быть что-то из этого и разовьётся в статью-другую!

Продолжаю приобщаться к #Gemini, почитываю чужие gemlogs, подумываю поднять зеркало этого канала в рамках своей капсулы (в Gemini так называют серверы, участвующие в сети). Выгрузил данные канала в виде JSON, накидал транскодер в Org mode. Но тут оказало, что Telegram не выгружает изображения, добавляемые к сообщениям ботом — не "фото + заметка", а именно "сопровождающее изображение". Я таких написал достаточно, чтобы жалеть о потере. Поэтому поднятие зеркала пока подвисло, может пройдусь вручную по публикациям и утяну картинки, а может и так оставлю — посмотрим.

Членствую в чате RuGemini, "нас мало, но мы в тельняшках". Кто-то хочет "вернуть себе Web", кто-то хочет уйти из Web совсем и делает proxy для поиска по StackOverflow, чтобы читать из Acme) под Plan9 — развлекаются, проще говоря. В Gemini контента, как ни странно, чатовцы мало генерят.

А в самой Geminispace есть, что почитать перед сном. Вот только находить контент мне удобно на ПК, а читать удобно с телефона! Вот и подумываю о том, чтобы сделать свой сервис закладок или даже аналог Pocket. Может даже с проксированием HTML, чтобы читать в text-only виде и околотекстовый Web. Коль скоро в Gemini нет cookies, а аутентификация делается с помощью SSL-ключей, приватный proxy не выглядит таким уж небезопасным решением.

Помимо Gemini, закопался ещё и в IndieWeb — тоже занятный островок для недовольных современным Web. Эти недовольны его хрупкостью и зависимостью от больших корпораций (коих пренебрежительно называют silos) и призывают владеть своими данными, а так же развивать свою identity в сети. Микроформаты вроде h-card, публикация через MicroPub — есть, про что почитать и что себе на сайт утащить. Можно послушать подкаст — неплохая вводная в IndieWeb!

Вот как-то так. Может ещё и про железки напишу (пополнил коллекцию интересными штучкам от M5Stack) — в такой же манере, а может и более структурировано.
источник