Cursor пришел в IDE JetBrains: IntelliJ IDEA, PyCharm, WebStorm и другие теперь подключают его через Agent Client Protocol (ACP). А это значит, что работать с агентом можно прямо в JetBrains-IDE.
Cursor ACP дает выбор модели под задачу: OpenAI, Anthropic, Google и модели Cursor. Под каждую модель у Cursor своя агентная обвязка, чтобы держать качество и скорость.
Как включить:
– установить Cursor ACP из ACP Registry
– авторизоваться существующей учеткой Cursor
Плагин является бесплатным для пользователей на платных тарифах Cursor.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤21🔥11👍10
🧵 Введение в модели согласованности
Согласованность – это по сути контракт, описывающий семантику видимости изменений в общем ресурсе. Без модели вы не знаете, баг это или допустимое поведение системы.
Примеры моделей:
– Linearizability: запись включается сразу по реальному времени, после завершения её обязаны видеть все
– Serializable: транзакции атомарны, выглядят как выполненные согласно Prоgram Order, но не обязаны уважать реальное время
– Sequential Consistency: суперсет для Linearizability, где действия происходят лишь согласно Program Order, но не Real Time Clock.
– Causal: все процессы видят общий порядок только там, где есть причинность. Однако порядок независимых действий может интерпретироваться процессами по-разному.
– PRAM: каждый процесс видят «в его порядке», между процессами порядок может отличаться
Комментарий от Михаила Поливаха:
Выбор модели консистентности для программы – это часто трейд-офф между предсказуемостью и производительностью. Например, поддержать Serializable гораздо сложнее, чем поддержать Causal.
📚 Подробнее тут: https://habr.com/ru/companies/spring_aio/articles/1006474/
Согласованность – это по сути контракт, описывающий семантику видимости изменений в общем ресурсе. Без модели вы не знаете, баг это или допустимое поведение системы.
Примеры моделей:
– Linearizability: запись включается сразу по реальному времени, после завершения её обязаны видеть все
– Serializable: транзакции атомарны, выглядят как выполненные согласно Prоgram Order, но не обязаны уважать реальное время
– Sequential Consistency: суперсет для Linearizability, где действия происходят лишь согласно Program Order, но не Real Time Clock.
– Causal: все процессы видят общий порядок только там, где есть причинность. Однако порядок независимых действий может интерпретироваться процессами по-разному.
– PRAM: каждый процесс видят «в его порядке», между процессами порядок может отличаться
Комментарий от Михаила Поливаха:
Это статья хоть и теоретическая, но понимание моделей консистетности крайне важно для понимания семантики happens-before в Java, и к тому же для понимания, например, как и почему уровни изоляции транзакций работают так, как работают.
Выбор модели консистентности для программы – это часто трейд-офф между предсказуемостью и производительностью. Например, поддержать Serializable гораздо сложнее, чем поддержать Causal.
📚 Подробнее тут: https://habr.com/ru/companies/spring_aio/articles/1006474/
🔥15👍7❤4
Я тут поймал себя на мысли про ИИ-агентов и open source. Сразу уточню: речь не про проблему обучения ИИ на коде под лицензией.
Не знаю, как кодят другие, но мой текущий процесс выглядит примерно так:
• Сначала собираю спецификацию (
• По спецификации делаю план реализации;
• План отдаю ИИ-агенту.
В плане есть:
• гейты перехода между этапами;
• тесты;
• definition of done.
Дальше агент просто проходит по плану. Конечно, я сильно упрощаю, но общий принцип понятен.
И вот здесь возникает интересный момент.
Спецификацию можно собрать практически из чего угодно.
Например, из проекта под «заразной» лицензией вроде GNU GPL.
Можно внимательно изучить проект и написать подробную спецификацию:
• какие есть модули;
• как они взаимодействуют;
• какие алгоритмы используются;
• какие интерфейсы между компонентами.
По сути — полностью описать архитектуру системы. Причём даже не обязательно делать это вручную: с такой задачей вполне справится любой вменяемый ИИ-агент.
Дальше по этой спецификации другой ИИ-агент составляет план реализации, и запускается разработка. Через несколько итераций получается новый проект:
• он работает;
• код другой;
• структура файлов может быть другой;
• даже язык программирования может быть другим.
Но по сути это та же система, просто переписанная по спецификации.
Фактически получается что-то вроде автоматизированной clean-room реализации.
И вот тут возникает вопрос:
Защищает ли open-source лицензия от такого сценария?
Кажется, что нет. Потому что copyright защищает:
• конкретный код;
• конкретную реализацию.
Но не защищает:
• идеи;
• алгоритмы;
• архитектуру системы.
ИИ просто делает переход от чужой архитектуры к новой реализации очень дешёвым.
Раньше clean-room реализация требовала команды инженеров. Теперь это можно провернуть с помощью одного человека и пары ИИ-агентов (умножить на X).
Поэтому у меня появилась мысль:
Возможно, если кто-то действительно хочет защитить open-source проект от подобного «переизобретения», одной классической лицензии уже недостаточно.
Потому что лицензии регулируют копирование кода, а не пересборку системы по её описанию.
Утекшие исходники
Но это еще не все. Представим, что, не дай бог, исходники вашего закрытого ПО утекли в открытый доступ. Конечно же, никто в здравом виде не будет разворачивать ваш сервис у себя. Но теперь у любого есть армия неутомимых воинов за 100$-200$ в месяц, которые под чутким руководством могут скопировать ваш сервис так, что никто не придерется.
Возможно, ИИ просто подсветил старую юридическую проблему, которая раньше была менее заметна.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥24🤔11❤10👍10
🎬 Документальный фильм про IntelliJ IDEA - IDE, которая изменила Java-разработку
На YouTube вышел отличный документальный фильм про IntelliJ IDEA.
Для нас это особенно интересная история - всё-таки IntelliJ уже много лет является нашим основным инструментом разработки.
В фильме собрали довольно сильный состав участников. Среди них:
- Брайан Гетц (в особом представлении не нуждается)
- Джош Лонг (developer advocate Spring Framework)
- Максим Шафиров (Ex. CEO JetBrains)
- Дмитрий Жемеров (один из первых разработчиков языка Kotlin и автор книги "Kotlin in Action")
- Евгений Беляев (co-founder JetBrains)
- инженеры из Google, Docker, Miro и других компаний
Фильм построен как разговор о том, как вообще появилась IntelliJ IDEA и почему она стала тем инструментом, который мы знаем сегодня.
Там много интересных историй изнутри:
- как создавалась IntelliJ и какие идеи лежали в её основе
- как IDE конкурировала с Eclipse, который долгое время доминировал в Java
- почему появление Community Edition стало важным стратегическим решением
- как сложилось сотрудничество JetBrains и Google, приведшее к появлению Android Studio
- как менялась модель лицензирования и как на это реагировало сообщество
Плюс в фильме есть архивные кадры из ранних офисов JetBrains и воспоминания людей, которые участвовали в развитии платформы.
Отдельно интересно слушать комментарии разработчиков из индустрии. Например, инженеры Miro рассказывают, что их бэкенд построен на Java, Kotlin, Spring Boot, а IntelliJ для них - такая же инфраструктура разработки, как Wi-Fi в офисе: просто открываешь и работаешь.
Получилась довольно живая история про инструмент, без которого сегодня сложно представить разработку на Java.
Посмотреть точно стоит.
https://www.youtube.com/watch?v=Kourq_Lz03U
IntelliJ IDEA в каком-то смысле спасла Java от самой себя
(Брайан Гетц, архитектор языка Java)
На YouTube вышел отличный документальный фильм про IntelliJ IDEA.
Для нас это особенно интересная история - всё-таки IntelliJ уже много лет является нашим основным инструментом разработки.
В фильме собрали довольно сильный состав участников. Среди них:
- Брайан Гетц (в особом представлении не нуждается)
- Джош Лонг (developer advocate Spring Framework)
- Максим Шафиров (Ex. CEO JetBrains)
- Дмитрий Жемеров (один из первых разработчиков языка Kotlin и автор книги "Kotlin in Action")
- Евгений Беляев (co-founder JetBrains)
- инженеры из Google, Docker, Miro и других компаний
Фильм построен как разговор о том, как вообще появилась IntelliJ IDEA и почему она стала тем инструментом, который мы знаем сегодня.
Там много интересных историй изнутри:
- как создавалась IntelliJ и какие идеи лежали в её основе
- как IDE конкурировала с Eclipse, который долгое время доминировал в Java
- почему появление Community Edition стало важным стратегическим решением
- как сложилось сотрудничество JetBrains и Google, приведшее к появлению Android Studio
- как менялась модель лицензирования и как на это реагировало сообщество
Плюс в фильме есть архивные кадры из ранних офисов JetBrains и воспоминания людей, которые участвовали в развитии платформы.
Отдельно интересно слушать комментарии разработчиков из индустрии. Например, инженеры Miro рассказывают, что их бэкенд построен на Java, Kotlin, Spring Boot, а IntelliJ для них - такая же инфраструктура разработки, как Wi-Fi в офисе: просто открываешь и работаешь.
Получилась довольно живая история про инструмент, без которого сегодня сложно представить разработку на Java.
Посмотреть точно стоит.
https://www.youtube.com/watch?v=Kourq_Lz03U
YouTube
IntelliJ IDEA: The Documentary | An origin story
This is the IDE that changed everything.
This documentary traces the 25-year journey of one of the most beloved tools in software development. Through rare archival footage, intimate interviews, and behind-the-scenes moments, it explores how IntelliJ IDEA…
This documentary traces the 25-year journey of one of the most beloved tools in software development. Through rare archival footage, intimate interviews, and behind-the-scenes moments, it explores how IntelliJ IDEA…
🔥44👍19❤11😁2🤯1
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
😁27❤11🔥9🤯2
Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍11❤6
🧩 Разница между параллельными и распределёнными вычислениями
Ускорение работы приложения можно получить двумя способами: распараллелить работу между ядрами одного компьютера или разнести ее по нескольким машинам.
Параллельные вычисления живут внутри одного узла: части задачи выполняются одновременно на CPU-ядрах, нескольких процессорах или ускорителях GPU/TPU.
Параллелизм бывает по задачам и по данным (одна операция над разными блоками), а также на уровне инструкций (конвейеризация, суперскалярность) и битов. Обмен данными чаще происходит через общую память и локальный IPC, поэтому задержки ниже.
Распределенные вычисления делят в свою очередь работу между автономными узлами по сети. Данные передают сообщениями или через RPC, координация сложнее, зато масштабирование обычно проще: добавил узлы - выросли вычисления и хранилище. Часто закладывают отказоустойчивость: репликация, резервирование, обнаружение ошибок.
🔗 Подробности в нашей статье на Хабр: https://habr.com/ru/companies/spring_aio/articles/1008990/
Ускорение работы приложения можно получить двумя способами: распараллелить работу между ядрами одного компьютера или разнести ее по нескольким машинам.
Параллельные вычисления живут внутри одного узла: части задачи выполняются одновременно на CPU-ядрах, нескольких процессорах или ускорителях GPU/TPU.
Параллелизм бывает по задачам и по данным (одна операция над разными блоками), а также на уровне инструкций (конвейеризация, суперскалярность) и битов. Обмен данными чаще происходит через общую память и локальный IPC, поэтому задержки ниже.
Распределенные вычисления делят в свою очередь работу между автономными узлами по сети. Данные передают сообщениями или через RPC, координация сложнее, зато масштабирование обычно проще: добавил узлы - выросли вычисления и хранилище. Часто закладывают отказоустойчивость: репликация, резервирование, обнаружение ошибок.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤6👍4
Для JetBrains IDE вообще есть нормальный AI без проблем в РФ?
Периодически в @spring_aio_chat и на Хабре прилетают вопросы про то, какие сейчас есть варианты использования ИИ внутри IDE.
Один из вариантов – Kodacode.
Работает:
— в OpenIDE и JetBrains IDE
— в VS Code
— и даже в CLI
Что кажется наиболее полезным:
— агентный режим: без него от ИИ-помощника смысла не так много
— доступ к разным моделям: GLM, Gemini, DeepSeek, и другие
— работает без танцев с VPN и оплатами: у многих это сейчас главный стоп-фактор для AI-инструментов
— есть бесплатная модель: хватает для повседневных задач
📚 Подробнее про Koda для JetBrains IDE читайте на Хабр: https://habr.com/ru/companies/koda/articles/986976/
Периодически в @spring_aio_chat и на Хабре прилетают вопросы про то, какие сейчас есть варианты использования ИИ внутри IDE.
Один из вариантов – Kodacode.
Работает:
— в OpenIDE и JetBrains IDE
— в VS Code
— и даже в CLI
Что кажется наиболее полезным:
— агентный режим: без него от ИИ-помощника смысла не так много
— доступ к разным моделям: GLM, Gemini, DeepSeek, и другие
— работает без танцев с VPN и оплатами: у многих это сейчас главный стоп-фактор для AI-инструментов
— есть бесплатная модель: хватает для повседневных задач
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍10🔥7⚡1
Наконец-то работа с PEM в Java становится похожа на API, а не на набор ручного парсинга, Base64 и странных телодвижений.
Справка:
Раньше с PEM работали так:
String pem = "-----BEGIN PUBLIC KEY-----\n"
+ Base64.getMimeEncoder(64, "\n".getBytes())
.encodeToString(publicKey.getEncoded())
+ "\n-----END PUBLIC KEY-----";
А в обратную сторону, но уже с ручной нормализацией PEM, Base64-декодированием и
KeyFactory:
String normalized = pem
.replace("-----BEGIN PUBLIC KEY-----", "")
.replace("-----END PUBLIC KEY-----", "")
.replaceAll("\\s", "");
byte[] der = Base64.getDecoder().decode(normalized);
PublicKey key = KeyFactory.getInstance("EC")
.generatePublic(new X509EncodedKeySpec(der));
По факту PEM в Java долгое время был не отдельным API, а набором низкоуровневых шагов, которые разработчик собирал руками.
А теперь это выглядит так:
var encoder = PEMEncoder.of();
String pem = encoder.encodeToString(keyPair);
var decoder = PEMDecoder.of();
KeyPair decoded = decoder.decode(pem, KeyPair.class);
То есть ключевую пару можно закодировать в PEM и декодировать обратно буквально в несколько строк.
Во втором preview:
—
PEMRecord переименовали в PEM— добавили
decode()— расширили поддержку
KeyPair и PKCS8EncodedKeySpec— упростили шифрование через
EncryptedPrivateKeyInfoА так, как все это дело еще в preview, не забываем использовать
--enable-preview.Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥12❤6