Будни разработчика – Telegram
Будни разработчика
14.5K subscribers
1.24K photos
368 videos
7 files
2.12K links
Блог Lead JS-разработчика из Хельсинки
Автор: @bekharsky

По рекламе: https://telega.in/channels/htmlshit/card?r=GLOiHluU или https://news.1rj.ru/str/it_adv

Чат: https://news.1rj.ru/str/htmlshitchat

№5001017849, https://www.gosuslugi.ru/snet/679b74f8dad2d930d2eaa978
Download Telegram
#заметка дня

Итак, в разработке пульта на Flutter случилось — конечно же — неожиданное.

И неожиданное это тот факт, что новые телевизоры Samsung не поддерживают получение списка приложений и их иконок. Выдают 401. Выходит, API-то есть, а вот разрешения на использование — нет. И его не получить, потому что Samsung сдвигает свою инфраструктуру в сторону полурабочего SmartThings-облака.

Ну как, новые. Года с 2020. Просто меня интересовал конкретно мой, а он 2019 и документации в принципе исчезающе мало. Tizen и Tizen.

Что же делать?

Да ничего особого не делать. Нужно где-то найти список приложений и их иконки, ведь запуск всё так же остался возможен: по id приложения.

Очевидно, в голову приходит мысль, что для Smart TV должно быть некое подобие аппстора. И действительно: https://www.samsung.com/us/tvs/smart-tv/samsung-tv-apps/

Надеюсь, оно хотя бы SPA? Да! Список приложений получается через эндпоинт /list с вполне однозначным набором параметров: https://vdapi.samsung.com/tvs/tvpersonalize/api/tvapps/appserver/list?country_code=US&language_code=en&offset=0&size=24&order=asc&category=all

Выглядит шикарно! В ответ получаем JSON с полным числом приложений — total — и массивом из 24 позиций. Так, а остальное как?

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

Финский вообще не заработал, французского нет, а в российском не работала постраничная навигация.

Ладно, не первый же раз работаем. Смотрим на список параметров запроса, видим offset и size. Это у нас типичный случай оконной пагинации (помимо курсорной и постраничной). В таких случаях просто передаем что-то вида загрузить 48 приложений начиная с 96. И… не работает. Какой вывод я сделал? Правильно: API сломано.

Посмотреть, работает ли навигация в американском аппсторе, я не догадался. Поэтому решил абьюзить на полную и просто передал 3336 в size с offset 0. Число 3336 не случайно — API сам отдает его с пустой категорией. И, внезапно, я получил ответ, содержащий все приложения. Ждать пришлось весьма долго, я ожидал, что для таких вещей нужен токен. Но нет.

Вывод 1: защищайте свои API.

Ну и мне стоило все же посмотреть на работу американского аппстора. Потому что, как оказалось, offset у них — это страница! То есть, для получения приложений с 11 по 20 надо было передавать не offset=10&size=10, а offset=1&size=10. Сбивает с толку, спасибо, что хотя бы не курсор.

Вывод 2: играешь в CTF — хотя бы немного думай.

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

…а ведь Samsung мог просто не закрывать API на телевизоре.

#api #ctf
10👍8
#ссылка дня

Coinbase Design System (CDS) — это библиотека интерфейсных компонентов от Coinbase для React и React Native, которая задаёт единый визуальный язык во всех их продуктах.

Основная цель — консистентность и кроссплатформенность: те же компоненты работают и в вебе, и в мобильных приложениях, без боли с адаптацией.

В арсенале поддержка тёмной и светлой темы, кастомизация через темы и атомарные стили для скорости.

Анимации у них забавные. И, ожидаемо, различные рекламные блоки аж хорошо вышли.

Крипта упадёт, а дизайн-система останется: cds.coinbase.com

#design #system
👍10
#статья дня

В Chrome 139 появилась возможность писать собственные функции прямо в CSS. Теперь можно не дублировать calc() и clamp(), а объявлять их один раз и вызывать как в JS.

