Будни разработчика
14.6K subscribers
1.36K photos
396 videos
8 files
2.27K links
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
#фишка дня

В CSS есть ключевое слово safe, которое используется вместе со значениями выравнивания и не даёт контенту «вылезать» за границы контейнера. Если элемент не помещается при обычном выравнивании, браузер автоматически смещает его так, чтобы он оставался видимым.

Это удобно в адаптивных интерфейсах, где размеры могут меняться и важно не терять доступ к содержимому. safe работает с flexbox, grid и свойствами вроде align-items, justify-content и другими.

Простой пример:


.container {
display: flex;
justify-content: safe center;
}


Здесь элементы будут центрироваться, но если не помещаются, выравнивание изменится так, чтобы их не обрезало.

Подробнее читать тут: https://iprodan.dev/l/safe-alignment/

#css #flex #safe #бородач
👍4
Ingress-nginx уходит в прошлое. С марта 2026 поддержка прекратилась. А что вместо него? Предлагаем посмотреть на Gateway API, новый стандарт Kubernetes SIG.

23 июля в 17:00 старший SRE-инженер MWS Cloud Евгений Макеев на практике покажет:

⚫️ чем маршрутизация Gateway API отличается от Ingress
⚫️ как выбрать контроллер
⚫️ как установить Gateway API в Managed Kubernetes
⚫️ как настроить безопасное подключение через TLS-сертификат

Будет полезно для DevOps, платформенным инженерам и разработчикам.

Регистрируйтесь по ссылке
Please open Telegram to view this post
VIEW IN TELEGRAM
🤡3
#заметка дня

В рассылке ядра Linux снова спорят об ИИ. То есть люди, способные неделями обсуждать правильный подсчёт байт, спустились на землю.

Поводом стал Sashiko — LLM-инструмент для проверки патчей. Laurent Pinchart предложил сначала прогонять его вывод через человека и сослался на рекомендации Software Freedom Conservancy, где поддерживают право проектов вообще запрещать AI-generated contributions.

Roman Gushchin резонно заметил: если мейнтейнер обязан перепроверить каждое замечание, инструмент экономит ему время примерно никак.
Тут вмешался Линус.

Письмо прекрасное: Linux не anti-AI-проект. Не нравится — форкайте или уходите.

По его мнению, спор о пользе ИИ уже закончился. Он полезен, находит реальные ошибки и иногда ставит людей в неловкое положение, потому что замечает то, что они пропустили. Если инструмент заваливает мейнтейнеров мусором, надо чинить инструмент, а не изображать, будто LLM не существует.
Сам Линус уже навайбкодил с Google Antigravity Python-визуализатор для своего проекта AudioNoise. DSP на C написал сам, а разбираться ради вспомогательной утилиты в Python не стал. Раньше собирал бы её по чужим примерам, теперь просто убрал из цепочки себя.

Другие проекты осторожнее. QEMU не принимает AI-generated code из-за проблем с происхождением и лицензиями. Похожие ограничения есть у NetBSD, Gentoo, Zig и отдельных проектов GNOME.

Разница простая. Они сначала видят юридическую и ревьюерскую головную боль. Линус сначала смотрит, работает ли штука.

ИИ — инструмент. А запрещать инструмент целиком потому, что им удобно производить говно, — довольно странная инженерная политика.

#ai
3👍2
#инструмент дня

Сайтов с палитрами, генераторами и готовыми сочетаниями цветов полно. Но грибной среди них, кажется, один — Mushroom Color Atlas.

Это большой интерактивный атлас цветов, которые можно получить из разных видов грибов. Палитру разрешают фильтровать по самому грибу, типу ткани, протраве, красителю или пигменту. Причём это не просто коллекция красивых образцов: для каждого цвета зафиксированы материалы и условия эксперимента.

Проект сделала художница и дизайнер Джули Билер. Она выросла рядом с лесами у подножия вулкана Сент-Хеленс и с детства интересовалась грибами и природой. Позже Билер начала экспериментировать с натуральными красителями, а для атласа решила превратить эти опыты почти в лабораторное исследование: повторять один и тот же процесс, записывать переменные и постепенно собирать базовую карту грибных цветов.

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

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

#color
16
#статья дня

Так получилось, что я использовал матрицы преобразований — осмысленно — всего раз в жизни. Правда, в итоге перешёл на решение попроще: https://xn--r1a.website/htmlshit/1580

Но это не значит, что они не нужны :) Просто не у всех есть под них задачи.

