feelin
47 subscribers
90 photos
3 videos
4 files
168 links
Разработка, чистый код, AI, безопасность — и ещё миллион тем для холиваров.

Авторский канал Валерия Филатова, Developer Advocate и Project Lead в PVS-Studio.

По вопросам: @feeeeelin
Download Telegram
🤡 MAXимальная безопасность

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

Стоит отметить, что те данные, которые хакерами были получены про каждого пользователя - это довольно небольшой набор. Да, в любом случае плохо, что они утекли, в любом случае это персональные данные, но, например, с точки зрения интеграции в Госуслуги, всё оказалось действительно безопасно, ведь разработчики использовали OpenID Connect. Благодаря такой схеме авторизации, на стороне MAXа остаётся только ID пользователя для Госуслуг (этот же ID есть в слитых данных). Проблема пострашнее в том, что и Госуслуги уже давно взламываются и сливаются. Поэтому со взломом MAXа база слитых данных о людях расширится.

Я не то чтобы оправдываю произошедшее, просто было интересно, как это оказалось, что регулятор проверял MAX, да ещё и довольно публично, а буквально через 2 месяца его ломают. Так оказалось, что регулятор проверял именно то, что и не сломалось :)

В итоге думается: "А ожидалось ли что-то другое?". Возможно, здесь проблема и не в техническом состоянии MAXа. Точнее в нём, но опосредованно - если ты привлекаешь так много внимания к подобному продукту, нужно быть уверенным, что его безопасность непоколебима. А Максим полагался на старый добрый авось.

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
🙈2🍓1
feelin
🎧 Разбаговка #2 Новый выпуск нашего собственного подкаста! В нём поговорили с CEO OpenIDE, Фёдором Сазоновым. Обсудили язык Java, устройство современных инструментов разработки и то, что на самом деле важно, когда создаёшь среду для других программистов.…
🤑 Джонни, они в нашей IDE!

Частично затрагивали эту тему с Фёдором в подкасте, однако решил также написать отдельный пост.

Недавно пробежала новость о том, что JetBrains начнут обучать свой ИИ на том коде, который пишется в их IDE на некоммерческих лицензиях. Пока что такую фичу можно будет выключить.

В целом, логично, что AI Assistant как-то нужно дообучать, но интересно, насколько некоммерческий код будет для этого подходить. Видимо предполагается, что это будет Open Source, но есть же ещё студенты, например. Да даже если оставить только Open Source, там код не всегда самый качественный, а хотелось бы.

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

Интересно ещё то, что за последний год JetBrains добавили ко многим своим инструментам возможность некоммерческого использования. Ранее Community версия была только у IntelliJ IDEA и PyCharm. Изначально было неясно, с чего это вдруг такая щедрость, а теперь понятно, что такие изменения в политике лицензирования были нужны как раз для таких изменений в лицензионном соглашении.

В целом, довольно интересный подход, да и вариант выбран максимально мирный. Если ты пишешь некоммерческий код, то, вероятнее всего, он должен решать какую-то проблему или как-то помогать. Некоммерческий код, написанный в JetBrains IDE будет помогать ещё одним дополнительным способом.

JetBrains нужно выдерживать конкуренцию против полноценных coding агентов и IDE по типу Cursor, поэтому вполне понятно, с чего AI Assistant появился, и с чего сейчас происходят такие изменения.

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
🥱 Ленивый Python

Ещё не до конца осознали Python 3.14, а уже приняты новые PEP'ы.

В Python 3.15 наконец появятся «ленивые» импорты. Данное нововведение было принято с PEP 810 - Explicit Lazy Imports.

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

Объявляться подобные импорты будут с помощью нового ключевого слова lazy:

lazy import json

Также был принят PEP 798 - Unpacking in Comprehensions. Это чистой воды сахар, расширяющий возможности генераторов.

Благодаря такой возможности теперь, например, можно будет пересобрать матрицу в одномерный массив с помощью одной строки:

matrix_list = [*item for item in matrix]

В текущей версии языка для решения подобной задачи пришлось бы отказаться от генераторов или использовать генератор с 2 циклами.

🎤 feelin про #Python
Please open Telegram to view this post
VIEW IN TELEGRAM
📞 Что он Город IT?

Осенний сезон выступлений в этом году выдался, мягко сказать, насыщенным, а значит пришло время для серии постов в жанре деврельского тревел-блога :)

В самом начале осени ездил на конференцию Город IT, которая проходила в Томске. Ребята из Infotecs позвали выступить на их треке, посвящённом информационной безопасности.

В этом году уже вторая поездка в столь отдалённые уголки необъятной, ранее с подобными же целями попадал в Новосибирск. Всё ещё думаю поехать выступать на конференцию во Владивосток, желательно поездом :)

В этот раз рассказывал про свой любимый SAST. Так получилось, что чем больше про SAST рассказываешь, тем ещё больше про него появляется, что сказать в будущем. Но в этот раз без лишней душниловки, хоть и с небольшим количеством нормативки :)

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

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄1
😜 Вайб года?

Интересная новость: Collins Dictionary объявил словом года vibe coding - подход к разработке программного обеспечения, при котором разработчик описывает задачу на естественном языке, а модель генерирует код, минимизируя ручной труд.

И, если подумать, это слово действительно появилось только в феврале этого года, но за прошедшее время уже стало довольно широко употребляемым. Говорят, что впервые его употребил Андрей Карпатый (ex Director of AI в Tesla и founding member в OpenAI).

Ещё интересно вспомнить, в каком ключе это слово употреблялось. Помнится, что в феврале кроме негатива и иронии при его использовании ничего не было. Сегодня же успели появиться целые разработчики, у которых из инструментария только всякие Claude да Cursor.

Стоит заметить, что слово 2025 года по версии Collins Dictionary продолжает ранее начатую тенденцию: в 2023 году словом года признали AI.

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
👏 Finally

Уже несколько постов написал про Python 3.14 и даже про 3.15, а про самую интересную фичу, ради которой все стараются, так и не сказал :)

В Python 3.14 появились free-threaded сборки, которые выключают Global Interpreter Lock (GIL), т. е. включают реально параллельное выполнение Python кода между несколькими ядрами CPU.


GIL, если вдруг вы не знали, - это штука, которая одновременно разрешает только одному потоку выполнять байткод Python.

В отличие от экспериментальной сборки как в Python 3.13, в этот раз режим без GIL, хоть и не является режимом по умолчанию, но уже является официально поддерживаемым, и текущий статус free-threaded Python соответствует тому, что описано в PEP 779.

Для сохранения обратной совместимости на данный момент есть возможность включить GIL обратно прямо в рантайме. Это будет удобно для того, чтобы сгладить переход к free-threaded коду и зависимостям, которые ещё не готовы к работе без GIL.

Free-threaded Python - одна из самых больших вещей, которую разработчики языка делают на данный момент, поскольку она должна сильно улучшить дела с производительностью Python приложений. И на том, что достигнуто, останавливаться разработчики не планируют. Через несколько релизов сборка с GIL будет недоступна по умолчанию, а сейчас ведётся работа над вторым этапом поддержки free-threaded.

🎤 feelin про #Python
Please open Telegram to view this post
VIEW IN TELEGRAM
✈️ Балтика (не девятка)

Продолжаем деврельский тревел-блог. В середине октября невероятно удачно совместил приятное с полезным. Наконец побывал в Калининграде (хотя до него так и не добрался, в итоге посмотрел только Светлогорск) и съездил на Merge Baltic.

Merge традиционно одни из моих любимых организаторов конференций ever, а тут и конференция на побережье Балтийского моря, как можно было пропустить? :)

Интересна была также и площадка, потому что все спикеры конференции были рассредоточены по разным помещениям внутри "Янтарь Hall" - здания, которое в Светлогорске взгляд обходит с трудом. Я, например, выступал в небольшом конференц-зале, но от того было интереснее, когда почти все доступные места были заняты.

