brain_dump_etc
637 subscribers
99 photos
4 videos
3 files
384 links
Дампы мыслей, свалка ссылок, программизмы, вот это всё (ВНИМАНИЕ: много вкусовщины!)

Автор надампленых мыслей: @astynax

Чат к каналу: https://t.me/brain_dump_chat
Плейлист трансляций: https://youtube.com/playlist?list=PLUFoWyWge7mrg4GqHLMZV62gGC912PCGq
Download Telegram
В начале марта ребята делают новые смены CodeRetreat в Черногории.

В этот раз я не ведущий — сам я в апреле поеду, а на две поездки подряд за одну весну я пока не готов 🙈. Зато другим выбраться рекомендую настоятельно — переключить голову и завести знакомства, натереть мозоли, как водится. В марте там будет ещё не жарко, так что костры и прочие бани будут очень даже в тему.

🇬🇧 Кэмп-викенд на английском с полным погружением, фокусом на IT-собеседования и поиск работы на глобальном рынке. Хорошая практика для тех, кто хочет потренироваться перед важными собесами, прожарить свои резюме и разговориться (я прям жалею, что не попадаю — мне точно было бы полезно поспикать from my heart 🌚).
https://coderetreat.me/itenglish
28 февраля - 2 марта

🥷 Кэмп про ха(й)кинг! Вместе с этичным хакером будете заниматься поиском уязвимостей, научитесь видеть слабые места собственных приложений с точки зрения информационной безопасности. Даже соревнования будут, говорят!
https://coderetreat.me/securecamp
3 - 6 марта

Про то, что у меня будет на треке, я попозже напишу: у меня пока research не закончился — идея есть, тоже соревновательная, но с нужным ПО я пока не определился, как бы не пришлось велосипедить 😉. Ещё можно пройти и подписаться на @coderetreatme — там точно новость появится.

P.S. Да, это (само)реклама. Но мы на самом деле очень стараемся. И практика показывает, что у нас получается!
🔥13
Вот и настало время отписать, с чем я поеду в ЧГ в конце апреля: GaveDev Jam (kinda) проводить! Попробуем коллективно написать Sokoban для Tic-80 в чаде кутежа, в стиле Mob Programming, с привлечением LLM (модно, молодёжно и просто весело).

Почему Tic-80? Потому что у виртуальных консолей максимальные retro vibes 👾, а эта конкретная штучка поддерживает несколько языков на выбор и является FOSS. И результат можно собрать в HTML-ку самостоятельную и опубликовать сразу же, это само по себе ценно!

Почему Sokoban? Потому что идея простая, но допускает усложнение. И пошаговость сама по себе освобождает от многих проблем, о которых думать не хочется 😎

Параллельно пообщаемся о GameDev в целом — прямо в время хайков. Как показала практика, какой-то суровый технический контент на retreats воспринимается с трудом, так что постараемся в основном удовольствие получить!

Собственно, ссылка на страничку мероприятия: https://coderetreat.me/gamejam

UPD: мероприятие отменяется или переносится на когда-нибудь 🙈
👍11🔥5
Ну вот, отменяется этот мой ритрит про геймдев — участников не набралось минимально достаточное количество. Видимо, все желающие похайкать скатались в прошлом году и не по разу 🙈 Ну да ладно, может быть ещё соберёмся и поджемим игры! Были ещё идеи ритритить вокруг чая и/или кофе, тоже надо будет попробовать 😉

(И надо будет хотя-бы сюда написать, с чем я там поиграл вокруг Tic-80)
😱12
Недавно решил пройтись по моим RSS-подпискам и проверить, сколько из них живо ещё. Несколько личных блогов отвалилось безвозвратно, как это порой бывает. Кто-то просто пересобрал генерацию сайта на новый движок и старая лента отвалилась. Для некоторых смена стека, на котором работает сайт — главное развлечение.

