TGViewer
Channel Public Channel
Верхняя полка📝

Верхняя полка📝

@stopshelf

Путевые заметки программного инженера и легкоатлета-любителя.

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

Домашняя страница: https://toparvion.pro/
Subscribers
358
Photos
351
Videos
11
Links
165

Showing posts older than #327 · Back to latest

Older Posts 12 shown
Post #326 412
Вот теперь с Наступившим! 🎉 🎄 🎁

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

К счастью, это занятие надоело раньше, и вот я снова на связи. Надеюсь, и вы отметили хорошо! 🙏🏻

Чтобы всё же принести хоть какую-то пользу этой заметкой, поделюсь с вами инструментом, который здорово выручил меня при подготовке семейной презентации. Поскольку почти все мои родственники живут в разных местах, мне давно хотелось как-то визуализировать их места пребывания на карте. Я уже совершал несколько подступов к этому снаряду в прошлые годы (в основном, через сервсиы Google), но успехом они ни разу ни разу не увенчались: получалось то сложно, то стрёмно, то 2-в-1 🪣

На сей раз с помощью DeepSeek я набрёл на бесплатный сервис MapChart, который как раз позволяет рисовать географические карты, кастомизированные под многие специфичные нужды. Основной порядок работы с ним довольно прост:
1. Выбираете базовую карту, например, весь мир, Европу, отдельную страну или несколько.
2. Разукрашиваете мышкой интересные вам регионы: целые страны, штаты/субъекты или их комбинации.
3. Экспортируете в картинку и используете на своё усмотрение 🗺

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

Из любопытного: среди базовых сервис предлагает карты фантастических, в том числе игровых миров и возможность строить свои карты альтернативных сценариев истории: https://www.mapchart.net/wargames.html
Только если залипнете, чур не жаловаться, что это я показал🤭
  • 🔥 6
  • ❤ 3
Post #319 520
В последние несколько лет крайняя тренировка года в бассейне проходит для нашего любительского спортивного клуба в виде какого-нибудь упахательного заплыва, например, 50 раз по 100 м вольным стилем в режиме 2 минуты на каждый отрезок, или 5 раз по 1000 м кролем в разной экипировке — словом, освобождаем место под оливье как можем 🥣

Но в этот раз, заговорив о планах на конец года, мы вдруг вспомнили, что почему-то давно не играли в водное поло, и сошлись на том, что было бы здорово завершить плавательный год, устроив это дружеское рубилово развлечение 🤽‍♂️

На удивление, нас собралось полноценные 2 команды: по 6 игроков в поле и 1 вратарь. Таймы решили сделать по 5 минут. В начале это казалось как-то несерьёзно (мало), но уже в конце первого тайма в наших покрасневших от воды глазах отчётливо читалось: "Батюшки, неужели это только начало!?" Да, даже для опытных вотерполистов (а среди нас были и такие) с непривычки это месилово мероприятие оказалось весьма трудозатратным 🫠

Не знаю, как остальные, а я где-то к середине игры всё же как-то вработался и несмотря на усердное топилово воздействие со стороны защитников противника таки сумел забить один гол. Правда, ещё две голевых передачи продолбал. Тем не менее, наша команда выиграла со счётом 3:1 🏐

После игры мы всей гурьбой (вместе с болельщиками, коих было чуть ли не столько же, как игроков) плотно заполнили собою небольшую каморку в здании бассейна, полопали мандаринов, поделились впечатлениями и поздравили с Новым Годом тренера, который играл вместе с нами — без него всё это бы не состоялось 🍊

Едва ли такое мочилово занятие можно рекомендовать всем подряд в качестве популярного вида спорта, но если вдруг обычное плавание вам кажется скучным, однообразным и/или недостаточно динамичным, обратите внимание на водное поло. Наверняка вам очень (не) захочется в этом поучаствовать🤪

#спорт
  • 🔥 18
  • 👍 1
  • 🙈 1
Post #318 411
Я тут периодически упоминаю, что тружусь над отечественной интеграционной low-code платформой #AggreGate, но мало кто понимает, что это за штука и какие задачи она решает 🏺

А на днях коллега-тимлид развлекался с новым ИИ-сервисом от Google под названием NotebookLM и скормил ему документацию на нашу платформу, чтобы посмотреть, что тот сможет по ней выдать. Помимо стандартного "chat with your docs", сервис предложил сгенерировать ознакомительный видеоролик-презентацию о продукте. Коллега согласился, и вот что из этого вышло ☝️

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

В общем, кому интересно, на чем сегодня строится цифровизация промышленности в России (да и не только, на самом деле), уделите 7 минут этому видео. А если вдруг захочется узнать больше, можно продолжить здесь: https://aggregate.digital/ru/ (видосик там тоже есть, но уже рукотворный 🎬 )
  • 🔥 4
  • 👍 2
  • ❤ 1
Post #317 433
(спасибо всем проголосовавшим выше🤝)

И ещё разок про AI, но не в Java 🐍