А вот у Ивана Шубина — автора редактора диаграмм Schemio — такая задача возникла. Правда, осознал он это не сразу :)

Ну кто бы мог подумать, что тебе понадобятся матрицы преобразований, когда ты разрабатываешь векторный редактор, правда?

Прекрасная статья для тех, кто говорит, что программисту математика не нужна: https://itnext.io/how-i-used-linear-algebra-to-build-an-interactive-diagramming-editor-and-why-matrix-math-is-d5bd552f2e8d

Ну, точнее, линейная алгебра.

Есть перевод на русский: https://habr.com/ru/articles/870462/

Не, кроме шуток, просто шикарнейшая статья, после которой очень многое в работе с векторной (и не только) графикой станет понятно.

#svg #math #matrix #transform #бородач
3
This media is not supported in your browser
VIEW IN TELEGRAM
#ссылка дня

Кто хотел красивых анимированных иконок без обязательств?

🙋 Я точно хотел!

Итак, вашему вниманию иконки от Дмитро Товстокорого: https://icons.pqoqubbw.dev/

Анимированные при помощи библиотеки motion SVG с MIT-лицензией, что может быть прекраснее?

Давайте немного насладимся воем на болотах о том, что ещё одна библиотека анимации в проект нам не нужна.

Ну и никто не мешает вдохновиться и реализовать своё, с использованием своих инструментов, ведь правда?

К слову, библиотека Motion выросла из инструмента Framer, а их уж новичками никак не назовёшь. Так что вполне себе проверена в бою.

Берём, котаны?

#icons #svg #animation #бородач
👍11🔥32
#заметка дня

Electron.js, Tauri, ProtonShell, да сотни их. Всё это — средства разработки desktop-приложений на JavaScript/TypeScript и иже с ними. Где-то справедливо, где-то — не очень — критикуемы. Какие-то из них используют биндинги к нативным виджетам системы, какие-то — к Wx, Qt или GTK.

А что если я вам скажу, что есть среда, в которой JavaScript приложения — новая норма?

И это, внезапно, GNOME. Тот самый, что по дефолту в Ubuntu, Fedora, openSUSE Linux.

Изначально, движок JavaScript в GNOME — GJS — задумывался для расширений GNOME Shell, собственно, среды рабочего стола. Основан он на SpiderMonkey, движке из Firefox.

Путь GJS как движка для разработки приложений, а не только расширений, был достаточно тернист, но в итоге мы получили мощное средство разработки UI, вытесняющее даже изначально придуманный для этого язык Vala.

Естественно, интерфейс рисуется не веб-технологиями. Присутстсвуют биндинги к GTK и, естественно, libadwaita.

Последнее это не просто библиотека, содержащая дефолтную тему GTK для GNOME, но целая определяющая поведение виджетов среда. Что-то, что делает гном — гномом, пусть многим это и не всегда нравится.

И вот одним из последних приобретений списка дефолтных приложений GNOME стал аудиоплеер Decibels: https://gitlab.gnome.org/GNOME/decibels

Если вам хочется вообще выйти за рамки веба, оторваться от React и попробовать свои силы в чём-то максимально близком к нативной разработке, при этом, без изучения нового языка, то разработка приложений для GNOME вполне может стать началом чего-то интересного.

Вот, например, шаблон: https://gitlab.gnome.org/World/javascript/gnome-typescript-template

А тут есть история разработчика, который портировал приложение Диктофон: https://blogs.gnome.org/christopherdavis/2022/08/25/trying-typescript-for-gnome-apps/

Иногда бывает полезно выскочить из привычной среды. Пробуем, котаны?

#gtk #linux #gnome #бородач
2👍41
#баг дня или история одного апокалипсиса

Знаете, что происходит, если в Firefox ввести в <input type="number"> что-то вроде lol?

Он позволяет.

Да, вы видите эти lol, будто это валидное число. Только вот значение value в DOM превращается в пустую строку. Ну типа «я тебе это показал, но делать с этим ничего не буду». Гениально.

Баг #1398528 в Bugzilla живёт с 2017 года. Проблему признают: Firefox нарушает спецификацию WHATWG, согласно которой input type=number должен принимать только корректные числовые строки. А на деле — буквы, кириллица, эмоджи — всё идёт в бой. Только вот под капотом — пусто. Т.е. ты видишь, что ввёл, но значение не считается валидным. UX? Ну, такое себе.

Почему не фиксят?

