Media is too big
VIEW IN TELEGRAM
Теперь резюме работают для всех.
Есть такой atproto проект sifa.id который позволяет заполнить профессиональную информацию о себе и хранить в своей atproto identity.
Так вот, я подрубился к этому неймспейсу и теперь сам читаю и пишу в него. Крутая особенность atproto что раз все данные публичные, приложения на atproto могут использовать данные друг-друга, и если один проект достаточно успешен – нет необходимости заставлять юзеров заполнять данные снова.
Пилю тут repo.weareonhire.com
Есть такой 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
Все рекомендации хранятся в вашем аккаунте, можно посмотреть в pds.ls
Подключайтесь, рекомендуйте своих коллег, давайте сделаем нормально сообщество для профессионалов.
weareonhire.com
This media is not supported in your browser
VIEW IN TELEGRAM
Сделал новый облегченный профиль, чтобы больше сфокусироваться на истории соискателя.
А заодно освежил визуал и самих рекомендаций.
weareonhire.com
А заодно освежил визуал и самих рекомендаций.
weareonhire.com
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Запилил светлую тему. Чтоб ssr работал храню выбор юзера в куке и в хуках свелткита подменяю пустышку
weareonhire.com
В стилях цвета объявлены с light-dark() и переключаются через color-scheme.
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
Cделал мягкий запуск на новом аккаунте weaonhire! на bluesky
https://bsky.app/profile/weareonhire.com/post/3mkhuyt45tc2w
https://bsky.app/profile/weareonhire.com/post/3mkhuyt45tc2w
Bluesky Social
weareonhire! (@weareonhire.com)
Introducing weareonhire!
Professional networking platform
weareonhire.com
Professional networking platform
weareonhire.com
Немного про архитектуру atproto.
Все данные пользователей: посты, лайки, букмарки, кастомные данные — хранятся в Personal Data Server, или PDS. Чаще всего PDS хранят данные для множества пользователей, но есть варианты захостить по-настоящему персональный сервер. Среди популярных PDS есть сам Bluesky, NPMX (замена npmjs.org) и недавно запустившийся европейский Eurosky.
Все изменения PDS агрегируются с помощью глобальных Relay, к которым можно подрубиться вебсокетом (firehose) и синкать все их ивенты в базу данных приложения.
Такие приложения называются AppView и являются по сути кэшем, с помощью которого проще запилить поиск, агрегацию и анализ данных.
Ещё часто встречается термин Atmosphere, так называют всю экосистему приложений вокруг atproto.
Подробнее можно почитать на официальном сайте https://atproto.com/
Все данные пользователей: посты, лайки, букмарки, кастомные данные — хранятся в Personal Data Server, или PDS. Чаще всего PDS хранят данные для множества пользователей, но есть варианты захостить по-настоящему персональный сервер. Среди популярных PDS есть сам Bluesky, NPMX (замена npmjs.org) и недавно запустившийся европейский Eurosky.
Все изменения PDS агрегируются с помощью глобальных Relay, к которым можно подрубиться вебсокетом (firehose) и синкать все их ивенты в базу данных приложения.
Такие приложения называются AppView и являются по сути кэшем, с помощью которого проще запилить поиск, агрегацию и анализ данных.
Ещё часто встречается термин Atmosphere, так называют всю экосистему приложений вокруг atproto.
Подробнее можно почитать на официальном сайте https://atproto.com/
AT Protocol
👍4❤1
На прошлой неделе мигрировал 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
Есть два способа получения данных из atproto загрузка напрямую из PDS пользователей или подписка на ивенты (create, update, delete) всего atproto.
Backfill это загрузка исторических данных. Но как узнать у каких пользователей есть нужные рекорды? Итерировать миллионы аккаунтов не очень эффективно. Поэтому Relay сохраняет списки с репозиториями (аккаунтами юзеров) на каждую коллекцию рекордов, к ней можно обратиться с помощью xrpc метода com.atproto.sync.listReposByCollection. Дальше уже проще, все приложения кроме блюская сравнительно небольшие.
Так же contrail предлагает флаг discovery: false при конфигурации коллекций, что позволяет не использовать указанные коллекции при поиске юзеров, но все равно загрузить эти данные для остальных юзеров. К примеру в weareonhire сейчас рекорды у 60 реп и блюскай профиль загрузится только для этих шестидесяти.
https://github.com/flo-bit/contrail
GitHub
GitHub - flo-bit/contrail: atproto backend in a bottle
atproto backend in a bottle. Contribute to flo-bit/contrail development by creating an account on GitHub.
Запаблишил статьи из своего блога в атмосферу.
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
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
leaflet.pub
Bogdan Chadkin (@trysound.io) - Leaflet
Read and publish on the Atmosphere
👍2
Переделываю дизайн систему для weareonhire. Фокусируюсь на типографике, margin для отступов работает идеально, не считая вылезающих сверху и снизу у контейнера, из-за чего придумывают разные способы избавиться от них. Кто-то ресетит верхние у всех заголовков и параграфов, кто-то хардкорно использует gap (что не есть хорошо).
Недавно вспомнил что есть отличное свойство margin-trim: block, которое как раз отрезает эти вылезающие отступы и изолирует фрагменты текста внутри контейнера. Одна проблема, работает только в safari. Пришлось такую утилитку написать и притыкать по необходимости.
Недавно вспомнил что есть отличное свойство 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
Постепенно появлялись баг репорты, и чаще всего ломались парсеры значений на регулярках. В какой-то момент стало невозможно учитывать все возможные кейсы, и я запилил еще один пакет 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
GitHub
GitHub - postcss/postcss-value-parser: Transforms css values into the tree
Transforms css values into the tree. Contribute to postcss/postcss-value-parser development by creating an account on GitHub.
👍3❤2🔥2
Воспользовался новыми gap decorations внутри грида. Они отлично деградируют в firefox и safari и избавляют от лишних дивов вокруг каждой строки.
https://developer.chrome.com/blog/gap-decorations-stable
<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 000р"
Интересно кого закапывать собираются, разработчика или дизайнера?
😁5
ГитХаб всадил нож в спину мейнтейнерам, которые годами на халяву пилят самый популярный SVG оптимизатор, и зашэдоубанил оргу SVGO.
Для мейнтейнеров ничего не изменилось, а весь остальной мир видит 404.
Пора рассматривать альтернативные платформы, к примеру tangled на atproto.
https://github.com/svg/svgo
UPD: пинганул Кэссиди Уилльямс, чтоб по внутренним каналам подняла
https://bsky.app/profile/did:plc:ookzzzg4hc3mxf44jkocwiep/post/3mrxlifwauc2q
Для мейнтейнеров ничего не изменилось, а весь остальной мир видит 404.
Пора рассматривать альтернативные платформы, к примеру tangled на atproto.
https://github.com/svg/svgo
UPD: пинганул Кэссиди Уилльямс, чтоб по внутренним каналам подняла
https://bsky.app/profile/did:plc:ookzzzg4hc3mxf44jkocwiep/post/3mrxlifwauc2q
😱8💯1
Небольшой анонс, я снова буду мейнтейнить SVGO
https://bsky.app/profile/trysound.io/post/3mstrazwzx22j
https://bsky.app/profile/trysound.io/post/3mstrazwzx22j
Bluesky Social
Bogdan Chadkin (@trysound.io)
Happy to announce that I’m back maintaining SVGO.
It’s a tool I use daily, and I’d like to keep it fresh and stable.
github.com/svg/svgo
If you’d like to support the project, consider donating via OpenCollective.
https://github.com/svg/svgo
It’s a tool I use daily, and I’d like to keep it fresh and stable.
github.com/svg/svgo
If you’d like to support the project, consider donating via OpenCollective.
https://github.com/svg/svgo
🔥6
Релизнул патч в свой старый пакет впервые за 11 лет. Оказывается у него 35 лямов загрузок в неделю.
Выкинул старые дев зависимости и включил trusted publishing, чтоб публиковать через гитхаб экшн, без ручного вмешательства.
https://github.com/TrySound/read-cache
Выкинул старые дев зависимости и включил trusted publishing, чтоб публиковать через гитхаб экшн, без ручного вмешательства.
https://github.com/TrySound/read-cache
GitHub
GitHub - TrySound/read-cache: Reads and caches the entire contents of a file until it is modified
Reads and caches the entire contents of a file until it is modified - 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
https://github.com/Rich-Harris/svg-parser/releases/tag/v2.0.5
GitHub
Release svg-parser v2.0.5 — alive again · Rich-Harris/svg-parser
svg-parser is alive again! 🎉
After a long quiet period, maintenance has resumed. This patch release refreshes the project around the stable parser you already know—there are no intentional parser A...
After a long quiet period, maintenance has resumed. This patch release refreshes the project around the stable parser you already know—there are no intentional parser A...
👍1
Релизнул новую версию SVGO
• секьюрити фиксы
• апгрейд зависимостей: в пределах поддерживаемых node версий
• тесты регрессий 24min -> 7min: закэшил скриншоты и перенес оптимизацию в воркеры
https://github.com/svg/svgo/releases/tag/v4.1.0
• секьюрити фиксы
• апгрейд зависимостей: в пределах поддерживаемых node версий
• тесты регрессий 24min -> 7min: закэшил скриншоты и перенес оптимизацию в воркеры
https://github.com/svg/svgo/releases/tag/v4.1.0
GitHub
Release v4.1.0 · svg/svgo
This minor release upgrades the SAX parser and introduces stricter XML validation. It also includes important security hardening for removeScripts, dependency updates, and improvements to the test ...
👍2