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

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

Домашняя страница: https://toparvion.pro/
Download Telegram
Верхняя полка📝
(И только сейчас я вспомнил, что до сих пор не завёл к этому каналу чат для комментариев и обсуждений🤪 Исправляюсь: https://t.me/+-fd1YFB36ks5ZDky)
Та мутная история со зря потраченными деньгами на виртуальный номер для OpenAI API получила счастливое продолжение — нашлось целых два способа это сделать:
1. В библиотеке langchain4j есть встроенный демо-ключ, который хоть и ограничен по частоте использования, но для прототипирования вполне годится;
2. В России есть сервис ProxyAPI, который умеет проксировать запросы к популярным AI-провайдерам, беря за это небольшую комиссию.

Оба этих пункта помогли мне продвинуться в создании HeapTalk — утилиты (точнее, её прототипа) для "общения" с дампами памяти JVM на человеческом языке: https://toparvion.pro/project/heap-talk/ 💬

Вкратце идея утилиты в том, что пользователь берёт дамп памяти (для примера: от финансового микросервиса) и формулирует к нему какой-нибудь вопрос обычными словами, например:
Какие мультивалютные аккаунты с ненулевыми остатками были в кэше на момент снятия дампа?

, а утилита при помощи такой-то матери внутренних механизмов и общения с LLM генерирует соответствующий SQL-запрос для исполнения в плагине Eclipse MAT Calcite SQL.

Подробнее можно почитать на странице с описанием проекта. Комментарии, вопросы, лайки приветствуются 👐
1🔥1
📚 Материалы сегодняшнего доклада на конференции Joker выложены на эту страницу: https://toparvion.pro/event/2024/joker/
Для удобства вот прямые ссылки:
Слайды
— Лабораторное приложение
Утилита для генерации SQL запросов с помощью ChatGPT
🔥5❤‍🔥11
Верхняя полка📝 pinned «📚 Материалы сегодняшнего доклада на конференции Joker выложены на эту страницу: https://toparvion.pro/event/2024/joker/ Для удобства вот прямые ссылки: — Слайды — Лабораторное приложение — Утилита для генерации SQL запросов с помощью ChatGPT»
Площадка Design District DAA, на которой нынче проходит конференция Joker, — это бывшие производственные цеха Центрального Конструкторского Бюро Машиностроения (ЦКБМ) — ведущего советского и российского предприятия по созданию агрегатов для атомной энергетики. Само предприятие живо, и до сих пор является единственным в стране производителем главных циркуляционных насосов (ГЦН) для всех типов распространённых российских реакторов ВВЭР ⚛️

А конкретной первый зал (тот, что высотой с десятиэтажный дом, и где я вчера выступал) — это вроде как экспериментальный цех, где отрабатывали загрузку стержней в ядерный реактор. Хотя есть и другие сведения:
С 70-х годов в башне собирали прототипы насосов для охлаждения атомных реакторов. Грандиозный агрегат проектировали в корпусах по соседству, затем собирали отдельные части, а в высотке полностью монтировали и тестировали. После этого прототип разбирали и отправляли на серийное производство в качестве наглядного образца. Сами сотрудники ласково называли башню телевизором.

А жившие неподалёку петербуржцы за внешний облик этого архитектурного изыска нарекли его Сфинксом 🐈‍⬛

Как бы там ни было, масштаб этого строения поражает. А я как почти потомственный инженер ощущал особую радость и (почему-то) ответственность за выступление именно в таком месте. Впрочем, может, и зря, ведь цена ошибки при анализе хип-дампа в среднем кажется ниже, чем при помещении стержня в реактор ☢️🤓
🔥5👍1
Одна из текущих рабочих задач внезапно обернулась необходимостью создать свой собственный движок электронных таблиц. Да-да, надо по-быстрому запилить свой Google Sheets, ну или хотя бы Excel🤪

К счастью, требования не такие обширные, как к продуктам ИТ-гигантов, да и UI-часть пока за скобками, но модель представления в памяти всё же под вопросом. Понятно, что никакая двумерная коллекция — будь то массив, нагромождение `Map`ов или список списков -- не подойдут, потому что будут крайне неэффективно расходовать память, ведь ячейки могут быть заполнены как попало и разбросаны по большому листу. Вместе с тем нужно уметь работать с диапазонами, поддерживать группировку (слияние) ячеек, поиск/вставку/удаление, т.е. нужна одновременно и гибкая, и производительная, и ресурсо-экономная структура данных для больших таблиц🧩

Сам я склонялся к применению разреженных матриц, но решил поискать альтернативы, и вот что нашлось (в т.ч. коллегами):
— ChatGPT сначала предлагала делать на TreeMap;
— потом всё же прониклась и тоже заговорила про матрицы, например, на библиотеке UJMP;
— мумбайские студенты взвешивают разные варианты, но вроде как приходят к выводу об оптимальности разреженных матриц;
— в исходниках OpenOffice чёрт ногу сломит, но как будто бы и они на том же пути.

Интересно, а есть ли другие подходы? 🤔
🤔3🔥1
Channel photo updated
Верхняя полка📝
Одна из текущих рабочих задач внезапно обернулась необходимостью создать свой собственный движок электронных таблиц. Да-да, надо по-быстрому запилить свой Google Sheets, ну или хотя бы Excel🤪 К счастью, требования не такие обширные, как к продуктам ИТ-гигантов…
В дополнение к перечисленным выше пунктам мой коллега Денис нашёл очень любопытный проект Kenkai — полноценный (с виду) аналог Excel, реализованный полностью на Java, да ещё с веб-интерфейсом (вот демо). А самое приятное, что бОльшая часть проекта выложена в open source: https://github.com/keikai/keikai 🎁

Я бегло пробежался по исходникам проекта и отметил несколько любопытных фактов:
— в основе модели данных лежит разреженная коллекция на основе т.н. "пулов индексов": по сути обёрток над TreeMap (похоже, отвечавшая мне ChatGPT училась как раз на их коде);
класс диапазонов ячеек умеет не только описывать свои координаты, но и определять отношения с другими: пересечение, содержание и т.п.
— для ещё пока не заполненных ячеек введено понятие прокси — легковесной прослойки, которая не содержит собственных данных и потому весит почти ничего, но при этом способна "переключаться" на полноценную ячейку с данными, как только она появится. Вероятно, этот финт нужен для вычисления формул, ведь он позволяет не перестраивать граф зависимостей, когда доселе пустая ячейка вдруг становится заполненной 🦪

Полагаю, это лишь капля всех полезностей, которые можно почерпнуть из проекта этих тайваньских ребят. Свою архитектуру таблиц мы ещё на 100% не прорисовали, но точно будем делать это с оглядкой на их опыт 👀
🔥4
Представьте себе: остывший осенний лес, голые деревья, пожухлая трава, воскресенье, утро, 11-ый час непрерывного дождя и второй получас беговой тренировки. Вокруг никого. Глаз привыкает к такой картине, и она начинает казаться равномерной, предсказуемой, привычной.

Тропинка делает очередной поворот, а там... вот👆🏼

Почему в лесу? Откуда столько? А чё, никому не надо?
Теряюсь в догадках. Ваши версии?
❤‍🔥3😱2👀2
Собираюсь когда-нибудь сделать развлекательно-познавательный доклад на тему "Профессиональные деформации программистов" — про особенности поведения и речи, по которым нас с вами можно легко вычислить без знакомства и вне работы 👨‍💻

Типичный пример — на картинке ☝️

Накидывайте свои примеры в подобном духе (можно не про себя), и я с удовольствием включу их в материалы для подготовки доклада (с указанием автора, если нужно) 📚
😁63🔥3
Пришло время проанализировать результаты моего недавнего доклада на конференции Joker. Благо, личный кабинет докладчика у ребят из JUGRu Group предоставляет для этого немало данных 📊

В том прохладном зале бесконечной высоты нас с вами было 377 человек (без учёта технической команды). И ещё около ста смотрели доклад в прямом эфире, обеспечив докладу 469 слушателей в пике. При этом уникальных участников получилось без малого 602. Для сравнения: в 2019-ом на JPoint в Москве схожий показатель моего доклада составил 660 ⚖️

Глубина просмотра (доля посмотревших полностью) среди этих шести сотен составила 82% — показатель, который я затрудняюсь адекватно оценить. Чуть более ясным выглядит суммарное время просмотра доклада (включая запись) — 25 тыс.мин. или почти 17,5 суток. Эта абсолютная цифра не особа полезна, а вот её производная по времени, особенно после открытия свободного доступа к записи, будет весьма любопытной 📺

Но самое важное — это, конечно же, обратная связь. И здесь я в первую очередь говорю вам "Спасибо!" за то, что оставляете её 🙏🏼

По результатам 133 оценок доклад получил рейтинг 4,5/5. Вроде неплохо, но есть куда расти. Я хотел понять, где эти "точки роста", но, увы, комментариев к оценкам ниже "отлично" практически не оказалось. Предполагаю, что такие оценки ставились не за явные проблемы в докладе, а за его "лайтовость" — всё-таки в аудитории Joker'а много опытных инженеров, для которых в докладе было мало (или ничего) нового 🥷🏻

Если у вас есть другие инсайты или соображения на этот счёт, поделитесь ими, пожалуйста — они помогут лучше готовиться к следующим выступлениям 🎙
🔥91❤‍🔥1🙏1
Когда и если вам потребуется надёжный способ прощупать окружающее "железо" из приложения на JVM, знайте, что для этого есть замечательная библиотечка OSHI (Operating System and Hardware Information) 🔬

Будучи написанной на Java c вкраплениями JNA (Java Native Access), она неплохо справляется с доступом к самому низкому уровню на большинстве распространённых платформ, в том числе в контейнерах. Причём, что любопытно, при запуске в контейнере она иногда может получить даже больше информации, чем вне его, потому что сам движок Docker, как правило, запущен из-под root'а, что даёт доступ к большему числу системных свойств, чем доступно процессу рядового пользователя 👮

Кто хочет проверить у себя, можно взять мой тестовый Docker-образ, который собирает доступные сведения о машине и выводит в консоль:
docker run --rm toparvion/oshi-test


#инструменты
2👍2
Коротко о жизни в сибирском городе.

#пятница #хиханьки
😁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