Ответ классический: «а что, если у нас локаль с деванагари и арабскими цифрами, и вообще — как различать запятую и точку?». Ну и правда, лучше пусть вводится вся клавиатура, чем разбираться в сепараторах.

А теперь немного цирка из Chrome:

В Chrome <input type="number"> иногда разрешает ввод e, ведь вдруг ты хочешь ввести 1e10 (научную запись). Но если ты просто набрал e, поле становится… валидным. Бинго!

Ещё веселее: 1e- — тоже "нормально", но 1ee — уже нет. Картинку с барабаном вставите сами.

А если ты вводишь 1,5 в локали, где десятичный — это точка, Chrome может забраковать это, а может и нет — зависит от версии, луны и количества кофе у разработчика.

В итоге: у Firefox можно ввести хоть «привет», и он такой: «ну окей, но это не число». Chrome вроде бы фильтрует, но делает это через лунную призму.

Что же мы делаем? Пишем код, блять!

Мораль: в 2026 году проще создать свою валидацию под конкретный случай, чем надеяться, что браузеры когда-нибудь договорятся.
А баг тем временем отмечает 8 лет жизни, всё ещё «NEW», и, судя по комментариям, будет жить

Баг-репорт: https://bugzilla.mozilla.org/show_bug.cgi?id=1398528

Подпишитесь и следите, если вы, как и мы, верите (нет) в чудеса стандартизации.

P. S. тем временем Firefox пробивает дно за дном. В англоязычном интерфейсе выдаёт мне ошибки валидации на финском языке.

P. P. S. я молчу уже о том, что <input type="number"> вообще нахер не нужен и даже вреден: https://xn--r1a.website/htmlshit/2663

#firefox #bug #input #number #бородач
👍123👎1🫡1
#фишка дня

Поменяли какую-то настройку в VS Code, и теперь всё сломалось?

Вообще не проблема! Вводим в поиск @modified и — вуаля — видим все настройки, отличные от дефолтных!

Да, вторым вариантом, конечно же, будет нажать иконку с переворачиванием листа и, буквально, увидеть изнанку настроек — JSON-файл. Тоже отличный вариант.

#vscode #settings #json #бородач
7🔥1
Проект от подписчика!

Напоминаю, что я выкачу любую статью или проект от вас, не стесняйтесь писать.

Презентация? Выступили на митапе? Хотите поделиться интересной статьёй — добро пожаловать!

Всем привет! Меня зовут Ильдар. Я легаси-подписчик этого канала – уже около 6 лет, всегда с интересом наблюдал посты про личные проекты и хочу сегодня поделиться своим.

Я пришёл в команду как Frontend Lead и получил несколько проектов, которые до этого в основном развивали джуны. Кодовая база и процессы были довольно хаотичными, а качество оставляло желать лучшего.

Я привык использовать системы трекинга ошибок вроде Sentry и Bugsnag. Но здесь возникло сразу несколько проблем. Проекты были на старом стеке, версии Node для сборки варьировались от 9 до 16, а сам продукт физически находился в России. Использование сторонних сервисов было рискованным и в любой момент можно было потерять к ним доступ. В итоге production-баги отлавливались вручную: через поддержку, тестировщиков и самих клиентов.

Позже, когда из-за кризиса рынка команда сократилась, стало понятно, что такой подход больше не работает. Нужно было автоматизировать сбор ошибок, но я не хотел просто получать бесконечный поток событий. Хотелось видеть уже готовые проблемы, сгруппированные по смыслу, а ещё добавить AI-объяснение, чтобы происходящее могли быстро понять не только разработчики, но и менеджеры.

Так появилась идея сделать собственный сервис. Так родился RetraceKit.

За несколько месяцев вечерний pet-проект вырос в полноценную платформу: собственный zero-dependency SDK, backend на Kotlin, dashboard на SolidJS, интеграции с Telegram, AI summaries, релизы, breadcrumbs.

Самым неожиданным оказалось не написать код. Самым сложным было постоянно отвечать себе на вопрос: «А эта функция действительно нужна сейчас?» Именно поэтому я сознательно отказался от десятков идей и старался оставить только то, что действительно помогает быстрее понять production-проблему.

Сегодня проект дошёл до состояния, когда им уже можно пользоваться. Теперь начинается, пожалуй, самый сложный этап - это понять, нужен ли RetraceKit другим разработчикам так же, как оказался нужен мне.

