Верхняя полка📝
335 subscribers
160 photos
5 videos
3 files
77 links
Путёвые заметки программного инженера, атлета-любителя, отца, домохозяина.

Автор: Владимир @Toparvion Плизга

Домашняя страница: https://toparvion.pro/
Download Telegram
Коротко о жизни в сибирском городе.

#пятница #хиханьки
😁21😢1
Forwarded from SnowOne-канал
Всем привет!

Соскучились? Мы – очень! Поэтому держите несколько долгожданных новостей о SnowOne ❄️

– Следующий SnowOne пройдет 28 февраля - 1 марта 2025 года. Место проведения: Новосибирский Академпарк;
– В программе: студенческий и основной дни, как было в последние годы;
– В студенческий день будет 4 доклада, в основной – 15 (на 3-ех треках);

– У нас новые партнеры по организации конференции, уверены, что с ними получится сделать SnowOne больше и краше;
– У нас новый сайт! Смотрите, какой: https://snowone.ru (мы его еще чуть доделываем, если видите косяки, сообщайте, пожалуйста, все поправим);



Очень скоро мы начнем анонсировать первых спикеров, но уже сейчас можно сделать следующее:

1) Подать заявку на доклад через нашу форму cfp;
2) Купить blind bird билеты! Сейчас они продаются по самой низкой цене (логично, программы ведь еще нет), с декабря начнут дорожать.



С нетерпением ждем февраля и напряженно работаем над программой!

Искренне ваши,
Команда SnowOne ⛄️
🔥2
Вчерась открыл лыжный сезон на стадионе НГУ. Собрался на тренировку like a pro: взял две перчатки... от разных пар... и обе левые 🤦🏼‍♂️

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

И вот только теперь я понял, что небезызвестная советская песня на самом деле была о подстерегающей лыжников опасности☝🏼

#пятница #спорт #хиханьки
🤣5
На этой неделе завершил 2ой этап и провёл внутреннее демо по крупной фиче, над которой работаю в последнее время. В двух словах, это подсистема визуализации и трассировки исполнения выражений на встроенном языке нашей low-code платформы 🛰

Поскольку фронтовая часть фичи вообще не готова, а визуализировать деревья разбора уже как-то надо, пришлось искать обходные пути. Решением внезапно стал GraphViz – древний, как мамонт, инструмент визуализации графовых структур, для которого, к счастью, создано немало удобных онлайн-рендереров 🖼

Оказалось, что его язык DOT полагается на то же представление узлов и ребёр, что и в моём будущем фронтовом графе – два линейных списка. Кроме того, сам синтаксис языка оказался настолько прост, что его можно поддержать без всяких сторонних библиотек. Вот пример для дерева выражения 1+2:

digraph G {
node [fontname=Monospace style=filled];
0[fillcolor=lightskyblue1 label="Add\n +"]
1[fillcolor=lightsteelblue3 label="LongConst\n 1"]
2[fillcolor=lightsteelblue3 label="LongConst\n 2"]
0->1
0->2
}


Такие тексты я генерировал обычным StringBuilder’ом прямо из unit-тестов, а для отрисовки использовал Devtools/Daily (пример на картинке), хотя в сети есть немало других рисовалок 🖌

Словом, теперь, если вновь понадобится экспортировать какой-либо граф из кода и быстро его отрисовать, буду использовать GraphViz (dot). И вам рекомендую 🙂

#инструменты
🔥2
Автор сих строк имел сознательную неосторожность (опять) вписаться в новую авантюру — на сей раз в пилотный запуск внутреннего бизнес-акселератора Новосибирского Академпарка (в качестве участника). Там я попытаюсь вдохнуть больше жизни в мой любимый проект StegoText, с которым уже проходил акселератор А:Старт весной 2023 года и которому, кстати, посвятил отдельный маленький, но гордый канал 🦅

Это будет значить, что моя и без того не особо прохладная жизнь на ближайшие месяцы уплотнится новыми (в основном, непривычными) активностями по несколько часов в неделю, которые ещё нужно будет где-то взять🙈 С другой стороны, текущий канал сможет пополняться новыми путевыми заметками не только о разработке ПО, но и о том, как она (не) превращается в бизнес 💼

