PurpleSchool
Иконка канала PurpleSchool

PurpleSchool

563 подписчика

11просмотров

В Go обычный default внутри select может превратить цикл в постоянную проверку канала без ожидания. Разбираемся, почему такой код создаёт busy loop, как он нагружает CPU и когда вместо него использовать блокировку или таймер. #golang #go #goroutines #channels #concurrency #golangdev #backend #selectdefault #busyloop

6просмотров

Shopify рассказал, почему полностью уходит от React Native к нативной разработке на Kotlin и Swift. Раньше кроссплатформенный подход помогал быстрее выпускать функции для iOS и Android, но при этом появлялись ограничения и дополнительные сложности. Сейчас Shopify считает, что благодаря AI-агентам нативная разработка стала быстрее и дешевле. В этом процессе Shopify использует собственный подход Helix: агенты помогают писать код, работать с изменениями и быстрее проходить циклы разработки. Важную роль играют feedback loops — быстрые проверки результата, которые позволяют агентам получать обратную связь и корректировать свою работу. В итоге Shopify возвращается к нативным технологиям, потому что с AI-агентами изменилась экономика мобильной разработки: преимущества Kotlin и Swift становятся доступнее без прежнего роста затрат. Больше новостей — в полном выпуске по ссылке под шортсом! #shopify #reactnative #kotlin #swift #aiagents #mobiledevelopment #iosdevelopment #androiddevelopment #softwareengineering #aidev

186просмотров

Почему SELECT COUNT(*) может долго выполняться, даже если возвращает всего одно число? Разбираемся, как MVCC влияет на подсчёт строк в PostgreSQL, почему Index Only Scan не всегда спасает от чтения таблицы и когда вместо точного результата можно использовать приблизительную оценку из pg_class.reltuples. #postgresql #postgres #sql #selectcount #mvcc #indexonlyscan #databaseperformance #database #db

92просмотра

Вышел стабильный Vite+ 1.0 от VoidZero. Это единый набор инструментов для веб-разработки, который объединяет сборку, тестирование, линтинг, форматирование и управление задачами проекта. В основе уже знакомые инструменты: Vite и Rolldown для разработки и сборки, Vitest для тестов, Oxlint для линтинга, Oxfmt для форматирования, tsgo для проверки типов и tsdown для сборки библиотек. Всё управляется через единый CLI vp. Например, vp check запускает форматирование, линтинг и проверку типов, vp test — тесты, vp build — production-сборку, а vp run позволяет запускать задачи с кешированием, в том числе в монорепозиториях. Главная идея Vite+ — сократить количество отдельных конфигураций и объединить привычные инструменты в один согласованный workflow, сохранив совместимость с экосистемой Vite. Больше релизов — в полном выпуске по ссылке под шортсом! #devnews #viteplus #vite #rolldown #vitest #oxc #voidzero #javascript #js #buildtools #toolchain

73просмотра

readinessProbe и livenessProbe могут проверять один и тот же эндпоинт, но Kubernetes реагирует на их ошибки по-разному. Разбираемся, когда Pod перестаёт получать трафик, когда kubelet перезапускает контейнер и почему проверка доступности базы через livenessProbe может привести к массовым рестартам. #kubernetes #readinessprobe #livenessprobe #k8s #devops #containers #kuber

100просмотров

В ESLint 10.11 заметно поработали над производительностью. Причём оптимизации затронули сразу несколько этапов работы линтера. Загрузка пакета стала быстрее на 20–25% благодаря отложенной инициализации JSON Schema validator. Из начального графа зависимостей убрали около 45 модулей. Ускорили выполнение правил: для распространённых селекторов AST добавили быстрые пути обработки, а вызовы rule visitors по возможности выполняются напрямую, без дополнительных обёрток. Также снизили накладные расходы при обработке найденных проблем и оптимизировали стандартный форматтер stylish. Особенно заметны улучшения могут быть в проектах с большим количеством правил и диагностических сообщений. Конечно, по скорости ESLint всё ещё уступает современным альтернативам вроде Oxlint. Но далеко не все проекты перешли на новые инструменты, поэтому такие оптимизации особенно полезны тем, кто продолжает использовать ESLint. Больше релизов — в полном выпуске по ссылке под шортсом! #devnews #eslint #linter #linting #codequality #devtools #frontend #js #javascript

366просмотров

Неудачная регулярка может надолго занять основной поток Node.js и заблокировать event loop. Разбираемся, как backtracking заставляет движок перебирать огромное количество вариантов и почему особенно внимательно стоит проверять regex, которые работают с пользовательским вводом. #nodejs #node #regex #javascript #js #backtracking #eventloop #backend #performance

107просмотров

Даже обычный Date.now() может вызвать hydration mismatch, если сервер и клиент получают разные значения при первом рендере. Разбираемся, почему React ожидает одинаковую разметку при гидрации и как безопасно работать со значениями, которые меняются между сервером и клиентом. #react #hydration #ssr #nextjs #reactjs #serverrendering #frontend #datenow #useEffect #hydrationmismatch

86просмотров

Большой connection pool не всегда увеличивает пропускную способность. Если база уже упирается в свои ресурсы, дополнительные соединения заставляют запросы сильнее конкурировать за CPU, память и дисковый ввод-вывод. Разбираемся, почему увеличение пула может только ухудшить ситуацию и почему важно учитывать суммарное число соединений от всех инстансов приложения. #connectionpool #connectionpooling #database #sql #postgresql #mysql #backend #databaseperformance #dbperformance #cpu #db

126просмотров

git cherry-pick позволяет забрать изменения отдельного коммита, не сливая всю ветку. Разбираемся, как Git применяет эти изменения поверх текущей ветки, почему в результате появляется новый коммит с другим хэшем и что происходит при конфликте. #git #gitcherrypick #cherrypick #gitcommands #gitcommit #versioncontrol