Ссылка на проект: https://retracekit.cloud
Приветствую поддержку и фидбэк на ProductHunt: https://www.producthunt.com/products/retracekit-error-tracking-platform
🔥10👏3👍2
#фишка дня

Не только лишь все знают, что одному элементу можно задавать несколько фонов.

Ну, буквально:


.myclass {
background:
background1,
background2,
/* …, */ backgroundN;
}


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

Пруф имеется: https://codepen.io/alinaki/pen/zYbbvWr

Всем красоты, котаны.

#css #gradient #бородач
13👍2
#инструмент дня

AI-парсинг (скрейпинг, скраппинг) сайтов набирает обороты, но классические утилиты никто не отменял.

И среди таких утилит очень выделяется pipet: https://github.com/bjesus/pipet

Создаем pipet-файл:
curl https://news.ycombinator.com/
.title .titleline
span > a
.sitebit a

Ну и запускаем:
pipet hackernews.pipet

Красота? Не то слово. Более того, утилита умеет рендерить сразу в шаблоны, напоминающие Mustache:

<ul>
{{range $index, $item := index (index . 0) 0}}
<li>{{index $item 0}} ({{index $item 1}})</li>
{{end}}
</ul>

Ясное дело, никто не отменяет и ИИ прикрутить, если так надо :) Ну а вообще, поддерживаются пайпы, потому результат любой строки конфигурации можно пропустить через что угодно вообще. Да и запуск возможен не только curl-ом, но и Playwright.

В общем, я впечатлен. Надо брать.

#go #parser #scraping #бородач
3👍3
💡 Хватит мучить железо. Выносите тесты, небольшие сервисы и личные проекты на надежный сервер.

У Selectel виртуальный выделенный сервер (VDS) поднимается за пару минут. Получите изолированные ресурсы, полный административный контроль и скорость быстрых NVMe-дисков.
И всё это — от 200 ₽/мес. А новым клиентам дарят ещё и бесплатный домен 🎁
Нервы и ресурс ноутбука стоят дороже.

➡️ Арендуйте сервер для своего проекта выгодно с Selectel.

Реклама. АО "Селектел". erid:2W5zFHEuFr1
🫡3
#инструмент дня

Этот пост — ежегодный #бородач. Традиция.

Пять (охереть) лет назад я писал большую серию статей на тему того, как же тестировать WebKit aka Safari на Windows и Linux. Вот, можете почитать: https://xn--r1a.website/htmlshit/705

Дайте знать, если пора эту серию статей обновить!

И тогда мы остановились на том, что можно просто использовать... Browserstack!

Но не все могут себе позволить даже 150 долларов в год за фриланс-план… или всё же есть выход?

Выход правда есть!

Browserstack активно поддерживает open-source проекты и даёт бесплатные лицензии на год!

Если у вас есть такой — смело топайте на https://www.browserstack.com/open-source и вбивайте там ссылку на репозиторий.

Главное — чтобы была подходящая лицензия. Полного списка я не нашёл, но уверен, что GPL, BSD и MIT точно включены. Я же указал Creative Commons Attribution 4.0 International.

Ах да, что же у меня за проект такой опенсорс? Да просто сайт этого канала: https://github.com/HTMLShit/htmlshit.site

Как видите, требования невысокие :) Надо бы обновить его как-то уже. Или другой подобрать.

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

Так вот, доступ обновляется каждый год пока репозиторий доступен! У меня, выходит, уже 5 лет.

После прохождения ручной модерации, мне пришло письмо. Я получил годовые планы тестирования браузера и мобильных с весьма вкусными условиями.

Короче, если вы ещё не начали свой проект – чего вы ждёте вообще?

#browserstack #testing
👍8
This media is not supported in your browser
VIEW IN TELEGRAM
#статья дня

В CSS предлагают добавить роутинг

Сейчас без JS кастомные анимации перехода по страницам практически невозможны: ловить переход, смотреть исходный и конечный URL, определять, по какой ссылке кликнули, и уже после этого выбирать нужный View Transition.

В черновике CSS Route and Navigation Matching предлагают описывать эту логику прямо в CSS.

Всё можно описать декларативно, если ты достаточно смел. Ну вы поняли.

Например, сначала объявить маршруты:


@route --home {
pathname: url-pattern("/");
}

@route --article {
pathname: url-pattern("/articles/:id");
}


А потом задать отдельную анимацию для перехода с главной на статью:


@navigation (from: --home) and (to: --article) {
@view-transition {
navigation: auto;
types: slide-left;
}
}