Уна Кравец показала 5 примеров:
--negate() — переворачивает знак числа;
--opacity() — задаёт прозрачность цвета;
--fluid-type() — делает адаптивную типографику;
--conditional-radius() — убирает скругления у края экрана;
--layout-sidebar() — строит сетку с сайдбаром без медиазапросов.

Дальше — больше: в будущем появятся @mixin и @apply, и CSS наконец-то получит свои настоящие функции. Ну хоть в Хроме теперь будет счастье.

una.im/5-css-functions

#css #function
14🫡2🤩1
#статья дня

Джейк Арчибальд решил проверить, как браузеры сегодня показывают картинки «по частям» — ту самую прогрессивную отрисовку, где сначала видишь мутное пятно, а потом — полную версию.

Когда-то это было базовой оптимизацией. При медленном интернете пользователю хотелось показать хоть что-то. Кто помнит, что картинки когда-то могли грузиться как сверху вниз, так и снизу вверх? :)

Формат JPEG буквально изобрёл прогрессивную загрузку и до сих пор работает — но Safari показывает картинку пикселями и заметно грубее, чем Chrome и Firefox, где изображение обновляется плавно.

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

JPEG XL должен был стать преемником — и вроде умеет прогрессивный рендеринг, но на практике:

— в Safari его нет вообще;
— в Chromium он пока экспериментальный;
— а декодится формат пугающе медленно.

Арчибальд отмечает, что в тестах JPEG XL показывал результат в 2–5 раз хуже AVIF, что делает его пока что малопригодным для реального веба.

Зато на горизонте появился прогрессивный AVIF.

В Chromium уже можно использовать слои. Этот режим разбивает изображение на два слоя — первый лёгкий, размытый и почти мгновенный, второй — финальный, с полным качеством. Правда, для этого надо пересобрать libavif и собрать изображение заново.

При этом информация с размытого слоя переиспользуется в качественном слое. Такой себе SQIP для богатых.

Safari и Firefox пока это не поддерживают, но сам подход перспективный: он даёт ту же визуальную плавность, что и старый прогрессивный JPEG, при гораздо лучшем сжатии.

Арчибальд подчеркивает: прогрессивность не решает проблему responsive изображений — браузеру всё равно нужно заранее знать, какой размер подгружать, иначе можно легко скачать лишние мегабайты.

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

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

Ну и будьте готовы — лиса с иллюстрации успеет вам надоесть.

https://jakearchibald.com/2025/present-and-future-of-progressive-image-rendering/

#jpeg #img #avif #img
1👍113
#ссылка дня

Сначала Bun сделал вызов Node.js и Deno, впихнув невпихуемое и сделав рантайм быстрым. Теперь он выходит на территорию фронтенд-сборщиков, где позиции Node.js и сопутствующих сборщиков казались весьма стабильными.

С Bun 1.3 можно сёрвить HTML-файлы напрямую, а JavaScript, TypeScript, JSX и CSS обрабатываются автоматически. Горячая перезагрузка позволяет видеть изменения мгновенно, а для проектов на React достаточно bun init --react, чтобы получить готовую среду. Сборка для продакшн стала проще: bun build --production оптимизирует проект без лишних конфигов.

Внутри появились новые возможности: поддержка MySQL наряду с PostgreSQL и SQLite, встроенный Redis-клиент, улучшенная маршрутизация, WebSocket, работа с cookies и новые механизмы изолированных установок пакетов. Всё это делает Bun 1.3 полноценной средой, где фронтенд, бэкенд и сборка объединены в одном инструменте.

Теперь Bun действительно бандлит, простите

https://bun.com/blog/bun-v1.3

#bun #node #bundle #webpack
119👎4👍3
#фото дня

Решил с вами поделиться находкой. Представьте в 1984 году вы купили свой первый компьютер с графическим интерфейсом — в данном случае Apple Macintosh — и вот вам в инструкции объясняют, что же такое скроллинг.

Наглядно, ничего не скажешь :)

#scroll
1🤩35👍65
#дайджест недели, чуть не забыл!

Понедельник