Один недостаток у всего этого добра - записей на конференциях кроме флагманской Merge Innopolis, ребята не делают. Это серьёзная проблема для конференции, где параллельно идёт 8 потоков докладов.

А вот как раз с прошлого Merge есть запись, я там про DevOps рассказываю, можно посмотреть тут.

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2
🤓 1 + 1 = 11

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

Позволил себе немного кликбейтный заголовок, но помимо собственного кейса же должен быть образовательный момент, поэтому во второй части статьи разбираем, чем == в JavaScript отличается от ===.

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

Ну а статейку с моей историей можно прочитать здесь:
- на русском
- на английском

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰 20 лет Django

16 ноября одному из самых популярных веб-фреймворков для Python исполнилось 20 лет. Версия Django 0.90 вышла в 2005 году.

Интересно, что другие фреймворки, которые были в топе, успели множество раз смениться. Например, для легковесных приложений раньше часто использовался Flask, а сегодня его место занял FastAPI. Во времена, когда в Python не было асинхронности как таковой, популярен был фреймворк Tornado, а сегодня его использование не так широко распространено.

Я полюбил Django за наличие мощнейшего функционала из коробки. Когда нужно создать достаточно большое веб-приложение, Django хороший вариант, потому что тут и админку развернуть за пару минут можно и базовый CRUD делается довольно быстро и просто. Не нужно возиться с миллионом конфигов - Django сам запустит базу данных на SQLite, а если захочется масштабироваться, то поменять СУБД - простейшая задача. Разработчику можно сфокусироваться на более интересных и творческих задачах, когда фреймворк берёт всю рутину на себя.

Появившийся для решения одной задачи, сегодня Django огромный фреймворк со своим сообществом разработчиков, который используется во множестве проектов по всему миру.

🎤 feelin про #Python
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩 Statische Analyse in allen Sprachen der Welt

Новая статейка от меня! В этот раз посмотрели проект Language Tool с помощью статического анализатора и снова нашли в коде много всякого интересного :)

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

Кстати, за кулисами производства каждого такого материала мы находим и возможности для улучшения нашего инструмента. В этот раз такое улучшение даже попало в текст. Оказалось, что Java анализатор неправильно обрабатывает строки на арабском (напоминаю, что в этом языке читают справа налево).

В общем, снова рекомендую свою статью к прочтению :)

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

Читать:
- на русском
- на английском

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
🎧 Разбаговка #4

Перед новым годом припасли для вас новый выпуск подкаста. В этот раз говорим про AI в разработке с Евгением Сергеевым (a.k.a. S0ER):

- как LLM справляются с реальным кодом проектов?
- в чём разница между агентами и ассистентами?
- насколько дорого использовать AI для написания кода?
- как бороться с иллюзией компетентности ИИ?
- действительно ли вайбкодинг станет будущим разработки?
- изменит ли ИИ саму культуру программирования?
- заменит ли искусственный интеллект обычных разработчиков?

🎧 Яндекс.Музыка
🎬 YouTube

🎤 feelin #podcast
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
🤓 Типа важный

Ребята из OpenIDE тут взяли у меня интервью обо всяком разном. Немного поспрашивали про меня, а больше про наш плагин для их среды разработки. Всякого разного там наговорил, можно почитать вот тут :)

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
С новым оборотом, земляне! 🎉
Вчера записали кое-что интересное 🙃

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
🫡 Компилятор говорит, анализатор слушает

Если обратить внимание на количество постов в уже наступившем 2026 году, можно понять, что трудовой год начался достаточно интересно :). Сегодня закрою свой долг с прошлого года и расскажу про одну интересность, которая вышла в конце 2025-го.

C++ - довольно интересный язык. И интересность его заключается не только непосредственно в языковых возможностях, а ещё и в инфраструктуре вокруг кода, на нём написанного.

