Сага о семейном фотоархиве
Эпизод II. Воцарение бэкапа.
В начале года я рассказывал вам о том, что за новогодние праздники наконец-то построил себе решение для автоматической загрузки, надёжного хранения и гибкого поиска фоток и видео в семейном архиве. Оно основано на opensource сервисе Immich, который я развернул в облаке (на VPS) ☁️
И хотя, в целом, решение рабочее (3 месяца полёт нормальный), оно в каком-то смысле убивает саму идею владения своим фотоархивом, ведь теперь основное хранилище там, в облаке, а доступ к нему может пропасть по 1000 и 1 причине: от банальной неуплаты аренды до глобального сбоя в Интернете. Понимая это, я ещё тогда заказал себе домой сетевое хранилище (NAS) и к нему два одинаковых жестких диска по 2 ТБ, чтобы объединить их в RAID-1 массив и сохранять каждый байт информации дважды на случай отказа одного из дисков. К слову, ждать отказа не пришлось — один из дисков был куплен за полцены по распродаже на Озоне, приехал без гарантийного талона и сдох на первой же массовой записи. Мораль: скупой платит дважды 💰
По моей исходной задумке, данные фотоархива из облака (с VPS) должны быть скопированы домой (на NAS), а затем как-то автоматически обновляться, чтобы домашняя резервная копия оставалась актуальной. Но когда стал продумывать в деталях, осознал, что не понимаю, как именно они должны "обновляться":
— забирать каждый раз весь архив целиком не вариант, он весит 500 ГБ 🏋️
— значит, нужно переносить только разницу: некий дифф того, что изменилось с последнего переноса 🤏
Здесь важно отметить, что в разницу могут входить не только добавленные файлы, но и удалённые, потому что я периодически наведываюсь в архив, чтобы:
— удалить откровенно неудачные снимки
— убрать дубликаты, пропущенные машинными обучением
— стереть фото домов/цветов/котов, которые казались прикольными на момент снимка, а сейчас я даже не помню, где и когда (и на фига) это снято 🧐
Ок, вроде логичное требование, стоит его учесть. Но что если вдруг:
— я с бодуна наудаляю лишнего?
— или Immich сойдёт с ума (из-за бага) и грохнет часть архива?
— или вирус-шифровальщик проникнет на VPS и превратит все фото в тыкву, требуя выкуп?
Придуманное выше автоматическое обновление во всех этих случаях слепо отразит изменения на домашнюю резервную копию, умножив масштаб проблемы вместо её предотвращения. И, понятное дело, оно не сможет отличить "хорошее" удаление файлов от "плохого" 🤷♂️
Как быть? Решением видится такой компромисс, при котором все изменения всё же будут безусловно отражаться на резервной копии, но эти изменения при случае можно будет легко откатить. Осталось придумать, как это сделать 😏
Прямую наводку на ответ я нашёл в документации на Immich, в статье о расширенном резервном копировании. В качестве основного инструмента там предлагается Borg — бэкапер, написанный на Python. Borg помещает резервируемые файлы в т.н. репозиторий — версионируемое хранилище в собственном двоичном формате. Версионность здесь означает, что репозиторий может содержать множество слепков (версий) исходного архива, но хранятся они не в виде полных копий, а в виде неких диффов к предыдущим слепкам. Таким образом можно восстановить полное состояние архива на любой момент, для которого в репозитории есть слепок (версия). Дополнительно к этому нативно поддерживаются сжатие и шифрование данных в репозитории. Версии могут именоваться произвольным образом и в этом смысле похожи на коммиты в репозиториях Git, да и вся идея Borg во многом перекликается с Git'ом 🪞
Другая важная для меня фича Borg — работа с удалёнными репозиториями по SSH. Именно под неё я наконец-то заполучил себе у провайдера "белый" IP, настроил для него проброс порта на роутере и поднял вторую копию Borg на сетевом хранилище. Правда, вскоре после этого у провайдера не неделю отвалился интернет во всем подъезде. Еси чё, это не я 🙄
Эпизод II. Воцарение бэкапа.
В начале года я рассказывал вам о том, что за новогодние праздники наконец-то построил себе решение для автоматической загрузки, надёжного хранения и гибкого поиска фоток и видео в семейном архиве. Оно основано на opensource сервисе Immich, который я развернул в облаке (на VPS) ☁️
И хотя, в целом, решение рабочее (3 месяца полёт нормальный), оно в каком-то смысле убивает саму идею владения своим фотоархивом, ведь теперь основное хранилище там, в облаке, а доступ к нему может пропасть по 1000 и 1 причине: от банальной неуплаты аренды до глобального сбоя в Интернете. Понимая это, я ещё тогда заказал себе домой сетевое хранилище (NAS) и к нему два одинаковых жестких диска по 2 ТБ, чтобы объединить их в RAID-1 массив и сохранять каждый байт информации дважды на случай отказа одного из дисков. К слову, ждать отказа не пришлось — один из дисков был куплен за полцены по распродаже на Озоне, приехал без гарантийного талона и сдох на первой же массовой записи. Мораль: скупой платит дважды 💰
По моей исходной задумке, данные фотоархива из облака (с VPS) должны быть скопированы домой (на NAS), а затем как-то автоматически обновляться, чтобы домашняя резервная копия оставалась актуальной. Но когда стал продумывать в деталях, осознал, что не понимаю, как именно они должны "обновляться":
— забирать каждый раз весь архив целиком не вариант, он весит 500 ГБ 🏋️
— значит, нужно переносить только разницу: некий дифф того, что изменилось с последнего переноса 🤏
Здесь важно отметить, что в разницу могут входить не только добавленные файлы, но и удалённые, потому что я периодически наведываюсь в архив, чтобы:
— удалить откровенно неудачные снимки
— убрать дубликаты, пропущенные машинными обучением
— стереть фото домов/цветов/котов, которые казались прикольными на момент снимка, а сейчас я даже не помню, где и когда (и на фига) это снято 🧐
Ок, вроде логичное требование, стоит его учесть. Но что если вдруг:
— я с бодуна наудаляю лишнего?
— или Immich сойдёт с ума (из-за бага) и грохнет часть архива?
— или вирус-шифровальщик проникнет на VPS и превратит все фото в тыкву, требуя выкуп?
Придуманное выше автоматическое обновление во всех этих случаях слепо отразит изменения на домашнюю резервную копию, умножив масштаб проблемы вместо её предотвращения. И, понятное дело, оно не сможет отличить "хорошее" удаление файлов от "плохого" 🤷♂️
Как быть? Решением видится такой компромисс, при котором все изменения всё же будут безусловно отражаться на резервной копии, но эти изменения при случае можно будет легко откатить. Осталось придумать, как это сделать 😏
Прямую наводку на ответ я нашёл в документации на Immich, в статье о расширенном резервном копировании. В качестве основного инструмента там предлагается Borg — бэкапер, написанный на Python. Borg помещает резервируемые файлы в т.н. репозиторий — версионируемое хранилище в собственном двоичном формате. Версионность здесь означает, что репозиторий может содержать множество слепков (версий) исходного архива, но хранятся они не в виде полных копий, а в виде неких диффов к предыдущим слепкам. Таким образом можно восстановить полное состояние архива на любой момент, для которого в репозитории есть слепок (версия). Дополнительно к этому нативно поддерживаются сжатие и шифрование данных в репозитории. Версии могут именоваться произвольным образом и в этом смысле похожи на коммиты в репозиториях Git, да и вся идея Borg во многом перекликается с Git'ом 🪞
Другая важная для меня фича Borg — работа с удалёнными репозиториями по SSH. Именно под неё я наконец-то заполучил себе у провайдера "белый" IP, настроил для него проброс порта на роутере и поднял вторую копию Borg на сетевом хранилище. Правда, вскоре после этого у провайдера не неделю отвалился интернет во всем подъезде. Еси чё, это не я 🙄
😁5🔥3❤1
Опираясь на эти возможности Borg, я построил такое решение:
1. Каждую ночь специальный скрипт по Cron'у создаёт новую версию всего фотоархива в локальном репозитории Borg на VPS (чтобы в случае отказа сервера бэкап пропал вместе с ним — ну удобно же, да?)
2. Этот же скрипт сразу реплицирует эту версию по SSH на удалённый репозиторий Borg, развернутый дома на NAS.
3. В случае реализации любого из перечисленных выше рисков, последняя версия архива в репозитории окажется испорченной. НО: у меня будет 3 месяца на то, чтобы откатиться к любой предыдущей — именно такую глубину хранения версий я заложил в настройки скрипта 🏛
Восстановление данных в случае Borg не тривиально, ведь он хранит их в своём собственном двоичном формате, и в этом, пожалуй, его главный недостаток. Но всё же предлагаемые им варианты восстановления покрывают все основные потребности. Варианта этих два:
1. Можно извлечь любую версию репозитория в указанную папку, как из архива. Это сделает файлы полностью независимыми от репозитория, но может потребовать много места на диске.
2. А можно смонтировать любую версию репозитория на диск в виде папки с файловой системой FUSE. Содержимое папки будет выглядеть как содержимое архива, но на самом деле это будут данные, прозрачно транслируемые Borg'ом. Благодаря этому папка не занимает места на диске (как при извлечении), но её содержимое доступно только для чтения и только при запущенном Borg'е 🤖
Я пользуюсь именно монтированием, чтобы быстро проверять содержимое копий фотоархива: походить по ним как по обычному дереву каталогов и позаглядывать в произвольные файлы. Работает это заметно медленнее, чем настоящая файловая система, но для таких целей сойдёт 🗂
Резюме
Построенное решение не на 100% страхует меня от риска потерять ценные данные. Но оно существенно снижает этот риск. Кроме того, оно создаёт достаточно удобный резервный канал доступа к фотографиям на случай, если основной канал (Immich) окажется недоступен.
В качестве доказательства — извлечённая из автоматического бэкапа фотография автора этих строк, сделанная до того, как он осознал сложности надёжного резервного копирования... 📸
1. Каждую ночь специальный скрипт по Cron'у создаёт новую версию всего фотоархива в локальном репозитории Borg на VPS (чтобы в случае отказа сервера бэкап пропал вместе с ним — ну удобно же, да?)
2. Этот же скрипт сразу реплицирует эту версию по SSH на удалённый репозиторий Borg, развернутый дома на NAS.
3. В случае реализации любого из перечисленных выше рисков, последняя версия архива в репозитории окажется испорченной. НО: у меня будет 3 месяца на то, чтобы откатиться к любой предыдущей — именно такую глубину хранения версий я заложил в настройки скрипта 🏛
Восстановление данных в случае Borg не тривиально, ведь он хранит их в своём собственном двоичном формате, и в этом, пожалуй, его главный недостаток. Но всё же предлагаемые им варианты восстановления покрывают все основные потребности. Варианта этих два:
1. Можно извлечь любую версию репозитория в указанную папку, как из архива. Это сделает файлы полностью независимыми от репозитория, но может потребовать много места на диске.
2. А можно смонтировать любую версию репозитория на диск в виде папки с файловой системой FUSE. Содержимое папки будет выглядеть как содержимое архива, но на самом деле это будут данные, прозрачно транслируемые Borg'ом. Благодаря этому папка не занимает места на диске (как при извлечении), но её содержимое доступно только для чтения и только при запущенном Borg'е 🤖
Я пользуюсь именно монтированием, чтобы быстро проверять содержимое копий фотоархива: походить по ним как по обычному дереву каталогов и позаглядывать в произвольные файлы. Работает это заметно медленнее, чем настоящая файловая система, но для таких целей сойдёт 🗂
Резюме
Построенное решение не на 100% страхует меня от риска потерять ценные данные. Но оно существенно снижает этот риск. Кроме того, оно создаёт достаточно удобный резервный канал доступа к фотографиям на случай, если основной канал (Immich) окажется недоступен.
В качестве доказательства — извлечённая из автоматического бэкапа фотография автора этих строк, сделанная до того, как он осознал сложности надёжного резервного копирования... 📸
❤6🤔3
Лыжный сезон 2025-2026 завершён ✅
Он начался необыкновенно рано — в первой половине октября внезапно выпало много снега, который потом растаял за день. И хотя это была лишь забавная случайность, она стала предзнаменованием насыщенного, мощного лыжного сезона, фактически продлившегося с середины ноября по сегодняшний день 🗓
Я провёл его в той же лыжной школе, но под руководством другого тренера — бывшего члена олимпийской сборной, к которому давно хотел попасть. Совпадение или нет, но с ним мои лыжные навыки за этот сезон выросли весьма заметно, несмотря на то, что я занимаюсь лыжным бегом больше десяти лет, из которых пять — в различных школах ⛷
Скорее всего, никто не помнит, но в ноябре я говорил вам, что купил слот на главный старт этого сезона — лыжный марафон в Кемерово в середине марта (50 км свободным стилем). Ещё шутил, что благодаря публичному объявлению мне будет сложнее отмазываться, если всё же сольюсь. Должен признаться, да, писать эти строки сейчас не просто, ибо я всё же слился... 🙄
Причин, как обычно, несколько. Среди них и внезапные морозы, вычеркнувшие две недели очень важных тренировок, и большая нагрузка по работе, когда приходилось начинать рабочий день по Новосибирску, а заканчивать по Москве, в том числе по выходным, просиживая за компьютером часы плановых тренировок. Но главная (и, возможно, вытекающая из первых двух) причина — это неготовность головой. Трудно объяснить, но это как будто кричишь куда-то вглубь себя: "Ну что, готов!?", а в ответ не задорный отклик, не ободряющий гул и не звонкое эхо, а опустошающая тишина вперемешку с лёгким ропотом и невнятным шёпотом. Конечно, можно было собрать волю в кулак и стартануть назло хандре, но я чувствовал, что этот подвиг обойдётся мне дорого и вряд ли будет в удовольствие, а для меня, любителя, это важно. Поэтому я пропустил этот старт ✖️
Взамен его я взял слот в тех же числах на давно полюбившийся мне лыжный полумарафон (30 км) в родном Академгородке и пробежал его на удивление бодро — стал 18-ым из 53 лыжников, хотя раньше почти никогда не появлялся в верхней половине финишных протоколов. После него ещё стартовал на 10 км, но чувство незакрытого гештальта всё равно не покидало, ведь сопоставимого с марафоном забега так и не было. Отдушиной стало лишь замёрзшее море — только там и только в апреле удалось за один раз пробежать 50 км, пусть и не в соревновательном темпе. И вот тогда, наконец, начало появляться чувство удовлетворения ☺️
Венцом этого периода стал день сегодняшний, а точнее, его "Пляжный забег" — любительский лыжный старт на 10 км вдоль побережья всё ещё замёрзшего водохранилища. Я много слышал об этом соревновании, но всякий раз пропускал из-за слишком позднего срока проведения — стереотипы диванного аналитика не давали понять, как можно в середине апреля бегать на скорость на лыжах, да ещё по морю (звучит как бред). Но этот день показал — очень даже можно, и это новый прикольный опыт, который хочется получить вновь 👍
Я бестолковый бегун в том смысле, что бросаю бег на всю зиму, предаваясь лыжам. А заодно и хреновый лыжник, потому что на полгода бросаю лыжи в пользу бега и плавания вместо того, чтобы всё лето делать специальную силовую работу и гонять на лыжероллерах во имя сохранения техники. И каждый раз переход с одного на другое даётся с большим трудом. И каждый такой раз вспоминается надпись на футболке какого-то случайно встреченного атлета:
И вот теперь, когда за спиной 856 км на лыжах (с ноября), настало время переобуться в кроссовки ещё раз. Каким будет следующий сезон загадывать не хочу; главное, чтобы он состоялся. Всем #спорт ✊
Он начался необыкновенно рано — в первой половине октября внезапно выпало много снега, который потом растаял за день. И хотя это была лишь забавная случайность, она стала предзнаменованием насыщенного, мощного лыжного сезона, фактически продлившегося с середины ноября по сегодняшний день 🗓
Я провёл его в той же лыжной школе, но под руководством другого тренера — бывшего члена олимпийской сборной, к которому давно хотел попасть. Совпадение или нет, но с ним мои лыжные навыки за этот сезон выросли весьма заметно, несмотря на то, что я занимаюсь лыжным бегом больше десяти лет, из которых пять — в различных школах ⛷
Скорее всего, никто не помнит, но в ноябре я говорил вам, что купил слот на главный старт этого сезона — лыжный марафон в Кемерово в середине марта (50 км свободным стилем). Ещё шутил, что благодаря публичному объявлению мне будет сложнее отмазываться, если всё же сольюсь. Должен признаться, да, писать эти строки сейчас не просто, ибо я всё же слился... 🙄
Причин, как обычно, несколько. Среди них и внезапные морозы, вычеркнувшие две недели очень важных тренировок, и большая нагрузка по работе, когда приходилось начинать рабочий день по Новосибирску, а заканчивать по Москве, в том числе по выходным, просиживая за компьютером часы плановых тренировок. Но главная (и, возможно, вытекающая из первых двух) причина — это неготовность головой. Трудно объяснить, но это как будто кричишь куда-то вглубь себя: "Ну что, готов!?", а в ответ не задорный отклик, не ободряющий гул и не звонкое эхо, а опустошающая тишина вперемешку с лёгким ропотом и невнятным шёпотом. Конечно, можно было собрать волю в кулак и стартануть назло хандре, но я чувствовал, что этот подвиг обойдётся мне дорого и вряд ли будет в удовольствие, а для меня, любителя, это важно. Поэтому я пропустил этот старт ✖️
Взамен его я взял слот в тех же числах на давно полюбившийся мне лыжный полумарафон (30 км) в родном Академгородке и пробежал его на удивление бодро — стал 18-ым из 53 лыжников, хотя раньше почти никогда не появлялся в верхней половине финишных протоколов. После него ещё стартовал на 10 км, но чувство незакрытого гештальта всё равно не покидало, ведь сопоставимого с марафоном забега так и не было. Отдушиной стало лишь замёрзшее море — только там и только в апреле удалось за один раз пробежать 50 км, пусть и не в соревновательном темпе. И вот тогда, наконец, начало появляться чувство удовлетворения ☺️
Венцом этого периода стал день сегодняшний, а точнее, его "Пляжный забег" — любительский лыжный старт на 10 км вдоль побережья всё ещё замёрзшего водохранилища. Я много слышал об этом соревновании, но всякий раз пропускал из-за слишком позднего срока проведения — стереотипы диванного аналитика не давали понять, как можно в середине апреля бегать на скорость на лыжах, да ещё по морю (звучит как бред). Но этот день показал — очень даже можно, и это новый прикольный опыт, который хочется получить вновь 👍
Я бестолковый бегун в том смысле, что бросаю бег на всю зиму, предаваясь лыжам. А заодно и хреновый лыжник, потому что на полгода бросаю лыжи в пользу бега и плавания вместо того, чтобы всё лето делать специальную силовую работу и гонять на лыжероллерах во имя сохранения техники. И каждый раз переход с одного на другое даётся с большим трудом. И каждый такой раз вспоминается надпись на футболке какого-то случайно встреченного атлета:
Бегаю я медленно, зато плаваю не быстро.
И вот теперь, когда за спиной 856 км на лыжах (с ноября), настало время переобуться в кроссовки ещё раз. Каким будет следующий сезон загадывать не хочу; главное, чтобы он состоялся. Всем #спорт ✊
👍10🔥3☃2
При подготовке к недавно анонсированному подкасту набрёл на любопытный инструмент javaperf — MCP-сервер, предоставляющий ИИ-агентам средства диагностики производительности JVM, например, возможность управлять JDK Flight Recorder'ом и анализировать его записи 🔍
Всего в его арсенале на сегодня 15 тулов ⚒️
Сам я ещё не игрался, поэтому рекомендовать не готов, но выглядит, как минимум, интересно. Если кто-то уже пощупал, поделитесь, пожалуйста, впечатлениями 👇🏼
#инструменты
Всего в его арсенале на сегодня 15 тулов ⚒️
Сам я ещё не игрался, поэтому рекомендовать не готов, но выглядит, как минимум, интересно. Если кто-то уже пощупал, поделитесь, пожалуйста, впечатлениями 👇🏼
#инструменты
👍8
Первый беговой старт летнего сезона 2026 ✅
Новосибирский Весенний Полумарафон — самое близкое мне (в географическом смысле слова) беговое соревнование, так как проходит прямо по улицам Академгородка. А стартово-финишный городок расположен между Гусями — башнями АкадемПарка, которые соединены переходом на уровне 13-го этажа. Благодаря этому организаторы заявляют, что у этого старта самая большая в мире финишная арка (65 метров) 🤓
Вчера этот забег проходил уже в 11-ый раз, а для меня участие в нём стало 5-ым. И как обычно, бежалось весьма нелегко, так как зимой я практически не бегал, а лыжный сезон завершился вот только неделю назад. Можно подумать, что бег на лыжах и в кроссовках взаимозаменяемы, но не деле это не совсем так — в этих видах спорта задействованы разные группы мышц, и характер движения тоже разный. Из-за этого переход с одного на другой осенью и весной всегда даётся мне не просто 🥵
Как бы там ни было, вчера я пробежал за 1:32:05, став 107-ым из 449 мужчин на 21 км (результаты ещё уточняются). Это стало моим 2-ым результатом за 5 попыток (лучше было только в 22-ом году, и то всего на 4 сек). Ноги, конечно, до сих пор офигевают, но кого это теперь волнует?.. 🤷🏻♂️
Примечательным в этот раз стало моё "двойное участие": перед своим забегом я свозил туда пятилетнего сына, который пробежал свой первый соревновательный километр. И хотя в сравнении с другими ребятами его результат получился скромным (5:51, 9-ый из 12), свои основные задачи он уверенно выполнил: пробежал всю дистанцию без перехода на шаг и финишировал в нормальном расположении духа, без соплей и слёз. А на детских забегах, знаете ли, часто бывает иначе 🤭
Теперь мы с ним оба — обладатели медалек с цифровой белкой и номером года в двоичной форме 👨🏻💻
На этом беговой сезон 2026 можно считать открытым. А какие спортивные планы намечены у вас? 🙂
#спорт
Новосибирский Весенний Полумарафон — самое близкое мне (в географическом смысле слова) беговое соревнование, так как проходит прямо по улицам Академгородка. А стартово-финишный городок расположен между Гусями — башнями АкадемПарка, которые соединены переходом на уровне 13-го этажа. Благодаря этому организаторы заявляют, что у этого старта самая большая в мире финишная арка (65 метров) 🤓
Вчера этот забег проходил уже в 11-ый раз, а для меня участие в нём стало 5-ым. И как обычно, бежалось весьма нелегко, так как зимой я практически не бегал, а лыжный сезон завершился вот только неделю назад. Можно подумать, что бег на лыжах и в кроссовках взаимозаменяемы, но не деле это не совсем так — в этих видах спорта задействованы разные группы мышц, и характер движения тоже разный. Из-за этого переход с одного на другой осенью и весной всегда даётся мне не просто 🥵
Как бы там ни было, вчера я пробежал за 1:32:05, став 107-ым из 449 мужчин на 21 км (результаты ещё уточняются). Это стало моим 2-ым результатом за 5 попыток (лучше было только в 22-ом году, и то всего на 4 сек). Ноги, конечно, до сих пор офигевают, но кого это теперь волнует?.. 🤷🏻♂️
Примечательным в этот раз стало моё "двойное участие": перед своим забегом я свозил туда пятилетнего сына, который пробежал свой первый соревновательный километр. И хотя в сравнении с другими ребятами его результат получился скромным (5:51, 9-ый из 12), свои основные задачи он уверенно выполнил: пробежал всю дистанцию без перехода на шаг и финишировал в нормальном расположении духа, без соплей и слёз. А на детских забегах, знаете ли, часто бывает иначе 🤭
Теперь мы с ним оба — обладатели медалек с цифровой белкой и номером года в двоичной форме 👨🏻💻
На этом беговой сезон 2026 можно считать открытым. А какие спортивные планы намечены у вас? 🙂
#спорт
🔥13👍4❤1
В Spring Айо вышла запись подкаста со мной и Алексеем Рагозиным, где мы говорили о современных подходах и инструментах для анализа и оптимизации производительности приложений на JVM, попутно раздавая спойлеры из наших курсов 🤭
Любопытно, что запись подкаста почти совпала с запуском курсов у самих ребят из Spring Айо — сейчас они набирают желающих на первый курс "Продвинутый Hibernate". Там можно будет глубоко погрузиться в реальные enterprise-кейсы и научиться их правильно "готовить" 🍳
Любопытно, что запись подкаста почти совпала с запуском курсов у самих ребят из Spring Айо — сейчас они набирают желающих на первый курс "Продвинутый Hibernate". Там можно будет глубоко погрузиться в реальные enterprise-кейсы и научиться их правильно "готовить" 🍳
spring-aio.ru
Курс Hibernate
🔥2
Forwarded from Spring АйО
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Одна из главных ценностей больших конференций (для меня) — возможность узнать, что вообще происходит в индустрии. Вот только сделать это через посещение отдельных докладов сложновато, если вообще возможно 🧠
Хорошо, что на JPoint для этого есть State of Java — отдельное выступление, полностью посвященное состоянию IT-ландшафта в релевантной нам части — в Java. Там можно как увидеть общий расклад, так и почерпнуть несколько интересных (порой забавных) инсайтов по узким темам 😉
Но чтобы представленные там результаты были адекватными, нужно охватить как можно больше респондентов, то есть, в том числе, нас с вами 👀
Для этого призываю вас пройти этот опрос от JUG.Ru, если вы причастны к разработке на Java: https://survey.jugru.org/soj2026 📋
Он не маленький (у меня ушло минут 20), но ради общего дела стоит это время потратить ✊
И даже если вы не собираетесь на ближайшую JPoint, всё равно имеет смысл заполнить, так как после конференции подробные результаты опроса будут разосланы всем его участникам 📩
Хорошо, что на JPoint для этого есть State of Java — отдельное выступление, полностью посвященное состоянию IT-ландшафта в релевантной нам части — в Java. Там можно как увидеть общий расклад, так и почерпнуть несколько интересных (порой забавных) инсайтов по узким темам 😉
Но чтобы представленные там результаты были адекватными, нужно охватить как можно больше респондентов, то есть, в том числе, нас с вами 👀
Для этого призываю вас пройти этот опрос от JUG.Ru, если вы причастны к разработке на Java: https://survey.jugru.org/soj2026 📋
Он не маленький (у меня ушло минут 20), но ради общего дела стоит это время потратить ✊
И даже если вы не собираетесь на ближайшую JPoint, всё равно имеет смысл заполнить, так как после конференции подробные результаты опроса будут разосланы всем его участникам 📩