TrySound forked your repository
957 subscribers
18 photos
34 videos
101 links
Пишу об опенсорсе, вебе и дизайн системах
Download Telegram
10 человек уже присоединились к weareonhire!

Потихоньку растем

weareonhire.com
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Запилил пикер дат для weaonhire! Любой фидбек приветствуется.

repo.weareonhire.com
🔥3
Media is too big
VIEW IN TELEGRAM
Теперь резюме работают для всех.

Есть такой atproto проект sifa.id который позволяет заполнить профессиональную информацию о себе и хранить в своей atproto identity.

Так вот, я подрубился к этому неймспейсу и теперь сам читаю и пишу в него. Крутая особенность atproto что раз все данные публичные, приложения на atproto могут использовать данные друг-друга, и если один проект достаточно успешен – нет необходимости заставлять юзеров заполнять данные снова.

Пилю тут repo.weareonhire.com
1
This media is not supported in your browser
VIEW IN TELEGRAM
Рекомендации теперь работают для всех пользователей Atmosphere (bluesky, eurosky, npmx итд)!

Все рекомендации хранятся в вашем аккаунте, можно посмотреть в pds.ls

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

weareonhire.com
This media is not supported in your browser
VIEW IN TELEGRAM
Сделал новый облегченный профиль, чтобы больше сфокусироваться на истории соискателя.

А заодно освежил визуал и самих рекомендаций.

weareonhire.com
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Запилил светлую тему. Чтоб 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;
}
2👍1🔥1
Немного про архитектуру atproto.

Все данные пользователей: посты, лайки, букмарки, кастомные данные — хранятся в Personal Data Server, или PDS. Чаще всего PDS хранят данные для множества пользователей, но есть варианты захостить по-настоящему персональный сервер. Среди популярных PDS есть сам Bluesky, NPMX (замена npmjs.org) и недавно запустившийся европейский Eurosky.

Все изменения PDS агрегируются с помощью глобальных Relay, к которым можно подрубиться вебсокетом (firehose) и синкать все их ивенты в базу данных приложения.

Такие приложения называются AppView и являются по сути кэшем, с помощью которого проще запилить поиск, агрегацию и анализ данных.

Ещё часто встречается термин Atmosphere, так называют всю экосистему приложений вокруг atproto.

Подробнее можно почитать на официальном сайте https://atproto.com/
👍41
На прошлой неделе мигрировал 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 реп и блюскай профиль загрузится только для этих шестидесяти.

https://github.com/flo-bit/contrail
Запаблишил статьи из своего блога в атмосферу.

https://leaflet.pub/p/trysound.io

https://standard.site - принятая несколькими сервисами конвенция/схема куда и как паблишить длинные посты на atproto. Поддерживается такими платформами как leaflet, offprint и pckt. А сегодня еще и вмерджили поддержку embed в самом bluesky.

Мой блог на астро в маркдаунах и хотелось бы остаться в таком формате, поэтому выбрал CLI тулу https://sequoia.pub, которой можно залогиниться в atmosphere аккаунт и залить мету и текст из этих markdown. В результате блог автоматом прорастает сразу на скольких платформах.

Единственно тула заливает пока только textContent без самого markdown, а по спеке standard.site document.content не имеет конкретного определения и зависит от самой платформы. Поэтому на платформах прорастают только линки на оригинальный блог.

Если кому интересно сетап выглядит так: https://github.com/TrySound/trysound.io/blob/main/sequoia.json
👍2
Переделываю дизайн систему для weareonhire. Фокусируюсь на типографике, margin для отступов работает идеально, не считая вылезающих сверху и снизу у контейнера, из-за чего придумывают разные способы избавиться от них. Кто-то ресетит верхние у всех заголовков и параграфов, кто-то хардкорно использует gap (что не есть хорошо).

Недавно вспомнил что есть отличное свойство margin-trim: block, которое как раз отрезает эти вылезающие отступы и изолирует фрагменты текста внутри контейнера. Одна проблема, работает только в safari. Пришлось такую утилитку написать и притыкать по необходимости.


.margin-trim-block {
& > *:first-child {
margin-top: 0;
}
& > *:last-child {
margin-bottom: 0;
}
}
👍3
11 лет назад, много использовал 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
👍32🔥2
Воспользовался новыми 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
🔥4
В чатике про дизайн системы выложили объявление о работе:

"Землекоп – 5 000р"

Интересно кого закапывать собираются, разработчика или дизайнера?
😁5
ГитХаб всадил нож в спину мейнтейнерам, которые годами на халяву пилят самый популярный SVG оптимизатор, и зашэдоубанил оргу SVGO.

Для мейнтейнеров ничего не изменилось, а весь остальной мир видит 404.

Пора рассматривать альтернативные платформы, к примеру tangled на atproto.

https://github.com/svg/svgo

UPD: пинганул Кэссиди Уилльямс, чтоб по внутренним каналам подняла

https://bsky.app/profile/did:plc:ookzzzg4hc3mxf44jkocwiep/post/3mrxlifwauc2q
😱8💯1
SVGO снова онлайн
https://github.com/svg/svgo
👍2🔥21
Релизнул патч в свой старый пакет впервые за 11 лет. Оказывается у него 35 лямов загрузок в неделю.

Выкинул старые дев зависимости и включил trusted publishing, чтоб публиковать через гитхаб экшн, без ручного вмешательства.

https://github.com/TrySound/read-cache
👍2
Оживил еще один старый проект, svg-parser Рича Харриса (создателя rollup и svelte). Парсер упрощенный, без зависимостей и стриминга, возвращает JSON в формате HAST совместимом с форматом SVGO. Когда-то брал под свое крыло чтоб уменьшить количество зависимостей в SVGR (генератор компонент из svg файлов).

https://github.com/Rich-Harris/svg-parser/releases/tag/v2.0.5
👍1
Релизнул новую версию SVGO

• секьюрити фиксы
• апгрейд зависимостей: в пределах поддерживаемых node версий
• тесты регрессий 24min -> 7min: закэшил скриншоты и перенес оптимизацию в воркеры

https://github.com/svg/svgo/releases/tag/v4.1.0
👍2