Если попросить C++ разработчика назвать известные ему компиляторы, то в принципе, можно уже заваривать чай, это, скорее всего, надолго. И вполне себе частая история, когда в том или ином проекте на C++ появляется целый "зоопарк" из различных инструментов, используемых для сборки программного обеспечения.

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

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

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

Собственно, о том, как этот самый мониторинг компиляции в PVS-Studio работает я и написал в своей статье. Там же есть, кстати, и описание новой фичи - использования мониторинга компиляции на Windows из плагина для IDE Visual Studio Code.

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄3
🤪 Слоп не пройдёт

29 января The Verge опубликовал новость: YouTube удалил несколько каналов, занимавшихся публикацией низкокачественного AI-контента. Изменения коснулись 18 каналов, самые большие — CuentosFacianantes и Imperio de Jesus.

Интересно, что за неделю до этого Нил Мохан, CEO YouTube, опубликовал письмо с планами платформы на 2026 год. Cреди них содержался пункт Managing AI Slop о скором начале удаления низкокачественного AI-контента. Также YouTube теперь требует от авторов маркировать сгенерированный контент, который можно принять за реальность.

Новость снова напоминает нам о времени, в котором мы живём. AI меняет многие сферы, в том числе производство и потребление контента. Помните ли вы ещё случаи, когда YouTube вводил специальную модерацию для вполне легальных материалов, не касающихся политики?

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

Ради интереса сверните Telegram и посмотрите, сколько времени работы аккумулятора вашего смартфона уходит на подобное? Я думаю — немало.

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
👏1😢1
🔥 Реактивный компилятор

Фронтенд часто является предметом шуток на тему инструментов, которые появляются чаще, чем используются. Но несмотря на то, сколько инструментов существует, серьёзная разработка всё ещё отдаёт предпочтение большим игрокам.

Одним из самых популярных фронтенд фреймворков является React. Что же поддерживает его статус "царя горы"? Как минимум, крутые возможности, упрощающие разработку. Одно из таких - React Compiler.

Это новый инструмент сборки, который оптимизирует ваше React-приложение с помощью автоматической мемоизации. Что же здесь революционного?

Посмотрим на вот такой фрагмент кода:


import { useMemo, useCallback, memo } from 'react';  

const ExpensiveComponent = memo(
function ExpensiveComponent({ data, onClick }) {
const processedData = useMemo(() => {
return expensiveProcessing(data);
}, [data]);

const handleClick = useCallback((item) => {
onClick(item.id);
}, [onClick]);

return (
<div>
{processedData.map(item => (
<Item
key={item.id}
onClick={() => handleClick(item)}
/>
)
)}
</div>
);
}
);


Этот React-компонент использует:
- useMemo - хук, позволяющий мемоизировать вычисления в компонентах. Если входные зависимости не менялись, то ранее сохранённое значение вернётся без вычислений;
- useCallback - хук, позволяющий мемоизировать функцию между вызовами компонента. Если зависимости не менялись, то между рендерами возвращаемая функция не поменяется;
- memo - функция, позволяющая избежать повторного рендеринга компонента, если его зависимости не поменялись.

Все эти возможности оптимизации при использовании React Compiler просто не нужны! Тот же фрагмент кода при использовании React Compiler выглядит так:

function ExpensiveComponent({ data, onClick }) {  
const processedData = expensiveProcessing(data);
const handleClick = (item) => {
onClick(item.id);
};

return (
<div>
{processedData.map(item => (
<Item
key={item.id}
onClick={() => handleClick(item)}
/>
))}
</div>
);
}


React Compiler автоматически оптимизирует всё для избежания лишних перерендеров. useCallback, useMemo или memo всё ещё можно использовать, но уже в тех случаях, где необходима ручная мемоизация.

С октября 2025 года React Compiler является стабильным и его уже можно использовать в реальных проектах.

В теории всё звучит круто, но лично мне только предстоит React Compiler попробовать. С момента релиза так и не добрался до того, чтобы попытаться перенести какой-нибудь пет-проект на новомодный инструмент.

