Верхняя полка📝
Відкрити в Telegram
Путевые заметки программного инженера и легкоатлета-любителя. Автор: Владимир @Toparvion Плизга Домашняя страница: https://toparvion.pro/
Показати більшеРосія463 040Категорія не вказана
358
Підписники
Немає даних24 години
-37 днів
Немає даних30 днів
Триває завантаження даних...
Схожі канали
Немає даних
Виникли проблеми? Будь ласка, оновіть сторінку або зверніться до нашого support-менеджера.
Хмара тегів
Вхідні та вихідні згадування
---
---
---
---
---
---
Залучення підписників
жовтень '26жовт '26
жовтень '260
в 0 каналах
вересень '26
+5
в 0 каналах
Get PRO
серпень '26
+2
в 0 каналах
Get PRO
липень '26
+4
в 0 каналах
Get PRO
червень '26
+1
в 0 каналах
Get PRO
травень '26
+10
в 1 каналах
Get PRO
квітень '26
+10
в 1 каналах
Get PRO
березень '26
+3
в 0 каналах
Get PRO
лютий '26
+4
в 0 каналах
Get PRO
січень '26
+4
в 0 каналах
Get PRO
грудень '25
+2
в 0 каналах
Get PRO
листопад '25
+15
в 0 каналах
Get PRO
жовтень '25
+212
в 0 каналах
Get PRO
вересень '250
в 0 каналах
Get PRO
серпень '25
+10
в 1 каналах
Get PRO
липень '250
в 0 каналах
Get PRO
червень '25
+20
в 0 каналах
Get PRO
травень '250
в 0 каналах
Get PRO
квітень '25
+30
в 0 каналах
Get PRO
березень '250
в 0 каналах
Get PRO
лютий '250
в 0 каналах
Get PRO
січень '25
+70
в 1 каналах
| Дата | Залучення підписників | Згадування | Канали | |
| 08 жовтня | 0 | |||
| 07 жовтня | 0 | |||
| 06 жовтня | 0 | |||
| 05 жовтня | 0 | |||
| 04 жовтня | 0 | |||
| 03 жовтня | 0 | |||
| 02 жовтня | 0 | |||
| 01 жовтня | 0 |
Дописи каналу
| 2 | Странный юмор | 210 |
| 3 | Немає тексту... | 207 |
| 4 | #инструменты для презентаций на Markdown
Сегодня нужно было по-быстрому сделать слайды для презентации одной моей доработки партнёру. Обычно для таких "внутренних" показов я использую один из двух инструментов семейства "slides-as-code" (где контент описывается текстом, а не натаскивается мышкой): Marp или Reveal.js ⚖️
Однако в последнее время оба меня начали разочаровывать:
— Marp слишком "деревянен": мало нужных фич и много ограничений, плюс к тому практически не развился за те несколько лет, что я его знаю;
— Reveal.JS крут и мощен, но уж очень фронтендо-ориентирован: поддержка Markdown в нём является, скорее, побочной фичей, а любая хотелка сверх базы заставляет писать HTML/CSS/JS 🧙♂️.
Уже было собрался расчехлять обычные Google Slides, как вдруг случайно узнал от агента про SliDev — вроде как тоже самое, что Marp & Reveal, но с акцентом на удобство для разработчиков. Попробовал — и правда! 👨💻
Вот что мне понравилось:
• Контент слайдов задаётся только через Markdown, почти не надо писать HTML/CSS;
• Изменения в Markdown-файле мгновенно отражаются на странице в браузере;
• Отличный режим докладчика: разные раскладки областей, инструменты аннотирования, лазерная указка...
• Много визуальных фишек: поэлементный вывод, подсветка кода, анимация переключений слайдов, несколько тем оформления;
• Экспорт в PDF прямо из браузера (немного колхозно, но работает) 👍🏼
Пожалуй, главное, что зацепило — это баланс между простотой Markdown и гибкостью HTML/CSS. Конечно, в эпоху повсеместного ИИ вопрос сложности вёрстки уже отпал (собственно, 75% слайдов я и так сгенерил Claude'ом). Но всё же здорово, что контент презентации получился настолько прост и понятен, что в какой-то момент мне не составило никакого труда сказать агенту: "Отойди, дальше я сам" и продолжить наполнять презентацию уже без его помощи 😎
К слову, у SliDev есть свой MCP сервер и скиллы, упрощающие агенту работу с презентациями в этом формате. Я пока не пробовал, так как агент хорошо справлялся и без этого. Но потестить любопытно. Если выйдет что-то годное, поделюсь 👌 | 305 |
| 5 | Немає тексту... | 368 |
| 6 | Игровой портал в прошлое 🔮
Года полтора назад я захотел показать ребёнку игру моего детства Worms 2, которая в силу своей старости (2002) на современных платформах уже не работает. Часа два что-то гуглил, скачивал какие-то эмуляторы, колупался с VM-ками, но игру на Windows 11 так и не запустил; расстроился и плюнул 😣
А недавно, уже с другим детёнком, решил попробовать ещё разок. Перешёл по первой же нагугленой ссылке и увидел там... экран загрузки Windows 95. Уже в этом месте пульс участился. Через несколько секунд экран сменился тем самым непонятно-зелёным рабочим столом с пиксельными иконками, а дальше... начала запускаться игра. И чем дальше это происходило, тем больше я убеждался, что это не какой-то ремейк, а та самая игра в её оригинальном виде, с точностью до забавных голосов русской озвучки и нелепых надписей над червячками 🥹
Не зная, чем объяснить такое чудо, я подумал, что где-то в облаке для меня сейчас поднялась некая виртуальная машина под управлением Windows 95 (что само по себе уже ничёсе!), потом на ней автозапустилась игра, а мой экран и клавиатура удалённо подцепились к ней типа как консоль. Звучит, наверно, правдоподобно, но ведь это ценные вычислительные ресурсы сервера, а с меня не то что денег — даже регистрации не спросили перед запуском. Мне стало интересно в чем подвох, я пошёл искать подробности и ахнул... 😳
Наш земляк Александр Гурьянов разработал проект JS-DOS, позволяющий... запускать DOS- и Windows-приложения прямо в браузере. Проект, как я понял, состоит из бэкендов-эмуляторов (DOS, Windows 9x), фронтенда для клиентской части (Node, браузер) и протокола общения между ними. Игровую графику на DirectX и 3dfx (в т.ч. Voodoo) он "превращает" в рендеринг на WebGL, а сетевое взаимодействие (в том числе IPX) "заворачивает" в WebRTC. То есть всё это реально запускается локально, в браузере. Я далёк от фронтовой разработки и тем более геймдева и потому не готов объективно судить о сложности проекта, но для меня это всё выглядит не иначе как инженерное чудо 🌈
Вместе с Александром в команде трудится ещё несколько крутых ребят-энтузиастов, которые, похоже, реально горят своим делом. Например, Никита Аксёнов ведёт прикольный канал про браузерный гейминг и эмуляцию, а также создал здоровенную электронную библиотеку старинных журналов про игры Retro Pages. Но самое приятное, что парни не строят из себя коммерсантов-стартаперов: у них нет ни рекламы, ни подписки, ни платных фич. Всё поощрение — через донаты. Ну и звездочку на GitHub им, наверно, тоже приятно получить 🙂
Основной портал проекта с играми на DOS/Windows 9x здесь: https://dos.zone/ru/
Ещё один, с играми на Dendy/Sega/PS — тут: https://rgc.zone/
⚠️ Внимание: высоко-залипабельный контент!
Если после перехода по ссылкам вы через какое-то время обнаружите себя выгнанным из дома и/или уволенным с работы, я тут ни при чём🤪 | 380 |
| 7 | Немає тексту... | 272 |
| 8 | Немає тексту... | 282 |
| 9 | Одна из моих любимых фич IntelliJ IDEA — поиск объектов проекта даже при неверной раскладке клавиатуры ⌨️
Появилась задолго до ИИ, но по степени "понимания с полуслова" до сих пор вызывает не меньший восторг 🤩 | 276 |
| 10 | Немає тексту... | 419 |
| 11 | В Обском море не так уж много островов. Один из них — ближайший к г. Бердску — на разных картах имеет разные скучные названия, и только Google карты при должном масштабе показывают его самое запоминающееся, народное имя — Хреновый. Этот топоним возник благодаря зарослям хрена, бушевавшим там лет 15-20 назад 🌿
Мы с товарищами по спортивному клубу чаще всего тренируемся плавать в ближней к Академгородку части Обского водохранилища, где единственный остров Тань-Вань (это не опечатка) расположен далековато, и путь к нему пролегает через фарватер, не всегда комфортный для пересечения вплавь. Поэтому на обычных утренних тренировках мы рисуем GPS-треками всякие фигурки в основной части водохранилища, а затем возвращаемся к исходной точке, проплывая в среднем около 3 км. Но постепенно начинает хотеться чего-то бОльшего: сплавать дальше и дольше. Так несколько лет назад и зародилась идея — а не бахнуть ли нам заплыв по островам из Новосибирска в Бердск?.. 🗺
Маршрут такого заплыва линеен: стартуем с пляжа в Академгородке, плывём до острова Тань-Вань 1-2 км (зависит от точки старта), затем держим путь на тот самый Хреновый остров около 4 км, а с него на Бердский пляж буквально 1 км. Итого примерно 7-8 км — вполне хватает, чтобы как следует уплюхаться (часа 3-3,5 с перекурами) 🏊♂️
К этому году заплыв получил заслуженное звание традиционного и, чтобы придать ему большей значимости, его решили сделать клубным соревнованием (хотя никто на такой дистанции гнать не собирался). Над названием долго думать не пришлось, и вскоре был объявлен "Хреновый" чемпионат клуба по плаванию на открытой воде. Идеальное мероприятие для хреновых пловцов 🏆
В этот раз в нём приняли участие 9 пловцов, 2 сопровождающих на сапах и больше 10 человек болельщиков на старте и финише, включая детишек. Условия оказались близки к идеальным. Мы стартовали в 7:15 под лучами уже яркого, но ещё не палящего солнца. Воздух был около 16℃, а вода — почти 23, благодаря чему входить и плыть в ней было очень комфортно (кое-кто даже снял гидрокостюм на последнем километре). В начале царил штиль, обеспечивший воде полную гладь, и только ближе к середине появился небольшой ветер, к счастью, попутный. Мы делали небольшие остановки каждые 800 м, чтобы не растягиваться и немного передохнуть. И конечно же "высаживались" на островах, чтобы перекусить, устроить фотосессию в гидрокостюмах и, конечно, поржать над происходящим 👯♀️
На финише, после 2,5 часов в движении и 7,5 км вплавь, нас ждали улыбки и объятия болельщиков, пикничок с шашлыком и арбузом и даже памятные медальки участников, изготовленные на 3D-принтере — словом, чудесное завершение плавательного приключения. При таком обилии позитива возникает непреодолимое желание в следующем году повторить эту авантюру вновь😊
К слову, о повторении — оказалось, что остров Хреновый в последнее время интенсивно размывается водами Обского моря, и уже сейчас его некогда просторная площадь сократилась процентов на 90. Останется ли от него что-нибудь к следующему году — большой вопрос. Возможно, второй точкой высадки на сушу придётся выбирать какой-нибудь мыс на "большой земле". Но даже если так случится, в наших сердцах этот заплыв останется Хреновым 🤭
#спорт | 414 |
| 12 | Мой текущий статус ☝🏼
А у вас сколько? | 366 |
| 13 | Коллеги, Доброго дня!
А мы опубликовали следующее выступление с нашего митапа:
Владимир Плизга — «Профилирование Java-приложений: подходы и инструменты».
https://youtu.be/WLGYUvVt2Kk
Заходите, смотрите, делитесь своим мнением, подписывайтесь и ставьте лайки — это очень важно для продвижения канала и поможет нам быстрее развивать контент! | 337 |
| 14 | Если вдруг вы пропустили, сообщаю, что опубликованы результаты опроса State of Java 2026. Они доступны всем желающим в виде небольшой, но ёмкой презентации:
https://jokerconf.com/research/state-of-java/2026/presentation.html
Напомню, что это был обстоятельный опрос #Java-разработчиков обо всём, что касается их профессии: от используемых языковых конструкций до желаемых зарплат. Я призывал вас принять в нём участие в апреле, а теперь пора пожинать плоды посмотреть, что получилось 👀
Для меня наиболее любопытными оказались мифы про VirtualThreads 🆚 WebFlux и про распределение желаемых зарплат по регионам. А что запомнилось вам? 👐 | 395 |
| 15 | Отлов спорадичных багов с помощью BTrace 👣
Один из забористых багов, с которым мне довелось "развлекаться" в преддверии отпуска, сочетал в себе много интересного:
— воспроизводился только на удалённом сервере в контуре партнёра;
— требовал одновременных действий минимум 2-х человек;
— не имёл чёткого набора шагов, а только некий паттерн;
— из-за этого требовал по несколько попыток, чтобы проявиться.
Как не трудно догадаться, там была замешана гонка потоков. Она сильно осложняла диагностику, и даже удалённое подключение отладчиком через SSH-туннель не давало результата — как только один или несколько потоков оказывались под отладкой, они переставали "шалить" и укладывались в положенные временные рамки. Словом, типичный гейзенбаг — существует только пока за ним никто не наблюдает 👻
Втыкать логирование в разные места кода и таким образом постепенно локализовывать проблему было можно, но уж очень долго и утомительно — нужно было бесконечно готовить патчи, выносить их на этот (довольно нагруженный) сервер и перезапускать его, ожидая полного прогрева. Я даже попробовал, но уже на второй итерации мне это разонравилось🤢
И тогда мне вспомнился BTrace — диагностический инструмент под зонтиком OpenJDK, позволяющий внедрять в байт-код работающего приложения различные инъекции (прямо на #Java) для доставания почти любых данных из полей и локальных переменных, в том числе аргументов методов. Из-за того, что такими инъекциями можно наломать дров, в BTrace придуман специальный DSL, сильно ограничивающий допустимые действия (например, нельзя вызывать почти никакие методы прикладного кода), но позволяющий безопасно "снюхивать" данные из многих точек приложения 👃
Основной фичей BTrace в этот раз для меня стало отслеживание зависимых вызовов — это когда для заданного метода агент реагирует не на любые вызовы, а только на те, которые произошли из тела другого (тоже заданного) метода. В тексте BTrace-скрипта выглядит это примерно так (сокращённо):
@OnMethod(clazz = "SpreadsheetSession"
, method = "handleCellValue" // метод-инициатор вызова
, location = @Location(value = Kind.CALL
, clazz = "SpreadsheetSession"
, method = "calculateCellsDependentOnSingle")) // целевой (проблемный) метод
public static void handleCellValue(
@TargetMethodOrField String method,
@ProbeMethodName String probeMethod,
AnyType cellAbsRef,
boolean hasManualInput) {
// ...
String spreadsheet = str(Reflective.get("entity", cellAbsRef)); // извлечение данных через DSL
// вывод извлеченных данных (тоже на DSL)
println(method + " from " + probeMethod + ": " + spreadsheet + ":" + column + row + ", manualInput: " + hasManualInput);
}
Это похоже на зависимые точки останова в отладчике, только никакого останова не происходит, а собранные данные выводятся в консоль, из которой запущен BTrace 🖥
Конечно, первое применение BTrace требует сильно больше времени, чем повтыкать System.out.println() или подцепиться отладчиком. Но зато потом, когда механизм освоен и отлажен, итерации диагностики вида "написал-применил-посмотрел-повторил" укорачиваются до нескольких минут и позволяют эффективно локализовывать даже такие упоротые изощрённые проблемы, как эта 🧶
Надеюсь, вам никогда не придётся отлаживать такие баги. Но если вдруг, имейте в виду, что BTrace может в этом пригодиться ✍️
—
P.S. Любопытно, что 10 лет назад, когда я не знал о BTrace (хотя он уже в каком-то виде существовал), я создал собственный инструмент jMint со схожей идеей: внедрять в работающее приложение кусочки кода на Java (дроплеты), чтобы менять его поведение с целью тестирования и/или отладки. Основное отличие jMint — в отсутствии "безопасного" DSL. Причина здесь не только в слабоумии и отваге автора, но и в стремлении дать возможность заглушать нежелательное поведение или временно менять интересующее. Поэтому применение инструмента было строго ограничено тестовым контуром. Несмотря на опасности и ограничения, он неплохо прижился в моей прошлой команде и какое-то время продолжал применяться после моего ухода. Подробнее о нём можно узнать здесь 📖
— | 367 |
| 16 | Например, о том, что последовавшие за отпуском выходные оказались богатыми на #спорт 👇🏼
Сначала я поучаствовал в ежегодном местном заплыве на 5 км и, несмотря на отсутствие плавательных тренировок в отпуске, показал неплохой результат, умудрившись даже занять 3-е место в своей возрастной категории. Правда, здесь есть нюанс — всего пловцов в ней было... 4 🤭
А на следующий день мне довелось впервые сбегать 10 км в рамках благотворительного забега "Достигая цели", приуроченного ко дню железнодорожника. Здесь конкуренция была существенно выше — в мужском абсолюте среди 107 бегунов мне удалось стать лишь 17-ым. Учитывая, что специально к такой дистанции я не готовился, считаю этот результат хорошим 👌
После таких выходных, знаете ли, приятно возвращаться к работе и осознавать, что она сидячая 🫠 | 262 |
| 17 | Как не трудно догадаться, если канал вдруг затих на две недели, значит, его автор в отпуске. Так и есть, на сей раз в Горном Алтае 🏞
Но если раньше я всё же старался продолжать заниматься личными проектами и в отъездах, то нынче отпуску предшествовала такая запрессовка по работе, что на ноутбук не хотелось даже смотреть. Вкупе со слабеньким интернетом в горах, это сподвигло меня устроить цифровой детокс, и в последующие 10 дней я не открывал ноутбук вообще, а телефон использовал по минимуму. Должен признаться, мне понравилось; рекомендую 👍
Зато удалось много походить по небольшим горам, побегать вдоль завораживающих пейзажей, поплавать на лодке, катере, каяке и сапе — словом, осуществить ту пресловутую "смену обстановки", что иногда так необходима для поддержания нормальной работоспособности 👷♂️
А теперь можно приступать к новым делам и продолжать делиться новостями, благо, они есть 🙂 | 270 |
| 18 | Жить в регионе со среднегодовой температурой около 0℃ и разбросом ±35℃ — сомнительное удовольствие 🙃
С другой стороны, это создаёт клёвые условия для тренировок на свежем воздухе: хоть беговых, хоть лыжных 🏃♂️⛷
На фото — одна и та же опушка у лыжной базы близ Новосибирского Академгородка 📍
В июле и декабре 🌿❄️ | 280 |
| 19 | Иногда я рассказываю вам об интересных проектах (стартапах), с которыми сам встречаюсь в бизнес-инкубаторе Новосибирского Академпарка 🏭
Отличным продолжением этой серии будет "Восход" — очень амбициозный проект, в котором ребята создают, без малого, новый подход к повседневной работе за компьютером. Они хорошо понимают (и даже измеряют), как много времени и энергии мы — пользователи ПК — теряем на бесконечном перебирании открытых окон и вкладок, на вспоминании и поиске нужного чата, на добывании ссылки на "ту самую таблицу, которую Колян пошарил со мной, кажется, на прошлой неделе то ли в почте, то ли в мессенджере, не помню, блин!..." 🫠
В общем, ребята целятся в весьма больное место. Кто работал над двумя и более проектами одновременно, или хотя бы пробовал организовать на одном компе рабочие и личные дела, наверняка понимает, о чём речь 🫂
В качестве решения они предлагают оболочку над операционной системой (любой: Windows, MacOS, Linux), которая строит работу пользователя не вокруг сервисов или приложений, а вокруг задач и проектов. Для этого в оболочке есть контексты — своего рода контейнеры для всех артефактов задачи или проекта: для файлов, чатов, писем, вкладок браузера и т.п. То есть контекст — это место, в которое "выдернуты" все составляющие того, над чем работает пользователь 📦
Это немного напоминает виртуальные рабочие столы в Windows или Linux/Gnome, но гораздо глубже и шире: в контексты могут попадать отдельные чаты мессендежров и вкладки браузеров, контексты можно передавать между устройствами, делиться ими с другими людьми и вытворять другие непотребства, так необходимые для продуктивной мультизадачной работы в наше время 🤹
У ребят уже есть рабочий прототип, где реализованы многие базовые функции, а главное — легко прощупывается основная концепция продукта. Но, разумеется, путь до готового продукта ещё далёк и тернист. В качестве одного из этапов они буквально вчера запустили краудфандинговую компанию на платформе planeta.ru. Это и стало поводом для этого поста ✍️
Целью компании является не столько сбор денег (всё равно на такой продукт их там не соберёшь), сколько формирование круга действительно заинтересованных людей. Поэтому если идея этого проекта в вас отзывается, поддержите его любой копейкой и/или расскажите о нём друзьям и коллегам 🙏🏻
Согласитесь, будет здорово чувствовать себя причастным к успеху большого, крутого и популярного продукта, с улыбкой вспоминая, как просто всё когда-то начиналось 🙂 | 265 |
| 20 | В этот четверг в 17:00 МСК буду выступать на онлайн митапе от сообщества CommIT с докладом о профилировании ⚒️
За время, прошедшее с выпуска первой версии этого доклада, профайлеры заметно развились: вышли значительные доработки и в async-profiler (v4.2+), и в JFR (JDK 25), поэтому кое-что обновилось и в материалах доклада 📚
Увидимся! 📺 | 283 |