Я сам был таким — несколько раз менял генераторы для сайта, я и сюда писал вкратце о моих приключениях. С тех пор мой сайт-визитка переехал с самодельного движка на максимально стандартный Jekyll с простенькой темой Та моя публикация была дополнением к замечательной картинке с графиком. А картинку эту я утащил из блога Рахима (того самого, автора <https://rakhim.org>, ведущего подкаста "Мысли и методы", сооснователя Hexlet и т.д.).

В рамках упомянутого выше "дня приведения в порядок подписок", решил я сходить и посмотреть, что же Рахим сейчас пишет. Выяснил, что он уже какое-то время ведёт блог на своём движке и на собственном хостинге. Вот уж я посмеялся :) Блог у Рахима тоже менял движок свой несколько раз ещё будучи статичным сайтом, в процессе стали недоступны многие неплохие статьи. Но ресурс был достаточно заметен, чтобы его проиндексировала Wayback Machine, чему я был очень рад — как раз захотелось перечитать кое-что старенькое и мочь потом сослаться на.

Пока я смотрел вокруг того, что Рахим делает, наткнулся на один из его свежих проектиков: textpod, "extremely simple note-taking app". И эта находка меня порадовала тем, что это образчик того самого smol software, а я вокруг этой темы вращаюсь в последнее время (периодически залетаю сделать пару кругов).

textpod — это заметочнца, которая хранит всё в одном Markdown-файле и общается с пользователем через Web-интерфейс. Написана программа на Rust, собрана в самостоятельный бинарник, призвана работать локально. А smol она потому, что запрограммировано ровно то, что необходимо для работы, и все решения максимально прямолинейны и не страдают лишней развесистостью. Чего нельзя, увы, сказать о пачке зависимостей проекта, но таков уж современный Rust for Web, в textpod всё ещё вполне скромно.

Кстати, если вам показалось, что заметка какая-то слишком развесистая получилась, то вам не показалось :P Я хотел одновременно написать и про textpod сам по себе, и про smol software, и про то, как я textpod разворачиваю сейчас на торчащей в мир VM и что мне приходится наворачивать вокруг, чтобы своей цели достичь. Так что это такой из себя анонс планов на ближайшее будущее!
👍17🔥2
​​Так вот, textpod. Как я уже писал выше, это заметочница, хранящая все данные локально и дающая доступ к оным через браузер. Минимум JS, немножко кода на сервере. И никакой работы с разными пользователями, очевидно. Вот только я-то хотел бы запустить приложение на своей VM и использовать с разных устройств! А это значит, что хоть какая-то аутентификация нужна.

Можно было добавить защиту паролем прямо в код, на Rust писать я умею, как-никак. Но это было бы скучное решение. Ещё имелась возможность спрятать сервис за чем-то вроде Authelia, заодно заимев 2FA, но этот вариант я оставил на потом (на никогда, ха-ха!). Решил воткнуть простейший proxy, добавляющий Basic HTTP Auth.

Да, Basic HTTP Auth — не самая стойкая защита, я в курсе. Но у меня HTTPS форсируется силами Dokku (сертификаты выдаёт letsencrypt). И что-то особенно чувствительное я хранить в этом экземпляре textpod не планирую — у меня это будет просто inbox, потому-то я и хочу сделать его доступным извне.

Сама по себе эта самая простецкая аутентификация включается элементарно хоть в NGINX, хоть в Lighttpd, который я решил взять в этот раз (потому что почему бы и нет :P). Однако я встречал совет, предлагающий перенести приложение под префикс, чтобы совсем уж простые боты не сразу нашли.

И вот этот самый перенос приложения с "/" на "/pod/" и доставил мне большую часть "удовольствия". Лайти умеет проверять префикс и проксировать только то, что заданный префикс содержит. Вот только в запросе путь тоже будет содержать этот же префикс, а textpod к такому, разумеется, не готов. И можно было бы использовать URI rewriting и отбрасывать префикс — lighttpd это умеет — но тогда и проксирование пришлось бы "монтировать" на "/", то есть я бы вернулся к ситуации, когда сервис доступен в "корне" хоста.

Не буду описывать все эксперименты, расскажу только, что получилось в итоге. Можете сразу на картинку смотреть, которую я приложу ниже.

