brain_dump_etc
641 subscribers
101 photos
4 videos
3 files
401 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
Audio
👍10
Как-то в далёком 2022 я вёл серию сеансов по написанию на Haskell учебного проекта на стыке тематик и сюда про это писал. Проект LHX представляет собой построчный процессор текста на манер awk: вы пишете шаблон, который из набора полей на входе делает какой-то выходной текст.

В рамках серии было написано само ядро и несколько интерфейсов для него: CLI, TUI и аж три штуки на Web-технологиях — синхронная классика, полу-реактивщина на HTMX и реактивщина с FRP 🤓 Ни один из вариантов, кроме CLI, не ушёл дальше демонстрации подхода, но такова была цель всего проекта — посмотреть на Haskell в разных прикладных областях.

Буквально сегодня я обновил зависимости, обрадовался, что за четыре года ничего не сломалось и всё сходу скомпилировалось 😎 Потом немного погрустил по поводу того, что TUI всё ещё не доделан. Зато вспомнил, сколько телодвижений нужно делать при написании TUI на библиотечке brick — да, не катастрофически много, но всё ещё многовато для комфортного написания чего-то "наколеночного" 🙃

Недавно я вещал про всякие движки для TUI, захотелось сегодня повещать про Textual — это библиотечка для Python, позволяющая достаточно богатые визуально штуки делать с известным комфортом, не притаскивая при этом React в терминал (да, я про тебя, Ink, говорю!).

Итак, примерно через час, там же в Twitch, буду смотреть, действительно ли в Textual легко всякие многопанельные и многоэкранные "full-screen" интерфейсы делать. По документации судя, всё должно быть достаточно прямолинейно, но грабли всё равно ожидаются 😉

UPDATE

Думаю, получилось вполне неплохо! Разобрался с системой событий, лайаутами, работой с состоянием — всё очень даже удобно!

- Запись
- Код
1
Извините за перепост, случайно удалил тут, хотя собирался удалить из "сохранённых сообщений" — я там сначала пишу, потому что есть время на правки перед публикацией. А то в Telegram всё меньше Markdown-разметки работает, из Org просто так не экспортируешь уже, вот и приходится такие финты делать...

Но зато у меня всегда под рукой копия есть, могу восстановить контент, если понадобится! Вот бы ещё тут Undo был нормальный для таких деструктивных действий, как удаление публикации в канале...
👍8
Гулял вчера по всяким нишевым сайтам от ссылки к ссылке. Маршрут был примерно такой:

Mastodon имени Devine Lu Linvega (одна из дуэта 100rabbits, про проекты которых я тут писал пару раз — смотри Orca, например — и за кем давно наблюдаю)
Hometown — форк Mastodon с интересными добавками, которые никогда не попадут в upstream
Список инстансов Hometown — тут уже чудесатее
Lurk.org — микро-тусовочка "around net- and computational culture and politics, proto- and post-free culture practices", прямо таки очень местечковое!
Их страничка со списками рассылок, раздел Eightycolumn про "People teaching/using/writing free software in art/sound/design context". Списки рассылок — это ретро, а тут ещё и FOSS + Art!
→ Подкаст "Safety Nets: Let Me Zine", "Episode 3: Interface, Relation, Connection, and Cloud Workout Done with dianaband". Тут пара междисциплинарных творцов из Кореи рассказывает про всякий self-hosting для новичков как повод собраться и пообщаться — я бы в такое вписался! Да и вообще, подкаст про zines, а я всё ещё лелею надежду сделать своих парочку!

---
Так вот, вот в подкасте прозвучало упоминание Wi-Fi Zine Throwies — и это такая милота! Представьте себе открытую точку доступа в WiFi, которая имеет какое-то нескучное название, а при подключении показывает вместо HTML-страницы для аутентификации маленький Zine!

Да, не каждый станет подключаться к неизвестным сетям, но кто-то таки поинтересуется, пусть и надев "печатки". Но ведь и sneakernet тоже предполагает некоторое доверие хотя бы своим навыкам по обеспечению цифровой гигиены 😜

И коробочки PirateBox, пусть и не просто выставляющие наружу zines, а поднимающие полноценный маленький стихийный Intranet, тоже обычно являются открытыми точками доступа. Экземпляры LibraryBox, как дружественный проект, то же таковы. Вот и выходит, что умение правильно и безопасно использовать открытые точки доступа в WiFi — полезный навык!

--
Без ворчания не получится в этот раз, увы 🙈 Постарался оставить оное напоследок, за сим начинаю.

Меня радует то, что такие "throwies" не настолько дешёвые, чтобы "выбросить и забыть", то есть хозяева их когда-то да подберут. Чего не стоило ожидать, когда народ закидывал LED throwies на всякие общественные металлоконструкции. И вот эти throwies я как электронщик отдельно не люблю уже за то, что светодиоды подключаются без ограничения тока, то есть либо перегреются, либо просто будут гореть совсем недолго. А потом на опоре ЛЭП — или куда вы там закинули своего светлячка — останется висеть редкоземельный магнит, который сам по себе достаточно опасен в плане проглатывания, так ещё рядом с ним останется литиевая батарейка, которую тоже глотать не стоит. Кусочек e-waste в виде светодиода смотрится не так плохо на фоне магнита и батарейки.

