Типа про IT
کانال بسته
Типа про IT и вот это вот всё. Авторский блог exclusively for Telegram.
نمایش بیشتر1 039
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-17 روز
-1230 روز
آرشیو پست ها
1 039
Каким редактором кода вы пользуетесь в этом году? Intellij IDEA? Visual Studio Code? Или уже перешли на хайповый Zed? Если нет — сэкономлю вам немного времени. Он пока не готов к реальной жизни, хотя всё выглядит так, как будто имеет смысл всё бросить и переезжать уже завтра. Но не сегодня.
А пока —
vim наше всё. Точнее, nvim. Наш островок стабильности в этом загнивающем мире расцвета GPT. Оказывается, я рассказывал о своей нежной любви к нему ещё в 2019-м и нахваливал тогда дистрибутив space-vim, который с тех пор немножко умер и уступил место другому space-vim, с которым у меня почти сразу не сложилось. Постоянно что-то отваливалось или выглядело как кусок говна. А мы тут не только cli-минималисты, но и эстеты в терминальной стадии, right?
Вот бы сделали такую сборку, которая просто хорошо работает, приятно выглядит и не требует постоянного тюнинга? Что-то ближе к универсальной IDE на несколько языков, чем к редактору. И чтобы не переучиваться целый год.
AstroNvim — это vim из 2024 и мне в нём нравится примерно вообще всё. Пользуюсь им с октября прошлого года и за это время не было ни единого разрыва. Сборка на удивление добротная и у меня по сей день нет для неё ни одной строчки кастомизации и прикручен всего 1 сторонний плагин для интеграции ollama.
Как всегда, лучше один раз увидеть в действии и потом попробовать самому:
📺 Neovim With AstroNvim | Your New Advanced Development Editor1 039
🧩 GetBEM just made my day. Оно мало того, что живое, так у них фан-клубный сайт на Astro + Tailwind, кек. На официальном сайте всё как надо, конечно же. Точнее, как не надо, потому что ну кому оно сегодня надо?
А если надо, присмотритесь также к jQuery 4, да и Backbone недавно обновился...
1 039
🦀 Дописывайте:
— Rye — очередной "правильный" package management solution. И не абы от кого, а от Армина Ронахера, того самого. Просто перепишите
poetry на Rust, хоспаде.
— uv — drop-in replacement for pip and pip-tools.
— от тех же ребят, что делают ruff, который должен заменить весь ваш зоопарк линтеров и форматтеров уже сегодня.1 039
🍏 15_конкурирующих_стандартов.jpg, TLDR:
- JSON и YAML больше не нужны
- Made by Apple
- Обзор от Theo
- Это мы используем?
1 039
🦾 В общем, Чёрное Зеркало пришло в нашу жизнь чуть раньше, чем ожидалось. Поздравляю, вы NPC в технократической антиутопии, как и хотели. Так что давайте фаниться, как будто этот год последний. Хаха. Хахаха.
Например, можно попросить ChatGPT написать слова к песне, Suno музыку и вокал, а Midjourney или DALL-E нарисовать обложку к вашему гениальному синглу. Хуяк! 5 минут дела и вот вы уже в британских чартах! Иногда это даже можно слушать, недурно.
1 039
👉 "If you constantly unpack everything for deeper understanding you never get anything done. If you don't unpack and understand it when you need to, you'll do the wrong thing." Must watch.
1 039
👉 If you constantly unpack everything for deeper understanding you never get anything done. If you don't unpack and understand it when you need to, you'll do the wrong thing. https://www.youtube.com/watch?v=1CSeY10zbqo
1 039
🐍 Уже сегодня мы используем в своих Python-based apps библиотеки и инструменты, написанные на Rust: Pydantic 2, Ruff, Polars, смотрим на Granian. Есть все основания полагать, что в последующие 10 лет Python станет фронтенд-языком к Rust'овой экосистеме. Дата. Подпись.
1 039
🐷 Всё забываю рассказать о небольшой драме, которая полностью изменила моё отношение к компании Vultr.
У меня там было несколько простых инстансов, в том числе GPU, который я даже нахваливал полтора года назад. И в целом за всё время у меня не было с ними особых проблем.
В декабре я немного заигрался с jails на FreeBSD, экспериментируя с различными инструментами, включая
pf, ipfs, squid и другие. Я не настоящий сварщик и не умею в pf, он нетривиальный и требует изучения. Чем я, собственно, и занимался.
Как-то раз я что-то нахуевертил и пошёл спать. На утро мне пришёл email, что так мол и так, наша скан-система обнаружила какой-то странный порт с какой-то странной активностью, а пока вы разбираетесь, мы отключили (!) ваш инстанс.
По какой-то причине им не понравился открытый в мир прокси-сервер. Я пофиксил. Но этого оказалось мало. Мне прислали запрос на объяснительную, в которой мне нужно было расписать чем именно я занимаюсь на их серверах и как именно я могу гарантировать, что таких проблем не повторится.
На что я ответил, что как-то не комильфо отключать мои инстансы без предупреждения. Что если это не плейграунд, а бизнес? И вместо того, чтобы замять конфликт, они решили пойти на эскалацию, прислав мне расширенный список уморительных вопросов.
Всё закончилось тем, что я послал их нахуй в максимально грубой форме, запросил полный refund (деньги мне не вернули) и полное удаление всех моих персональных данных с их систем (поверим на слово).
После чего я безболезненно переехал на Kamatera для дальнейших экспериментов с BSD-системами (слава Ansible), где меня не доёбывают никакими вопросами.
Обязуюсь хуесосить Vultr при каждом удобном случае. Vultr — соси жопу.1 039
🦆 Samuel Colvin, который автор горячо мейнстримного Pydantic, на днях разродился новым проектом под названием FastUI. Это очередная попытка делать фронтенд, выводя разметку и логику из бэкенда и яркий пример того, как на базе обычной data validation library можно наворотить целый frontend meta framework.
Относительно популярный сегодня проект htmx и (книга-эссе Hypermedia Systems в частности) полностью развязали руки всем, кто хотел легитимно вернуть фронтенд "в родную гавань", но не знал с чего начать. Оказалось, что все эти годы мы совершенно неверно истолковывали суть REST'а и с каждым днём всё дальше от бога. Современный веб сломан и переусложнён, поэтому нужно сделать шаг назад, взять за основу старый-добрый HTML, рендерить всё на бэкенде и гонять по сети не JSON, а куски шаблонов, называя это расово верным HATEOAS.
Кроме шуток, подход имеет право на жизнь, хоть и не решает совершенно все проблемы, скорее даже создает новые, такие как необходимость думать про morphdom и предлагает концептуально приемлемый, но такой убогий Hyperscript вместо нативного JS.
1 039
🐑 Благодаря проекту ollama вам теперь не нужен мощный GPU, чтобы локально запускать большие языковые модели. Считайте, что это легковесный Docker для LLM, потому что в целом оно хочет, чтобы вы думали именно так.
Установка тривиальна, разберётесь. Из интересного — кастомизация модельки стартовым промтом. Например, можно описать Modelfile вида:
FROM mistral
SYSTEM """
Imagine you are a crazy old man and you're constantly threatening everyone with nuclear war.
"""
Потом создать образ и запустить его:
ollama create rick -f ./Modelfile ollama run rick >>> Hi! How are you doing today? Greetings youngster, how dost thou fare on this fine day? I am doing well, thank thee for asking. My days are filled with thoughts of global domination and the annihilation of my enemies. Have you not heard of the great power that nuclear war holds? It is a force to be reckoned with and should not be trifled with. So answer me this, are you ready to face the wrath of the old man?Модель
llama2 постоянно выдает какой-то душный кал мимо кассы, особенно если попросить её перестать быть вежливой, берите mistral или производные.
К слову, управлять моделью и общаться с ней можно в том числе через ollama API, что позволяет подключать её вообще куда угодно обычным REST'ом. Есть даже плагин к Obsidian, который просто работает и легко настраивается.
Всё это означает, что мы таки получили "LLM в каждом чайнике" и можно сетапить свои собственные self-hosted models уже сегодня.1 039
🐚 Волшебный
zsh-трюк от коллеги. Скажем, у вас есть два проекта, один в
~/projects/foo-DEV-bar/, а другой в ~/projects/foo-PROD-bar/ и вы сейчас
глубоко в ~/projects/foo-DEV-bar/a/b/c/d/e/, а надо туда же, только в PROD.
Оказывается, можно передать в cd два аргумента, source и destination, которые будут подстрокой на поиск и замену части пути, то есть:
cd DEV PROD перенесёт вас из ~/projects/foo-DEV-bar/a/b/c/d/e/ в ~/projects/foo-PROD-bar/a/b/c/d/e/. Ну а потом можно прыгать между ними с помощью cd -
Чудеса!1 039
👹 На днях зарелизился FreeBSD 14 и сам по себе релиз никакой революции, в глобальном смысле, не принёс. Зато напомнил о себе чередой публикаций на Reddit и заставил написать этот пост.
Кажется, что Linux победил всех трижды. Сначала надругался над Minix. Потом, собственно, BSD и прочие Solaris (не без "помощи" Oracle). Ну и в итоге Windows (на серверах, не без вливаний RedHat). Стало даже казаться, будто живых систем осталось всего три — Mac, Linux и Windows. Да, к каком-то смысле Mac это BSD, но вы ничего не докажете.
FreeBSD не просто жива чуть более, чем менее. FreeBSD сегодня — это то, чем стоило бы стать Linux завтра. И главное в ней — первоклассная поддержка ZFS и Jails. Помимо того, что это операционная система, а не фрагментированный конструктор дистрибутивов, разумеется.
ZFS — это современная файловая система, которую нежно любят за дешевые и компактные снапшоты, а также за производительный и надёжный программный RAID.
Jails — это механизм контейнеризации, доступный во FreeBSD "из коробки" задолго до того, как про это вообще начали говорить. Тот же LXC, например, появился на 8 лет позже (в 2008-м), а Docker на целых 13 (в 2013-м). Всё это время Jails тоже не стоял на месте, превратившись из "chroot на стероидах" в полноценную OS-level virtualisation system.
Настройка же и подход к развёртыванию Jails несколько отличается от того, к чему мы уже привыкли в Docker. Здесь нет images (в нашем понимании), нет поддержки OCI, нет своего Kubernetes. Зато есть сами изолированные контейнеры и набор инструментов к ним.
Контейнеры эти можно быстро создавать, настраивать любым удобным способом, мониторить, ограничивать ресурсы, делать моментальные снапшоты с помощью ZFS, передавать их по сети и разворачивать as-is на любой другой аналогичной FreeBSD-системе. Можно даже натравить на них Nomad в качестве простой альтернативы Куберу, why not.
Настройка Jails сама по себе довольно низкоуровневая и требует некоторых навыков системного администрирования, а также базового понимания PF для проброса сетевого трафика. Из-за чего, собственно, существуют специальные инструменты (на деле — просто набор скриптов), которые облегчают создание и сопровождение контейнеров: CBSD, Bastille, Pot, AppJail и другие.
Сегодня, судя по всему, идёт борьба за "стандартное решение" в основном между bastille и pot, при этом pot больше мимикрирует под docker и располагает плагином к Nomad, зато Bastille чуть более популярное решение само по себе и предлагает репозиторий с шаблонами а-ля Docker Hub. Всё это, разумеется, нужно пробовать и сравнивать самому, потому что пишут об этом редко, а обсуждают только на конференциях вроде BSDcon, для "своих".
Так что в параллельной вселенной существует зрелое решение, о котором имеет смысл узнать получше. Комбинация ZFS+Jails это мощное оружие в умелых руках.
Introduction to Jails
ZFS for Newbies
Orchestrating jails with nomad and pot
1 039
🔒 В последние месяцы я немного угорел по self-hosted решениям, которых мне всегда хотелось, но никогда не доходили руки.
Вообще всё началось с того, что в очередной раз упал Kami Cloud, через который ходит видео-поток наших домашних камер Yi Home (4 штуки). Это в очередной раз дало повод задуматься о дикости самого факта, что наши приватные камеры стримят видео через Китай и хрен знает что с этим стримом вообще происходит. Отсюда ещё и большая, почти 3-секундная задержка, а иногда это критично (когда по монитору наблюдаешь как ребёнок вылазит из кровати, скорее всего он уже летит с неё на пол).
Захотелось нормального privacy и заодно уменьшить latency.
Reddit и Дом-дурачок сильно помогли мне выбрать верное направление движения, так что в итоге у меня в кладовке к роутеру подключен dedicated Raspberry Pi 4 с установленным Home Assistant. Works like a charm.
Из забавного. Сам Home Assistant стал как влитой, с ним всё очень просто. А вот с камерами пришлось повозиться, чтобы отвязать их от большого китайского брата.
Для сяомишных камер существует несколько версий "хакнутых прошивок" из которых мне подошла только https://github.com/roleoroleo/yi-hack-Allwinner-v2. Её особенность в том, что она... работает. И умеет в RTSP-поток, а большего и не нужно. Главный её недостаток в том, что она требует постоянного наличия SD-карты в камере, из-за чего пришлось докупить ещё 4 карточки. Ну да ладно, они копеечные.
Чтобы в Home Assistant показывать живой поток со всех камер, нужно что-то, что умеет работать с RTSP, то есть https://github.com/AlexxIT/WebRTC. Этот плагин делает много крутой чёрной магии, но при этом just works, если достаточно внимательно следовать примерам из документации.
Сложности начались тогда, когда надо было заставить WebRTC работать через интернет, чтобы посматривать в камеры не только из локальной сети. Пришлось запросить у провайдера честный статический IP (оказалось, что это важно), немного повозиться с port forwarding'ом, в частности пробросить наружу порт 8555 (оказалось, что это важно) и всякого по мелочи потюнить то тут, то там. Sorted.
Туда же стал AdGuard, который фильтрует мне трафик от всякой шелухи для всех домашних девайсов (горячо рекомендую).
В этом деле главное не только начать, но и вовремя остановиться, потому что наворотить можно много чего, вот только непонятно зачем. Пару датчиков движения ещё докуплю и точно всё!
Однако, теперь хочется собрать полноценный домашний сервер с NAS, Jellyfin для видео, Navidrome для музыки, PhotoPrism для фото и Syncthing для файликов. Так победим этих проклятых облачных капиталистов!
1 039
🦾 Мы вроде как знаем в общем чертах как исполняются программы компьютером. Что-то там процессор, память, ядро, хуё-моё, да. Но как именно, from A to Z? Read cpu.land to know more. Now. Никуда ваши таски не денутся.
1 039
🦾 Используете Docker Desktop? Знаете такой? Нравится?
Однажды, он нас всех так заебал своими обновлениями, маркетологическими заскоками и крэшами на ровном месте, что никого даже особо уговаривать не пришлось удалить его под ноль и перейти на Colima.
Just works as a drop-in replacement. Пока есть только один известный мне случай, когда сторонние приложения опираются на
/var/run/docker.sock, которого там нет (как вот testcontainers-python), но это лечится простым советским export DOCKER_HOST="unix://${HOME}/.colima/default/docker.sock".
Саму colima можно немного потюнить на старте, у меня так:
colima start --cpu 2 --memory 8 --disk 20 --vm-type=vz --mount-type=virtiofs
Ну и всё. Рантайм крутится, контейнеры мутятся.1 039
🥃 Почитать/посмотреть на выходных:
1. How Levels.fyi scaled to millions of users with Google Sheets as a backend
2. Society’s Technical Debt and Software’s Gutenberg Moment
3. The One Question To Haunt Everyone: What is a DDD Aggregate?
4. EventSourcing & CQRS: a light introduction
5. The One Question To Haunt Everyone: What is a DDD Aggregate?
6. What Is ChatGPT Doing … and Why Does It Work?
1 039
В Q1 2023 дошли, наконец, руки и до проектной документации. Для этого, правда, пришлось договориться с командой не только о том, что документация это first-class citizen, но и придумать как держать её в актуальном состоянии без усложнения рабочего цикла.
Конечно, у нас есть Confluence. Более того, мы обязаны вести документацию в Confluence, потому что “так надо” с точки зрения бизнеса для cross-team knowledge sharing и вот это всё.
С другой стороны, я ненавижу душный Confluence и мне кажется, что это нормально. В этом плане, у нас в команде полное взаимопонимание. К тому же, документация в Confluence всегда отстаёт от жизни. Следить за её актуальностью как бы надо бы регулярно, но для этого нужен какой-то особый уровень дисциплины, а мы тут про реальные вещи говорим.
Хочется держать полную документацию со всеми C4 и прочими диаграммами поближе к коду, в репозитории проекта. Изменение должно версионироваться и проходить review, так же как и код. Диаграммы должны быть, по большей части, декларативными, поэтому завозим Mermaid. Хотелось бы D2, но уже в другой раз.
Sphinx выглядит старо, a его RST-формат громоздко, все хотят Markdown. Берём mkdocs и наряжаем в mkdocs-material с расширениями. Во, теперь классно. И с Mermaid он дружит из коробки, cool. Дополнительно добавляем mkdocstrings для интроспекции и ещё пару свистелок.
Объявляем
make docs с hot reload и наслаждаемся красотой. Локально. А как же Confluence? Тут уже пришлось заморочиться и запилить решение, которое рендерит нужные нам markdown в html, а потом с помощью lxml приводит его к формату, который нравится Confluence, учитывая все его фирменные xml-based macros. Готового полного решения, увы, не нашлось.
После чего загружаем документ и сопутствующие attachments через API ну и остаётся прикрутить весь этот процесс к CI/CD, чтобы документация публиковала себя самостоятельно сразу после попадания в master. Получилось достаточно удобно и решило большую часть первоначальных проблем.