У вас закончился пробный период!
Для полного доступа к функционалу, пожалуйста, оплатите премиум подписку
SE
Сова пишет…
https://t.me/sergeysova
Возраст канала
Создан
Язык
Русский
0.15%
Вовлеченность по реакциям средняя за неделю
5.15%
Вовлеченность по просмотрам средняя за неделю

Frontend Senior Fullstack Backend Lead и прочие слова.

Изучаю самые современные технологии.

Обучаю разработчиков как стать сильнее — https://frontend.vision.

Сообщения Статистика
Репосты и цитирования
Сети публикаций
Сателлиты
Контакты
История
Топ категорий
Здесь будут отображены главные категории публикаций.
Топ упоминаний
Здесь будут отображены наиболее частые упоминания людей, организаций и мест.
Найдено 25 результатов
SE
Сова пишет…
3 245 подписчиков
11
1
1.2 k
Еще один день, когда приложение ChatGPT просто выкидывает записанный войс, потому что транскрибировать не удалось.

Гениальное решение, ну раз юзер записал войс, значит сама запись больше не нужна, не взирая на возможные ошибки распознавания… гении, не иначе
23.04.2025, 10:38
t.me/sergeysova/1113
SE
Сова пишет…
3 245 подписчиков
Репост
18
22
1.0 k
Блокировки, блокировки, блокировочки...

Значит, бывает такая история, что сидишь ты понимаешь, на хорошем и дешевом хостинге и крутиш свои кубернейтесы. И все тебе збс и устраивает.

Но вот не задача, почему то (sarcasm) подсети этого хостинга начинают блочить провайдеры...

Смачно выругавшись начинаем искать варианты:

1. Переехать значит на православный хостинг и платить x100500 деняг
2. Купить на православном хостинге VPS, поставить там nginx в режиме stream и надеяться, что хостинг не заблокируют на уровне магистрали.

Для тех кто выбрал второй вариант, все просто.

1. Ставим nginx с поддержкой stream
2. Добавляем в nginx.conf
...
stream {
upstream k8s_https {
server ваш_ip:443;
}

server {
listen 443;
proxy_pass k8s_https;
}
}
...
В отличие от стандартного http {} блока, stream работает на уровне TCP, а не HTTP.
Он не трогает заголовки, не читает Host, не парсит User-Agent
Он просто берёт входящий TLS-трафик и тупо прокидывает его дальше.

При этом это работает охуительно быстро, в отличии от обычного proxy_pass

Никакого overhead, никакой нагрузки на CPU, ничего не разбирается, не кешируется и не мутируется.
Это как туннель, только без OpenVPN и танцев с бубном.


BEARlogin dev — подпишись!
#блокировки #proxy #devops
16.04.2025, 11:44
t.me/sergeysova/1112
SE
Сова пишет…
3 245 подписчиков
Репост
14
30
865
Уязвимости в NextJS

Я думаю уже почти все слышали про уязвимость в NextJS, которая позволяет при запросах обходить миддлевары, и например, пропускать обработку авторизационных токенов и прочие серверные проверки. Уязвимость очень проста в эксплуатации, достаточно прокинуть http-заголовок x-middleware-subrequest, которая пропускает указанные миддлевары. Подробнее почитать можно в блоге Рашида Алама.

Наш проект это не затронуло, так как мы не смогли в свое время завести в нашей инфре стабильную работу миддлевар. Но пару месяцев назад мы столкнулись с другой уязвимостью на основе «cache poisoning», которая не получила столь бурную реакцию в интернете, но в нашем случае тоже могла бы привести к довольно критичным последствиям.

Cache poisoning (дословно, отравление кэша) - это атака, при которой обычным пользователям отображается вредоносный ответ на основе манипуляций с веб-сервером и кэшем.

Кэш позволяет отдавать идентичный ответ пользователю, который сделал аналогичный запрос. Как понять, что запрос аналогичный? У запросов должен быть одинаковый кэш-ключ, который обычно формируется на основе различных компонентов: тип запроса, хост, pathname, некоторые http-заголовки (конечно этих параметров может быть намного больше). Если ключ совпадает, то отдается сохраненный результат из кэша, если нет - то запрос начинает обрабатываться сервером.

Но есть компоненты, которые никак не влияют на ключ кэша (например какие-нибудь http-заголовки). И если какой-нибудь из этих компонентов может повлиять на ответ, то можно подложить отравленный результат в кэш, который будет возвращаться уже обычным пользователям.