Вероятно, мне предстоит непростой период. Я постараюсь взять из него лучшее. «Дорогу осилит идущий
🎉2
Любопытный и показательный случай с участием ChatGPT приключился сегодня на работе 👇

Коллега попросил нейросеть написать ему кусочек кода по работе с самоподписанным SSL-сертификатом с применением библиотеки Bouncy Castle. Этот сверхразум в свойственной себе манере выдал весьма правдоподобный шмат кода с комментариями, который, конечно же, гладко вставился в приложение и без проблем скомпилировался. Просто чудо! 🪄

И только в runtime вдруг всё развалилось, да ещё как — Java начала ругаться, что у нас в каком-то из пакетов Bouncy Castle якобы не сходится цифровая подпись, поэтому она отказывается грузить оттуда классы... Какая подпись? Откуда? Что происходит? 🧐

(здесь должна быть красочная вставка про то, как мы полтора часа мудохались с Gradle в попытках выяснить, откуда в classpath могли приехать классы с разными подписями)

... после чего выяснилось, что один из использованных ChatGPT классов присутствует только в старом артефакте Bouncy Castle bcprov-jdk14, хотя весь остальной код должен был работать с более новым (и используемым в проекте) артефактом bcprov-jdk15. По-хорошему, такая подстава не должна была даже скомпилироваться, но злую шутку с нами сыграла одна из сторонних библиотек для работы с PDF — среди транзитивных зависимостей она притащила тот самый bcprov-jdk14, который не использовался до сего дня. А поскольку все артефакты Bouncy Castle имеют встроенную подпись, попытка смешать классы разных модификаций в одном runtime classpath привели к конфликту, и всё развалилось 🤹

Здесь сошлось немало обстоятельств: и мутная схема артефактов BC, и мешанина в зависимостях проекта, и замыленность взглядов разработчиков. Но не малую роль сыграла и доселе не замеченная в подставах нейросеть, которая вдруг выдала ересь под видом рабочего кода. Кажется, вывод прост: на "разум" надейся, а сам не плошай 🧠

#бывает
👍2
В недавно вышедшей версии IntelliJ #IDEA 2024.3 (Ultimate) замечено прикольное нововведение: отныне отладчик умеет "склеивать" стектрейсы асинхронных задач не только на точках останова, но и прямо в runtime при выбрасывании исключений.
Глядите (вторая строчка сверху):
...
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger)
at java.base/java.util.concurrent.FutureTask.<init>(FutureTask.java:132)
at java.base/java.util.concurrent.AbstractExecutorService.newTaskFor(AbstractExecutorService.java:113)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:144)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
...

Любопытно, что я заметил эту фичу на обычном (боевом) запуске своего приложения, хотя в release notes сказано, что:
This enhancement is enabled by default for tests.

🤷

Для понимания: эту магию обеспечивает специальный Java-агент, которого IDEA подтыкает к приложению при запуске JVM. Это можно увидеть в панели с логами (Debug > Console), если щелчком развернуть самую первую (длинную) строчку:
… -javaagent:/snap/intellij-idea-ultimate/548/plugins/java/lib/rt/debugger-agent.jar=file:/tmp/capture.props …

Отключить его можно через настройки: Build, Execution, Deployment > Debugger > Async Stack Traces 🕹
🔥1
Не отношу себя к противникам применения #ИИ в разработке, но примеры последних дней почему-то сплошь негативные. Про один писал в понедельник, а сегодня возник другой 👇

Для коллеги-инженера нужно было написать нечто вроде скрипта на Java, чтобы генерировать SSTables с заданным контентом для последующей массовой загрузки в Cassandra (это будет основа нагрузочного теста) 🧱

