Опять в ЧГ поеду в октябре. На этот раз погружать людей в MicroPython и Micro:bit — железки, это интересно, но некоторых пугает порог входа, а я буду пробовать высоту этого порога снизить!
Сам-то я с BBC Micro:bit игрался давно уже, ещё во времена первой версии. А у V2, которую мы будем трогать (а потом каждый свою домой заберёт) уже и динамик есть на борту свой, и микрофон. Можно будет попробовать коммуникацию пересвистом сделать! Планирую ещё в беспроводную сеть попробовать девайсы объединить, чтобы те приветствовали друг-друга, слали "визитки" — так делают иной раз умные бейджи как на DEFCON (это три ссылки на разные посты :Р)!
Сам-то я с BBC Micro:bit игрался давно уже, ещё во времена первой версии. А у V2, которую мы будем трогать (а потом каждый свою домой заберёт) уже и динамик есть на борту свой, и микрофон. Можно будет попробовать коммуникацию пересвистом сделать! Планирую ещё в беспроводную сеть попробовать девайсы объединить, чтобы те приветствовали друг-друга, слали "визитки" — так делают иной раз умные бейджи как на DEFCON (это три ссылки на разные посты :Р)!
🔥3
Forwarded from Montenegro IT Events
CodeRetreat — выездной кэмп для разработчиков в Старом Баре, идеальный микс отдыха в горах, атмосферы летнего лагеря, интересных воркшопов и полезного нетворкинга. Приглашаем на новые смены:
Golang Camp: Go gophers!
13—16 октября. Ведущие Артемий Рябинков, Андрей Солдатенко и Искандер Шарипов.
Три воркшопа: Kubernetes операторы, работа с ML-моделями и разработка игр.
Data Engineering Сamp
16—19 октября. Ведущий Николай Марков.
Качаем набор навыков по выстраиванию инфраструктуры и процессов вокруг жизненного цикла данных в компаниях.
Micro:bit Retreat. Cобираем и программируем железяки
19—22 октября. Ведущий Алексей Пирогов.
Давно присматриваетесь к Arduino, Raspberry pi, умным домам, но не знаете с чего начать — вот легкий старт в новое хобби.
Будет душевно! Уедете не только с новыми знаниями, но и новыми друзьями и тележкой впечатлений. Все подробности на сайте.
Golang Camp: Go gophers!
13—16 октября. Ведущие Артемий Рябинков, Андрей Солдатенко и Искандер Шарипов.
Три воркшопа: Kubernetes операторы, работа с ML-моделями и разработка игр.
Data Engineering Сamp
16—19 октября. Ведущий Николай Марков.
Качаем набор навыков по выстраиванию инфраструктуры и процессов вокруг жизненного цикла данных в компаниях.
Micro:bit Retreat. Cобираем и программируем железяки
19—22 октября. Ведущий Алексей Пирогов.
Давно присматриваетесь к Arduino, Raspberry pi, умным домам, но не знаете с чего начать — вот легкий старт в новое хобби.
Будет душевно! Уедете не только с новыми знаниями, но и новыми друзьями и тележкой впечатлений. Все подробности на сайте.
🔥5
Когда я недавно делал доклад в Черногории по поводу того, как на пайтоне можно делать пользовательский интерфейсы, я рассмотрел несколько самых разных по сути своей вариантов, но упустил из виду один очень интересный — FastHTML.
FastHTML позиционирует себя как платформу, которая позволяет создавать пользовательские интерфейсы преимущественно на Python. GUI при этом отображается в браузере, работает отзывчиво и реактивно.
Особенности:
- JavaScript чаще всего писать не придётся, потому что платформа использует HTMX в качестве средства доставки обновлений интерфейса. Вы можете дописывать кусочки интерактивности на JS, это не возбраняется, мол, "для того JS и создавался" 🌚
- На серверной стороне не используется никакой шаблонизатор, вместо этого вся вёрстка делается с использованием так называемых "компонент" — это по сути просто функции, генерирующие вёрстку. Сетевая же часть использует платформу ASGI, а именно uvicorn и Starlett.
- О стилях тоже предлагается особо не думать, а вместо этого полагаться на библиотеки тех самых компонент, которые скрывают всю стилизацию в простых случаях.
- В принципе всё приложение можно описать в одном Python-файле, мол, настолько мало boilerplate требуется для начала работы.
Вообще рекомендую сходить почитать видение проекта — текста там немного. Почувствуете, насколько у автора наболело по поводу состояния Web-разработки на Python "до этого момента". Люблю почитать такое! 😎
Ещё из интересного стоит отметить один моментик касательно самого автора: Jeremy Howard много работает в области data science и прочего ML и работает давно — и всё это время варится в собственном соку. Творчеством занимается в собственной компании Fast.AI (компания до нынешнего хайпа была основана, если что). Так вот, у Джереми весь Open Source написан с применением Literate Programming на базе Jupyter Notebooks и авторской надстройки над оным под названием nbdev. Описанный выше FastHTML написан в стиле LP, библиотеки полезняшек, которые в FastHTML использованы — тоже. Само по себе такое увлечения меня, давнишнего фаната LP, впечатляет. Но код генерируемый выглядит страшненько, хотя тут во многом ещё и авторский вкус влияет на читаемость: у Джереми очень плотный код, обычно питонисты так не пишут, зато пишут data scientists! К счастью, когда Джереми показывает примеры кода публике, он может переключиться на чуть более популярный стиль 😅
P.S. Если вдруг кому интересно, могу ещё написать про то, как автор FastHTML предлагает работать с SQLite. Можно даже попробовать постримить разработку какого-нибудь классического проектика вроде Pet Clinic на FastHTML и использовать в процессе nbdev — будет максимально нишево, но не факт, что очень Fast 🙃
FastHTML позиционирует себя как платформу, которая позволяет создавать пользовательские интерфейсы преимущественно на Python. GUI при этом отображается в браузере, работает отзывчиво и реактивно.
Особенности:
- JavaScript чаще всего писать не придётся, потому что платформа использует HTMX в качестве средства доставки обновлений интерфейса. Вы можете дописывать кусочки интерактивности на JS, это не возбраняется, мол, "для того JS и создавался" 🌚
- На серверной стороне не используется никакой шаблонизатор, вместо этого вся вёрстка делается с использованием так называемых "компонент" — это по сути просто функции, генерирующие вёрстку. Сетевая же часть использует платформу ASGI, а именно uvicorn и Starlett.
- О стилях тоже предлагается особо не думать, а вместо этого полагаться на библиотеки тех самых компонент, которые скрывают всю стилизацию в простых случаях.
- В принципе всё приложение можно описать в одном Python-файле, мол, настолько мало boilerplate требуется для начала работы.
Вообще рекомендую сходить почитать видение проекта — текста там немного. Почувствуете, насколько у автора наболело по поводу состояния Web-разработки на Python "до этого момента". Люблю почитать такое! 😎
Ещё из интересного стоит отметить один моментик касательно самого автора: Jeremy Howard много работает в области data science и прочего ML и работает давно — и всё это время варится в собственном соку. Творчеством занимается в собственной компании Fast.AI (компания до нынешнего хайпа была основана, если что). Так вот, у Джереми весь Open Source написан с применением Literate Programming на базе Jupyter Notebooks и авторской надстройки над оным под названием nbdev. Описанный выше FastHTML написан в стиле LP, библиотеки полезняшек, которые в FastHTML использованы — тоже. Само по себе такое увлечения меня, давнишнего фаната LP, впечатляет. Но код генерируемый выглядит страшненько, хотя тут во многом ещё и авторский вкус влияет на читаемость: у Джереми очень плотный код, обычно питонисты так не пишут, зато пишут data scientists! К счастью, когда Джереми показывает примеры кода публике, он может переключиться на чуть более популярный стиль 😅
P.S. Если вдруг кому интересно, могу ещё написать про то, как автор FastHTML предлагает работать с SQLite. Можно даже попробовать постримить разработку какого-нибудь классического проектика вроде Pet Clinic на FastHTML и использовать в процессе nbdev — будет максимально нишево, но не факт, что очень Fast 🙃
👍10🤔2
Вёл вчера открытый урок для курса по Clojure. Как обычно, рассказал про историю языка, поотвечал на дежурные вопросы про то, зачем он вообще нужен и есть ли вообще работа для кложуристов (местами нужен, работа находится 😎). Где-то с час транслировал окно Emacs и показывал, как же на этой нашей Clojure пишут.
В рамках демо решил всё показывать на Babashka, как на более легковесной версии интерпретатора. А ещё хотел показать нечто, что было бы легко запустить локально. И тут babashka выигрывает безоговорочно: что может быть проще скачивания одного исполняемого файла, в котором находится и сам интерпретатор и приличная пачка библиотек, полезных при скриптовании (к слову о всяких тулкитах)?
Показал я синтаксис в одном большом файле со сворачиваемым аутлайном (люблю outshine, даже презентации с его помощью показывал 💅), поотвечал на вопросы. А потом запустил Web-приложение на базе встроенного в Babashka сервера (HttpKit), а HTML сгенерировал силами встроенного же Data DSL (Hiccup) — приятный набор батареек, осмелюсь сказать! Разве что, compojure или другого роутера не хватает слегка, но в принципе жить можно и так, пока проект небольшой — а там уже и большая Clojure JVM запросится на замену 😜
Страничку-то я отдал, но статическая страница — это скучно! Вот только и обременять зрителей настройкой инструментария для сборки ClojureScript тоже не хотелось. Посему Squint и Cherry (см выше) я отбросил и вооружился Scittle — это интерпретатор всё тот SCI, интерпратор подмножества Clojure, который используется и в Babashka. Только Skittle интерпретирует ClojureScript прямо из тегов
Мне самому подход No Build очень импонирует, вот и в демо я просто в строковом литерале отгрузил кусочек ClJS — хотелось уложиться именно в один файл. Тем более что в Emacs можно выделить регион и открыть в отдельном буфере как код на заданном языке (да, не только в IDEA так можно, хоть в последней и прямо по месту код подсвечивается). Скрипт мой оживил часики на страничке и progress bar в такт секундам начал двигать (виджет взял из Pico.CSS, потому что не умею верстать). А заодно получилось показать, как обращение с объектами хостовой платформы делается.
Результат я положил в Gist вместе с краткой инструкцией по запуску, можете поиграться. На мой вкус возможность делать интерактивные микро-приложения, минимально заботясь о всяких сборщиках и зависимостях — это здорово!
В рамках демо решил всё показывать на Babashka, как на более легковесной версии интерпретатора. А ещё хотел показать нечто, что было бы легко запустить локально. И тут babashka выигрывает безоговорочно: что может быть проще скачивания одного исполняемого файла, в котором находится и сам интерпретатор и приличная пачка библиотек, полезных при скриптовании (к слову о всяких тулкитах)?
Показал я синтаксис в одном большом файле со сворачиваемым аутлайном (люблю outshine, даже презентации с его помощью показывал 💅), поотвечал на вопросы. А потом запустил Web-приложение на базе встроенного в Babashka сервера (HttpKit), а HTML сгенерировал силами встроенного же Data DSL (Hiccup) — приятный набор батареек, осмелюсь сказать! Разве что, compojure или другого роутера не хватает слегка, но в принципе жить можно и так, пока проект небольшой — а там уже и большая Clojure JVM запросится на замену 😜
Страничку-то я отдал, но статическая страница — это скучно! Вот только и обременять зрителей настройкой инструментария для сборки ClojureScript тоже не хотелось. Посему Squint и Cherry (см выше) я отбросил и вооружился Scittle — это интерпретатор всё тот SCI, интерпратор подмножества Clojure, который используется и в Babashka. Только Skittle интерпретирует ClojureScript прямо из тегов
<script>! Это же настоящий No Build, про который любит говорить DHH 😆Мне самому подход No Build очень импонирует, вот и в демо я просто в строковом литерале отгрузил кусочек ClJS — хотелось уложиться именно в один файл. Тем более что в Emacs можно выделить регион и открыть в отдельном буфере как код на заданном языке (да, не только в IDEA так можно, хоть в последней и прямо по месту код подсвечивается). Скрипт мой оживил часики на страничке и progress bar в такт секундам начал двигать (виджет взял из Pico.CSS, потому что не умею верстать). А заодно получилось показать, как обращение с объектами хостовой платформы делается.
Результат я положил в Gist вместе с краткой инструкцией по запуску, можете поиграться. На мой вкус возможность делать интерактивные микро-приложения, минимально заботясь о всяких сборщиках и зависимостях — это здорово!
👍14🔥9
Через часик запущу трансляцию тут. Попробую постримить какой-то простой проектик на FastHTML, БД на пару сущностей, CRUD для них. Проверю, настолько ли оно Fast, как заявлено :)
Приходите пообщаться, если что. А запись попробую сделать и выложу потом.
Приходите пообщаться, если что. А запись попробую сделать и выложу потом.
👍12
Вот запись. Смело можно пропускать минут сорок (прям 40 ровно и пропускайте, я проверил), потому что я там возился с тем, чтобы завести fastlite, но оказалось, что я так и не понял, как с этой штукой работать 🤦🏻♂️
https://github.com/astynax/fh-todos а вот код, если что. Я сделал там таки, чтобы добавление тудушки не затрагивало остальную таблицу.
https://github.com/astynax/fh-todos а вот код, если что. Я сделал там таки, чтобы добавление тудушки не затрагивало остальную таблицу.
👍3🔥3
Я понял, почему у меня сходу SQLite вчера не завелся 🌚!
Я зря fastlite стал ковырять. Надо было сразу в sqlite-utils нырнуть — это библиотека, которая в основе fastlite лежит, но не обёрнута странненькой вкусовщинкой. В sqlite-utils всё очень динамично и на словариках, но при этом хотя бы логично. А я, когда начал летом в FastHTML копаться, как-то незаметно перешёл от fastlite к sqlite-utils и в памяти отложилось, что "там всё просто", вот только "там" я залинковал с fastlite 🙈
Вообще sqlite-utils делают авторы datasette — песочницы для интерактивной игры с данными и выуживания "сути" посредством натягиваниясовы на глобус данных на карты, графики, таблички. И под капотом у datasette всё тот же SQLite, так что вполне можно понять, что ребята постарались сделать работу оным удобной!
Datasette я, как водится, потыкал, но для себя пока применение не придумал — как-то не особо приходится с данными работать. Забавы ради можно было бы стянуть всё с PokeAPI и поанализировать околопокемоновые штуки, но пока желанием не горю. Вам же советую хотя бы демку потыкать — интересно, как там динамически накладываются фильтры всякие.
Я зря fastlite стал ковырять. Надо было сразу в sqlite-utils нырнуть — это библиотека, которая в основе fastlite лежит, но не обёрнута странненькой вкусовщинкой. В sqlite-utils всё очень динамично и на словариках, но при этом хотя бы логично. А я, когда начал летом в FastHTML копаться, как-то незаметно перешёл от fastlite к sqlite-utils и в памяти отложилось, что "там всё просто", вот только "там" я залинковал с fastlite 🙈
Вообще sqlite-utils делают авторы datasette — песочницы для интерактивной игры с данными и выуживания "сути" посредством натягивания
Datasette я, как водится, потыкал, но для себя пока применение не придумал — как-то не особо приходится с данными работать. Забавы ради можно было бы стянуть всё с PokeAPI и поанализировать околопокемоновые штуки, но пока желанием не горю. Вам же советую хотя бы демку потыкать — интересно, как там динамически накладываются фильтры всякие.
datasette.io
Datasette is a tool for exploring and publishing data. It helps people take data of any shape, analyze and explore it, and publish it as an interactive website and accompanying API.
👍3
Дочитал таки сегодня статейки из блога Firefly Zero — одну про fantasy consoles, другую про WASM на микроконтроллерах.
Про #fantasy_consoles и про #pico8 я уже писал. Вот и в первой статье есть краткая история явления и упоминается тот самый fun от творчества в условиях ограничений — и про такое у меня есть!
Про #wasm тоже всякое тут можно найти, ведь это тоже один из моих "фоновых" интересов. Но именно в разрезе #gaming и маленьких железок я пока на него не смотрел и упомянутый в статьях выше WASM-4 звучит интересно — я не очень-то вижу, что я бы делал на WASM для Web, а вот реальную железку попрограммировал бы, в том числе и на "сыром" WebAssembly потенциально.
Так вот Firefly Zero — как раз та самая железка, программируемая на WASM. Да, ей ещё только предстоит быть выпущенной в массы. Но за проектом следить уже интересно, а игры уже можно начинать писать и запускать в браузере и на эмуляторе
P.S. Недавно с подачи читателя почитал про написание Web-приложений на Scheme с компиляцией во всё тот же WASM. Статье уже год, а там Wasm-GC уже используется, так что работа с DOM вполне уже доступна коду в WASM. Да, приходится пробрасывать API-функции из JS в WASM app явно, но такое разделение мне даже импонирует, ведь WASM всегда был про песочницы.
Про #fantasy_consoles и про #pico8 я уже писал. Вот и в первой статье есть краткая история явления и упоминается тот самый fun от творчества в условиях ограничений — и про такое у меня есть!
Про #wasm тоже всякое тут можно найти, ведь это тоже один из моих "фоновых" интересов. Но именно в разрезе #gaming и маленьких железок я пока на него не смотрел и упомянутый в статьях выше WASM-4 звучит интересно — я не очень-то вижу, что я бы делал на WASM для Web, а вот реальную железку попрограммировал бы, в том числе и на "сыром" WebAssembly потенциально.
Так вот Firefly Zero — как раз та самая железка, программируемая на WASM. Да, ей ещё только предстоит быть выпущенной в массы. Но за проектом следить уже интересно, а игры уже можно начинать писать и запускать в браузере и на эмуляторе
:) Очень жду железку, а пока попробую найти силы на осваивание платформы. Если что-то получится, то напишу сюда, как водится.P.S. Недавно с подачи читателя почитал про написание Web-приложений на Scheme с компиляцией во всё тот же WASM. Статье уже год, а там Wasm-GC уже используется, так что работа с DOM вполне уже доступна коду в WASM. Да, приходится пробрасывать API-функции из JS в WASM app явно, но такое разделение мне даже импонирует, ведь WASM всегда был про песочницы.
🔥6
Буду завтра докладывать про то, как Clojure можно в браузере запускать — не только про ClojureScript, но и про Scittle со товарищи. Трансляция тоже должна быть и я сам скринкаст запишу на всякий случай (если не забуду 🙈). Само мероприятие в Тбилиси будет проходить, я в этот раз не выбрался лично, но в виде говорящей головы выступлю!
Остальные доклады тоже обещают быть нескучными, хоть и с сильным уклоном в лиспы. Так что будет, что посмотреть :)
https://t.me/f0rthsp4ce/408 — тут подробности.
Остальные доклады тоже обещают быть нескучными, хоть и с сильным уклоном в лиспы. Так что будет, что посмотреть :)
https://t.me/f0rthsp4ce/408 — тут подробности.
Telegram
F0RTHSP4CE
* Fprog Tbilisi Meetup
* Программа мероприятия:
*** Воркшоп: формальная верификация программ с состоянием на Lean4 (@GabrielFallen)
(sic!) Воркшоп стартует в 12:00, хронометраж ~3 часа. Это практическое занятие, берите с собой компьютеры. После воркшопа…
* Программа мероприятия:
*** Воркшоп: формальная верификация программ с состоянием на Lean4 (@GabrielFallen)
(sic!) Воркшоп стартует в 12:00, хронометраж ~3 часа. Это практическое занятие, берите с собой компьютеры. После воркшопа…
🔥19👍1
https://www.youtube.com/watch?v=5T-XONZCptc трансляция тут
UPDATE: а вот и запись моего доклада (ссылка откроет весь плейлист, доклады все отличные были!)
UPDATE: а вот и запись моего доклада (ссылка откроет весь плейлист, доклады все отличные были!)
YouTube
Fprog Tbilisi Meetup (01.12.2024)
Fprog Tbilisi Meetup
* Программа мероприятия:
*** Воркшоп: формальная верификация программ с состоянием на Lean4 (@GabrielFallen)
(sic!) Воркшоп стартует в 12:00, хронометраж ~3 часа. Это практическое занятие, берите с собой компьютеры. После воркшопа…
* Программа мероприятия:
*** Воркшоп: формальная верификация программ с состоянием на Lean4 (@GabrielFallen)
(sic!) Воркшоп стартует в 12:00, хронометраж ~3 часа. Это практическое занятие, берите с собой компьютеры. После воркшопа…
👍4🔥1
Вчера закончил AdventOfCode'2024 c 50 звёздами.
Этот AoC — юбилейный, десятый. Я участвую с самого первого года и только однажды вообще не участвовал в процессе. Но потом несколько заданий всё же прорешал. Правда, "50/50" в прошедших сезонах постфактум я так и не добил, потому что вне мероприятия мотивации у меня не хватает надолго 🌚
Вообще количество звёзд, которые я набрал, год от года растёт, но это не говорит о том, что я начал лучше программировать, просто задачки стали проще 🙈 Это уже заметная тенденция. В нынешнем сезоне я забуксовал буквально один раз, в остальном мне хватало мемоизации и готовой библиотечки алгоритмов на графах. Возможно, авторы действительно хотят дать возможность продержаться подольше большему количеству людей. Посмотрим, что будет в 2025г.
А пока мои достижения выглядят так
Этот AoC — юбилейный, десятый. Я участвую с самого первого года и только однажды вообще не участвовал в процессе. Но потом несколько заданий всё же прорешал. Правда, "50/50" в прошедших сезонах постфактум я так и не добил, потому что вне мероприятия мотивации у меня не хватает надолго 🌚
Вообще количество звёзд, которые я набрал, год от года растёт, но это не говорит о том, что я начал лучше программировать, просто задачки стали проще 🙈 Это уже заметная тенденция. В нынешнем сезоне я забуксовал буквально один раз, в остальном мне хватало мемоизации и готовой библиотечки алгоритмов на графах. Возможно, авторы действительно хотят дать возможность продержаться подольше большему количеству людей. Посмотрим, что будет в 2025г.
А пока мои достижения выглядят так
🔥30👍5
В начале марта ребята делают новые смены CodeRetreat в Черногории.
В этот раз я не ведущий — сам я в апреле поеду, а на две поездки подряд за одну весну я пока не готов 🙈. Зато другим выбраться рекомендую настоятельно — переключить голову и завести знакомства, натереть мозоли, как водится. В марте там будет ещё не жарко, так что костры и прочие бани будут очень даже в тему.
🇬🇧 Кэмп-викенд на английском с полным погружением, фокусом на IT-собеседования и поиск работы на глобальном рынке. Хорошая практика для тех, кто хочет потренироваться перед важными собесами, прожарить свои резюме и разговориться (я прям жалею, что не попадаю — мне точно было бы полезно поспикать from my heart 🌚).
https://coderetreat.me/itenglish
28 февраля - 2 марта
🥷 Кэмп про ха(й)кинг! Вместе с этичным хакером будете заниматься поиском уязвимостей, научитесь видеть слабые места собственных приложений с точки зрения информационной безопасности. Даже соревнования будут, говорят!
https://coderetreat.me/securecamp
3 - 6 марта
Про то, что у меня будет на треке, я попозже напишу: у меня пока research не закончился — идея есть, тоже соревновательная, но с нужным ПО я пока не определился, как бы не пришлось велосипедить 😉. Ещё можно пройти и подписаться на @coderetreatme — там точно новость появится.
P.S. Да, это (само)реклама. Но мы на самом деле очень стараемся. И практика показывает, что у нас получается!
В этот раз я не ведущий — сам я в апреле поеду, а на две поездки подряд за одну весну я пока не готов 🙈. Зато другим выбраться рекомендую настоятельно — переключить голову и завести знакомства, натереть мозоли, как водится. В марте там будет ещё не жарко, так что костры и прочие бани будут очень даже в тему.
🇬🇧 Кэмп-викенд на английском с полным погружением, фокусом на IT-собеседования и поиск работы на глобальном рынке. Хорошая практика для тех, кто хочет потренироваться перед важными собесами, прожарить свои резюме и разговориться (я прям жалею, что не попадаю — мне точно было бы полезно поспикать from my heart 🌚).
https://coderetreat.me/itenglish
28 февраля - 2 марта
🥷 Кэмп про ха(й)кинг! Вместе с этичным хакером будете заниматься поиском уязвимостей, научитесь видеть слабые места собственных приложений с точки зрения информационной безопасности. Даже соревнования будут, говорят!
https://coderetreat.me/securecamp
3 - 6 марта
Про то, что у меня будет на треке, я попозже напишу: у меня пока research не закончился — идея есть, тоже соревновательная, но с нужным ПО я пока не определился, как бы не пришлось велосипедить 😉. Ещё можно пройти и подписаться на @coderetreatme — там точно новость появится.
P.S. Да, это (само)реклама. Но мы на самом деле очень стараемся. И практика показывает, что у нас получается!
coderetreat.me
IT English Camp
Кэмп в горах с погружением в английский для IT специалистов, 28 февраля - 2 марта, Черногория
🔥13
Вот и настало время отписать, с чем я поеду в ЧГ в конце апреля: GaveDev Jam (kinda) проводить! Попробуем коллективно написать Sokoban для Tic-80 в чаде кутежа, в стиле Mob Programming, с привлечением LLM (модно, молодёжно и просто весело).
Почему Tic-80? Потому что у виртуальных консолей максимальные retro vibes 👾, а эта конкретная штучка поддерживает несколько языков на выбор и является FOSS. И результат можно собрать в HTML-ку самостоятельную и опубликовать сразу же, это само по себе ценно!
Почему Sokoban? Потому что идея простая, но допускает усложнение. И пошаговость сама по себе освобождает от многих проблем, о которых думать не хочется 😎
Параллельно пообщаемся о GameDev в целом — прямо в время хайков. Как показала практика, какой-то суровый технический контент на retreats воспринимается с трудом, так что постараемся в основном удовольствие получить!
Собственно, ссылка на страничку мероприятия: https://coderetreat.me/gamejam
UPD: мероприятие отменяется или переносится на когда-нибудь 🙈
Почему Tic-80? Потому что у виртуальных консолей максимальные retro vibes 👾, а эта конкретная штучка поддерживает несколько языков на выбор и является FOSS. И результат можно собрать в HTML-ку самостоятельную и опубликовать сразу же, это само по себе ценно!
Почему Sokoban? Потому что идея простая, но допускает усложнение. И пошаговость сама по себе освобождает от многих проблем, о которых думать не хочется 😎
Параллельно пообщаемся о GameDev в целом — прямо в время хайков. Как показала практика, какой-то суровый технический контент на retreats воспринимается с трудом, так что постараемся в основном удовольствие получить!
Собственно, ссылка на страничку мероприятия: https://coderetreat.me/gamejam
UPD: мероприятие отменяется или переносится на когда-нибудь 🙈
👍11🔥5
Ну вот, отменяется этот мой ритрит про геймдев — участников не набралось минимально достаточное количество. Видимо, все желающие похайкать скатались в прошлом году и не по разу 🙈 Ну да ладно, может быть ещё соберёмся и поджемим игры! Были ещё идеи ритритить вокруг чая и/или кофе, тоже надо будет попробовать 😉
(И надо будет хотя-бы сюда написать, с чем я там поиграл вокруг Tic-80)
(И надо будет хотя-бы сюда написать, с чем я там поиграл вокруг Tic-80)
😱12
Недавно решил пройтись по моим RSS-подпискам и проверить, сколько из них живо ещё. Несколько личных блогов отвалилось безвозвратно, как это порой бывает. Кто-то просто пересобрал генерацию сайта на новый движок и старая лента отвалилась. Для некоторых смена стека, на котором работает сайт — главное развлечение.
Я сам был таким — несколько раз менял генераторы для сайта, я и сюда писал вкратце о моих приключениях. С тех пор мой сайт-визитка переехал с самодельного движка на максимально стандартный Jekyll с простенькой темой
В рамках упомянутого выше "дня приведения в порядок подписок", решил я сходить и посмотреть, что же Рахим сейчас пишет. Выяснил, что он уже какое-то время ведёт блог на своём движке и на собственном хостинге. Вот уж я посмеялся :) Блог у Рахима тоже менял движок свой несколько раз ещё будучи статичным сайтом, в процессе стали недоступны многие неплохие статьи. Но ресурс был достаточно заметен, чтобы его проиндексировала Wayback Machine, чему я был очень рад — как раз захотелось перечитать кое-что старенькое и мочь потом сослаться на.
Пока я смотрел вокруг того, что Рахим делает, наткнулся на один из его свежих проектиков: textpod, "extremely simple note-taking app". И эта находка меня порадовала тем, что это образчик того самого smol software, а я вокруг этой темы вращаюсь в последнее время (периодически залетаю сделать пару кругов).
textpod — это заметочнца, которая хранит всё в одном Markdown-файле и общается с пользователем через Web-интерфейс. Написана программа на Rust, собрана в самостоятельный бинарник, призвана работать локально. А smol она потому, что запрограммировано ровно то, что необходимо для работы, и все решения максимально прямолинейны и не страдают лишней развесистостью. Чего нельзя, увы, сказать о пачке зависимостей проекта, но таков уж современный Rust for Web, в textpod всё ещё вполне скромно.
Кстати, если вам показалось, что заметка какая-то слишком развесистая получилась, то вам не показалось
Я сам был таким — несколько раз менял генераторы для сайта, я и сюда писал вкратце о моих приключениях. С тех пор мой сайт-визитка переехал с самодельного движка на максимально стандартный 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, который я решил взять в этот раз (потому что почему бы и нет
И вот этот самый перенос приложения с "
Не буду описывать все эксперименты, расскажу только, что получилось в итоге. Можете сразу на картинку смотреть, которую я приложу ниже.
Итак, запрос приходит с префиксом "
Правда, ещё мне пришлось парочку textpod'овских вложенных путей дополнить префиксом и сделать это уже через rewriting, поскольку здесь мне таки нужно было, чтобы matching сработал заново и проверил доступ — и пробросил бы запрос к сервису с отбрасыванием префикса
И все эти приседания нужны были только для того чтобы Basic HTTP Auth работал не для всех URI, начиная от "
Не призываю никого повторять мой эксперимент, но я лично получил массу удовольствия (без кавычек) от настройки этой странненькой связки, а мне важно себя награждать, такой, вот, пунктик!
Можно было добавить защиту паролем прямо в код, на 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