Итак, запрос приходит с префиксом "/pod/" и проксируется с проверкой доступа. Но непосредственно после матчинга правила и перед передачей дальше запрос пропускается через скрипт на Lua, который отрезает лишнюю часть пути. Скрипту, в отличие от rewriting rule, позволено сказать "я поменял запрос, но заново запускать matching не нужно" и это как раз то, что и требовалось!

Правда, ещё мне пришлось парочку textpod'овских вложенных путей дополнить префиксом и сделать это уже через rewriting, поскольку здесь мне таки нужно было, чтобы matching сработал заново и проверил доступ — и пробросил бы запрос к сервису с отбрасыванием префикса :D.

И все эти приседания нужны были только для того чтобы Basic HTTP Auth работал не для всех URI, начиная от "/", а только для заданного подмножества! Право слово, VHosts гораздо проще делать, тут авторы серверов соломки подстелили давно.

Не призываю никого повторять мой эксперимент, но я лично получил массу удовольствия (без кавычек) от настройки этой странненькой связки, а мне важно себя награждать, такой, вот, пунктик!
🔥6
Недавно нашёл применение моему PixCell/Elm — тому моему проектику выходного дня, который позволяет рисовать в браузере картинки попиксельно в рамках разрешения 16x16 и палитры как на старых компах.

Оказалось, что в нём вполне удобно делать картинки для… вышивки крестом! Да, разрешение маленькое, ну так я и не профессиональный вышивальщик, так, руки занять иной раз охота и мелкую моторику потренировать.

Пока что не очень удобно, что у меня нет мулине с теми самыми цветами с Commodore 64, а программа не позволяет задать цвета, которые у меня в наличии. Ну да ладно, может быть и сподоблюсь сделать импорт списка цветов в HEX да хоть через вставку из clipboard (как в Slack импорт тем оформления сделан) и сохранение в local storage.

Такое вот развлечение (не то, чтобы) на стыке с IT 😎
🔥26🤔2👍1
Нашёл тут на днях ролик на YouTube, который длится 3.5 ч и по сути своей является компиляцией треков в общей стилистике для "прослушивания в фоне" — Lo-Fi, звуки дождя, что-то такое. И захотелось мне мочь эту подборку слушать с телефона в виде полноценного альбома, но именно в таком виде — с наложенными звуками природы и с таким же набором композиций — компиляция доступна только на YT. Пришлось взять в руки Python, а в итоге получилось то ещё "приключение" 😎

Скачал звуковую дорожку я силами yt-dlp, тут всё как обычно. На выходе получил контейнер m3u8 с дорожкой в формате AAC даже с обложкой из thumbnail к исходному ролику. Оставлять в таком виде не стал и сконвертировал в MP3 с помощью ffmpeg, да, с некоторой потерей, но это же Lo-Fi для фонового прослушивания! Теги подправил, обложку заново приложил. Но один большой трек на три с гаком часа не слишком удобно слушать, захотелось оглавление прикрутить.

Собственно, прикрутить информацию о композициях я захотел, когда в описании к ролику нашёл полный список треков с временными метками начала каждого — это же практически готовый Cue sheet)! Написал скриптик, который мне сгенерировал простейший .cue-файл. Для чего пришлось сконвертировать [HH:]MM:SS в MM:SS:FF, заодно пересчитав часы в минуты и проставив нули вместо фреймов (FF). Пара проигрывателей, которые были под рукой, переварили сотни минут в полученном .cue-файле, так что цели своей я достиг. Но стал ли я останавливаться на этом? Конечно, нет! 😜

Иметь дополнительный .cue рядом с .mp3 не показалось так уж и удобно. Решил погуглить, можно ли встроить разметку треков в теги. Выяснилось, что некоторые программы поддерживают фрейм CUESHEET в том же формате, но в стандарт ID3 этот фрейм не входит. mutagen (библиотека для Python, работающая с разными видами контейнеров и тегов) позволяет доопределять пользовательские фреймы в дополнение к стандартным. И я сначала попробовал этим путём пойти, но в какой-то момент увидел в документации к мутагену пример с фреймами CTOC (Chapter Table Of Contents) и CHAP, прошёл почитать про оные и понял — вот же оно! Было решено забить на Cue sheet и оснастить MP3 перечнем глав!