🎤 feelin
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1⚡1🕊1
Не делай так: and в названии метода.

Если в названии метода есть and между глаголами - это признак того, что метод берёт на себя слишком много.

Простейший пример:
def validate_and_save_user(user: User):
...


На самом деле это два метода, которые, как гномы из "Гравити Фолз", притворяются одним. Здесь нужна декомпозиция:
def validate_user(user: User):
...

def save_user(user: User):
...


Помимо длинного названия подобные методы создадут много проблем:

- их сложно тестировать. Нужно покрывать все действия, происходящие внутри, поэтому тесты становятся огромными, а процесс их написания превращается в практику по комбинаторике;

- нельзя переиспользовать код. А что, если я в будущем захочу только валидировать пользователя?

- риск прячущихся жуков. При достаточной длине метода в нём могут прятаться баги, которых мы скорее всего не сможем обнаружить глазами.

Казалось бы - мелочь. Но я собственными руками рефакторил такой код. А как-то даже писал на него тесты, потому что зарефакторить спустя годы его существования уже являлось трудной задачей.

#неДелайТак - декомпозируй!

🎤 feelin #cleanCode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4⚡1👨‍💻1
Топ 10 уязвимостей

Вышел новый OWASP Top 10 2025 — обновлённый список самых критичных уязвимостей в веб-приложениях.

За годы своего существования Top 10 стал не просто каталогом рисков, а зеркалом эволюции всей индустрии, отражая изменения в угрозах. Примеры из изменений этого года:

A03:2025 — Software Supply Chain Failures
Уязвимости теперь возникают задолго до первой строчки кода: зависимости, CI/CD-пайплайны, сторонние библиотеки. Сегодня нужно уделять ещё большее внимание тому, что попадает в сборку.

A10:2025 — Mishandling of Exceptional Conditions
Впервые в истории OWASP отдельная категория посвящена игнорированию ошибок. Подобные темы, кстати, появлялись и в недавних отечественных документах.

Полный разбор нового перечня с примерами кода в моей новой статье: OWASP Top 10 2025 — от кода к цепочке поставок: расширение границ безопасности.

Если вы пишете или проектируете API или принимаете решения о безопасности — этой теме точно стоит уделить внимание.

🎤 feelin #security
Please open Telegram to view this post
VIEW IN TELEGRAM
Не забудь!

Иногда у меня бывают дни, когда нужно сделать столько вещей, сколько не помещается в голову: написать какой-то код, посмотреть чей-то текст, подготовить черновик доклада, посетить несколько встреч и т.п. Раньше я просто держал всё в уме, пока не начал забывать что-то важное.

Чтобы решить эту проблему, я начал вести ежедневные заметки, в которых записываю все появляющиеся планы. Иногда я даже оставляю себе «капсулу времени», создавая заметку на будущую дату. А ещё такие заметки помогают агрегировать информацию из разных сервисов — потому что рабочих инструментов иногда слишком много.

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

Я пользуюсь Obsidian и его Daily Notes. Он немного автоматизирует всё это дело. Но на самом деле инструмент не важен — можно делать подобное хоть в блокноте.

🎤 feelin #lifehacks
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡1❤1❤‍🔥1
🎧 Разбаговка #6

Новый выпуск подкаста! В этот раз говорим со Славой Грисом, инди-разработчиком и ютубером, про игры и их разработку, а именно:

- Что движет автором андерграундных игр и как рождаются проекты вроде игр Славы?
- Реально ли начать делать игры без опыта? И как вообще начать?
- Как выжить как инди-разработчику в мире, где ежедневно появляются тысячи новых игр?
- Почему свобода вне мейнстрима — не недостаток, а преимущество, и зачем делать игры, которые могут увидеть лишь немногие?

🎧 Яндекс Музыка
🎬 YouTube

🎤 feelin #podcast
Please open Telegram to view this post
VIEW IN TELEGRAM