TrySound forked your repository
رفتن به کانال در Telegram
947
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-37 روز
-930 روز
آرشیو پست ها
Мой плеер теперь доступен на https://libras-music.app с новым сайтом и демкой, чтоб можно было пощупать без сервера.
• выкатил fuzzy поиск по всему артисстам, альбомам и трекам
• переработал архитектуру и добавил бесконечный скролл, чтобы не зависало когда 3к исполнителей
• уменьшил количество запросов к моему серверу с 318 до 10, спасибо search3 ендпойнту который позволяет разом (с пагинацией) вытащить все данные
• в целом потюнил UI
https://github.com/TrySound/libras/releases/tag/v0.2.0
Довел свой плейер до юзабельного состояния.
Знакомтесь, Lbras - плеер для ваших серверов с музыкой. Работает для Navidrome и других совместимых subsonic серверов. Есть оффлайн. Устанавливается как PWA/webapp на любом устройстве.
Буду рад любому фидбеку.
https://github.com/TrySound/libras
Я довольно много путешествую между странами, что не очень нравится стримингам музыки, и они отменяют мои подписки.
Честно, уже надоело менять сервисы, поэтому поставил себе на VPS Navidrome - self-hosted решение для музыкальной библиотеки. Подключайся хоть с телефона, хоть с компа, главное чтоб интернет был.
Но вот приложения клиенты на мой вкус отстой. У опен сорсных вариантов странные UX решения.
Последнюю неделю пилю свой проигрыватель. UI сыроват пока, но уже свичнулся везде.
Наткнулся на крутую браузерную апишку Media Session. Позволяет задать мету и контролировать проигрывание системными контролами. Работает на мобилках и даже в mac os.
https://developer.mozilla.org/en-US/docs/Web/API/Media_Session_API
Исторически RIFM был очень низкоуровневой либой и все форматирование пользователям приходилось выдумывать самим на основе наших примеров. Сегодня я выкатил первый встроенный конфиг для форматирования чисел. Работает на основе указанный локали, поддерживает отрицательные числа и дает контроль над плавающей точкой.
Чтоб не раздувать бандл, импортируется из отдельного ентри пойнта.
Вместе с рифмом 1.43kB в гзиппе.
https://github.com/TrySound/rifm/releases/tag/v1.1.0
Несколько лет назад мы с Ваней Старком запилили либу для маски иппутов в реакт компонентах. Типа в числа точки или запятые добавлять в качестве разделителей (100,000), или в даты дефисы (2024-03-12) и слэши (2023/2 / ).
Проект жил в орге компании, в который работали, и после перехода доступ перекрылся. Так вот недавно удалось вернуть репу, поэтому выпускаю первый стабильный релиз RIFM 1.0.
- Работает как со старым так и с новым реактом.
- Тесты запускаются в браузере, вместо jsdom, чтоб наверняка.
- Заверстал новый сайт
- У пакета лям скачиваний в неделю
https://github.com/TrySound/rifm
Релизнул новую версию SVGO
• секьюрити фиксы
• апгрейд зависимостей: в пределах поддерживаемых node версий
• тесты регрессий 24min -> 7min: закэшил скриншоты и перенес оптимизацию в воркеры
https://github.com/svg/svgo/releases/tag/v4.1.0
Оживил еще один старый проект, svg-parser Рича Харриса (создателя rollup и svelte). Парсер упрощенный, без зависимостей и стриминга, возвращает JSON в формате [HAST](https://github.com/syntax-tree/hast) совместимом с форматом SVGO. Когда-то брал под свое крыло чтоб уменьшить количество зависимостей в SVGR (генератор компонент из svg файлов).
https://github.com/Rich-Harris/svg-parser/releases/tag/v2.0.5
Оживил еще один старый проект, svg-parser Рича Харриса (создателя rollup и svelte). Парсер упрощенный, без зависимостей и стриминга, возвращает JSON в формате [HAST](https://github.com/syntax-tree/hast) совместимом с форматом SVGO. Когда-то брал под свое крыло чтоб уменьшить количество зависимостей в SVGR (генератор компонент из svg файлов).
https://github.com/Rich-Harris/svg-parser/releases/tag/v2.0.5
Релизнул патч в свой старый пакет впервые за 11 лет. Оказывается у него 35 лямов загрузок в неделю.
Выкинул старые дев зависимости и включил trusted publishing, чтоб публиковать через гитхаб экшн, без ручного вмешательства.
https://github.com/TrySound/read-cache
Небольшой анонс, я снова буду мейнтейнить SVGO
https://bsky.app/profile/trysound.io/post/3mstrazwzx22j
ГитХаб всадил нож в спину мейнтейнерам, которые годами на халяву пилят самый популярный SVG оптимизатор, и зашэдоубанил оргу SVGO.
Для мейнтейнеров ничего не изменилось, а весь остальной мир видит 404.
Пора рассматривать альтернативные платформы, к примеру tangled на atproto.
https://github.com/svg/svgo
В чатике про дизайн системы выложили объявление о работе:
"Землекоп – 5 000р"
Интересно кого закапывать собираются, разработчика или дизайнера?
Воспользовался новыми gap decorations внутри грида. Они отлично деградируют в firefox и safari и избавляют от лишних дивов вокруг каждой строки.
<dl>
<dt>Energy</dt>
<dd>4/5</dd>
<dt>Mood</dt>
<dd>tired</dd>
<dt>Symptoms</dt>
<dd>headache, fatigue</dd>
<dt>Note</dt>
<dd>Mild headache in the afternoon</dd>
</dl>
dl {
row-rule: 1px solid var(--ds-border-subtle);
}
https://developer.chrome.com/blog/gap-decorations-stable16 лет назад, много использовал postcss, и хотелось на него переехать для всего стека. На тот момент в продукте использовались sass, autoprefixer и кажется gonsalez минификатор для CSS. В тоже время познакомился с Беном Бриггсом который задумал запилить минификатор на postcss. Назвали cssnano. День и ночь пилили плагинчики в юникс-стиле – каждая оптимизация в своем пакете.
Постепенно появлялись баг репорты, и чаще всего ломались парсеры значений на регулярках. В какой-то момент стало невозможно учитывать все возможные кейсы, и я запилил еще один пакет postcss-value-parser с парсером и сериализатором вокруг минималистичного AST. С переездом наших плагинов, количество багов значительно уменьшилось, а парсер стал использоваться другими проектами, к примеру, самым популярным CSS линтером Stylelint.
Вчера старые знакомые из экосистемы написали что хотели бы оживить парсер и на меня нахлынула ностальгия.
Обновился до последних нод, свичнулся с yarn на pnpm, порезал кучу пакетов, а то развелось "31 уязвимостией".
- Дропнул husky и lint-staged -> 19 уязвимостей, node_modules 65MB
- Заменил tape на node --test -> 3 уязвимости, node_modules 45MB
- Обновил eslint и prettier -> 0 уязвимостей, node_modules 20MB
А потом плюнул и мигрировал на oxlint и oxfmt. Зависимостей теперь только три (под капотом помимо бинаря еще tinypool для воркеров).
https://github.com/postcss/postcss-value-parser
Переделываю дизайн систему для weareonhire. Фокусируюсь на типографике, margin для отступов работает идеально, не считая вылезающих сверху и снизу у контейнера, из-за чего придумывают разные способы избавиться от них. Кто-то ресетит верхние у всех заголовков и параграфов, кто-то хардкорно использует gap (что не есть хорошо).
Недавно вспомнил что есть отличное свойство margin-trim: block, которое как раз отрезает эти вылезающие отступы и изолирует фрагменты текста внутри контейнера. Одна проблема, работает только в safari. Пришлось такую утилитку написать и притыкать по необходимости.
.margin-trim-block {
& > *:first-child {
margin-top: 0;
}
& > *:last-child {
margin-bottom: 0;
}
}Запаблишил статьи из своего блога в атмосферу.
https://standard.site - принятая несколькими сервисами конвенция/схема куда и как паблишить длинные посты на atproto. Поддерживается такими платформами как leaflet, offprint и pckt. А сегодня еще и вмерджили поддержку embed в самом bluesky.
Мой блог на астро в маркдаунах и хотелось бы остаться в таком формате, поэтому выбрал CLI тулу http://standard.site, которой можно залогиниться в atmosphere аккаунт и залить мету и текст из этих markdown. В результате блог автоматом прорастает сразу на скольких платформах.
Единственно тула заливает пока только textContent без самого markdown, а по спеке standard.site document.content не имеет конкретного определения и зависит от самой платформы. Поэтому на платформах прорастают только линки на оригинальный блог.
Если кому интересно сетап выглядит так: https://github.com/TrySound/trysound.io/blob/main/sequoia.json
https://leaflet.pub/p/trysound.io
На прошлой неделе мигрировал weareonhire на contrail — backend, AppView или же просто синхронизированный кэш данных из atproto. Три основных фичи это backfill, realtime sync и querying.
Есть два способа получения данных из atproto загрузка напрямую из PDS пользователей или подписка на ивенты (create, update, delete) всего atproto.
Backfill это загрузка исторических данных. Но как узнать у каких пользователей есть нужные рекорды? Итерировать миллионы аккаунтов не очень эффективно. Поэтому Relay сохраняет списки с репозиториями (аккаунтами юзеров) на каждую коллекцию рекордов, к ней можно обратиться с помощью xrpc метода com.atproto.sync.listReposByCollection. Дальше уже проще, все приложения кроме блюская сравнительно небольшие.
Так же contrail предлагает флаг discovery: false при конфигурации коллекций, что позволяет не использовать указанные коллекции при поиске юзеров, но все равно загрузить эти данные для остальных юзеров. К примеру в weareonhire сейчас рекорды у 60 реп и блюскай профиль загрузится только для этих шестидесяти.
lhttps://github.com/flo-bit/contrail