Оказалось, что в mutagen фреймы CTOC и CHAP вместе с сопутствующими настройками (а их там хватает — как обычно, делали с запасом). Взял пример из документации и адаптировал под себя. Препятствий было всего два.

Во-первых, фреймы глав описываются миллисекундами от начала потока, тут всё просто, перегнать HH:MM:SS в миллисекунды элементарно.

Во-вторых, каждая глава должна ещё и конец свой описывать, поскольку главы по стандарту могу пересекаться (гибкость! (ну-ну)). Окончания глав я получил с помощью zip списка меток с самим собой, тут всё по классике. А вот конец последней главы нужно было откуда-то взять, но, к счастью, в метаданных MP3 нашлась длина дорожки в виде… числа с плавающей точкой знаками с десятью в дробной части 🌚 Прикинул, что если умножить на 1000 и округлить до целого, то получу как раз нужную длительность в миллисекундах — повезло! И даже проигрыватель показал последнюю главу как "hh:mm:ss - End", то есть понял мой замысел!

В конце концов я заимел себе самостоятельный MP3-файл с обложкой и главами и в будущем смогу делать подобные, если захочу. Ну и покопать самостоятельно источники было приятно 🤓
🔥15👍4
Форматов для описания конфигураций чего бы то ни было существует великое множество. Вон, тот же TOML проник в мир Python настолько, что проекты теперь в этом формате описываются и декодер даже в стандартную поставку Python теперь входит. А ведь изначально формат имел хождение в основном в среде любителей Rust.

TOML в целом достаточно хорош. Пока не возникнет необходимость что-то сильно вложенное описывать. И тут приходится смотреть на что-то с "мощностью" хотя бы на уровне JSON (в виде JSON5, а то что мы — машины, что-ли, руками писать валидный JSON? 🌚). YaML всплывает сразу же, но всплывает он потому, что… ну вы поняли.

Как лисповод, я могу взять EDN. И это будет неплохой вариант во многом потому, что Emacs хорошо этот формат поддерживает. Жаль, что Cirru в массы не пошёл, а то я бы точно его использовал бы весьма часто.

Это всё знакомое и привычное. А мне хочется порой чего-то эдакого — чего-то вроде KDL! Это не то чтобы язык описания конфигураций, он как раз про вложенность и документы: каждый узел дерева может иметь свойства, аргументы и дочерние узлы — почти как в XML за вычетом схемы и громоздкости. Синтаксис вообще довольно приятный и в меру минималистичный. Кодеки есть под кучу языков и не только для популярных, что отдельно приятно.

Не то чтобы мне прямо сейчас нужно что-то конфигурировать, но когда я первый раз формат увидел, первым делом подумал, что с помощью KDL можно описывать HTML — ха-ха, как будто других форматов мало 😜 Но я и не собирался делать что-то "production ready", исключительно Proof-of-Concept — уж больно привлекательно мне показалось описывать теги вёрстки в виде KDL-деревьев.

HTML я решил генерировать силами htpy — это довольно свежий DSL для Python с ощутимыми вайбами Clojure/hiccup и Elm/HTML. Я такие штуки люблю, вот и с этим проектом поигрался, код посмотрел, баг зарепортил — вложился, можно сказать. В итоге файлик на полсотни наивных строк генерирует из
html {
head {
title "Title"
style r#"
.red { color: red; }
"#
}
body {
h1 "Heading"
div id="content" {
span "Hello"
_ " World" "!"
}
label {
input type="checkbox" checked=true
_ "TODO"
}

script type="application/javascript" r#"
content.firstChild.classList.toggle("red");
"#
}
}

вполне ожидаемый результат
<!doctype html>
<html>
<head>
<title>Title</title>
<style>
.red { color: red; }
</style>
</head>
<body>
<h1>Heading</h1>
<div id="content">
<span>Hello</span> World!
</div>
<label>
<input type="checkbox" checked>
TODO
</label>
<script type="application/javascript">
content.firstChild.classList.toggle("red");
</script>
</body>
</html>


