This media is not supported in your browser
VIEW IN TELEGRAM
Рубрика "Век живи, век учись" 🎓
Не первый год работаю на #Linux, но когда нужно вызвать недавнюю команду в консоли, по привычке либо тыкаю стрелку вверх, пока команда не появится, либо пишу что-то типа
Оказывается, это режим, в котором можно начать писать что угодно, и он будет выводить команды из истории, в которых содержался вводимый текст. Листать варианты можно как в обратном порядке (тем же
Как выяснилось, это довольно древняя фича, которая есть практически во всех оболочках (bash, zsh и других). Теперь уже не понимаю, как жил без неё раньше🤓
Не первый год работаю на #Linux, но когда нужно вызвать недавнюю команду в консоли, по привычке либо тыкаю стрелку вверх, пока команда не появится, либо пишу что-то типа
history | grep <что-то>. А тут на днях случайно нажал в консоли Ctrl+R (думал, что нахожусь в браузере) и увидел странное сообщение reverse-i-search. Стал гуглить, что это такое, и ахнул 🤩Оказывается, это режим, в котором можно начать писать что угодно, и он будет выводить команды из истории, в которых содержался вводимый текст. Листать варианты можно как в обратном порядке (тем же
Ctrl+R), так и в прямом (Ctrl+S). Когда команда найдена, остается только жмакнуть Tab либо Enter, в зависимости от того, нужно её поправить перед выполнением или нет ▶️Как выяснилось, это довольно древняя фича, которая есть практически во всех оболочках (bash, zsh и других). Теперь уже не понимаю, как жил без неё раньше🤓
👍14🔥4
Сегодняшнее рабочее утро началось с необходимости повторной аутентификации в Telegram на всех устройствах, причем где-то двух-факторной, а где-то и трёх (даже не знал, что здесь такое бывает)🥴
Вторым неприятным сюрпризом оказалась заморозка аккаунта моего Telegram-бота для поиска своих фотографий в больших альбомах (про него здесь был отдельный пост). При этом ни @SpamBot, ни @BotFather ничего о заморозке не сообщают, равно как и не было сервисных уведомлений от самого Telegram 🤷♂️
Поэтому в качестве оперативной меры бот перезапущен под новым ником: @FramePhotoAlbumBot 🤖
Если кто-то в курсе, что происходит, расскажите, пожалуйста 👀
Вторым неприятным сюрпризом оказалась заморозка аккаунта моего Telegram-бота для поиска своих фотографий в больших альбомах (про него здесь был отдельный пост). При этом ни @SpamBot, ни @BotFather ничего о заморозке не сообщают, равно как и не было сервисных уведомлений от самого Telegram 🤷♂️
Поэтому в качестве оперативной меры бот перезапущен под новым ником: @FramePhotoAlbumBot 🤖
Если кто-то в курсе, что происходит, расскажите, пожалуйста 👀
Telegram
Верхняя полка📝
Давно обещал рассказать вам об очередной программной поделке, идеей которой загорелся ещё в конце прошлого года — Telegram-бот для поиска своих фоток в больших открытых альбомах 👨💻
Мотивация проста:
— я часто участвую в массовых мероприятиях, где работают…
Мотивация проста:
— я часто участвую в массовых мероприятиях, где работают…
🤔8😱2
Кастомные JFR события в дикой природе 🦒
На моем тренинге по #JFR мы с участниками, кроме прочего, учимся делать собственные JFR события, чтобы эммитить их прямо из бизнес-логики, а потом анализировать так же, как встроенные события JVM. И хотя я стараюсь объяснять, зачем это надо, в воздухе нередко остаётся висеть незаданный вопрос участников: "А зачем бы я применил(а) это у себя в проекте?" 🧐
Делюсь свежим примером из своей практики 👇
Когда-то я рассказывал вам, что мы пилим свой условный аналог Excel на платформе AggreGate. Сейчас на этом решении наш партнёр реализует огромный проект для заказчика, и движок вычислений там используется в полный рост, потому что хотелки у заказчика тоже не слабые:
— десятки больших таблиц
— сотни тысяч ячеек в них
— ≈280К узлов в графе связей между ячейками разных таблиц 🕸
Ну и конечно же на этом фоне к нам в JIRA стали периодически поступать тикеты с интригующими заголовками в духе: "У нас где-то что-то когда-то почему-то не посчиталось/не обновилось/не сбросилось, но мы не поняли, где, когда и почему. Разбирайтесь😘"
Как вы наверняка догадываетесь, логировать вычисления в таких масштабах, а потом купаться в этих логах (или выгружать их в какой-то парсер-анализатор) — затея трудоёмкая и малоперспективная. Но видеть ход вычислений в точности до ячеек всё же надо. То есть нужен максимально простой, дешевый (с т.з. overhead'а) и пригодный для анализа результатов способ как-то фиксировать вычисления ✍️
И тут я снова вспомнил про кастомные события JFR, ведь у них очень простой, но при этом гибкий API, они весьма дешевы в эмиссии и хранении, а их анализ в Java Mission Control хоть и не так мощен, как какой-нибудь Logstash+Kibana, но всё же на порядок удобнее, чем с логами 🧶
Я завёл класс с описанием вычисления (см. скриншот 1) и стал эмитить с ним JFR события в двух местах:
— при инициации вычислений (на пользовательском вводе или открытии готовой таблицы)
— и при обновлении по слушателю (когда пересчёт одной ячейки аффектит другую).
Это позволило регистрировать 100% вычислений 💯
Зная масштабы проекта, я опасался, что JFR записи будут огромными и с ними будет тяжело работать, поэтому воспользовался фичей JFR API по добавлению кастомных настроек — поддержал фильтрацию регистрируемых вычислений по диапазону ячеек в обычной нотации Excel, например,
Любопытно, что изначально я планировал управлять этой диагностикой через утилиту
Теперь мы этим активно пользуемся, и когда приносят очередную задачу по проблеме вычислений, знаем, с чего начинать анализ 🕵️♂️
Конечно, сама по себе диагностика на JFR-событиях сложные/редкие/заковыристые проблемы не решает. Но она прокладывает очень важный и довольно длинный кусочек мостика между "Черт возьми, что здесь вообще происходит!?" и статусом тикета "Resolved (Fixed)" ✅
На моем тренинге по #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
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.
—
Мы продолжаем работать над программой и конференцией в целом. И уже с нетерпением ждем конца февраля, чтобы встретиться на ней с вами ☺️
Ну и напомним, что сейчас идеальный момент, чтобы купить билет. Так вы успеете до следующего подорожания (с января), а заодно сразу запланируете приятное дело на следующий год.
Всех с наступающим! 🎄
До конца года остается чуть меньше двух недель, а мы к вам уже с подарками 🎁
Во-первых, мы опубликовали новых прекрасных спикеров на сайт. Во-вторых, теперь это не просто имена, а темы и тезисы докладов!
Давайте посмотрим, что уже есть в программе SnowOne 2026:
1) Секция "Enterprise":
‒ Сергей Петрелевич расскажет о NIO, как одним потоком обработать множество сетевых запросов;
‒ Антон Курако приведет глубокий анализ производительности аспектов в Spring;
‒ Александр Токарев представит продолжение своего доклада про дебаггинг в Java, где покажет, как отлаживать многопоточный, автогенеренный и нативный код;
2) Секция Хардкор:
‒ Александр Ланцов будет сравнивать алгоритмы GC (включая новейшие) в Java и Go, чтобы разобраться, чем они отличаются и какой лучше подходит для ваших сценариев;
‒ Иван Углянский расскажет о мега-проекте Valhalla и добавлении value классов в Java: зачем это вообще нужно, как повлияет на Java, и как развитие языка помогло реализации рантайма;
3) Секция "Расширение кругозора":
‒ Пётр Портнов покажет, как Java разработчикам пользоваться инструментом Error Prone, чтобы заранее ловить их баги статическим анализом;
‒ Сергей Луговой поделится опытом создания нового языка с JetBrains MPS;
‒ Михаил Пилип расскажет о построении SCADA-системы своими руками, и как ему в этом помог Kotlin.
—
Мы продолжаем работать над программой и конференцией в целом. И уже с нетерпением ждем конца февраля, чтобы встретиться на ней с вами ☺️
Ну и напомним, что сейчас идеальный момент, чтобы купить билет. Так вы успеете до следующего подорожания (с января), а заодно сразу запланируете приятное дело на следующий год.
Всех с наступающим! 🎄
🔥5
Как вы, надеюсь, поняли по предыдущему сообщению, мы в программном комитете #SnowOne уже вовсю активно работаем над конференцией, чтобы она была интересной и полезной. В этой связи возник вопрос:
Хотите ли вы видеть в программе доклады про AI на Java?
Хотите ли вы видеть в программе доклады про AI на Java?
Anonymous Poll
33%
Нет, этот AI и так уже из каждого утюга
52%
Да, парочка докладов не помешает
14%
Конечно, и чем больше, тем лучше!
1%
(свой вариант в комментариях)
👌1
(спасибо всем проголосовавшим выше🤝)
И ещё разок про AI, но не в Java 🐍
На одном из сопутствующих проектов довелось поработать с облачным хостингом Render.com, куда мы деплоим приложение, почти целиком разрабатываемое в Cursor IDE (навайбокодили, да). Заметив на главной странице хостинга баннер про появившийся у них MCP-сервер, я из любопытства на него тыкнул, хотя даже не понимал, зачем облачной платформе нужна такая приблуда 🛠
Оказалось (ожидаемо), что она позволяет мониторить и управлять деплоем через команды на человеческом языке прямо из среды общения с ИИ, т.е. в нашем случае из Cursor. Это позволило, кроме прочего, в буквально смысле писать такой промпт:
, и он (агент) это делает — см. скриншот. Чудесато! 💫
Правда, есть и обратная сторона — косячить в коде агент от этого меньше не стал. Но если раньше ручное копирование логов в промпт как-то заставляло также вручную проверять все правки локально, то теперь возможность показать агенту проблему прямо на проде очень сильно подмывает и проверить её фикс там же — ведь нужно только закоммитить, дальше всё само. А поскольку фиксы нередко кривые, то и прод стал частенько оказываться "отрицательно доступен" (© наш DevOps). Благо, что проект пока игрушечный, и никого это не аффектит🫠
Вкупе с тем, что и сообщения для коммитов теперь генерит агент, участие человека кажется всё менее значимым — написать промпт, прожать OK на ревью, клацнуть Commit & Push. Всё это мог быть делать ИИ. Но пока он так отчаянно косячит и генерит порой правдоподобную чушь, за роль кожаного мешка перед экраном можно не беспокоиться ☺️
И ещё разок про AI, но не в Java 🐍
На одном из сопутствующих проектов довелось поработать с облачным хостингом Render.com, куда мы деплоим приложение, почти целиком разрабатываемое в Cursor IDE (навайбокодили, да). Заметив на главной странице хостинга баннер про появившийся у них MCP-сервер, я из любопытства на него тыкнул, хотя даже не понимал, зачем облачной платформе нужна такая приблуда 🛠
Оказалось (ожидаемо), что она позволяет мониторить и управлять деплоем через команды на человеческом языке прямо из среды общения с ИИ, т.е. в нашем случае из Cursor. Это позволило, кроме прочего, в буквально смысле писать такой промпт:
Там на проде че-то упало. Сходи посмотри логи да пофикси
, и он (агент) это делает — см. скриншот. Чудесато! 💫
Правда, есть и обратная сторона — косячить в коде агент от этого меньше не стал. Но если раньше ручное копирование логов в промпт как-то заставляло также вручную проверять все правки локально, то теперь возможность показать агенту проблему прямо на проде очень сильно подмывает и проверить её фикс там же — ведь нужно только закоммитить, дальше всё само. А поскольку фиксы нередко кривые, то и прод стал частенько оказываться "отрицательно доступен" (© наш DevOps). Благо, что проект пока игрушечный, и никого это не аффектит🫠
Вкупе с тем, что и сообщения для коммитов теперь генерит агент, участие человека кажется всё менее значимым — написать промпт, прожать OK на ревью, клацнуть Commit & Push. Всё это мог быть делать ИИ. Но пока он так отчаянно косячит и генерит порой правдоподобную чушь, за роль кожаного мешка перед экраном можно не беспокоиться ☺️
👍6🕊1🙈1
Media is too big
VIEW IN TELEGRAM
Я тут периодически упоминаю, что тружусь над отечественной интеграционной low-code платформой #AggreGate, но мало кто понимает, что это за штука и какие задачи она решает 🏺
А на днях коллега-тимлид развлекался с новым ИИ-сервисом от Google под названием NotebookLM и скормил ему документацию на нашу платформу, чтобы посмотреть, что тот сможет по ней выдать. Помимо стандартного "chat with your docs", сервис предложил сгенерировать ознакомительный видеоролик-презентацию о продукте. Коллега согласился, и вот что из этого вышло ☝️
Признаться, я был приятно удивлён: утверждения корректные, примеры наглядные, изложение стройное. Конечно, есть косяки в оформлении и произношении, но учитывая, что это сделано за считанные минуты и не человеком, получилось вполне достойно 🆗
В общем, кому интересно, на чем сегодня строится цифровизация промышленности в России (да и не только, на самом деле), уделите 7 минут этому видео. А если вдруг захочется узнать больше, можно продолжить здесь: https://aggregate.digital/ru/ (видосик там тоже есть, но уже рукотворный 🎬 )
А на днях коллега-тимлид развлекался с новым ИИ-сервисом от Google под названием NotebookLM и скормил ему документацию на нашу платформу, чтобы посмотреть, что тот сможет по ней выдать. Помимо стандартного "chat with your docs", сервис предложил сгенерировать ознакомительный видеоролик-презентацию о продукте. Коллега согласился, и вот что из этого вышло ☝️
Признаться, я был приятно удивлён: утверждения корректные, примеры наглядные, изложение стройное. Конечно, есть косяки в оформлении и произношении, но учитывая, что это сделано за считанные минуты и не человеком, получилось вполне достойно 🆗
В общем, кому интересно, на чем сегодня строится цифровизация промышленности в России (да и не только, на самом деле), уделите 7 минут этому видео. А если вдруг захочется узнать больше, можно продолжить здесь: https://aggregate.digital/ru/ (видосик там тоже есть, но уже рукотворный 🎬 )
🔥4👍2❤1
В последние несколько лет крайняя тренировка года в бассейне проходит для нашего любительского спортивного клуба в виде какого-нибудь упахательного заплыва, например, 50 раз по 100 м вольным стилем в режиме 2 минуты на каждый отрезок, или 5 раз по 1000 м кролем в разной экипировке — словом, освобождаем место под оливье как можем 🥣
Но в этот раз, заговорив о планах на конец года, мы вдруг вспомнили, что почему-то давно не играли в водное поло, и сошлись на том, что было бы здорово завершить плавательный год, устроив это дружескоерубилово развлечение 🤽♂️
На удивление, нас собралось полноценные 2 команды: по 6 игроков в поле и 1 вратарь. Таймы решили сделать по 5 минут. В начале это казалось как-то несерьёзно (мало), но уже в конце первого тайма в наших покрасневших от воды глазах отчётливо читалось: "Батюшки, неужели это только начало!?" Да, даже для опытных вотерполистов (а среди нас были и такие) с непривычки этомесилово мероприятие оказалось весьма трудозатратным 🫠
Не знаю, как остальные, а я где-то к середине игры всё же как-то вработался и несмотря на усердноетопилово воздействие со стороны защитников противника таки сумел забить один гол. Правда, ещё две голевых передачи продолбал. Тем не менее, наша команда выиграла со счётом 3:1 🏐
После игры мы всей гурьбой (вместе с болельщиками, коих было чуть ли не столько же, как игроков) плотно заполнили собою небольшую каморку в здании бассейна, полопали мандаринов, поделились впечатлениями и поздравили с Новым Годом тренера, который играл вместе с нами — без него всё это бы не состоялось 🍊
Едва ли такоемочилово занятие можно рекомендовать всем подряд в качестве популярного вида спорта, но если вдруг обычное плавание вам кажется скучным, однообразным и/или недостаточно динамичным, обратите внимание на водное поло. Наверняка вам очень (не) захочется в этом поучаствовать🤪
#спорт
Но в этот раз, заговорив о планах на конец года, мы вдруг вспомнили, что почему-то давно не играли в водное поло, и сошлись на том, что было бы здорово завершить плавательный год, устроив это дружеское
На удивление, нас собралось полноценные 2 команды: по 6 игроков в поле и 1 вратарь. Таймы решили сделать по 5 минут. В начале это казалось как-то несерьёзно (мало), но уже в конце первого тайма в наших покрасневших от воды глазах отчётливо читалось: "Батюшки, неужели это только начало!?" Да, даже для опытных вотерполистов (а среди нас были и такие) с непривычки это
Не знаю, как остальные, а я где-то к середине игры всё же как-то вработался и несмотря на усердное
После игры мы всей гурьбой (вместе с болельщиками, коих было чуть ли не столько же, как игроков) плотно заполнили собою небольшую каморку в здании бассейна, полопали мандаринов, поделились впечатлениями и поздравили с Новым Годом тренера, который играл вместе с нами — без него всё это бы не состоялось 🍊
Едва ли такое
#спорт
🔥18👍1🙈1
Вот теперь с Наступившим! 🎉 🎄 🎁
Последние дни и часы минувшего года у меня прошли отнюдь не налегке — нужно было подготовить и провести две большие презентации по итогам года: 30 декабря для коллег и 31-го для родсвтенников (это такая семейная традиция; я рассказывал о ней год назад). А поскольку хотелось порадовать и тех, и других, пришлось хорошенько потрудиться, поэтому к праздничной полуночи мне хотелось уже не тусить и поздравляться, а упасть лицом в мягкий салат и булькать там до конца каникул 🥘
К счастью, это занятие надоело раньше, и вот я снова на связи. Надеюсь, и вы отметили хорошо! 🙏🏻
Чтобы всё же принести хоть какую-то пользу этой заметкой, поделюсь с вами инструментом, который здорово выручил меня при подготовке семейной презентации. Поскольку почти все мои родственники живут в разных местах, мне давно хотелось как-то визуализировать их места пребывания на карте. Я уже совершал несколько подступов к этому снаряду в прошлые годы (в основном, через сервсиы Google), но успехом они ни разу ни разу не увенчались: получалось то сложно, то стрёмно, то 2-в-1 🪣
На сей раз с помощью DeepSeek я набрёл на бесплатный сервис MapChart, который как раз позволяет рисовать географические карты, кастомизированные под многие специфичные нужды. Основной порядок работы с ним довольно прост:
1. Выбираете базовую карту, например, весь мир, Европу, отдельную страну или несколько.
2. Разукрашиваете мышкой интересные вам регионы: целые страны, штаты/субъекты или их комбинации.
3. Экспортируете в картинку и используете на своё усмотрение 🗺
Конечно, это далеко не всё, что может потребоваться (например, если нужно показать на карте отдельно выбранные города), но для простых сценариев вполне достаточно. Например, мне нужно было отобразить две страны и подсветить в них определенные регионы. Результат в виде готового слайда прилагаю (подписи наносил отдельно, чтобы анимировать их) 👇
Из любопытного: среди базовых сервис предлагает карты фантастических, в том числе игровых миров и возможность строить свои карты альтернативных сценариев истории: https://www.mapchart.net/wargames.html
Только если залипнете, чур не жаловаться, что это я показал🤭
Последние дни и часы минувшего года у меня прошли отнюдь не налегке — нужно было подготовить и провести две большие презентации по итогам года: 30 декабря для коллег и 31-го для родсвтенников (это такая семейная традиция; я рассказывал о ней год назад). А поскольку хотелось порадовать и тех, и других, пришлось хорошенько потрудиться, поэтому к праздничной полуночи мне хотелось уже не тусить и поздравляться, а упасть лицом в мягкий салат и булькать там до конца каникул 🥘
К счастью, это занятие надоело раньше, и вот я снова на связи. Надеюсь, и вы отметили хорошо! 🙏🏻
Чтобы всё же принести хоть какую-то пользу этой заметкой, поделюсь с вами инструментом, который здорово выручил меня при подготовке семейной презентации. Поскольку почти все мои родственники живут в разных местах, мне давно хотелось как-то визуализировать их места пребывания на карте. Я уже совершал несколько подступов к этому снаряду в прошлые годы (в основном, через сервсиы Google), но успехом они ни разу ни разу не увенчались: получалось то сложно, то стрёмно, то 2-в-1 🪣
На сей раз с помощью DeepSeek я набрёл на бесплатный сервис MapChart, который как раз позволяет рисовать географические карты, кастомизированные под многие специфичные нужды. Основной порядок работы с ним довольно прост:
1. Выбираете базовую карту, например, весь мир, Европу, отдельную страну или несколько.
2. Разукрашиваете мышкой интересные вам регионы: целые страны, штаты/субъекты или их комбинации.
3. Экспортируете в картинку и используете на своё усмотрение 🗺
Конечно, это далеко не всё, что может потребоваться (например, если нужно показать на карте отдельно выбранные города), но для простых сценариев вполне достаточно. Например, мне нужно было отобразить две страны и подсветить в них определенные регионы. Результат в виде готового слайда прилагаю (подписи наносил отдельно, чтобы анимировать их) 👇
Из любопытного: среди базовых сервис предлагает карты фантастических, в том числе игровых миров и возможность строить свои карты альтернативных сценариев истории: https://www.mapchart.net/wargames.html
Только если залипнете, чур не жаловаться, что это я показал🤭
🔥6❤3
Завершаю тему итогов года статистикой #спорт 📊
Физкультуры в минувшем году почему-то оказалось больше, чем в предыдущих, хотя планов таких не строил и обещаний никому не давал, даже себе. Вот как это выражается в цифрах (в скобках изменение к 2024 году):👇
● 2154 (+587) км преодолено бегом, на лыжах и вплавь 📏
Строго говоря, это бесполезная цифра, так как складывать километры на лыжах с км вплавь — это как сравнивать теплое с мягким, но подобная цифра есть во многих публичных отчётах, поэтому я включил её и сюда.
● 281 (+53) ч проведено на тренировках ⏱️
Это уже куда более адекватная метрика, отражающая мою "тренировочную способность", но её надо воспринимать с щепоткой соли (см. ниже*).
● 17 (+4) соревнований, в которых принял участие 🏆
Парочка из них были сдвоенными (типа в субботу один старт, в воскресенье другой), но я считаю их по отдельности, потому что у них разные дистанции, протоколы, медали, а у некоторых и дисциплины, например, акватлон+плавание.
* Примечание к длительности тренировок. Простота интерфейса спортивных часов позволяет мне относительно точно фиксировать периоды отдыха на тренировках, благодаря чему теперь можно ответить на вопрос (голосом жены с руками на боках): "А сколько из этого времени ты реально двигался?" Оказывается, коэффициент булкования (©) в этом году составил аж 11,23%, то есть из 281 часов тренировок аж 32 часа я провёл без движения, болтая на бортике в бассейне, фотая красоты на пробежках и заправляясь чаем из поясного бака на лыжах. 1,5 суток в год на такие дела, представляете? Вот так старость и подступается 👨🦳
Из наиболее ярких спортивных достижений года отмечаю:
● лыжный марафон (50 км) в Томске в марте — мой третий марафон наряду с беговым и плавательным 3️⃣
● большой SwimRun (33 км) под Питером в июне — лютая гонка среди чудесных лесов и озёр 🏞
● беговой полумарафон (21,1 км) в Новосибирске в сентябре — ещё раз обновил личный рекорд до 1:25:11 👟
Год выдался славным на физкультурные дела, здесь есть чем гордиться, но я отношусь к этому больше как к приятному стечению обстоятельств, нежели как к личному достижению. И поэтому же не зарекаюсь и даже не обещаю эти результаты превзойти. Куда важнее сохранить постоянство, пусть даже ценой сокращения объёмов и/или результатов. Ну а пока просто продолжаем тренироваться ✊
Прилагаю несколько слайдов по этой теме со своей недавней презентации ☝️
А как прошёл 2025 спортивный год у вас? Давайте делиться результатами 🙂
Физкультуры в минувшем году почему-то оказалось больше, чем в предыдущих, хотя планов таких не строил и обещаний никому не давал, даже себе. Вот как это выражается в цифрах (в скобках изменение к 2024 году):👇
● 2154 (+587) км преодолено бегом, на лыжах и вплавь 📏
Строго говоря, это бесполезная цифра, так как складывать километры на лыжах с км вплавь — это как сравнивать теплое с мягким, но подобная цифра есть во многих публичных отчётах, поэтому я включил её и сюда.
● 281 (+53) ч проведено на тренировках ⏱️
Это уже куда более адекватная метрика, отражающая мою "тренировочную способность", но её надо воспринимать с щепоткой соли (см. ниже*).
● 17 (+4) соревнований, в которых принял участие 🏆
Парочка из них были сдвоенными (типа в субботу один старт, в воскресенье другой), но я считаю их по отдельности, потому что у них разные дистанции, протоколы, медали, а у некоторых и дисциплины, например, акватлон+плавание.
* Примечание к длительности тренировок. Простота интерфейса спортивных часов позволяет мне относительно точно фиксировать периоды отдыха на тренировках, благодаря чему теперь можно ответить на вопрос (голосом жены с руками на боках): "А сколько из этого времени ты реально двигался?" Оказывается, коэффициент булкования (©) в этом году составил аж 11,23%, то есть из 281 часов тренировок аж 32 часа я провёл без движения, болтая на бортике в бассейне, фотая красоты на пробежках и заправляясь чаем из поясного бака на лыжах. 1,5 суток в год на такие дела, представляете? Вот так старость и подступается 👨🦳
Из наиболее ярких спортивных достижений года отмечаю:
● лыжный марафон (50 км) в Томске в марте — мой третий марафон наряду с беговым и плавательным 3️⃣
● большой SwimRun (33 км) под Питером в июне — лютая гонка среди чудесных лесов и озёр 🏞
● беговой полумарафон (21,1 км) в Новосибирске в сентябре — ещё раз обновил личный рекорд до 1:25:11 👟
Год выдался славным на физкультурные дела, здесь есть чем гордиться, но я отношусь к этому больше как к приятному стечению обстоятельств, нежели как к личному достижению. И поэтому же не зарекаюсь и даже не обещаю эти результаты превзойти. Куда важнее сохранить постоянство, пусть даже ценой сокращения объёмов и/или результатов. Ну а пока просто продолжаем тренироваться ✊
Прилагаю несколько слайдов по этой теме со своей недавней презентации ☝️
А как прошёл 2025 спортивный год у вас? Давайте делиться результатами 🙂
🏆8👍3❤1