Вот и мы нарвались на такую уязвимость в нексте (CVE-2024-46982). Если кратко, у NextJS в рамках page router-а есть режим SSR через функцию getServerSideProps, которая подготавливает данные в формате JSON для страницы. Для этого некст при заходе на страницу отправляет запрос по пути /_next/data/.... Но есть внутренний query-параметр ?__nextDataReq=1, при добавлении которого к странице возвращается только JSON-данные для нее. И этот query-параметр не является частью ключа для кэша. Условно https://a.com и https://a.com/?__nextDataReq=1 будут иметь один ключ. Если результат второго запроса сложить в кэш, то у всех пользователей вместо главной страницы будет открываться JSON с данными.

Сам по себе getServerSideProps является динамическим и в кэш ничего не складывает. Но еще есть внутренний http-заголовок x-now-route-matches, "включающий" SSG (server side generation) режим некста, который складывает результаты в кэш. Понимаете к чему я веду? Уязвимость заключается именно в этом и с помощью комбинации ?__nextDataReq=1 + x-now-route-matches и одного запроса можно сломать любую динамическую страницу приложения, путем складывания в кэш JSON-данных для страницы и отдачи их вместо html-контента.

Более того, в этот JSON часто попадают значения http-заголовков, поэтому в него можно положить произвольный текст. А с учетом того, что запросы продолжают отдавать content-type равный text/html, то получаем еще и XSS абсолютно для всех пользователей, которые просто зайдут на страницу.

Подробнее про это можете почитать в блоге все того же профессора Рашида https://zhero-web-sec.github.io/research-and-things/nextjs-cache-and-chains-the-stale-elixir

Уязвимость уже была пофикшена в новых версиях NextJS, поэтому для фикса нам нужно было апнуть минорную версию, но это уже другая история.
4.04.2025, 12:44
t.me/sergeysova/1111
SE
Сова пишет…
3 245 подписчиков
5
11
1.0 k
Насколько мне известно, появление поиска в ChatGPT, Google Grounding Answers, Claude Web Search сильно меняет рынок поисковиков.

Все больше пользователей ищут ответы на свои вопросы через AI, не утруждая себя подбором ключевых слов в Google.

Но насколько поиск через AI действительно лучше?
Автор проводит ревью существующих инструментов, рассуждает, как можно улучшить текущий поиск и какие у него есть проблемы.

https://paulstamatiou.com/browse-no-more
1.04.2025, 10:10
t.me/sergeysova/1110
SE
Сова пишет…
3 245 подписчиков
32
1.2 k
31.03.2025, 10:06
t.me/sergeysova/1109
SE
Сова пишет…
3 245 подписчиков
32
1.2 k
31.03.2025, 10:06
t.me/sergeysova/1107
SE
Сова пишет…
3 245 подписчиков
32
1.2 k
31.03.2025, 10:06
t.me/sergeysova/1108
SE
Сова пишет…
3 245 подписчиков
16
33
1.2 k
Анализировать зависимости NPM-пакетов можно еще с помощью Node Modules Inspector

Умеет показывать не только граф зависимостей, но и ESM/CJS поддержку, использование транзитивных зависимостей, место на диске.

https://node-modules.dev/
31.03.2025, 10:06
t.me/sergeysova/1105
SE
Сова пишет…
3 245 подписчиков
32
1.2 k
31.03.2025, 10:06
t.me/sergeysova/1106
SE
Сова пишет…
3 245 подписчиков
13
15
1.1 k
В Next.js 15 убрали автоматическое кеширование 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 (

Post: {postId}


Loading post...
}>



);
}


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

https://aurorascharff.no/posts/avoiding-server-component-waterfall-fetching-with-react-19-cache/
28.03.2025, 10:23
t.me/sergeysova/1104
SE
Сова пишет…
3 245 подписчиков
22
38
1.4 k
Очень любопытный проект

Ходит на сайт с девтлузами React и строит граф зависимостей компонентов на странице.

К сожалению, исходники закрыты, проект на ранней экспериментальной фазе, но потыкать оказалось любопытно. Не требует установки.

https://react-explorer.com/
27.03.2025, 10:11
t.me/sergeysova/1103
SE
Сова пишет…
3 245 подписчиков
8
9
1.2 k
Из интересных проектов использующих Rspack экосистему — Lynx

Собирает React проект в Native приложения для мобилок.
Из любопытного: имеет кастомные директивы "background only" и "main thread" для выполнения функций в разных потоках.

https://lynxjs.org/react
26.03.2025, 16:16
t.me/sergeysova/1102
SE
Сова пишет…
3 245 подписчиков
14
10
1.3 k
Вы наверняка слышали про Rspack — альтернатива Webpack, но на Rust и с совместимостью по плагинам и конфигам.