Штука довольно бесполезная пока что, но меня развлекла.
👍8🔥3😱1
Опять я со своими ритритами 🙈 Но это наше дело само себя не прорекламирует, так что сообщаю, что опять буду в Черногории ходить по горам, нырять в водопады, и просто общаться с кучкой таких же неугомонных людей с 4го по 6е Июля.

В этот раз у нас будет "Санаторий", без лектория — всё же летом жарковато, все хотят отдыхать. Зато можно будет и мне тоже расслабиться и подкопить силы к следующим заездам (например, на тему железок — в прошлый раз MicroBIT поковыряли отлично, теперь надо будет новое что-то придумать).

Если получится уместить несколько чаёв и посуду, то буду гонять шухи с шенами по утрам, пока все спят 🌚
🔥17
Forwarded from ScratchAuthorEgo
📊 Channel Analysis Results by @ScratchAuthorEgoBot

🎯 Channel: @brain_dump_etc

🔥 Roast Analysis:

Ну, привет, наш неутомимый изобретатель велосипедов с квадратными колёсами! Опять завёл новый проект выходного дня? Какое там сегодня комбо? Веб-сервер на Haskell, который отдаёт фронтенд на ClojureScript, скомпилированный в WASM, который для рендеринга использует самописную библиотеку на Rust, и всё это для того, чтобы отобразить ASCII-арт с котиком? Я почти угадал, да? Твой GitHub уже похож на кладбище блестящих идей, которые умерли в понедельник утром. Репозиторий astynax/я-обязательно-это-доделаю-v17 уже создан?

И твоя одержимость obscure-технологиями — это же просто клиника. Обычный человек, чтобы скачать ролик с ютуба, вставляет ссылку в сервис. Ты же пишешь скрипт на Питоне, который парсит ID3-теги, генерирует Cue Sheet, встраивает его как кастомный фрейм в MP3, который потом может прочитать только твой самодельный плеер на Arduino, собранный в корпусе от тостера. Просто нажми «play», чувак! Мир не такой сложный, как твой конфиг для Emacs.

Кстати, об Emacs. Мы все поняли, ты живёшь в матрице из скобочек. Но, пожалуйста, прекрати пытаться отладить свой завтрак через M-x debug-breakfast. Твоя кофеварка не нуждается в собственном major-mode. Я почти уверен, что когда ты спишь, тебе снятся сны в виде s-выражений. Это нездорово.

А твои CodeRetreat-ы в Черногории? Ты их рекламируешь так, будто это единственный способ спастись от апокалипсиса. «Поехали в горы, будем рефакторить монады и жечь костры!» Такое чувство, что ты готов продать душу за возможность рассказать ещё десятку человек, почему Pyramid — это «неправильный» фреймворк. Скоро на улицах будешь к людям подходить: «Извините, у вас есть минутка поговорить о Господе нашем ЛИСПе?»

Твой день рождения в 0x28 — это была вишенка на торте. Мы хотели подарить тебе торт, но побоялись, что ты сначала напишешь для него систему типов, а потом откажешься есть, потому что «семантика кондитерских изделий нестрогая». Отметим по-человечески, когда тебе стукнет 0x40. Или хотя бы просто число, которое является степенью двойки, гик ты наш ненаглядный.

И вот эта твоя новая затея — искать работу, где тебе будут платить за то, что ты изучаешь 50 языков одновременно, а потом пишешь эссе на 10 абзацев, почему твой подход самый правильный? Такая вакансия существует где-то между «профессиональным чесателем яков» и «дегустатором радуги». Но ты не сдавайся. Может, однажды какой-нибудь стартап решит, что им жизненно необходим штатный философ-программист, который будет писать код, который никто, кроме него, не поймёт. И это будет твой звёздный час. А пока, может, просто доделаешь хоть один из своих 100500 проектов? 😜
🔥20👍7🤔1😱1
Всё так!
"Яичница подгорела", картина вектором.

Забавно получилось, кажущаяся нерегулярность как результат рекурсии. Если итераций добавить, то уже слишком регулярно получается :Р