Ну, думаю, раз задача попутная, вникать не буду, попрошу ChatGPT мне весь код сгенерить. Она выдала правдоподобный проектик, в зависимостях которого зачем-то присутствовал драйвер (клиент) к Cassandra, хотя в коде обращений к нему не было, и, по идее, быть не должно. На мой вопрос “На фиг ты это сделала?”, нейросеть честно призналась:

You're absolutely correct—there's no direct usage of `cassandra-driver-core-<version>.jar` in the provided code. My mention of that artifact in the prerequisites was unnecessary and incorrect for this specific case. Let me clarify:

(несколько пунктов, про которые надо было подумать раньше)

Thank you for pointing this out, and I appreciate your attention to detail! Let me know if you have further questions.


Ну, думаю, ладно. Лишняя зависимость – плохо, но не страшно; замнём 👌🏼

Однако дальше веселее… Сгенерённый код успешно скомпилировался, запустился и выдал (с виду) ожидаемые файлы. Но последовав предложенной нейросетью инструкции по импорту этих файлов в Cassandra, я получил… ничего. Утилита sstableloader отрабатывала без ошибок, но и данные в БД не попадали 🕳

Дело оказалось в том, что внутри файлов SSTables нет информации о том, к какому keyspace и к какой таблице они относятся. Поэтому утилита sstableloader вынуждена брать их из… имён директорий, в которых лежат файлы. Но добрая ChatGPT сгенерила код, которые кладёт файлы в безликую директорию sstables_output, а потом ещё и снабдила (некорректным) примером её использования:

$ sstableloader -d <Cassandra_host> sstables_output/


И знаете, как я выяснил причину ошибки? По документации, блин! Пришлось проштудировать соответствующую статью, причём включая примеры, потому что эта фишка с директориями была упомянута только там 🔖

Суммарно я потратил на эту микрофичу сильно больше времени, чем планировал, и во многом так получилось из-за этой подставы от ChatGPT (хотя и поведение sstableloader здесь весьма сомнительное). Это конечно не отменяет пользу от нейросетей вообще, но заставляет относиться к ней более трезво и помнить, что такое тоже #бывает 🤷🏻‍♂️
👀1
Forwarded from SnowOne-канал
Всем привет! Мы опубликовали на сайте первых спикеров SnowOne 2025!

Пока без тезисов и названий докладов, т.к. их подготовка идет полным ходом, но скоро добавим и их. Мы (программный комитет) очень рады видеть, что среди спикеров у нас есть, как ветераны, так и докладчики, выступающие на SnowOne впервые.

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

Оставайтесь с нами, чтобы следить за следующими апдейтами по спикерам и новостями вообще :)
👍1
Напоминаю, что на границе зимы и весны 2025 пройдёт уже 6-я (по счёту) сибирская Java-конференция #SnowOne, в программном комитете которой я состою ❄️

Мы уже вовсю работаем над программой, и сегодня вышел анонс первой партии спикеров. Если вы знаете хотя бы часть этих людей, то уже наверняка предполагаете, что программа будет мощной. Спойлер: да, это так😎
🔥4❤‍🔥2
В продолжение тем про #ИИ и конференции — вчера Сергей Задорожный (IT Friday), с которым мы пересекались на конференциях, выпустил вторую часть своего большого обзора на State of DevOps — ежегодное обстоятельное исследование состояния IT-индустрии со стороны DevOps👨‍💻

Вся вторая часть посвящена применению AI, что не удивительно. Однако помимо ожидаемого хайпа, в исследовании прослеживается и любопытный скепсис многих его участников, особенно в части будущего развития событий на средней перспективе (от 3 лёт и более). Есть над чем подумать🤔
5🔥3❤‍🔥2🎉1
Forwarded from StegoTrend 📈
В связи с тем, что в последние дни работа над проектом ведётся не столько в виде Java-кода, сколько в виде таблиц и интеллект-карт (mind maps), хочу снова немного рассказать про #инструменты, на сей раз для mind-mapping🧠