Кроме того, если вернуться к теме WiFi-whatever, меня лично печалит невозможность удобно подключаться к неизвестным сетям в режиме "пока только посмотреть", не рискуя тем, что какие-то программы, работающие в фоне, сразу станут стучаться в Интернет через эту саму сеть. Да, VPN частично решает эту проблему, но я бы хотел иметь возможность подключаться ко всяким "WiFi-интерфейсам" не как к источникам Internet, а как провайдерам какого-то локального сервиса. Более того, хотелось бы подключаться к нескольким таким "недосетям" одновременно, не отключаясь от основной сети, доставляющей до меня большой Интернет.
👍5🤔5
Завтра под запись буду изучать PyView — это LiveView как в Phoenix для Elixir, или, если вам вдруг такая аналогия больше подойдёт, korolev для Scala (ну и древность я вспомнил, скажут некоторые).

Кратко: это такой способ делать интерактивные Web-приложения с обработкой событий на стороне сервера, тогда как клиент остаётся простым исполнителем задач вида "вставь эту div на место той". При этом, в отличие от использования HTMX, тут не нужно думать о жизненном цикле элементов, поскольку "virtual DOM" (UPD: не прямо vdom, идейный аналог) и вычисление минимальных дельт для отправки в браузер происходят под капотом, в прикладном коде же всё декларативно остаётся.

Я уверен, что в мире JS/TS такое давно носят, но в других экосистемах этот подход встречается довольно редко, вот мне и интересно посмотреть, как Python тут себя покажет. Проект очень молодой, но уже выглядит солидно, как мне показалось. Если вдруг заинтересуетесь, сходите послушать/посмотреть этот подкаст с автором — мне понравилось, например.

---
UPDATE

Вот запись. Пробовал стационарный микрофон, хороший, Blue Snowball (откопал в закромах). Но этот "снежок" умудрился подхватить с фона гул 🙈 Увы, пока что петличка и микрофон проводной гарнитуры выигрывают по качеству. Когда shock mount у меня появится, попробую повещать на снежок ещё раз 😎
👍5🔥2
Завёл таки. Подписывайтесь! 😎

https://www.patreon.com/cw/aleksei_astynax_pirogov

Как разберусь с Ko-fi и прочими бусти, будут и они.
👍3🔥2
Сегодня еженедельный стрим будет про библиотеку rich. Пройдусь по основным штукам, но в итоге хочу сделать кое-что не совсем (совсем не?) стандартное для TUI в целом и для этой либы в частности 😎

Картинка для привлечения внимания (нашёл на reddit):
🔥9
Вот запись сегодняшнего стрима.

Если вдруг кому-то будет интересно потрогать получившийся код "генератора сайтов, выглядящих как Volkov Commander", то я могу его довести до какого-то MVP, а там можно будет допиливать по желанию 😎
🔥6
В Python недавно стало на один способ склеивания строк больше: PEP-750 aka t-strings.
f"Hello, {world}"
# VS
t"Hello, {world}"

(пишу этот текст в Emacs, а он пока не умеет раскрашивать содержимое t-строк так же, как он это делает с f-strings 🙈)

У этого нововведения есть одна большая проблема: это не templates, а на выходе получаются не strings 🙃 Скорее это что-то вроде template tags из мира JS/TS. В результате вычисления такого литерала получается последовательность статических строк вперемешку с приведёнными к строке значениями подвыражений внутри фигурных скобок. То есть в одну строку ничего ещё не склеено, хоть все подстановки уже вычислены!

Недавно видел один хороший доклад про этот PEP и про то, куда может развиться экосистема, если правильно отреагирует на эту новинку. Один из докладчиков, будучи в команде PyCharm, показывает, как внутри t-строк работает language injection, подсвечиваются HTML-теги и Python-код, работает автодополнение и проверка типов — люблю такую заботу о DX!

Так вот, если лень видео смотреть, просто думайте об этой штуке, как о способе санировать подстановки перед склеиванием в SQL, HTML или любые другие текстовые форматы, в которых возможна инъекция чего-то не очень хорошего.

А ещё отделение статических фрагментов от динамических позволяет делать всякие оптимизации. В библиотеке PyView, про которую я недавно рассказывал, при генерации HTML используются те самые t-strings, а этой библиотеке как раз важно знать, какие части вёрстки всегда содержат статический текст, чтобы быстрее вычислять изменения с для отправки команд, модифицирующих DOM в браузере. Приятно видеть, что новинка языка уже внедрена и приносит пользу!

За мою карьеру я навидался всяких видов интерполяции строк и форматирования и могу сказать, что концептуально t-строки мне нравятся. Я не очень люблю тот факт, что внутри подстановок есть свой подъязык для управления приведением к строке, но это я и в ранее добавленных f-строках не люблю, тут ничего нового не добавилось 😜
👍4
Вот, Ko-Fi ещё завёл: https://ko-fi.com/astynax
Сюда продублировал и эту ссылку, и патреоновскую: https://astynax.me/support.html — тут вообще будут все актуальные способы поддержки меня.

Ко мне тут пришёл Gandi и хочет $50 за домен recursive.one за второй год, GoDaddy даже меньше хотел 🙈 Буду благодарен, если скинете копеечку на это дело. Или на чай — а я за вас выпью! Или с вами попью, если вы вдруг проездом в Ереване окажетесь 😎

Вся эта история с доменами меня печалит, конечно...
👍3
В 13:30 GMT+4 очередной стрим. Расскажу, как и зачем именно я пользую #uv (https://docs.astral.sh/uv/) — просто чтобы было, к чему отсылать в будущем 😎 Заодно озвучу свои претензии и хотелки, не без этого, и посравниваю с тем, что использовал раньше.

До poe тоже доберусь, скорее всего — в рамках синергии инструментов должно получиться неплохо!

Стрим будет на Twitch, как обычно (ссылка есть в описании канала). Запись выложу на YT со ссылкой сюда.
🔥4👍3
Сегодня там же и в то же время (Twitch, 13:30 GMT+4) буду разбираться, что там и как в data-* — это такой hypermedia framework, то есть ещё один способ расширить Web без написания клиентского кода.

data-star похож на HTMX, но ещё больше смещён на сторону backend: сервер посылает через SSE патчи к DOM не в ответ на запросы "а дай-ка мне кусок HTML, я сам его вставлю в документ", а по своей воле. При этом обеспечивается большая локальность поведения: да, кое-какая разметка со стороны HTML имеется, например, подписки на события, но при этом нет средств для управления фрагментами HTML, приходящими с сервера. В какой-то степени это более низкий уровень, чем в HTMX, но зато и контроля больше — можно идти и делать своего "убийцу PyView" 😎

Стоит отметить, что data-star, разумеется, агностичен к тому, что у вас на backend, лишь бы вы могли SSE посылать. При этом у проекта уже есть SDK под кучу языков, включая интересные мне Python, Rust, Haskell, Clojure 🤓

Ссылки для тех, кто не захочет мой стрим смотреть:
- https://data-star.dev
- "Datastar: Modern web dev, simplified" —  подкаст с авторами, где они презентуют свое детище. Мне очень понравилось слушать.
🔥8👍1
Через 10 минут стартану вторую серию про data-star. Скорее 1.5, потому что придётся наверстать то, что в прошлый раз не записалось. Но потом продолжу эксперименты дальше.
🔥3
Вторая часть приключений с data-star. Напоминает о том, что не попало на "плёнку" в прошлый раз по прихоти OBS.

https://youtu.be/1N9V3gZhR60

По итогам экспериментов могу сказать, что data-star выглядит наименее магично по сравнению с HTMX и прочими turbolinks. Хорошо использовать такие штуки, когда хочешь иметь максимум контроля.

Отдельно понравилось то, что в data-star приходится думать о том, как происходит восстановление состояния view при переподключении SSE, которое происходит, например, при деактивации вкладки в браузере — вы, ведь, хотите экономить батарейку и трафик 😉

В будущем планирую попробовать data-star в связке с другими языками. Особенно, мне кажется, получится хорошо скрестить data-star с babashka — чтобы потом делать на этой связке "локальный web".
🔥3
Эх, OpenAI купили Astral. Это прям для меня печаль на ближайшие дни...
With Astral joining OpenAI, we’ll continue to support these open source projects while exploring ways they can work more seamlessly with Codex—enabling AI systems to operate across the full Python development workflow.

Вот это меня напрягает (цитата из статьи на сайте OpenAI). Не такого будущего я ждал для инструментов, которыми я вдохновляюсь уже какое-то время (взять тот же стрим про uv).

Уже вижу момент, когда от авторов потребуют обеспечить заметный для нужд PR отдела Codex процент кода, написанного этим самым кодексом.

Сначала Anthropic купили bun, теперь эта покупка. OpenSource не зарабатывает и оказывается в активах гигантов. А там уже все эти заявления про "в дальнейшем будет поддерживать разработку" проверку временем не проходят.
😱12🔥4
Сегодня постримлю пораньше — через 10 минут, в 11:00 GMT+4

Планирую поковырять prek — новый blazingly fast мультитул для Git hooks — в связке с poe, uv, ruff.
👍3
Кажется, получилось неплохо! Заодно дал некоторую вводную про то, что же за вещь такая — эти наши Git hooks.

https://youtu.be/oeca7fvjDf4
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
just a little thingy in #tic80

Внимание: там всё мигает, имейте в виду, если для вас это критично
🔥8