Для перехода назад можно использовать другой тип анимации.

Кроме @route и @navigation, в черновике есть :nav-source — селектор элемента, с которого начался переход, и :link-to() — селектор ссылок, ведущих на определённый маршрут.

Самый понятный пример — список карточек. Пользователь нажимает на изображение, открывается отдельная страница, а именно эта картинка плавно превращается в большое изображение статьи. Сейчас для такого обычно нужен JavaScript, который найдёт нажатый элемент и назначит ему view-transition-name. Здесь это хотят сделать без ручной обвязки.

Роутер это, конечно, не заменяет. CSS не будет загружать страницы или управлять историей браузера. Он просто сможет выбирать стили и анимации с учётом того, между какими адресами происходит переход.

Пока это ранний Editor’s Draft, поэтому синтаксис ещё вполне может измениться. Попробовать можно в Chrome Canary с включённым Experimental Web Platform Features.

Подробный разбор — у Ван Дамма нашего Брамуса, сам черновик — на сайте CSSWG.

#route #css #view #transition
🔥153
#заметка дня

В npm нашли ChainDrop — червя, который успел выпустить 2212 заражённых версий в 444 пакетах.

Стартовой точкой стал keyv@6.0.0. После установки пакет искал npm-токены и, если находил, публиковал заражённые версии других пакетов, к которым у владельца токена был доступ. Так заражение пошло дальше по экосистеме и затронуло, среди прочих, flat-cache, file-entry-cache и cache-manager.

Код запускался через preinstall. Пакет скачивал Bun с GitHub и выполнял обфусцированный скрипт, который собирал токены GitHub, npm, PyPI, AWS, GCP, Azure, Docker, Kubernetes, Vault и других сервисов. В GitHub Actions он ещё и пытался достать секреты из памяти runner-процесса.

Заодно менялись конфиги Claude Code и VS Code. Поэтому заражённый репозиторий мог сработать не только при npm install, но и просто при открытии проекта или запуске агента.

С keyv есть отдельный нюанс. Вредоносная версия была опубликована через официальный GitHub Actions workflow, с npm Trusted Publishing и валидной SLSA provenance.

То есть provenance не была подделана. Она честно подтверждала, что пакет собран официальным workflow из конкретного коммита. Просто сам коммит уже содержал вредоносный код, потому что аккаунт мейнтейнера был скомпрометирован.

Поэтому наличие attestation здесь ничего не гарантировало. Она подтверждает происхождение сборки, но не авторизованность изменений в репозитории.

Если одна из заражённых версий попала в CI или локальное окружение, откатить пакет недостаточно. Токены и секреты, доступные этому окружению, придётся перевыпустить.

StepSecurity

#npm #attack
1🫡84🔥2
Проект от подписчика!

Напоминаю, что я выкачу любую статью или проект от вас, не стесняйтесь писать.

Презентация? Выступили на митапе? Хотите поделиться интересной статьёй — добро пожаловать!

Привет! Меня зовут Артём

Несколько недель назад заинтересовался созданием собственного AI-бота внутри Telegram, который бы вел календарь, финансы, помогал что-то быстро проанализировать, не выходя из мессенджера, и обходился бы достаточно дешево. Для этого уже есть готовые решения (openclaw или hermes), но у них есть 2 проблемы: они избыточны и их неудобно масштабировать на несколько пользователей. Хотелось сделать одного бота для себя, друзей и тех, кому это было бы полезно.

Пришлось создать собственное решение, которое было бы масштабируемым, дешевым, но достаточно качественным. Написал свой harness для работы LLM, указал её возможности, а в качестве основной модели, после нескольких тестов и попыток удешевить работу нейросети, добился отличной работы на модели deepseek-v4-flash. Так появился vaka-assistant.

Бот-ассистент бесплатный и пока работает в тестовом режиме, но уже может:

• ставить напоминания, записывать задачи
• учитывать финансы и устанавливать лимиты трат
• понимать голосовые сообщения
• запоминать факты о пользователе, можно настроить личность ассистента и его стиль общения
• есть удобное представление данных в Telegram Mini Apps

Думаю, что многим такой бот может быть полезен: как в рабочих делах, так и в обычной жизни. Внутри чата можно оставить фидбек, буду рад услышать пожелания по улучшению и развитию проекта.

Ссылка на ассистента
6👍3
#инструмент дня