Я запал на этот подход больше десяти лет назад, и на первых порах вообще все свои заметки и наработки оформлял в mind maps ("Когда в руках молоток, всё вокруг кажется гвоздями" — всё так, всё так). Но когда конфетно-букетный период прошёл, остались два кейса, в которых интеллект-карты по-прежнему хорошо себя проявляли:
● когда выражаемая информация имеет явную иерархичность (например, если много вложенных пунктов);
● когда вообще не понятно, чем визуализировать имеющуюся в голове кашу, и надо начать хоть с чего-то (например, при мозгоштурме) 🤯

С тех пор я попробовал разные инструменты, начиная с чисто десктопного FreeMind и заканчивая полностью облачным MindMeister, но (tl;dr;) выбор остановил на XMind ✖️

У этого инструмента непростая история. Созданный в 2000-ых как десктопное кросс-платформенное приложение на Java, через 10 лет он достиг возрастного кризиса — стал монструозным, медленным, бажным, хоть и невероятно мощным и гибким. Но главное — мир уже вовсю переходил в веб, а инструменту на Java путь туда был заказан. Видимо, поэтому разработчики приняли тяжёлое, но единственно верное решение — "НаФигВсёПереписать!", причём на JavaScript. Первая версия на новом движке казалась полным провалом: функционал очень сильно обеднел, интерфейс стал примитивным, баги не исчезли, а сменились другими (стектрейсы стали JS-ными). Но время шло, и работа продолжалась. Около 3 лет (!) ушло на полное возрождение продукта. Но это время показало, насколько стратегически правильным был этот путь — благодаря ему, XMind сегодня обладает практически всеми необходимыми функциями по работе с mind-картами, да ещё несколькими уникальными, например, предоставляет анимированную презентацию, поддерживает совместную работы онлайн, а также помогает креативить в т.н. режиме дзена (zen mode) 🧘

Я использую его бесплатную версию, которой, в целом, хватает, хотя с каждым релизом появляются всё новые и новые фичи, вкусность которых подмывает задуматься о покупке. Возможно, скоро "созрею" 💰

А пока, если вдруг вы ещё не используете такие инструменты или хотите попробовать новый, рекомендую пощупать XMind. Другие варианты и их сравнение можно посмотреть здесь 👀
🔥2
Это был сложный уикенд… для правой коленки 🦵🏼

Вчера впервые участвовал в плавательном спринте – 50 м вольным стилем в бассейне НГУ в рамках спортивного фестиваля. Вообще, я тихоход, и мне эти короткие взрывные отрезки даются плохо. Но решил попробовать. Сюрприза не случилось: мало того, что ещё на разминке умудрился до крови поцарапать колено о шершавый кафель бортика, так ещё и в самом заплыве накосячил почти в каждом элементе: от прыжка с тумбы до расклада сил по дистанции. Результат весьма посредственный, хоть и не последний – 38 секунд. Впрочем, это не удивительно, если учесть, что со мной в одном заплыве (6 человек) был кандидат в мастера спорта по плаванию. Он и приплыл первым. Случайность, я знаю 🤓

А сегодня выступил на Открытии лыжного сезона ИЯФ – лыжной гонке свободным стилем на 6 км. Это, конечно, уже не спринт, но сценарий оказался тем же – ещё на разминке (ну вы поняли) съезжал с первого спуска, заметил там остановившегося мальчишку и, чтобы не врезаться в него, вильнул вправо, однако скорость была высокой (а техника катания хреновой, что уж там), меня увело с лыжни в лес, где я ещё несколько метров пытался удержаться на ходу, но потом всё же стал заваливаться и в падении здорово треснулся тем же правым коленом об какой-то пень. Первым делом осмотрел экипировку (нынче сломать лыжи и ноги стоит сопоставимо), всё цело, поэтому несмотря на гул в колене поехал дальше. Следующим промахом оказалось решение бежать в стартовом костюме (считай, в одном термобелье) – при сегодняшних -12℃ шустрое катание с ветерком заставляло позвякивать практически всё. Но я добежал, пусть и снова со скромным результатом: 21 мин 14 сек, 48-ой из 66 лыжников 🎿

