en
Feedback
TrySound forked your repository

TrySound forked your repository

Open in Telegram

Пишу об опенсорсе, вебе и дизайн системах

Show more
953
Subscribers
No data24 hours
-37 days
-1830 days
Posts Archive
Наткнулся на крутую браузерную апишку Media Session. Позволяет задать мету и контролировать проигрывание системными контролам
Наткнулся на крутую браузерную апишку Media Session. Позволяет задать мету и контролировать проигрывание системными контролами. Работает на мобилках и даже в mac os. https://developer.mozilla.org/en-US/docs/Web/API/Media_Session_API

Исторически RIFM был очень низкоуровневой либой и все форматирование пользователям приходилось выдумывать самим на основе наш
Исторически 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

SVGO снова онлайн https://github.com/svg/svgo
SVGO снова онлайн https://github.com/svg/svgo

ГитХаб всадил нож в спину мейнтейнерам, которые годами на халяву пилят самый популярный SVG оптимизатор, и зашэдоубанил оргу
ГитХаб всадил нож в спину мейнтейнерам, которые годами на халяву пилят самый популярный SVG оптимизатор, и зашэдоубанил оргу SVGO. Для мейнтейнеров ничего не изменилось, а весь остальной мир видит 404. Пора рассматривать альтернативные платформы, к примеру tangled на atproto. https://github.com/svg/svgo

В чатике про дизайн системы выложили объявление о работе: "Землекоп – 5 000р" Интересно кого закапывать собираются, разработчика или дизайнера?

Воспользовался новыми gap decorations внутри грида. Они отлично деградируют в firefox и safari и избавляют от лишних дивов во
Воспользовался новыми 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-stable

16 лет назад, много использовал 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 для отступов работает идеально, не считая выле
Переделываю дизайн систему для 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

Все данные пользователей: посты, лайки, букмарки, кастомные данные — хранятся в Personal Data Server, или PDS. Чаще всего PDS хранят данные для множества пользователей, но есть варианты захостить по-настоящему персональный сервер. Среди популярных PDS есть сам Bluesky, NPMX (замена npmjs.org) и недавно запустившийся европейский Eurosky. Все изменения PDS агрегируются с помощью глобальных Relay, к которым можно подрубиться вебсокетом (firehose) и синкать все их ивенты в базу данных приложения. Такие приложения называются AppView и являются по сути кэшем, с помощью которого проще запилить поиск, агрегацию и анализ данных. Ещё часто встречается термин Atmosphere, так называют всю экосистему приложений вокруг atproto. Подробнее можно почитать на официальном сайте https://atproto.com/

Завел аккаунт weaonhire! на bluesky, и сделал мягкий запуск https://bsky.app/profile/weareonhire.com/post/3mkhuyt45tc2w

Запилил светлую тему. Чтоб ssr работал храню выбор юзера в куке и в хуках свелткита подменяю пустышку weareonhire.com

export const handle = async ({ event, resolve }) => {
  const theme = event.cookies.get("theme");
  if (theme === "light" || theme === "dark") {
    return resolve(event, {
      transformPageChunk({ html }) {
        return html.replace(
          `data-theme="system"`,
          `data-theme="${theme}"`,
        );
      },
    });
  }
  return resolve(event);
};
В стилях цвета объявлены с light-dark() и переключаются через color-scheme.

html {
  color-scheme: light dark;
}

html[data-theme="light"] {
  color-scheme: light;
}

html[data-theme="dark"] {
  color-scheme: dark;
}

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