Telegram на Swift внезапно сделал свои «iOS26-виджеты» под iOS18, не дожидаясь будущего.
https://news.1rj.ru/str/htmlshit/3841

Вторник

Вытаскиваем список приложений для телевизоров Samsung, рассматривая API магазина приложений.
https://news.1rj.ru/str/htmlshit/3842

Coinbase Design System (CDS) — единая библиотека для React и React Native.
Общий визуальный язык, темы, атомарные стили, адаптивность.
https://news.1rj.ru/str/htmlshit/3844

Среда

В Chrome 139 появились функции в CSS — можно объявлять свои --negate(), --opacity(), --fluid-type().
Уна Кравец показывает, как обойтись без бесконечных calc() и clamp().
Следом придут @mixin и @apply.
https://news.1rj.ru/str/htmlshit/3845

Четверг

Джейк Арчибальд проверил, как браузеры рендерят картинки по частям.
Прогрессивный JPEG жив, Safari груб, AVIF умеет слои.
https://news.1rj.ru/str/htmlshit/3847

Пятница

Bun 1.3 вышел из роли рантайма — теперь он ещё и сборщик.
Поддержка MySQL, Redis, WebSocket, cookies, горячая перезагрузка и bun build --production без конфигов.
https://news.1rj.ru/str/htmlshit/3849

Суббота

Apple Macintosh, 1984: руководство объясняет пользователю, что такое «скроллинг».
Картинки — лучше любых слов.
https://news.1rj.ru/str/htmlshit/3850
3🫡1
#заметка дня

Давайте за жизнь поговорим, пока AWS us-east-1 лежит.

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

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

Ладно, это я к чему. Мне весьма по душе приходится работа Джимми Карра с аудиторией, а особенно — его поздние тейки о жизни, детях и работе. Очень неожиданно получать рабочие советы от автора чаечки, если вы понимаете, о чём я.

Один из таких: «Жизнь, которую ты хочешь получить, лежит за работой, которую ты не хочешь делать».

Где-то здесь кто-то кричит «чекни привилегии», но мы сейчас не об этом.

Так вот, наверное, многие из вас уже прочитали откровение Дмитрия Свиридкина — автора книги про Undefined behaviors в C++ — об уходе из Amazon: https://nekrolm.github.io/blog.html

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

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

И тут, собственно, и встаёт вопрос: «А действительно ли я правильно понимаю объём работы, которую я не хочу делать, ради получения той жизни, которую хочу?»

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

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

Ведь... Bar is sooooooooo high

А вы, котаны, всё ещё наводите суету или уже иначе карабкаетесь?
🤩84
#новость дня

React наконец-то съехал от родителей: https://engineering.fb.com/2025/10/07/open-source/introducing-the-react-foundation-the-new-home-for-react-react-native/

Когда-то это был домашний проект Facebook, призванный подлатать их новостную ленту и упростить генерацию мешанины в текстах рекламных объявлений (вы ещё помните такое? рассказать?). Потом код открыли — и случайно изобрели современный фронтенд. JSX, компонентный подход, декларативность — пропаганда вот этого вот всего.

Но чем популярнее становился React, тем нелепее выглядело, что он всё ещё приписан к Meta. Комьюнити писало RFC, спорило в GitHub-тредах, Дэн наше всё писал длинные эссе, а потом всё равно все ждали, пока кто-нибудь из Menlo Park скажет «одобрено». React давно жил как независимый проект — просто юридически оставался семейной реликвией.

Пока запрещенная в России террористическая организация Meta занималась метавселенными, React-мир крутился вокруг Vercel и Next.js. Именно они сделали React пригодным для продакшена: собрали все фичи в удобную платформу и задали курс для всей экосистемы. По сути, Vercel уже несколько лет пишет реальную «дорожную карту» React, а теперь это просто оформилось официально.

Так что да — теперь есть React Foundation, под крылом Linux Foundation. В совете — Meta, Microsoft, Amazon, Vercel, Expo и прочие большие люди. Meta оставляет три миллиона долларов на карманные расходы и обещает не мешать.