Приятно знать, что такие быстрые проекты развиваются и уже имеют весьма крутую экосистему.

19 марта релизнулся Rsdoctor.
По сути это аналог Statoscope, позволяющий дебажить и профилировать сборку. Особенно полезно в больших и сложных проектах, чтобы понять откуда и что заимпортировано.

Максимально актуально в связи с переездом экосистему на ESM, в ситуациях, когда два пакета имеют общую зависимость, но один пакет получил CJS версию, а другой ESM, в итоге в бандле две версии, странные плавающие баги и подобное.

https://rsdoctor.dev/blog/release/release-note-1_0
26.03.2025, 10:08
t.me/sergeysova/1101
SE
Сова пишет…
3 245 подписчиков
13
12
1.3 k
О, супер штука.
Я пока не потрогал, но концептуально мне очень нравится.

В мире 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
25.03.2025, 10:01
t.me/sergeysova/1100
SE
Сова пишет…
3 245 подписчиков
22
13
1.3 k
Уже не первый раз вижу статьи раскрывающие проблему окрашивания функций в разные цвета.

Если коротко:


async function red() {}
function blue() {}


Мы не можем просто так вызывать асинхронные red внутри обычных синхронной blue функциий, а точнее дождаться результата.
Нам нужно "перекрасить" нашу синхронную функцию в асинхронную, добавив маркер async, что повлияет на код использующий эту функцию, что в свою очередь потребует "перекрашивать" и этот код тоже, и так далее вверх по стеку вызовов.

Энтони показывает как можно обобщить работу с синхронными и асинхронными функциями с помощью библиотеки quansync и генераторов.

Правда это добавляет третий "цвет" функций — теперь нужно использовать генераторы, еще и в обертке quansync.
Но подход выглядит по крайней мере любопытно.

https://antfu.me/posts/async-sync-in-between
24.03.2025, 14:26
t.me/sergeysova/1099
SE
Сова пишет…
3 245 подписчиков
16
23
1.3 k
Зацените какая уязвимость в Next.js

https://security.snyk.io/vuln/SNYK-JS-NEXT-9508709
22.03.2025, 13:09
t.me/sergeysova/1098
SE
Сова пишет…
3 245 подписчиков
472
5
1.8 k
Знаете, когда 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 и ИТ-Пикника.

Но главное, почему я вообще об этом пишу — это его канал. Там не просто «сухая экспертность», а живые истории, личный опыт и много реально работающих советов.

Например, что мне зашло:

- «Как придумать идеальную тему для доклада» 
- «Стоит ли доверять интуиции?»
- «Технические навыки у управленцев?»

Тексты Андрея реально приятно читать. Это не блогер, который через силу умничает, а думающий эксперт, делящийся своими размышлениями, опытом и самоиронией.

Рекомендую подписаться.
21.03.2025, 17:31
t.me/sergeysova/1097
SE
Сова пишет…
3 245 подписчиков
28
4
1.5 k
В документацию effector.dev подъехал ПР

Теперь в навигации есть красивый переключатель разделов, спасибо @senzujuju

https://github.com/effector/effector/pull/1232
20.03.2025, 18:05
t.me/sergeysova/1096
SE
Сова пишет…
3 245 подписчиков
Репост
11
15
1.6 k
Системы эффектов

Недавно послушал выпуск Подлодки про "Системы эффектов в языках программирования" и решил поделиться некоторыми рандомными рассуждениями на эту тему.

"Окраска" функций

"Окраской" функций называется некоторая декларация эффектов, содержащихся в функции.

В JavaScript есть 2 варианта "окраски" функций:

- async — обозначает, что функция асинхронная и позволяет использовать внутри неё оператор await
- * — обозначает, что функция является генератором и позволяет использовать внутри неё оператор yield

Fun fact: эти 2 варианта можно скомбинировать, чтобы получить AsyncIterator, который можно перебирать оператором for await...of.

В языке Nim система эффектов позволяет окрашивать функции любыми эффектами, что выглядит весьма любопытно (на самом деле существует ещё множество языков с такой возможностью, но почему-то мне сразу вспомнился именно Nim).

Обработка исключений

В Java есть оператор throws, позволяющий "окрасить" функцию эффектом выброса определённого типа исключения и на этапе сборки удостовериться, что эти исключения обработаны.

JavaScript/TypeScript не позволяет типизировать исключения (разве что задокументировать их с помощью JSDoc или TSDoc), но теоретически эту проблему можно решить знаменитой монадой Either.

Чистота функций

Бандлеры используют аннотацию /*#__PURE__*/, которая обозначает отсутствие побочных эффектов в функции, для более эффективного тришейкинга (упомянал об этом в своём докладе).