И вот я пишу эти строки всё ещё покалывающими от переохлаждения пальцами и стараюсь лишний раз не шевелить едва гнущимся и болящим коленом. Жалею ли о том, что вписался? Ни чуть. Сделал ли выводы на будущее? Определённо 📌

Зато после таких приключений очень приятно возвращаться к работе: вдруг понимаешь, как это здорово – делать что-то интересное и при этом не тонуть, не мёрзнуть, не задыхаться 🤪

#спорт
4👍4🔥1
Фонд "Сколково" совместно с аналитическим агентством TAdviser на прошлой неделе опубликовали результаты исследования российского рынка MES-систем. Кто не в курсе, это софт, отвечающий за распределение ресурсов и планирование задач на производственных предприятиях, т.е. весьма важный компонент промышленности 👨🏼‍🏭

Согласно исследованию, в топе по основным характеристикам оказалась платформа AggreGate, над ядром которой трудится автор сих строк. Это как узнавать о красотах города, работая в одном из его подвалов — мелочь, а приятно🙃

Фактическую функциональность MES обеспечиваем не мы (джависты), а low-code инженеры, которые создают на нашей платформе приложения под конкретные нужды бизнеса. Так, например, на внутреннем митапе в прошлую пятницу один из инженеров рассказывал, как изучал научные статьи и по ним реализовал т.н. генетический алгоритм для составления оптимального расписания работ на сложном производстве 🧬

В какой-то из тех моментов мне показалось, что разбираться с медленным чтением из Cassandra не так уж сложно🤓
🔥3❤‍🔥2👾1
Оказываю услуги задвижения сайтов в поисковых системах.

Нет, не опечатка.

#хиханьки
😁5
Любопытная "фича" вошла в состав недавнего релиза langchain4j¹ — из ядра фреймворка выпилили Lombok. На резонный вопрос одного из пользователей "А чё?" разработчик ответил лишь одной фразой:
apparently it makes it harder to debug code

И конечно, за этим изменением потянулся длинный хвост аналогичных правок во всех зависимых модулях 🐿

Применение Lombok в конечных продуктах — не редкость; не даром его поддержку перенесли из внешнего плагина внутрь Intellij IDEA. Однако в библиотеках Lombok встречается куда реже, и это понятно: если втянуть такую библиотеку в проект без Lombok, то её исходники будут выглядеть невалидными, а отладка и вовсе станет невозможной. В этом смысле решение авторов langchain4j выглядит вполне мудрым: ускорили себе разработку на первых порах, теперь надо и пользователях позаботиться 👴

Но почему-то такая практика встречается крайне редко. Например, TestContainers плотно сидят на Lombok, притом на его экспериментальных фичах, и, насколько я знаю, слезать не собираются. Молодцы ли? Вопрос открытый🤔


¹ На langchain4j работает утилита heap-talk, о которой я рассказывал недавно на конференции Joker.
This media is not supported in your browser
VIEW IN TELEGRAM
Если вдруг вы не знали или забыли, в #IDEA есть возможность посмотреть фактический тип любого выражения на Java и Kotlin — достаточно выделить его целиком (или произвольный кусочек) и нажать Ctrl+Shift+P (при умолчательном keymap на Windows/Linux) ⌨️

Это может быть полезным не только для анализа длинных цепочек вызовов (которые мы стараемся не писать, да же?), но и для арифметических операций со множеством преобразований типов (которые мы и так помним, да же?) 😉
👍4
Для тех, кто пропустил мой недавний доклад на конференции Joker, но интересуется анализом памяти JVM, есть хорошая новость — запись доклада появилась в общем доступе. Приятного просмотра, и пусть на вашем production эти знания никогда не пригодятся 🙏🏼
3
#видеозаписи

Что делать, если напишут «тут на продакшне внезапная OutOfMemory, разберись по-быстрому», а вам неочевидно, на что смотреть?

Можно будет изобрести машину времени, вернуться в прошлое и спокойно посмотреть этот доклад. А можно не дожидаться, пока гром грянет, и посмотреть уже сейчас.

YouTube | VK Видео

Скачать презентацию с сайта Joker
🔥7