У меня регулярно есть код, который вроде бы не проект. Проверить библиотеку, накидать PoC, воспроизвести баг, попробовать какой-нибудь API, проверить идею на десяти строках.

Обычно всё это заканчивается одинаково: test, test2, tmp, new-test, какая-нибудь папка на Desktop, ещё одна в /tmp, а через пару недель уже непонятно, где именно лежал тот эксперимент, который внезапно понадобился снова.

Для этого есть try.

Идея простая: все такие одноразовые штуки живут в одной директории, по умолчанию ~/src/tries. Когда создаёшь новую, try добавляет дату:

2026-08-07-redis-pool

Потом достаточно написать:

try redis

и получишь fuzzy search по всем своим экспериментам. Он ещё учитывает, насколько недавно ты открывал директорию, поэтому свежие штуки поднимаются выше.

Если ничего подходящего нет, из того же интерфейса можно сразу создать новую папку. То есть try одновременно заменяет мне кусок из mkdir, cd, find и попыток вспомнить, как я назвал папку три недели назад.

Короче, можно посмотреть интерактивную презентацию: https://asciinema.org/a/ve8AXBaPhkKz40YbqPTlVjqgs

Ещё полезная штука:

try .

Если запустить это внутри git-репозитория, он создаст для текущего репо отдельный worktree в tries. Нормальный вариант для «хочу быстро что-то попробовать, но текущую рабочую копию трогать не хочу».

Можно и сразу клонировать чужой репозиторий туда же:

try https://github.com/foo/bar.git

А если какой-то такой эксперимент внезапно вырос во что-то настоящее, его можно перенести из tries в обычные проекты. try уберёт дату из имени, перенесёт директорию, а на старом месте оставит симлинк, чтобы старый путь не умер.

В общем, штука довольно узкая, но хорошо попадает в конкретную проблему: временный код почему-то почти никогда не оказывается временным.

Написана на Ruby, ставится через gem или Homebrew.

https://github.com/tobi/try

#experiment #tool
111
#инструмент дня

Вчера писал про try и в последний момент засомневался, какую картинку поставить к посту. В итоге сдался и прилепил нейрослоп.

А можно было просто открыть Boron.

Это редактор скриншотов терминала. Вставляешь туда настоящий вывод консоли — вместе с ANSI-цветами — и дальше можно уже нормально собрать картинку: поменять тему, фон, размер окна, поправить текст, перекрасить отдельные куски и вообще привести всё в аккуратный вид.

Причём редактируется именно содержимое терминала, а не картинка поверх картинки. Можно выделять текст, печатать свой, менять цвета отдельных фрагментов. Есть даже прямоугольное выделение через Alt/⌥ — удобно, например, чтобы перекрасить целую колонку таблицы или кусок вывода tree.

Boron сам отличает команды от вывода: строки с $, , > или делает ярче, остальное немного приглушает. Тем сейчас восемь: от VS Code Dark+ и Dracula до Tokyo Night, Nord и Catppuccin.
На выходе PNG, SVG, JPEG или WebP, плюс картинку можно сразу скопировать в clipboard.

Но самая интересная функция — всё нарисованное можно скопировать обратно как настоящий терминальный текст: plain text, ANSI escape sequences или код на chalk. То есть можно не только оформить существующий вывод, но и мышкой набросать, как должен выглядеть CLI, а потом забрать это обратно в код.

В общем, вчера вместо нейрослопа можно было просто красиво снять try в работе. Видимо, Boron попался мне примерно на сутки позже, чем нужно.

boron.sh
GitHub

#tool #terminal
7👏2🔥1
Есть довольно простая ловушка: чем больше у тебя ответственности, тем легче перепутать количество работы с движением вперёд.

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

У Константина Сухачева есть несколько хороших текстов ровно про это.
Например, про стратегию как отказ. Не в смысле очередного «умей говорить нет», а буквально: если компания выбрала направление, остальные хорошие возможности тоже приходится сознательно хоронить. Иначе стратегия превращается просто в список пожеланий.

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

С управлением примерно та же неприятная механика. Хороший менеджмент — это далеко не всегда про мотивацию и развитие людей. Иногда это про отказ, увольнение, смену структуры или признание, что человек отлично работает, но находится не на своём месте.

Мне в целом нравится такой взгляд на бизнес: не через отдельные инструменты и «хаки роста», а через выбор, ограничения и цену решений.

Если это близко, можно начать с текстов про стратегию и отказ, про фокус и про цену управления. Остальное уже рядом.
👍4🔥21