В самом JavaScript нет языкового средства для выражения чистоты функции — то есть отсутствия в ней эффектов, хотя было бы классно использовать это знание, например, для исполнения кода во время сборки (как, например, c babel-plugin-macros).
26.02.2025, 22:43
t.me/sergeysova/1095
SE
Сова пишет…
3 245 подписчиков
8
2
1.2 k
Я каким-то образом пропустил Rust 1.85

Язык перешел на новую стабильную версию синтаксиса Edition 2024

https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html
26.02.2025, 12:34
t.me/sergeysova/1094
SE
Сова пишет…
3 245 подписчиков
36
6
1.3 k
Раз уж пишу про обновление документации effector, то расскажу, что сейчас сообщество активно пишет новые статьи и улучшает уже написанные!

Effector становится все более привлекательным инструментом для изучения.

Сейчас я не вкладываю много сил в документацию, так как недавно участвовал в программном комитете Podlodka React Crew #2, а также продолжаю дописывать контент для frontend.vision и активно стараюсь не выгореть.

Количество материалов по effector растет с каждым днём, я даже не успеваю вычитывать все новые статьи, поэтому активно использую некоторые AI-технологии для создания контента.

Например, я выкачал всю документацию и статьи, разбил на кусочки и посчитал эмбеддинги, чтобы в дальнейшем крайне быстро и точно искать по содержимому. Это супер сильно помогает при написании статей.

Вообще, это подход так называемого RAG (Retrieval-augmented generation), но вместо использования полноценного инструмента я собрал свой RAG дома на коленке используя NodeJS + SQLite запуская в CLI.

По сути, собираю уникальную пачку чанков из документации последовательным поиском, а дальше либо читаю глазами результат, либо компилирую в единый ответ через LLM.

Если интересно, расскажу как это работает подробнее
18.02.2025, 16:01
t.me/sergeysova/1093
SE
Сова пишет…
3 245 подписчиков
28
13
1.2 k
Кроме этого, я уже давненько создал Custom GPT под названием Effector Assistant, вы можете найти его в каталоге ChatGPT GPTs.

Я загрузил в него не только документацию effector, но еще и WithEase, некоторые свои статьи и рекомендации для ChatGPT.

Вот пример ответа:
https://chatgpt.com/share/67b43fa3-bfe0-8002-8b6c-cdc9b43ab351
18.02.2025, 13:41
t.me/sergeysova/1092
SE
Сова пишет…
3 245 подписчиков
48
38
1.6 k
В виду популяризации нейросетей, а также инструментов разработчиков с 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 синтаксис. Это уменьшает количество токенов.
18.02.2025, 11:32
t.me/sergeysova/1091
SE
Сова пишет…
3 245 подписчиков
145
1
1.5 k
С сегодняшнего дня мой юзернейм в великой социальной сети — x.com/sergeysova

Теперь у меня есть:
- t.me/sergeysova
- github.com/sergeysova
- x.com/sergeysova

На самом деле юзернейм использую в куче других соц сетей и сервисов, но эти были наиболее интересны.

Удалось связаться с предыдущим владельцем юзернейма, а так как аккаунт не использовался, то пользователь поменял на другой, за что ему отдельное огромное спасибо!
5.02.2025, 16:09
t.me/sergeysova/1090
SE
Сова пишет…
3 245 подписчиков
Репост
19
4
903
effector 23.3.0

- Улучшены сообщения об ошибках для skipVoid и store without sid: теперь по стектрейсу видно в каком сторе произошло исключение, что помогает быстрее найти и исправить его поведение
- Добавлена поддержка произвольного количества аргументов в колбэк scopeBind. Автоматически позволяет передать в reflect bind колбэки с числом аргументов больше одного
- Исправлено поведение clearNode в большом ряде ситуаций при работе с withRegion


Мы продолжаем активную работу над моделями и новым мажорным релизом. Данный минорный релиз потребовался чтобы позволить разрабатывать MVP моделей поверх 23 версии не углубляясь в эффективную реализацию. Разработка будет проходить в этом репозитории. Stay tuned!
1.02.2025, 13:39
t.me/sergeysova/1089
Результаты поиска ограничены до 100 публикаций.
Некоторые возможности доступны только премиум пользователям.
Необходимо оплатить подписку, чтобы пользоваться этим функционалом.
Фильтр
Тип публикаций
Хронология похожих публикаций:
Сначала новые
Похожие публикации не найдены
Сообщения
Найти похожие аватары
Каналы 0
Высокий
Название
Подписчики
По вашему запросу ничего не подошло