81просмотр

docker stop сначала даёт приложению возможность завершиться корректно и только после таймаута принудительно останавливает процесс. Разбираемся, зачем Docker отправляет SIGTERM, когда появляется SIGKILL и почему приложение должно уметь корректно обрабатывать остановку. #docker #dockerstop #sigkill #sigterm #dockercontainers #gracefulshutdown #dockertips #devops #containerization

86просмотров

Тип User в TypeScript ещё не гарантирует, что API действительно вернёт данные такой структуры. Разбираемся, где заканчивается статическая проверка типов, почему внешние данные нужно валидировать в рантайме и когда пригодятся schema validators вроде Zod. #ts #typescript #runtimevalidation #TypeSafety #Zod #SchemaValidation #StaticTyping

83просмотра

Даже если содержимое объекта не изменилось, новая ссылка может заставить memo считать prop изменившимся. Разбираемся, как React сравнивает props, почему объекты, массивы и функции могут мешать memo пропускать рендер и когда стоит использовать useMemo и useCallback. #react #reactjs #usememo #usecallback #memo #props #js #javascript #frontend

201просмотр

LIMIT 10 возвращает всего десять строк, но это не значит, что PostgreSQL обработает только их. Разбираемся, какую работу база может выполнить до LIMIT, как подходящий индекс меняет план запроса и почему при оптимизации стоит смотреть в EXPLAIN. #PostgreSQL #Postgres #SQL #Database #Backend #Performance #EXPLAIN #limit10

103просмотра

Retry не поможет, если один запрос может слишком долго удерживать соединение или слот параллелизма. Разбираемся, почему сначала важно ограничить время ожидания, когда повтор запроса безопасен и зачем между попытками нужны backoff и jitter. #Backend #Retry #Timeout #API #DistributedSystems #jitter #clientrequest

9просмотров

Jev AI можно использовать для быстрой и дешёвой классификации входящих текстов сразу по нескольким критериям. Для демонстрации я сделал приложение, в котором Jev оценивает текст по ясности, уместности тона, резкости и уверенности, а также определяет, насколько сообщение звучит как написанное ИИ. Каждый критерий возвращается в процентах. Одновременно Jev определяет тип сообщения — например, просьба, жалоба, отказ, благодарность, информация или другое — и также возвращает вероятности по вариантам. В шортсе проверим это на нескольких письмах: сначала отправим начальнику резкое сообщение, затем изменим его на вежливое и посмотрим, как Jev за секунды пересчитает оценки и тип сообщения. Такую классификацию можно использовать как быстрый и дешёвый слой для принятия решений на основе входящего текста. Полный обзор Jev AI — смотри по ссылке под шортсом! #TextClassification #jev #jevai #llm #ai #ии #typesafe #typesafeai #systemonemodel #systemone #aimodel #Routing #MachineLearning

106просмотров

Горутина может навсегда остаться заблокированной на операции с каналом — например, если получатель уже вышел по таймауту. Разбираемся, как такие горутины накапливаются, почему сборщик мусора их не завершает и зачем у фоновой работы всегда должен быть путь выхода через результат, таймаут или context. #Go #Golang #Goroutine #Concurrency #Backend #golangtutorial #голанг

130просмотров

Jev не обязательно использовать вместо LLM — он может стать быстрым и дешёвым гейтом, который определяет, что делать с запросом дальше. Например, Jev определил order_status — код может сразу обратиться к базе данных, и LLM вообще не понадобится. Для product_question запрос можно передать дешёвой LLM с базой знаний. Если это complaint, связанный, например, с возвратом средств, — подключить более сильную LLM для сложного ответа. А если confidence слишком низкий — отправить запрос человеку. В этом и ценность такой связки: Jev быстро и дёшево определяет тип запроса и уверенность, а уже после этого код направляет задачу туда, где её действительно стоит решать — в обычный код, базу данных, подходящую LLM или человеку. Так мы не тратим дорогие вызовы LLM на каждый входящий запрос и при этом можем выбирать подходящий способ обработки для каждого случая. Полный обзор Jev AI — по ссылке под шортсом! #jev #jevai #llm #ai #ии #typesafe #typesafeai #artificiaiIntelligence #systemonemodel #systemone #aimodel #Routing #MachineLearning

8просмотров

После DELETE строка в PostgreSQL не исчезает с диска сразу. Сначала старая версия может оставаться видимой для других транзакций, а затем превращается в dead tuple. Разбираемся, что с ней делает VACUUM, почему после удаления миллионов строк файл таблицы может не уменьшиться, и когда нужен VACUUM FULL. #PostgreSQL #Postgres #SQL #Database #Backend #vacuumfull #deadtuple #delete #субд

89просмотров

Как выглядит полный цикл запроса к Jev AI? На вход модель получает state — данные, которые она должна проанализировать. Это может быть строка, JSON-объект или массив. Вместе с ним передаются questions: что именно нужно определить и какие типы ответов допустимы — например, null, choice или score. Jev обрабатывает запрос примерно за 100 мс и возвращает answers — структурированные ответы, включая выбранный вариант и confidence. Дальше решение принимает уже код приложения. По заданным порогам он может сразу использовать результат, запросить дополнительную информацию или, например, передать задачу другой LLM. В итоге вместо свободно сгенерированного текста мы получаем типобезопасный ответ, который можно напрямую использовать в логике приложения. Полный обзор Jev AI — по ссылке под шортсом! #jev #jevai #llm #ai #ии #typesafe #typesafeai #artificiaiIntelligence #systemonemodel #systemone #aimodel #Routing