Linux Foundation, гы-гы, вот так и настанет вендекапец. Слышали, там уже поиск на React Native?

Ну что, котаны, давно пора было? Или надо было в Apache Foundation? :)

P. S. а ещё я забыл написать что ещё 7 октября вышел React Compiler 1.0, но я его сам что-то ещё не опробовал.

#react #meta #linux
1👍113
Сегодня делюсь с вами авторским каналом, на который уже давно подписан сам.

Александр Григоренко — опытный фронтенд-архитектор и продуктовый инженер. Он пишет о зрелом инженерном подходе, архитектуре, лидерстве и продуктовой разработке. Ещё у него есть проект Web Audio Lab — образовательная платформа для обучения Web Audio API и синтезе звука, которую он делает с нуля и открыто показывает процесс.

Узнать Александра лучше можно в его постах о ценностях в профессии:
- Личный взгляд на профессиональные ценности в разработке
- Почему я отказался внедрять тёмные паттерны и не получил оффер на фронтенд-лида
- Как я пришёл к цифровому минимализму и приручил хаос

Также он пишет полезные посты про технологии:
- CSS-in-JS умер — да здравствует CSS-in-JS!
- Как построить свою UI-библиотеку на базе Vanilla Extract
- Как я стал официальным переводчиком книги издательства O'Reilly про Web Audio API

Знакомьтесь, подписывайтесь.

Ссылка на канал
👍101
#видео дня

Алекс Ильинов и Алёна Батицкая (Дока) выкатили весьма интересный формат короткого видеоподкаста, больше напоминающий теннисный матч: Code Cleanup.

Подкаст будет посвящён рефакторингу кода. Почему будет? Ну, потому что вот только-только первый выпуск вышел, посвящённый рефакторингу форм в React 19: https://youtu.be/JdMGSgh9uHA

Не просто «а давайте всё поменяем», а почему конкретно и зачем. Ведущие подкидывают друг-другу вопросы и предложения, подхватывая на лету. Потому, собственно, и теннисный матч.

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

#react #podcast #refactoring
👍15
#инструмент дня

Нашел тут ESLint-плагин eslint-plugin-react-you-might-not-need-an-effect, вдохновлённый одноимённой статьёй из официальной документации React.

Он пытается отучить нас пихать useEffect везде, где что-то меняется, и напоминает, что часто эффекты просто не нужны — всё можно выразить данными и рендером.

React, впрочем, не стоит на месте: в версии 19.1 появился useEffectEvent, который позволяет выносить логику из эффектов и вроде бы делает их чище и предсказуемее.

Но к этому моменту все уже слегка устали от того, что каждый релиз приносит ещё один способ «наконец-то правильно» писать эффекты.

Плагин же решает вопрос просто: он показывает, где useEffect вам, скорее всего, не нужен. Без философии — только суровая плётка погонщика.

#react #eslint
👍141
#инструмент дня

Когда Mac засыпает посреди сборки или загрузки — не обязательно ставить сторонние приложения, чтобы этого избежать. В macOS уже есть встроенный инструмент:
caffeinate

Он мешает системе уснуть, пока вы этого не захотите.

Основные ключи:
-d — не гасить дисплей
-i — не переходить в сон
-m — не «усыплять» диски
-s — держать систему бодрой при подключённом питании
-u — эмулировать активность пользователя

Можно запустить команду вместе со своей задачей:
caffeinate -i npm run build
Пока идёт сборка — Mac не уснёт.

Альтернатива для любителей GUI — старая утилита Caffeine, или другие «keep awake» приложения из Mac App Store.

Накидайте в комментарии вариантов для других ОС.

#mac #sleep #tool
🤩11👍4
#фишка дня

Если вам нужны более мягкие градиентные переходы, но лень возиться с easing-формулами, попробуйте комбинировать их. Например, радиальные градиенты в прозрачность: https://codepen.io/alinaki/pen/eYRBbYj?editors=1100

Во многих случаях это именно то, что нужно. Менее насыщенная середина с двумя акцентами по краям.

Про то, что же такое easing-градиенты я писал тут: https://news.1rj.ru/str/htmlshit/581

#css #gradient #radial #бородач
3👍3
#статья дня

Каждый, кто хоть раз поручал задачу джуну, знает это чувство: вроде бы всё объяснил, а результат — что-то странное. В статье The AI Coding Trap Крис Лой пишет, что работа с ИИ похожа именно на это. Только теперь джуниор не человек, а алгоритм — послушный, быстрый, но без интуиции и контекста. И если человеку можно сказать «подумай ещё», то ИИ просто перегенерирует тот же бред, но с другим форматированием.

Все знакомые мне лиды, которые действительно активно используют агентов в работе, давно пришли к тому же выводу: LLM-агенты — это потрясающе быстрые и усердные джуны. Они не устают, не спорят, не теряют мотивацию и могут за ночь сделать объём, на который у человека ушла бы неделя. Но — как и с живыми джунами — ключевое слово тут «под присмотром». Им нужен контекст, ревью и здравый смысл наставника. И статья Лоя отлично это подтверждает: ИИ может безупречно исполнять, но не способен осознанно решать.

Мы делегируем людям, потому что они умеют сомневаться и уточнять смысл. Делегируем ИИ — потому что он не спорит. И это очень даже удобно, пока не оказывается, что спорить всё-таки было нужно. Настоящая сила инженера, как пишет Лой, — в умении делегировать осмысленно: оставить машине то, что механично, а себе — то, что требует понимания.

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

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

#llm #ai #agent #junior
👍226
#ссылка дня

Laws of UX — это коллекция законов, которые объясняют, почему одни интерфейсы ощущаются естественными, а другие — ломают голову пользователю. Каждый принцип описан просто и наглядно, с иллюстрациями, ссылками на статьи и книги, так что сайт отлично подходит и как справочник, и как учебник.

Там можно вспомнить и проверить себя на классике:

‣ Эффект эстетики и полезности — красивый интерфейс воспринимается как более удобный.

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

‣ Закон Фиттса — время, чтобы попасть в цель, зависит от её размера и расстояния.

Это, кстати, причина, по которой меню в macOS единое и наверху.

‣ Закон Миллера — человек может удерживать в памяти около семи элементов.
‣ Закон Паркинсона — работа занимает всё отпущенное на неё время.

‣ Эффект последовательности — люди запоминают начало и конец взаимодействия, забывая середину.

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

Отличное место, чтобы прокачать UX-интуицию и вспомнить, почему «меньше» часто значит «понятнее».

https://lawsofux.com/
👍13
#такое дня

А вы знали, что «долой» переводится как «down with the»?

«Долой короля» — «Down with the king» и так далее. Так вот, это я к чему.

У меня теперь все коммиты в гит называются так:

down with the bootstrap
down with the enzyme
down with the reselect
down with the react-async

Я не знаю, зачем вам эта информация. Как вы называете ваши коммиты? :)

#git #work
🤩26👍7🫡21
#фишка дня

На правах субботы!

Наверное все знают, что у Google есть анимированные и интерактивные «дудлы» (doodle, ну, интерактивный логотип, грубо говоря). Но вот не всем известно, что в зависимости от результатов поиска можно найти пасхальное яйцо.

Вот что я сегодня увидел:
1. Введи в строку поиска «Wizard of oz»
2. Кликни по красным башмачкам 👠
3. А теперь по торнадо 🌪

Самый асбестовый фильм на свете к вашим услугам!

Не благодарите :)

#oz #google #doodle #бородач
8👍5
#дайджест недели

1️⃣ Понедельник
Джимми Карр: «Жизнь, которую хочешь, лежит за работой, которую не хочешь делать»: https://news.1rj.ru/str/htmlshit/3852

2️⃣ Вторник
React переходит под React Foundation при Linux Foundation: https://news.1rj.ru/str/htmlshit/3853

Code Cleanup — короткий видеоподкаст про рефакторинг форм в React 19: https://news.1rj.ru/str/htmlshit/3855