На одном из сопутствующих проектов довелось поработать с облачным хостингом Render.com, куда мы деплоим приложение, почти целиком разрабатываемое в Cursor IDE (навайбокодили, да). Заметив на главной странице хостинга баннер про появившийся у них MCP-сервер, я из любопытства на него тыкнул, хотя даже не понимал, зачем облачной платформе нужна такая приблуда 🛠

Оказалось (ожидаемо), что она позволяет мониторить и управлять деплоем через команды на человеческом языке прямо из среды общения с ИИ, т.е. в нашем случае из Cursor. Это позволило, кроме прочего, в буквально смысле писать такой промпт:
Там на проде че-то упало. Сходи посмотри логи да пофикси

, и он (агент) это делает — см. скриншот. Чудесато! 💫

Правда, есть и обратная сторона — косячить в коде агент от этого меньше не стал. Но если раньше ручное копирование логов в промпт как-то заставляло также вручную проверять все правки локально, то теперь возможность показать агенту проблему прямо на проде очень сильно подмывает и проверить её фикс там же — ведь нужно только закоммитить, дальше всё само. А поскольку фиксы нередко кривые, то и прод стал частенько оказываться "отрицательно доступен" (© наш DevOps). Благо, что проект пока игрушечный, и никого это не аффектит🫠

Вкупе с тем, что и сообщения для коммитов теперь генерит агент, участие человека кажется всё менее значимым — написать промпт, прожать OK на ревью, клацнуть Commit & Push. Всё это мог быть делать ИИ. Но пока он так отчаянно косячит и генерит порой правдоподобную чушь, за роль кожаного мешка перед экраном можно не беспокоиться ☺️
  • 👍 6
  • 🕊 1
  • 🙈 1
Post #316 438
  • 👌 1
Post #315 443

Forwarded from SnowOne-канал

Всем привет!

До конца года остается чуть меньше двух недель, а мы к вам уже с подарками 🎁

Во-первых, мы опубликовали новых прекрасных спикеров на сайт. Во-вторых, теперь это не просто имена, а темы и тезисы докладов!

Давайте посмотрим, что уже есть в программе SnowOne 2026:

1) Секция "Enterprise":

‒ Сергей Петрелевич расскажет о NIO, как одним потоком обработать множество сетевых запросов;
‒ Антон Курако приведет глубокий анализ производительности аспектов в Spring;
‒ Александр Токарев представит продолжение своего доклада про дебаггинг в Java, где покажет, как отлаживать многопоточный, автогенеренный и нативный код;

2) Секция Хардкор:

‒ Александр Ланцов будет сравнивать алгоритмы GC (включая новейшие) в Java и Go, чтобы разобраться, чем они отличаются и какой лучше подходит для ваших сценариев;
‒ Иван Углянский расскажет о мега-проекте Valhalla и добавлении value классов в Java: зачем это вообще нужно, как повлияет на Java, и как развитие языка помогло реализации рантайма;

3) Секция "Расширение кругозора":

‒ Пётр Портнов покажет, как Java разработчикам пользоваться инструментом Error Prone, чтобы заранее ловить их баги статическим анализом;
‒ Сергей Луговой поделится опытом создания нового языка с JetBrains MPS;
‒ Михаил Пилип расскажет о построении SCADA-системы своими руками, и как ему в этом помог Kotlin.

—

Мы продолжаем работать над программой и конференцией в целом. И уже с нетерпением ждем конца февраля, чтобы встретиться на ней с вами ☺️

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

Всех с наступающим! 🎄
  • 🔥 5
Post #314 369
  • 🔥 10
  • 😎 2
Post #313 426
На втором часу общения с ChatGPT о том, почему у меня на Linux после обновления видеодрайвера на фиг отвалились все сетевые устройства 🥴
  • 🤣 14
  • 💯 1
Post #310 532
Кастомные JFR события в дикой природе 🦒

На моем тренинге по #JFR мы с участниками, кроме прочего, учимся делать собственные JFR события, чтобы эммитить их прямо из бизнес-логики, а потом анализировать так же, как встроенные события JVM. И хотя я стараюсь объяснять, зачем это надо, в воздухе нередко остаётся висеть незаданный вопрос участников: "А зачем бы я применил(а) это у себя в проекте?" 🧐

Делюсь свежим примером из своей практики 👇

Когда-то я рассказывал вам, что мы пилим свой условный аналог Excel на платформе AggreGate. Сейчас на этом решении наш партнёр реализует огромный проект для заказчика, и движок вычислений там используется в полный рост, потому что хотелки у заказчика тоже не слабые:
— десятки больших таблиц
— сотни тысяч ячеек в них
— ≈280К узлов в графе связей между ячейками разных таблиц 🕸

Ну и конечно же на этом фоне к нам в JIRA стали периодически поступать тикеты с интригующими заголовками в духе: "У нас где-то что-то когда-то почему-то не посчиталось/не обновилось/не сбросилось, но мы не поняли, где, когда и почему. Разбирайтесь😘"