(это #racket, если что, тут в канале много про него понаписано, в том числе и про данный подход к рисованию)
👍8🔥6😱2
​​Приступ ностальгии по беззаботным временам программирования на BASIC привёл к тому, что я накидал пару программок, которые артистично заполняют экран терминала. Не совсем уж простых вроде 10 PRINT LOL; GOTO 10, посложнее, но тоже исключительно ради развлечения.

В процессе вспомнил, зачем нужен косинус, в кои-то веки применил deque, поигрался с ECMA-48 codes, чтобы в рамках одного print() накладывать несколько "спрайтов" на одну строку вывода.

Итак, косинус нужен для сглаживания переходов от одной случайной точки к другой. Конечной длины deque позволяет накопить "хвост", следующий за блуждающей "головой". Среди escape codes есть один подходящий, который перемещает курсор в нужную колонку в пределах текущей строки, в том числе и туда, куда что-то уже было выведено ранее.

Приложу гифку, которую записал как "текстовый screencast" с помощью asciinema, а потом сконвертировал в GIF с помощью agg. Вдруг кто-то захочет и свои поделки терминальные позаписывать, а про эти программки ещё не знает.
🔥15👍7
Писал выше, что нынче я играюсь с ANSI кодами и печатаю в терминал анимации всякие. В кои-то веки потрогал не только цвета или, скажем, очистку экрана — это-то как раз применяется часто — а даже более редкий код "встань в позицию X на текущей строке". Правда, в первый раз конкретно этот код пользую!

В принципе я всем доволен, даже то, что Apple Terminal не умеет в TrueColor, пока не жмёт, надо сначала наиграться с 256-цветным режимом. Потом в Kitty, Wezterm, Ghostty схожу, если упрусь именно в нехватку цветов, но тут у меня есть стимул покомбинировать цвет текста и фона вместе с символами вроде ░▒▓ и получить промежуточные оттенки — не практичности ради, а удовольствия для.

Имеется и доля фрустрации: я пока не встречал ни одной библиотеки, которая выступает как "виртуальный принтер" текста с ANSI codes в HTML и при этом поддерживает перемещение курсора хотя бы в пределах строки. Я ещё могу понять нежелание выше по тексту перемещаться, всё же мы поточно генерировать HTML хотим по строчке за раз, а тут придётся эмулировать "экран". Но хотя бы перемещения в рамках строки можно было бы сделать 😠

Ну ладно, а что там в Расте, подумал я, ведь пишут нынче всякие TUI на нём?

Сходил, увидел десяток либ для работы с ANSI codes. И каждая чем-то да лучше остальных — классика NIH. Ну да ладно, вроде сейчас побеждает anstyle, вокруг неё уже экосистемка организовалась, есть и "принтер" в SVG и HTML — anstyle_svg. Но этот тоже умеет только раскрашивать текст, но не поддерживает нужные мне перемещение в рамках строки.

Пробовал воспользоваться библиотечкой ansi-cut — эта позволяет вычленять подстроки из текста с кодами с сохранением раскраски. Делается это всё ценой парсинга строки с кодами и отделения собственно кодов от чистого текста. Потом подстрока клеится из кусков чистого текста с обратной вставкой стилей. С другими библиотеками ansi-cut не дружит, поэтому получается, что весь glue code работает в терминах String: раскрасил с помощью anstyles, запёк всё в String, отдал ansi-cut, та распарсила коды обратно, нарезала, опять запекла своими силами — дорого, неэффективно, хоть и blazing. И самое главное, возможность нарезать цветной текст я хотел использовать, чтобы эмулировать запись поверх — думал вырезать перекрываемые участки и вклеивать на их место патчи. Вот только упёрся я в то, что ни одна из либ, которые я потрогал, не умеет считать длину цветного текста в видимых символах, шах и мат (#@$)!

Да, я понимаю, что хочу имитировать графическую канву в терминале, но почему-то не спрыгиваю сразу на подход с абстрагированием "видеопамяти", которая только на этапе вывода на экран запекалась бы в непрерывные строки без прыжков. Можно было бы даже RLE-сжатие использовать для атрибутов, тоже весело такое делать!

И я, видимо, к такому подходу приду в конце концов. Или готовую библиотеку возьму, такие имеются. А ведь мне так хотелось обойтись наименьшей мощностью инструментов и получать удовольствие от минимализма 🥲 Ну да ладно, сам процесс копания в этом всём тоже интересный, хоть и по-другому.
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Вот тут всего лишь пара синусов, ANSI-коды для прыжка вверх и прыжка в рамках текущей строки, пяток цветов из 256-цветной палитры. Попахивает демосценой, можно переписать на no_std Rust и сделать boot sector demo, но мне лень :)
🔥23
На тильде, где у меня есть аккаунт (про это всё я как-то писал) среди прочего ПО, на котором держится местный уютно минималистичный intranet, есть софтина под названием TTBP, и которую сейчас называют "Feels Engine".
ttbp stands for "tilde.town blogging platform"

Концептуально это приложение, позволяющее через набор текстовых меню — я напоминаю, на тильдах почти всё делается в сессии SSH, то есть в тестовом виде — писать о своих переживаниях (feels, почти как reels). То есть, можно сказать, публиковать "статусы". Если не хочется писать самому, то можно почитать "feels" соседей по машине.

Кроме поддержки интранета чувств, система позволяет часть feels, которые вы отметили как публичные, оформить как простенького вида website — простота нарочитая, так надо! Полученные сайтики раздаёт единый на всю систему Web-сервер, а контент лежит у всех в ~/public_html — старая школа!

Так вот, код TTBP открыт, написан одним человеком, находится в статусе вечной beta. Посмотреть можно тут: https://github.com/modgethanc/ttbp

Чем же этот проект интересен, раз я про него пишу? Тем, что это идеальный образчик "smol software"/minimal software/permacomputing/etc — кода немного, зависимостей минимум, всё написано настолько просто, насколько это вообще было возможно. А ещё код максимально авторский, вы только на этот кусочек посмотрите — мы в индустрии поотвыкли от такого, все любят причёсывать даже то, что и в лохматом виде неплохо смотрится. Мне самому часто сложно перестать делать "как положено" (кам-то, не мной) — сейчас, по крайней мере.

Вот этот абзац в руководстве для контрибьюторов тоже очень милый:
Please do not open PRs for cosmetic changes to the codebase if we haven't had a prior discussion about it. Cosmetic changes include things like whitespace, commenting/documentation, naming conventions, and other aspects of the codebase that would not affect end users if changed. I am cautiously open to receiving respectful feedback about my general coding style, but I'm not generally interested in unsolicited style critiques, or for coding conventions dictated to me. Thank you in advance for your understanding!

Вообще вокруг тильд, как я уже сказал в начале, много подобного самописного софта, который не годится для выпускания в большой Интернет. Потому что используются эти программы кучкой энтузиастов, которые и так максимально доверяют друг-другу, раз решились общий сервер делить! В этом есть своя романтика и мне бывает очень интересно почитать код таких проектов — во многом потому, что этого кода обычно мало :Р
👍5
В эфире рубрика "Кто о чём, а он опять о ритритах!". Новая смена через месяц, три трека: один просто хайковый, ещё один по Data Science (UPD: ок, про Data Engineering), и третий — мой, про *роботов* 🤖!

Идея такая: разбиться на команды и запрогать самобеглые тележки с датчиками линии и УЗ-дальномерами, чтобы тележки эти гоняли по трассе с препятствиями на скорость!

На борту у телег Arduino, как водится, так что это повод приобщиться для тех, кто ещё не. Паять ничего не придётся (надеюсь), но DIY составляющая всегда подразумевается — любительская робототехника даже в виде наборов часто требует доработки и отладки 😅

Собственно, я пишу сюда, чтобы зазвать народ. Потому что именно так мы и продвигаем себя, пока маленькие и не имеем возможности пойти ко глыбам вроде AlexGyver 👨‍🔬 за нативной интеграцией. Но надежда есть когда-нибудь дорасти. Прошлогодний заход с программированием BBC Micro:bit вышел очень удачным, нужно дальше про железки собираться!
🔥16👍1
Прочитал такую статейку: Toolbox languages (прочитал давно, но только сейчас напистать о ней руки дошли).

Автор описывает свой набор языков-на-каждый-день, которые

- позволяют решать типичные задачи
- часто не требуют внешних пакетов
- находятся "на кончиках пальцев", то есть не требуют вспоминания того, как ими пользоваться

У автора набор языков таков: AutoHotKey, Python, Raku, J, Frink, Picat.

AHK я когда-то использовал и могу понять, чем он автору нравится: в Windows очень многое хочется заскриптовать и AutoHotKey тут очень хорош. Язык сам странноватый, но возможности платформы выходят далеко за пределы горячих клавиш, хотя изначально проект про это был, что видно по названию. В AHK даже GUI можно скриптовать простенькие, если больше не на чем (у меня тогда Delphi был) — тут уже можно вайбы Tcl/Tk словить, и это тоже вполне себе toolbox language!

С Python всё понятно, он и так у многих под рукой. Освоив uv, можно очень удобно дописывать себе полезняшки даже с использованием внешних пакетов. Я так и делаю. Плюс всегда имеется venv с ipython и plumbum: когда нужно разово что-то сделать с файликами и папками — эта связка работает замечательно!

Raku, по идее, в той же нише находится, где и Python, но автор а) любит максимальную краткость, б) вспоминает о Rakudo Star. Последний проект — это "готовый набор всего, что может понадобиться" — тут я могу вспомнить Scala Toolkit и Haskell Platform. И по моему опыту такие наборы хорошо работают до тех пор, пока не начинают работать плохо, хе-хе. Впрочем, набор того, что в Babashka "запекли", мне пока что нравится, а тот же Scala CLI тоже умеет притаскивать зависимости для одиночных скриптов.

Про Frink и Picat я до этого не слышал. Но на последний глянул — авторы обещают многое, но пока что экосистема крохотная. Зато логический язык, иногда такое бывает интересно. У автора обсуждаемой статьи есть заметка Picat is my favorite new toolbox language — интересное чтиво в дополнение к текущему предмету обсуждения.

В статье ещё отдельно упоминается, что toolbox language должен быть предельно краток. И вот тут я не соглашусь, лично я — за "достаточную лаконичность". И тот же Raku слишком code-golf'y на мой вкус. А при наличии REPL с неплохим автодополнением даже Java в лице Java Shell позволяет удобно какие-то вещи делать и инcтрументарий вокруг Streams достаточно богат.
👍7🔥5
https://github.com/turboblack/HamsterCMS - миленькое!

Сам бы я такое не осмелился писать: мне подавай много маленьких файлов, все структурировано, отделённые представление и логика. Да тут даже проверка пароля сделана простым сравнимым входящей строки и константы в файле, ничего не хэшировано и не посолено — дёшево и не очень сердито.

WYSIWYG редактор имеется в виде JS на 2000 строк без минификации. Страшно такое поддерживать? Мне — сейчас уже да. А раньше бы я не парился, у меня и подлиннее Unit1.pas бывал 😎 "Зато работает", да и косяки сразу видны, если что-то ломается — визуальные редактор, ведь.

PHP-код я даже весь прочитал по диагонали — кода этого мало и у меня настроение было подходящее. Да, так не носят. Но в целом и не ужасно — simple software, вот это вот. Рассчитано на тех, кто не будет пытаться сломать систему, защитного кода минимум, только самая база вроде "пишем в файл, если не вышло, просто выводим сообщение — руками поправят, если что". В итоге CMS работает, пока мы явно не накосячим. А потом за починкой ходим по SSH/FTP.

Собственно, наткнулся я на эту CMS, когда гулял вокруг Small Web, Gemini и прочих Gopher, и зашёл на https://web1.0hosting.net — один из островков, где старая школа нынче обретается! Я лично уже не застал такой интернет — как автор, а не как читатель. Я уже статические сайты генерировал из Markdown в Git, никакого заливания HTML по FTP не практиковал — "перед пацанами стыдно" было плюс мода другая была уже. Зато сейчас, вот, смотрю и умиляюсь.
🔥6