3️⃣ Среда
ESLint-плагин eslint-plugin-react-you-might-not-need-an-effect показывает, где useEffect лишний: https://news.1rj.ru/str/htmlshit/3856

Mac засыпает — не проблема. Встроенный caffeinate держит систему бодрой: https://news.1rj.ru/str/htmlshit/3858

5️⃣ Четверг
CSS: комбинируем радиальные градиенты для мягких переходов без сложных easing-формул: https://news.1rj.ru/str/htmlshit/3861

LLM-агенты как быстрые и усердные джуны: делают, что скажешь, без усталости, но без контекста и интуиции: https://news.1rj.ru/str/htmlshit/3862

Laws of UX — сборник законов интерфейсов с примерами, статьями и источниками: https://news.1rj.ru/str/htmlshit/3864

5️⃣ Пятница
«Долой» = down with the…
А как вы называете свои коммиты?
https://news.1rj.ru/str/htmlshit/3865

6️⃣ Суббота
Google Doodle пасхалка, «Wizard of oz»:
https://news.1rj.ru/str/htmlshit/3866
Please open Telegram to view this post
VIEW IN TELEGRAM
6
#инструмент дня

Назовите самое недооценённое штатное приложение в вашей ОС.

Я начну: в macOS это Automator. Буду удивлён, если вы знаете, что это такое.

Это, грубо говоря, маленькая IDE для создания ваших собственных макросов, действий, приложений. Её немного портит тот факт, что дефолтная библиотека сильно заточена под стандартные яблочные приложения (кто-то использует Photos? Серьёзно?), но ими не ограничивается!

Итак, понадобилось мне тут сделать из записанного видео — гифку. Можно использовать онлайн-ресурсы, можно — найти приложение, а можно — создать своё!

Идём в Automator, выбираем Application и добавляем Run shell noscript из списка.

Пишем код:

#!/bin/bash
exec &> ~/automator_ffmpeg_log.txt
set -e

export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin"

echo "Starting Automator FFmpeg GIF conversion..."
echo "Files: $@"

for f in "$@"; do
dir="$(dirname "$f")"
filename="$(basename "${f%.*}")"
palette="$dir/${filename}_palette.png"
gif="$dir/${filename}.gif"

echo "Processing: $f"
ffmpeg -v error -i "$f" -vf "fps=15,scale=720:-1:flags=bicubic,palettegen" -y "$palette"
ffmpeg -v error -i "$f" -i "$palette" -filter_complex "fps=15,scale=720:-1:flags=bicubic[x];[x][1:v]paletteuse=dither=bayer" -y "$gif"
rm -f "$palette"
echo "Saved: $gif"

terminal-notifier -noscript "GIF Created" -message "Saved as ${filename}.gif"
done

echo "Done."


и устанавливаем Pass input как as arguments.

Та-дам, вы великолепны! Естественно, у вас должны быть установлены ffmpeg и terminal-notifier. Проще всего — из brew, но вы и так это знаете.

Ну и всё, бросаем приложение в док, тащим видосик на иконку в доке — получаем гифку. Теперь ты — макось-программист. Поздравляю!

#macos #automator
👍18
#фишка дня

Когда-то давно я слышал о таком свойстве, как text-align-last.

Что оно делает? Ну, думаю, всё понятно из иллюстрации :)

Работает с последней строкой индивидуально, позволяя сделать более приятные глазу переходы текста, соответствующие остальной стилистике. Вот хорошая статья на тему: https://www.stefanjudis.com/today-i-learned/how-to-align-the-text-of-the-last-paragraph-line/

С интерактивным примером, как вы любите.

Почему я акцентировал на нём внимание?

Да просто я знал о нём ещё тогда, когда оно толком нигде не поддерживалось. Вот в IE работало, буквально, а в Chrome нет. И как-то все на него забили в итоге.

В этом есть небольшая беда так нами любимых «the future CSS tip». Наиграешься, разочаруешься, и забудешь :(

Но есть же наш уютный канальчик, мы тут всё вспомним :)

#css #thefuturepast #бородач
👍102🤩1