Как вы наверняка догадываетесь, логировать вычисления в таких масштабах, а потом купаться в этих логах (или выгружать их в какой-то парсер-анализатор) — затея трудоёмкая и малоперспективная. Но видеть ход вычислений в точности до ячеек всё же надо. То есть нужен максимально простой, дешевый (с т.з. overhead'а) и пригодный для анализа результатов способ как-то фиксировать вычисления ✍️

И тут я снова вспомнил про кастомные события JFR, ведь у них очень простой, но при этом гибкий API, они весьма дешевы в эмиссии и хранении, а их анализ в Java Mission Control хоть и не так мощен, как какой-нибудь Logstash+Kibana, но всё же на порядок удобнее, чем с логами 🧶

Я завёл класс с описанием вычисления (см. скриншот 1) и стал эмитить с ним JFR события в двух местах:
— при инициации вычислений (на пользовательском вводе или открытии готовой таблицы)
— и при обновлении по слушателю (когда пересчёт одной ячейки аффектит другую).
Это позволило регистрировать 100% вычислений 💯

Зная масштабы проекта, я опасался, что JFR записи будут огромными и с ними будет тяжело работать, поэтому воспользовался фичей JFR API по добавлению кастомных настроек — поддержал фильтрацию регистрируемых вычислений по диапазону ячеек в обычной нотации Excel, например, sheet_a!B5:F16 (скриншот 2). Но моему к приятному удивлению, это оказалось лишним: недавно коллеги по запарке оставили JFR-запись включенной без этого фильтра на 21 час, и в неё набежало 303 000 событий, а получившийся JFR файл весил 105 МБ. При этом он без труда открылся в JMC, а работать с ним было также легко, как и с маленьким (скриншот 3) 🌿

Любопытно, что изначально я планировал управлять этой диагностикой через утилиту jattach, но в закрытый контур заказчика втащить даже безобидную jattach оказалось нельзя (небезопасно типа). Тогда мне пришлось извернуться и написать на платформенном low-code-языке функции, которые через JFR API дёргают методы запуска/останова записи, да еще и конфигурируют нужные события. Как ни странно, функции получились довольно компактными и сработали чётко, а в качестве бонуса их вызов удалось вывести прямо в UI-интерфейс платформы для удобства администраторов 👷🏼

Теперь мы этим активно пользуемся, и когда приносят очередную задачу по проблеме вычислений, знаем, с чего начинать анализ 🕵️‍♂️

Конечно, сама по себе диагностика на JFR-событиях сложные/редкие/заковыристые проблемы не решает. Но она прокладывает очень важный и довольно длинный кусочек мостика между "Черт возьми, что здесь вообще происходит!?" и статусом тикета "Resolved (Fixed)" ✅
  • 👍 9
  • 🔥 1
Post #308 428
Сегодняшнее рабочее утро началось с необходимости повторной аутентификации в Telegram на всех устройствах, причем где-то двух-факторной, а где-то и трёх (даже не знал, что здесь такое бывает)🥴

Вторым неприятным сюрпризом оказалась заморозка аккаунта моего Telegram-бота для поиска своих фотографий в больших альбомах (про него здесь был отдельный пост). При этом ни @SpamBot, ни @BotFather ничего о заморозке не сообщают, равно как и не было сервисных уведомлений от самого Telegram 🤷‍♂️

Поэтому в качестве оперативной меры бот перезапущен под новым ником: @FramePhotoAlbumBot 🤖

Если кто-то в курсе, что происходит, расскажите, пожалуйста 👀
Telegram Верхняя полка📝 Давно обещал рассказать вам об очередной программной поделке, идеей которой загорелся ещё в конце прошлого года — Telegram-бот для поиска своих фоток в больших открытых альбомах 👨‍💻 Мотивация проста: — я часто участвую в массовых мероприятиях, где работают…
  • 🤔 8
  • 😱 2
Post #307 474
Рубрика "Век живи, век учись" 🎓

Не первый год работаю на #Linux, но когда нужно вызвать недавнюю команду в консоли, по привычке либо тыкаю стрелку вверх, пока команда не появится, либо пишу что-то типа history | grep <что-то>. А тут на днях случайно нажал в консоли Ctrl+R (думал, что нахожусь в браузере) и увидел странное сообщение reverse-i-search. Стал гуглить, что это такое, и ахнул 🤩

Оказывается, это режим, в котором можно начать писать что угодно, и он будет выводить команды из истории, в которых содержался вводимый текст. Листать варианты можно как в обратном порядке (тем же Ctrl+R), так и в прямом (Ctrl+S). Когда команда найдена, остается только жмакнуть Tab либо Enter, в зависимости от того, нужно её поправить перед выполнением или нет ▶️

Как выяснилось, это довольно древняя фича, которая есть практически во всех оболочках (bash, zsh и других). Теперь уже не понимаю, как жил без неё раньше🤓
  • 👍 14
  • 🔥 4
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →