С сегодняшнего дня мой юзернейм в великой социальной сети — x.com/sergeysova
Теперь у меня есть:
- t.me/sergeysova
- github.com/sergeysova
- x.com/sergeysova
На самом деле юзернейм использую в куче других соц сетей и сервисов, но эти были наиболее интересны.
Удалось связаться с предыдущим владельцем юзернейма, а так как аккаунт не использовался, то пользователь поменял на другой, за что ему отдельное огромное спасибо!
Теперь у меня есть:
- t.me/sergeysova
- github.com/sergeysova
- x.com/sergeysova
На самом деле юзернейм использую в куче других соц сетей и сервисов, но эти были наиболее интересны.
Удалось связаться с предыдущим владельцем юзернейма, а так как аккаунт не использовался, то пользователь поменял на другой, за что ему отдельное огромное спасибо!
👎120🔥24❤5👍4🌚1
В виду популяризации нейросетей, а также инструментов разработчиков с AI, я добавил в effector.dev несколько подходов, которые облегчат работу.
Стоит начать с коллекции всей документации в виде единого файла. Передаете любую ссылку из списка ниже в ваш ChatGPT/Gemini/Grok и задаете вопросы.
Изначальная задумка отсюда:
https://scalabledeveloper.com/posts/llms-txt-with-astro/
В effector доступно несколько документов:
https://effector.dev/docs/llms.txt
https://effector.dev/docs/llms-full.txt
А также я сделал отдельно локализованные версии:
https://effector.dev/en/llms-full.txt
https://effector.dev/ru/llms-full.txt
https://effector.dev/uz/llms-full.txt
Не вся документация переведена полностью, поэтому недостающие статьи дополняются английским исходником.
Из этих файлов вычищены внутренние ссылки, ID-заголовков, а также вырезан некоторый кастомный markdown синтаксис. Это уменьшает количество токенов.
Стоит начать с коллекции всей документации в виде единого файла. Передаете любую ссылку из списка ниже в ваш ChatGPT/Gemini/Grok и задаете вопросы.
Изначальная задумка отсюда:
https://scalabledeveloper.com/posts/llms-txt-with-astro/
В effector доступно несколько документов:
https://effector.dev/docs/llms.txt
https://effector.dev/docs/llms-full.txt
А также я сделал отдельно локализованные версии:
https://effector.dev/en/llms-full.txt
https://effector.dev/ru/llms-full.txt
https://effector.dev/uz/llms-full.txt
Не вся документация переведена полностью, поэтому недостающие статьи дополняются английским исходником.
Из этих файлов вычищены внутренние ссылки, ID-заголовков, а также вырезан некоторый кастомный markdown синтаксис. Это уменьшает количество токенов.
🔥38 8👍5👎1
Кроме этого, я уже давненько создал Custom GPT под названием Effector Assistant, вы можете найти его в каталоге ChatGPT GPTs.
Я загрузил в него не только документацию effector, но еще и WithEase, некоторые свои статьи и рекомендации для ChatGPT.
Вот пример ответа:
https://chatgpt.com/share/67b43fa3-bfe0-8002-8b6c-cdc9b43ab351
Я загрузил в него не только документацию effector, но еще и WithEase, некоторые свои статьи и рекомендации для ChatGPT.
Вот пример ответа:
https://chatgpt.com/share/67b43fa3-bfe0-8002-8b6c-cdc9b43ab351
1❤16👍6 6🔥2
Раз уж пишу про обновление документации effector, то расскажу, что сейчас сообщество активно пишет новые статьи и улучшает уже написанные!
Effector становится все более привлекательным инструментом для изучения.
Сейчас я не вкладываю много сил в документацию, так как недавно участвовал в программном комитете Podlodka React Crew #2, а также продолжаю дописывать контент для frontend.vision и активно стараюсь не выгореть.
Количество материалов по effector растет с каждым днём, я даже не успеваю вычитывать все новые статьи, поэтому активно использую некоторые AI-технологии для создания контента.
Например, я выкачал всю документацию и статьи, разбил на кусочки и посчитал эмбеддинги, чтобы в дальнейшем крайне быстро и точно искать по содержимому. Это супер сильно помогает при написании статей.
Вообще, это подход так называемого RAG (Retrieval-augmented generation), но вместо использования полноценного инструмента я собрал свой RAG дома на коленке используя NodeJS + SQLite запуская в CLI.
По сути, собираю уникальную пачку чанков из документации последовательным поиском, а дальше либо читаю глазами результат, либо компилирую в единый ответ через LLM.
Если интересно, расскажу как это работает подробнее
Effector становится все более привлекательным инструментом для изучения.
Сейчас я не вкладываю много сил в документацию, так как недавно участвовал в программном комитете Podlodka React Crew #2, а также продолжаю дописывать контент для frontend.vision и активно стараюсь не выгореть.
Количество материалов по effector растет с каждым днём, я даже не успеваю вычитывать все новые статьи, поэтому активно использую некоторые AI-технологии для создания контента.
Например, я выкачал всю документацию и статьи, разбил на кусочки и посчитал эмбеддинги, чтобы в дальнейшем крайне быстро и точно искать по содержимому. Это супер сильно помогает при написании статей.
Вообще, это подход так называемого RAG (Retrieval-augmented generation), но вместо использования полноценного инструмента я собрал свой RAG дома на коленке используя NodeJS + SQLite запуская в CLI.
По сути, собираю уникальную пачку чанков из документации последовательным поиском, а дальше либо читаю глазами результат, либо компилирую в единый ответ через LLM.
Если интересно, расскажу как это работает подробнее
🔥24 9❤5👎3👍2
Я каким-то образом пропустил Rust 1.85
Язык перешел на новую стабильную версию синтаксиса Edition 2024
https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html
Язык перешел на новую стабильную версию синтаксиса Edition 2024
https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html
👍8🔥1
Forwarded from Hacknote.js (Никита Балихин)
Системы эффектов
Недавно послушал выпуск Подлодки про "Системы эффектов в языках программирования" и решил поделиться некоторыми рандомными рассуждениями на эту тему.
"Окраска" функций
"Окраской" функций называется некоторая декларация эффектов, содержащихся в функции.
В JavaScript есть 2 варианта "окраски" функций:
-
-
Fun fact: эти 2 варианта можно скомбинировать, чтобы получить AsyncIterator, который можно перебирать оператором for await...of.
В языке Nim система эффектов позволяет окрашивать функции любыми эффектами, что выглядит весьма любопытно (на самом деле существует ещё множество языков с такой возможностью, но почему-то мне сразу вспомнился именно Nim).
Обработка исключений
В Java есть оператор throws, позволяющий "окрасить" функцию эффектом выброса определённого типа исключения и на этапе сборки удостовериться, что эти исключения обработаны.
JavaScript/TypeScript не позволяет типизировать исключения (разве что задокументировать их с помощью JSDoc или TSDoc), но теоретически эту проблему можно решить знаменитой монадой Either.
Чистота функций
Бандлеры используют аннотацию
В самом JavaScript нет языкового средства для выражения чистоты функции — то есть отсутствия в ней эффектов, хотя было бы классно использовать это знание, например, для исполнения кода во время сборки (как, например, c babel-plugin-macros).
Недавно послушал выпуск Подлодки про "Системы эффектов в языках программирования" и решил поделиться некоторыми рандомными рассуждениями на эту тему.
"Окраска" функций
"Окраской" функций называется некоторая декларация эффектов, содержащихся в функции.
В JavaScript есть 2 варианта "окраски" функций:
-
async — обозначает, что функция асинхронная и позволяет использовать внутри неё оператор await-
* — обозначает, что функция является генератором и позволяет использовать внутри неё оператор yieldFun fact: эти 2 варианта можно скомбинировать, чтобы получить AsyncIterator, который можно перебирать оператором for await...of.
В языке Nim система эффектов позволяет окрашивать функции любыми эффектами, что выглядит весьма любопытно (на самом деле существует ещё множество языков с такой возможностью, но почему-то мне сразу вспомнился именно Nim).
Обработка исключений
В Java есть оператор throws, позволяющий "окрасить" функцию эффектом выброса определённого типа исключения и на этапе сборки удостовериться, что эти исключения обработаны.
JavaScript/TypeScript не позволяет типизировать исключения (разве что задокументировать их с помощью JSDoc или TSDoc), но теоретически эту проблему можно решить знаменитой монадой Either.
Чистота функций
Бандлеры используют аннотацию
/*#__PURE__*/, которая обозначает отсутствие побочных эффектов в функции, для более эффективного тришейкинга (упомянал об этом в своём докладе).В самом JavaScript нет языкового средства для выражения чистоты функции — то есть отсутствия в ней эффектов, хотя было бы классно использовать это знание, например, для исполнения кода во время сборки (как, например, c babel-plugin-macros).
Apple Podcasts
Podlodka #404 – Системы эффектов в языках программирования
Выпуск подкаста · Podlodka Podcast · 23 декабря 2024 г. · 2 ч. 3 мин.
🔥8❤3👍3
В документацию effector.dev подъехал ПР
Теперь в навигации есть красивый переключатель разделов, спасибо @senzujuju
https://github.com/effector/effector/pull/1232
Теперь в навигации есть красивый переключатель разделов, спасибо @senzujuju
https://github.com/effector/effector/pull/1232
Знаете, когда 10 лет опыта в IT вложены не только в карьерный рост, но и в крутые сторонние медиапроекты и создание качественного контента? Вот Андрей Смирнов — это как раз такой случай.
Что он уже успел:
Уже 9 лет в IT-менеджменте — управлял людьми в X5 Tech, IPONWEB и Rambler.
Ведёт аж два подкаста: Frontend Weekend и «600k в секунду». Правда, второй уже давно пора переименовать в «1M в секунду» — инфляция, что поделать.
Организовал свою первую конференцию по софтовым навыкам Soft Weekend.
Регулярно выступает на крупнейших конференциях: TeamLead Conf, HolyJS, Frontend Conf, CodeFest и других.
Участвует в программных комитетах CTO Conf, Podlodka Teamlead Crew и ИТ-Пикника.
Но главное, почему я вообще об этом пишу — это его канал. Там не просто «сухая экспертность», а живые истории, личный опыт и много реально работающих советов.
Например, что мне зашло:
- «Как придумать идеальную тему для доклада»
- «Стоит ли доверять интуиции?»
- «Технические навыки у управленцев?»
Тексты Андрея реально приятно читать. Это не блогер, который через силу умничает, а думающий эксперт, делящийся своими размышлениями, опытом и самоиронией.
Рекомендую подписаться.
Что он уже успел:
Уже 9 лет в IT-менеджменте — управлял людьми в X5 Tech, IPONWEB и Rambler.
Ведёт аж два подкаста: Frontend Weekend и «600k в секунду». Правда, второй уже давно пора переименовать в «1M в секунду» — инфляция, что поделать.
Организовал свою первую конференцию по софтовым навыкам Soft Weekend.
Регулярно выступает на крупнейших конференциях: TeamLead Conf, HolyJS, Frontend Conf, CodeFest и других.
Участвует в программных комитетах CTO Conf, Podlodka Teamlead Crew и ИТ-Пикника.
Но главное, почему я вообще об этом пишу — это его канал. Там не просто «сухая экспертность», а живые истории, личный опыт и много реально работающих советов.
Например, что мне зашло:
- «Как придумать идеальную тему для доклада»
- «Стоит ли доверять интуиции?»
- «Технические навыки у управленцев?»
Тексты Андрея реально приятно читать. Это не блогер, который через силу умничает, а думающий эксперт, делящийся своими размышлениями, опытом и самоиронией.
Рекомендую подписаться.
👎453🔥10❤9🤷♂7 3
Уже не первый раз вижу статьи раскрывающие проблему окрашивания функций в разные цвета.
Если коротко:
Мы не можем просто так вызывать асинхронные
Нам нужно "перекрасить" нашу синхронную функцию в асинхронную, добавив маркер
Энтони показывает как можно обобщить работу с синхронными и асинхронными функциями с помощью библиотеки
Правда это добавляет третий "цвет" функций — теперь нужно использовать генераторы, еще и в обертке quansync.
Но подход выглядит по крайней мере любопытно.
https://antfu.me/posts/async-sync-in-between
Если коротко:
async function red() {}
function blue() {}
Мы не можем просто так вызывать асинхронные
red внутри обычных синхронной blue функциий, а точнее дождаться результата.Нам нужно "перекрасить" нашу синхронную функцию в асинхронную, добавив маркер
async, что повлияет на код использующий эту функцию, что в свою очередь потребует "перекрашивать" и этот код тоже, и так далее вверх по стеку вызовов.Энтони показывает как можно обобщить работу с синхронными и асинхронными функциями с помощью библиотеки
quansync и генераторов.Правда это добавляет третий "цвет" функций — теперь нужно использовать генераторы, еще и в обертке quansync.
Но подход выглядит по крайней мере любопытно.
https://antfu.me/posts/async-sync-in-between
👎15🤔5🔥2👍1💯1
О, супер штука.
Я пока не потрогал, но концептуально мне очень нравится.
В мире opensource есть два основных подхода работы с пакетами:
А. npmjs-like
Б. go-like
Подход А — исходники пакета лежат где-то в git-репозитории (обычно github), через CI собираются и публикуются в сторонний реестр. Этот реестр гарантирует, что версия пакета не будет удалена, даже если с репозиторием что-то случилось.
Но это, вполне может вызвать расхождения между кодом в репозитории и кодом в реестре. В общем-то, ничего не мешает во время публикации, добавить любой код в бандл.
Частичное решение этой проблемы — NPM Package Provenance.
https://github.blog/security/supply-chain-security/introducing-npm-package-provenance/
Подход Б — работать без реестра, выкачивать код непосредственно из git-репозитория. Для гарантии сохраняются хеши версий, чтобы нельзя было подменить код в ветке или git-tag и таким образом внедрить уязвимость.
Но, в случае удаления репозитория, все зависимые проекты сломаются.
Новый тул, является дополнением к первому подходу npmjs-like. Он предлагает возможность проверить, собирается ли из исходников тот же код, что лежит в реестре.
Что может существенно повысить доверие к разработчикам.
https://blog.vlt.sh/blog/reproducibility
Я пока не потрогал, но концептуально мне очень нравится.
В мире opensource есть два основных подхода работы с пакетами:
А. npmjs-like
Б. go-like
Подход А — исходники пакета лежат где-то в git-репозитории (обычно github), через CI собираются и публикуются в сторонний реестр. Этот реестр гарантирует, что версия пакета не будет удалена, даже если с репозиторием что-то случилось.
Но это, вполне может вызвать расхождения между кодом в репозитории и кодом в реестре. В общем-то, ничего не мешает во время публикации, добавить любой код в бандл.
Частичное решение этой проблемы — NPM Package Provenance.
https://github.blog/security/supply-chain-security/introducing-npm-package-provenance/
Подход Б — работать без реестра, выкачивать код непосредственно из git-репозитория. Для гарантии сохраняются хеши версий, чтобы нельзя было подменить код в ветке или git-tag и таким образом внедрить уязвимость.
Но, в случае удаления репозитория, все зависимые проекты сломаются.
Новый тул, является дополнением к первому подходу npmjs-like. Он предлагает возможность проверить, собирается ли из исходников тот же код, что лежит в реестре.
Что может существенно повысить доверие к разработчикам.
https://blog.vlt.sh/blog/reproducibility
👍10👎2🔥1
Вы наверняка слышали про Rspack — альтернатива Webpack, но на Rust и с совместимостью по плагинам и конфигам.
Приятно знать, что такие быстрые проекты развиваются и уже имеют весьма крутую экосистему.
19 марта релизнулся Rsdoctor.
По сути это аналог Statoscope, позволяющий дебажить и профилировать сборку. Особенно полезно в больших и сложных проектах, чтобы понять откуда и что заимпортировано.
Максимально актуально в связи с переездом экосистему на ESM, в ситуациях, когда два пакета имеют общую зависимость, но один пакет получил CJS версию, а другой ESM, в итоге в бандле две версии, странные плавающие баги и подобное.
https://rsdoctor.dev/blog/release/release-note-1_0
Приятно знать, что такие быстрые проекты развиваются и уже имеют весьма крутую экосистему.
19 марта релизнулся Rsdoctor.
По сути это аналог Statoscope, позволяющий дебажить и профилировать сборку. Особенно полезно в больших и сложных проектах, чтобы понять откуда и что заимпортировано.
Максимально актуально в связи с переездом экосистему на ESM, в ситуациях, когда два пакета имеют общую зависимость, но один пакет получил CJS версию, а другой ESM, в итоге в бандле две версии, странные плавающие баги и подобное.
https://rsdoctor.dev/blog/release/release-note-1_0
👍11❤3👎1
Из интересных проектов использующих Rspack экосистему — Lynx
Собирает React проект в Native приложения для мобилок.
Из любопытного: имеет кастомные директивы
https://lynxjs.org/react
Собирает React проект в Native приложения для мобилок.
Из любопытного: имеет кастомные директивы
"background only" и "main thread" для выполнения функций в разных потоках.https://lynxjs.org/react
Lynx
React to Lynx
👍5🔥4👎2
Очень любопытный проект
Ходит на сайт с девтлузами React и строит граф зависимостей компонентов на странице.
К сожалению, исходники закрыты, проект на ранней экспериментальной фазе, но потыкать оказалось любопытно. Не требует установки.
https://react-explorer.com/
Ходит на сайт с девтлузами React и строит граф зависимостей компонентов на странице.
К сожалению, исходники закрыты, проект на ранней экспериментальной фазе, но потыкать оказалось любопытно. Не требует установки.
https://react-explorer.com/
❤11👍8🤔4🔥2👎1
В Next.js 15 убрали автоматическое кеширование
Перестать манкипатчить стандартные методы — движение в верном направлении.
Взамен появился
https://nextjs.org/docs/app/api-reference/directives/use-cache
А также
https://react.dev/reference/react/cache
А статья от Авроры показывает как использовать
Но использовать его можно только в компонентах, еще и без
Сомнительное решение, на мой взгляд, но в случае простых веб-страниц может действительно облегчить работу с отображением данных.
https://aurorascharff.no/posts/avoiding-server-component-waterfall-fetching-with-react-19-cache/
fetch().Перестать манкипатчить стандартные методы — движение в верном направлении.
Взамен появился
"use cache":https://nextjs.org/docs/app/api-reference/directives/use-cache
А также
cache() в React 19:https://react.dev/reference/react/cache
А статья от Авроры показывает как использовать
cache() для мемоизации вызовов экшенов
// When using cache(), the return value can be cached/memoized per render across multiple server components
const getComments = cache(async (postId: string) => {
return fetchedData // actual implementation here
});
Но использовать его можно только в компонентах, еще и без
await:
export default async function PostPage({ params }: { params: Promise<{ postId: string }> }) {
const { postId } = await params;
// Prefetch the comments, but don't await the promise, so it doesn't block rendering
getComments(postId);
return (
<div>
<h1>Post: {postId}</h1>
<Suspense fallback={<div>Loading post...</div>}>
<Post postId={postId} />
</Suspense>
</div>
);
}
Сомнительное решение, на мой взгляд, но в случае простых веб-страниц может действительно облегчить работу с отображением данных.
https://aurorascharff.no/posts/avoiding-server-component-waterfall-fetching-with-react-19-cache/
🤔12❤3👎3👍1
Анализировать зависимости NPM-пакетов можно еще с помощью Node Modules Inspector
Умеет показывать не только граф зависимостей, но и ESM/CJS поддержку, использование транзитивных зависимостей, место на диске.
https://node-modules.dev/
Умеет показывать не только граф зависимостей, но и ESM/CJS поддержку, использование транзитивных зависимостей, место на диске.
https://node-modules.dev/
👍18❤1🔥1