Разработчица в Threads рассказала о неожиданном продолжении код-ревью. По её словам, после комментариев об ошибках стажёр убрал её из ревьюеров и запросил проверку у другого коллеги.
История одного автора, но вопрос для команды вполне практический: что происходит с замечаниями, когда меняется проверяющий? Новый ревьюер может заново пройти весь путь или не заметить, почему предыдущий остановил изменение.
Полезно договориться, как фиксировать блокирующие замечания и кому подтверждать их закрытие. Смена проверяющего и устранение проблемы — разные события. А у вас можно сменить ревьюера, пока его замечания остаются открытыми?
Please open Telegram to view this post
VIEW IN TELEGRAM
Threads
Рина 👩🏼💻| aйос девелопмент (@rinkolate) on Threads
😁12👍5🔥5🌚5❤4👏4😍3
🔎 Где багхантер начинает искать ошибки
Исследователь vaib25vicky выбирает сложную функцию и сначала разбирается, как она работает. Затем проверяет, как её можно использовать неожиданным для разработчика способом. Класс уязвимости зависит от самой функции.
В интервью GitHub он объясняет этот подход и отдельно напоминает: находку от ИИ нужно подтвердить самому, прежде чем отправлять отчёт.
Такой подход пригодится и при проверке собственного продукта. Возьмите сложный сценарий, проследите его шаги и проверьте, где меняются права и доступные действия. Найденное странное поведение ещё нужно воспроизвести и связать с конкретным последствием.
🐸 Библиотека программиста
Исследователь vaib25vicky выбирает сложную функцию и сначала разбирается, как она работает. Затем проверяет, как её можно использовать неожиданным для разработчика способом. Класс уязвимости зависит от самой функции.
В интервью GitHub он объясняет этот подход и отдельно напоминает: находку от ИИ нужно подтвердить самому, прежде чем отправлять отчёт.
Такой подход пригодится и при проверке собственного продукта. Возьмите сложный сценарий, проследите его шаги и проверьте, где меняются права и доступные действия. Найденное странное поведение ещё нужно воспроизвести и связать с конкретным последствием.
Please open Telegram to view this post
VIEW IN TELEGRAM
👏10👍7
Лукаш Лалинский сделал zt — шаблонизатор, который во время
zig build превращает HTML-шаблоны в код Zig. Параметры типизированы: ошибку в имени поля или несовместимый тип компилятор замечает до запуска приложения.Сгенерированный код пишет результат в
std.Io.Writer: можно отправлять HTML в сокет или собирать его в буфере. Динамические значения экранируются по умолчанию, а URL в href и src проверяются на опасные схемы. Для сырого HTML нужно явное исключение.Автор разбирает устройство библиотеки и границы защиты: безопасные значения по умолчанию не закрывают все варианты XSS. Интересный пример того, как перенести часть ошибок шаблона из запроса пользователя в сборку.
Please open Telegram to view this post
VIEW IN TELEGRAM
Lukáš Lalinský
Type-safe HTML templating in Zig
I’ve done a lot of web development over the years. I started around the year 2000, just after PHP 3.0 was released and started taking over the web world. I’ve used all kinds of approaches for generating HTML: raw PHP, string concatenation in Python, Smarty…
👾13👍8
Forwarded from
🧑💻 Какие навыки помогают вам в разработке в 2026 году?
Что вы чаще используете в работе? В каких задачах помогает ИИ, а где проще справиться самостоятельно?
Мы решили собрать портрет современного разработчика — и приглашаем вас поделиться своим опытом. Расскажите, какие навыки вам пригодились и как вы используете ИИ. Если обходите его стороной, нам тоже интересно узнать почему.
Опрос анонимный и займёт около 5 минут. Результаты опубликуем в общем большом исследовании.
👉 Пройти опрос
Что вы чаще используете в работе? В каких задачах помогает ИИ, а где проще справиться самостоятельно?
Мы решили собрать портрет современного разработчика — и приглашаем вас поделиться своим опытом. Расскажите, какие навыки вам пригодились и как вы используете ИИ. Если обходите его стороной, нам тоже интересно узнать почему.
Опрос анонимный и займёт около 5 минут. Результаты опубликуем в общем большом исследовании.
👉 Пройти опрос
😁10❤6👍4
Выходные — хороший повод заняться тем, на что вечно не хватает времени. Например, освоить новый навык или углубиться в знакомую тему.
Вот несколько сочетаний:
Можно выбрать и другие курсы — под свои интересы и цели.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9⚡6👏5
Количество комментариев мало говорит о качестве ревью. Важно, какие реальные ошибки инструмент нашёл, какие пропустил и сколько раз поднял ложную тревогу.
GitHub представил ReviewBench — бенчмарк на 219 публичных PR на 19 языках. Эталонные находки собирали из нескольких источников: человеческого ревью, статического анализа и LLM. Результаты можно смотреть по серьёзности и типу проблем.
Так проще сравнивать инструменты под свою задачу: искать критичные баги или получать больше замечаний, принимая дополнительный шум. Для выбора в команду всё равно проверьте кандидатов на своих PR: общий результат не гарантирует такую же пользу в вашем проекте.
Please open Telegram to view this post
VIEW IN TELEGRAM
👾7🎉5👏4❤3
В архивном обсуждении r/ExperiencedDevs участник описал интеграционные тесты, которые коллеги избегали. Чтобы понять путь от написанного сценария до проверки, приходилось разбираться примерно в шести слоях самописной инфраструктуры.
В треде разделяют проверки одного сервиса с реальным вводом-выводом и сценарии, проходящие через несколько систем. Во втором случае больше связей и обслуживания; выбор инструмента сам по себе эту сложность не убирает.
Перед ещё одним тестовым фреймворком полезно посмотреть на обычный сценарий команды: сколько шагов нужно, чтобы запустить тест, понять падение и изменить проверку? Если ответ требует экскурсии по инфраструктуре, проблема может быть в устройстве тестов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Reddit
From the ExperiencedDevs community on Reddit
Explore this post and more from the ExperiencedDevs community
❤18
В C ноль может быть и результатом разбора строки, и признаком того, что число вообще не удалось прочитать. Поэтому проверки только возвращённого значения недостаточно.
Автор разбора сравнивает поведение glibc и musl и требования ISO C и POSIX. Проверка одного
errno тоже не переносима: при строке без числа реализации могут сигнализировать по-разному.Для случая «ничего не разобрали» передавайте
endptr и сравнивайте его с началом входной строки. Переполнение и потеря слишком малого значения требуют отдельных проверок. Небольшой разбор о том, почему привычный библиотечный вызов стоит проверять вместе с его контрактом.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🤔3👍2🔥2
Функция возвращает правдоподобное число, тесты проходят, а расчёт неверен. Так бывает, когда разработчик и тесты одинаково ошибаются в смысле входного параметра.
В разборе ошибок расчётной библиотеки автор предлагает указывать возле функции источник правила и точно называть величины. Параметр
amount легко перепутать с похожей суммой; конкретное название помогает заметить ошибку ещё при вызове.Значения, которыми управляет внешний регулятор или стандарт, лучше передавать через настройки с документированными значениями по умолчанию. Тогда их можно обновить без ожидания новой версии библиотеки.
Проверки входных данных тоже должны жить внутри функции. Ограничение поля в интерфейсе исчезнет, когда расчёт перенесут в библиотеку или начнут вызывать через API. Цикл, ограниченный только пользовательским числом, может закончиться нехваткой памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👏7👍3🔥3
Задержка запроса выросла, но логи не показывают, какая функция забирает CPU. Профиль выполнения помогает связать затраты с кодом на реальной нагрузке.
Cloudflare добавил профилирование по запросу для Workers и Durable Objects. CPU-профиль собирает выборки стеков, а flamegraph показывает, какие пути выполнения чаще попадали в наблюдение. Профиль памяти помогает найти места выделения объектов.
Для обычного Worker выбирается один работающий экземпляр. Для Durable Object можно указать имя конкретного объекта — полезно, если проблема проявляется только у него.
Сеанс запускается вручную и охватывает ограниченное время. Профиль выделений видит только объекты, созданные в этом окне: он не показывает всю удерживаемую память и может пропустить выделения при старте. При редком трафике поймать нужный участок тоже сложнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
👾5🔥3👏3❤2
Naresh Jain сравнил создание одного API-сервиса агентами с дополнительными проверками и без них. Готовые приложения оценивались отдельно: для успеха требовалось пройти все 178 приёмочных тестов.
В эксперименте с behavioral harness агент во время разработки получал архитектурные контракты и обратную связь от проверок. GPT-6 Luna без этой поддержки справился в 3 из 10 запусков, с ней — в 10 из 10. Такой вариант стоил примерно на треть меньше, чем GPT-6 Sol без harness.
У GPT-6 Sol результат был 10 из 10 в обоих режимах. Дополнительные проверки увеличили расход токенов примерно в 10,5 раза и оценённую стоимость почти в семь раз, не улучшив итоговый успех.
Это небольшое сравнение на одной задаче. Оно показывает, что пользу проверок стоит измерять вместе с затратами: одинаковая схема может помогать одной модели и добавлять лишнюю работу другой.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4🔥3
Cloudflare встроил Rust-движок DataFusion в Go-сервис доставки логов. SQL фильтрует и преобразует данные внутри процесса, без отдельного сетевого вызова на каждую обработку.
В разборе устройства Transformers данные передаются пакетами в формате Arrow IPC через
cgo. Это позволяет сохранить типы и структуру столбцов, обходясь без промежуточного JSON с разбором каждой записи.Go предоставляет входной буфер только на время вызова: Rust не сохраняет указатель после возврата. Выходным буфером владеет Rust. Go копирует результат в свою память, затем явно освобождает Rust-буфер.
Такой обмен всё равно требует сериализации, декодирования и управления памятью. Его преимущество — обработка пакетами и явные сроки жизни данных. Если преобразование не удалось, сервис повторяет попытку: исходные логи не отправляются в обход фильтрации и маскирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍5👏5
В Turso 0.7 конкурентные записи уже были, но добавление соединений почти не повышало пропускную способность. Профиль показал причину: каждая транзакция отдельно ждала
fsync, пока остальные упирались в блокировку коммита.В Turso 0.8 внедрили group commit. Транзакции складывают записи в очередь, а один участник записывает накопленное в журнал и вызывает
fsync за всю группу.Остальные ждут, пока синхронизация охватит их записи. Только после этого продолжают фиксацию: ускорение сохраняет требование надёжного хранения.
Таймера для набора группы нет. Транзакции, пришедшие во время текущей синхронизации, попадают в следующую. Под конкурентной нагрузкой дорогих обращений к диску становится меньше; одиночному последовательному клиенту объединять почти нечего.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍6👏2🔥1
JSON-декодер дошёл до закрывающей скобки и вернул результат. Но после неё в ответе остался перевод строки. Для HTTP/1 это важно: пока тело не прочитано до конца, соединение нельзя использовать для следующего ответа.
В разборе команды Go показано, как такая мелочь приводила к повторным TCP/TLS-рукопожатиям. Даже код, которому нужен только статус ответа, мог постоянно открывать соединения заново.
В Go 1.27
net/http.Transport пробует дочитать остаток в фоне: до 256 КБ или 50 мс. Если получилось, соединение возвращается в пул. Вызывать resp.Body.Close() в приложении всё равно нужно.Для HTTP/2 такое дочитывание не требуется: независимые потоки позволяют другим запросам пользоваться тем же соединением.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥7❤5👏3
Docker Hub позволял превратить личный аккаунт в организацию и назначить ей владельца. Вместе с аккаунтом переносились PAT-токены: их привязывали к новому пользователю, сохраняя прежнее секретное значение.
Тот, кто знал токен до переноса, мог обращаться к реестру уже от имени нового владельца. В пределах разрешений токена это затрагивало загрузку, публикацию и удаление образов.
В разборе CVE-2026-105445 Docker описывает исправление от 30 сентября: перенос PAT полностью убрали. Признаков эксплуатации компания не нашла; доступ к веб-интерфейсу и смене пароля ошибка не давала.
При смене владельца ресурса стоит отдельно проверить судьбу всех выданных ключей. Изменение строки в таблице пользователей не забирает секрет у человека, который уже его скопировал.
Please open Telegram to view this post
VIEW IN TELEGRAM
👏6❤2👍2🔥2
В цепочке A → B → C → D сбоит последний сервис. Каждый предыдущий делает одну повторную попытку. Пока ошибка идёт наверх, число обращений к D успевает вырасти в восемь раз.
В разборе Uber показано, почему отдельные лимиты повторов не решают всю проблему: нагрузка продолжает усиливаться на каждом уровне зависимостей.
Команда добавила сведения об источнике ошибки. Если сервис сам породил сбой, ближайший вызывающий сервис может повторить обращение в пределах бюджета. Если он лишь передаёт чужую ошибку, выше по цепочке её повторно «лечить» уже не пытаются.
Для этого нужна связь между входящими и исходящими вызовами. Потеря контекста может сместить место повтора, поэтому в статье отдельно разбирают такие случаи. Политика повторов здесь зависит от того, где возник сбой и кто уже пытался с ним справиться.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍8🔥1
Цикл добавляет
short в Set<Short>, затем вызывает remove(i - 1). Ожидаем, что предыдущий элемент исчезнет. Но выражение i - 1 имеет тип int и упаковывается в Integer. В наборе лежат Short — совпадения нет.Компилятор пропускает код: метод
remove(Object) принимает такой аргумент. Error Prone замечает несовместимость и останавливает сборку. Он подключается к javac и использует сведения компилятора о типах.Ещё один пример —
YYYY в формате даты. Это год по нумерации недель. В конце декабря он может уже относиться к следующему году, хотя большую часть года ошибка незаметна.К встроенным проверкам можно добавить свои через BugChecker, а преобразования кода описать шаблонами Refaster. Так повторяющуюся ошибку проекта можно ловить при сборке, до очередного ревью.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6😍2❤🔥1👍1
Когда у каждого проекта свои владельцы и внешние участники, ручная ревизия прав легко откладывается на потом. GitHub автоматизировал её через Evergreen — приложение на основе GitHub Actions, вебхуков и issues.
Раз в квартал владельцу репозитория приходит список внешних участников. Нужно отметить тех, кому доступ ещё требуется. После срока на ответ неподтверждённые доступы отзываются. Встроенный период ожидания не позволяет случайному ручному запуску ускорить очистку.
Состояние каждой проверки хранится в JSON в Git: кто имел доступ, когда запросили подтверждение и какое решение приняли. Его можно проследить по истории коммитов.
Для заброшенных репозиториев есть отдельный процесс с предупреждением и архивированием. Код сохраняется, а действия остаются в журнале. Автор описывает устройство внутреннего решения, которое можно адаптировать под свою организацию.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Quick Tunnel публикует локальное приложение по временному адресу. По умолчанию зайти может любой, у кого есть ссылка.
В Protected Quick Tunnels вход можно ограничить адресами почты. Начиная с
cloudflared 2026.9.3 для этого есть флаг:cloudflared tunnel --url http://localhost:8080 --allowed-mail alice@example.com
Посетитель подтверждает почту одноразовым кодом через Cloudflare Access. Затем
cloudflared на вашей машине сверяет адрес со списком разрешённых. Аккаунт Cloudflare не нужен ни автору демо, ни посетителю.Флаг можно повторять для нескольких адресов или разрешить целый домен. Без него туннель останется публичным. Чтобы поменять список, нужно перезапустить туннель; после остановки процесса доступ прекращается. Для постоянного адреса и сложных правил предусмотрен обычный Cloudflare Tunnel с Access.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один.
Например, можно совместить:
💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью.💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.
Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽
Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога.
Please open Telegram to view this post
VIEW IN TELEGRAM