Однодневная поездка в Суботицу и Сомбор

Вчера ездили смотреть города на севере Сербии. Первой по плану была Суботица.

Субо́тица — город в северной Сербии, в автономном крае Воеводине. Является вторым по величине городом Воеводины после города Нови-Сада и пятым по величине городом Сербии (не включая Косово), а также самым северным городом Сербии. Население города по данным на 2022 год составляет 94 228 человека, население агломерации, городского поселения Суботица, составляет 123 952 человека.

Когда выезжали было очень туманное утро. Эдакий Silent Hill. По-своему прекрасен, но красоты смотреть сложно. Однако через час езды туман начал потихоньку рассеиваться. И, пусть и не всё, но мы успели посмотреть желаемое.

20241117_085915_5e6942.webp
Видимость 0, идём по приборам

Суботица заметно отличается от Нови Сада. Сказывается соседство с Венгрией. Если верить статистике, их около 30%. Очень много венгерского стиля. Такого яркого, аляповатого, со странными оттенками. Отличаются улицы: они шире. По крайней мере, в туристическом центре. Уверен, что если уйти чуть дальше в сторону спальных районов, картина может измениться. Но мы туда не дошли.

20241117_090036_affa20.webp
Ратуша в тумане

Дошли же мы до Ратуши.

Ратуша в Суботице – самое большое и, по мнению многих, самое красивое здание Суботицы. Он был построен за два года, с 1908 по 1910 год, но еще два года лучшие мастера того времени потратили на украшение его интерьеров. Здание имеет статус памятника культуры исключительного значения.

В полдень двери Ратуши открываются и туда можно зайти. Важно: зайти можно только с экскурсоводом. Там очень много дверей и легко заблудиться, поэтому сейчас туда водят только организованные экскурсии. Если своего экскурсовода нет, там всегда набирается группа, надо лишь подождать. По крайней мере у нас было именно так. Билет и экскурсия стоят 200 — 400 RSD. Стоимость зависит от продолжительности. В любом случае, это очень дешево и стоит того.

Уже после посещения Суботцы я узнал, что есть сайт для туристов The Official Tourism Website of Subotica где можно посмотреть фото и почитать про город.

Пока ждали открытия Ратуши, успели погулять по городу.

20241117_091448_0540c8.webp

20241117_091607_3eedab.webp

А к обеду солнце уже разогнало туман и мы поднялись на смотровую площадку на Ратуше.

20241117_091834_608b86.webp

20241117_091918_4f7855.webp

Туристом очень приятно и интересно бросить по этим милым улочкам, делать фото и удивляться милой и иногда вычурной архитектуре. Но видно, как много объекты требуют ремонта, а сил и средств на всё не хватает.

Во второй половине дня мы отправились с Собмор. И хотя главный объект нашей поездки мы уже посмотрели и нагулялись, хотелось узнать, а что же там в Сомборе.

Со́мбор — город в Сербии, в автономном крае Воеводина. Численность населения составляет 41 814 чел. (2022). Сомбор является административным центром Западно-Бачского округа Сербии и общины Сомбор.

20241117_092459_7bdb92.webp

Но Сомбор не поразил наше воображение. Сейчас, прокручивая в памяти назад нашу поездку мне сложно найти какое-то яркое впечатление об этом городе. Это просто небольшой городок. Он простой, обычный, для жизни.

20241117_093227_e03d11.webp

В целом, поездка оказалась очень приятной: короткие поездки на машине от одного города до другого, безветренные +9, легкие перекусы с чаем на лавочке и в кафе, прогулки по удобным пешеходным улочкам и быстрое возвращение домой. Кажется из этого и складывается отличное путешествие одного дня.

Подборка ссылок #05

Из рассылки Ruby Weekly узнал о геме для пагинации Pagy. Судя по тестам, это прекрасная замена Kaminari. Pagy быстрее и потребляет меньше памяти.

Вышел Rails 8.0 🥳 и Ruby 3.3.6.

У "Марсиан" вышла классная статья 11 HTML best practices for login & sign-up forms.

Сразу две статьи про логический оператор присваивания &&=: JavaScript's &&= Operator: Understanding Logical AND Assignment и JavaScript's ??= Operator: Default Values Made Simple.

Вышел в свет Rspack 1.0, это сборщик модулей написанный на Rust. Судя по тестам он в несколько раз быстрее Webpack и чаще всего быстрее Vite (за исключением HMR режима).

10 км в Эчке

Вчера были фотки в телеграм канале, а сегодня немного больше подробностей.

20241027_104356_389e55.webp
Парк в Эчке

26-го октября я бежал в Эчке 10 км. Эчка (Ečka) село в Сербии, в Воеводине, недалеко от Зренянина. Если верить Википедии, там проживает всего 4513 жителей. Но село очень милое, плоское, с асфальтированными улицами и бескрайними полями.

20241027_101042_4e46e2.webp
По дороге в Эчку

По ощущениям размах забега превзошёл мои ожидания. Для начала, посмотрите на стартовый пакет. В нём нет футболки, но он какой-то душевный. Например, есть доска для медалей, календарик на 25-й год, ручку и ваучер на бургер. А также разные промо напитки и даже гель для стирки 😀

20241027_101853_a302ef.webp
Стартовый пакет Эчки

Это не был мой главный старт. Но я решил побежать, ради того, чтобы выбежать из 50-ти минут. Изначально, выбежать из 50-ти планировалось на белградской десятке. Но тогда немного приболел и бежал уже не так быстро как хотелось. Скорее так, чтобы добежать. Потом была новисадская пятерка. И следующий, наверное, главный забег — полумарафон в Боке. А так как план по 10-ке не закрыл, решил побежать в Эчке.

Установка была начать по 4:35, на втором километре ускориться до 4:30, а дальше смотреть по состоянию и по возможности наращивать. Я даже сделал себе шпаргалку на руке, чтобы не забыть.

20241027_102357_47e50c.webp
Шпаргалка

Не то чтобы "как только начинаешь бежать цифры сразу выветриваются из головы". Нет. Просто когда смотришь на часы, можно взглядом зацепить текущий пейс и целевой. Это немного отрезвляет. Особенно на 6-м и 7-м километрах, когда понял, что стало тяжело и ноги стали ватными. По ощущениям скорость постепенно начала падать, а время замедляться. И вот смотришь на часы, а там 4:40, а надо быстрее. Цифры-то вон, на руке написаны. Вообще очень сложно уговорить себя бежать так, как надо. В начале старта, полно сил и хочется рвануть на адреналине. Но сдерживаешь себя, чтобы не растерять силы. После экватора уговариваешь себя бежать, не то чтобы ускоряясь, а хотя бы с той же скоростью, что и раньше.

Если верить часам, то 10км я преодолел за 44:23. Это очень крутое время для меня. Еще несколько месяцев назад это же расстояние я пробегал за 55 минут. Сама трасса была чуть длиннее, 10.2км. Для истории оставлю маршрут и сплиты из Strava

20241027_103444_54aa29.webp

Что еще можно сказать? Я очень доволен и своим результатом, и тем, как всё было организовано. Приятная атмосфера. На протяжении всей трассы стояли люди, много детей, которые держали воду, или просто кричали и поддерживали и давай пять 😀 Иногда люди просто ставили столик у своего двора с едой и сидели ели, смотря на забег.

20241027_104006_0c72cd.webp
Медаль с крепостью на фоне той самой крепости

И вот забег закончен. Медалька получена. А впереди еще много работы в подготовке к полумарафону.

Подборка ссылок #04

Design tokens cheatsheet — статья о том что такое дизайн-токены и их структурировать. А вот еще одна инструкция по работе с токенами The ultimate Design Token setup

С тех пор как David Heinemeier Hansson перешел на линукс, он много рассказывает о том, как прекрасен VIM. В общем-то я с ним согласен. Вот его пост на эту тему Wonderful vi

SQLite кажется недооценен. Почитайте почему его стоит использовать Why you should probably be using SQLite. Кстати, в Ruby on Rails 8 планируется поддержка SQLite в продакшене.

На Reddit наткнулся на пост о том, как добавить поддержку Vue в NeoVim Finally, NeoVim + Native Vue LSP Perfection.

WebStorm сделали бесплатным для некоммерческих проектов.

Обновления в блоге

Последние пару неделю работаю над блогом. До этого я писал, что он работает на Nuxt.js + Wordpress. И до начала октября все было именно так. Nuxt.js на фронте, бэкенд (если можно так выразится) на Wordpress. И утверждал и продолжаю утверждать, что панель управления Wordpress одна из самых удобных.

В целом, меня всё устраивало. Но были нюансы, которые очень хотелось исправить. Например, мне ужасно не нравится версионирование записей в Wordpress. Пока пишешь один пост, получаешь множество сохранений в черновик. Я знаю для чего это, но мне это не нравится.

Еще один момент — система плагинов и технически сложная кастомизация. Чтобы что-то сделать в админке, например, добавить кастомные поля к посту, нужно ставить плагин. Все это здорово, но кажется, что ты не владеешь продуктом. Если завтра плагин обновится и с ним будет проблема, это может поломать сайт. Так совпало, но спустя неделю после переезда у Wordpress и wpengine был спор о правах и отчислениях. Дошло до того, что команда Wordpress выпустила свой плагин Secure Custom Fields.

Доработка темы для Wordpress в 2024-м уже не кажется простой задачей. Темы стали сложнее, в них куча логики и разбираться, если честно, нет ни времени, ни желания.

Так что с недавнего времени я переехал на Ruby on Rails. Это интересный опыт. С одной стороны, хотелось посмотреть версию 7.2 в работе. С другой, хотелось быстренько сделать проект так, как хочется внутри, без лишнего усложнения. Без проблем и экспериментов не обошлось.

Попробовал Active Storage, понял что мне не нравится это решение и откатил всё обратно. В итоге, решил, что картинки я буду заливать на CloudFire при создании поста, а удалять их буду вручную. Решение не совсем идеальное, но оно работает и на текущий момент меня устраивает.

Вообще старался сделать всё как можно проще. После админки Wordpress это сильно заметно 😀

Из функционала: подписка на RSS, оптимизация и конвертация картинок в webp на стороне рельс, а не на CloudFire, собственный сборщик статистики. Не люблю Google Analytics, а большинство других аналитик платные. Мне же интересно общее количество посещений, страны и устройства. Нет так уж много, согласитесь. Ранее я использовал SimpleAnalytics. Отличный сервис, но на этот раз решил реализовать свою версию. Ну и конечно же самый настоящий серверный рендеринг приготовленный на самом настоящем сервере. Без костылей и хаков 😀.

В планах есть еще идеи по улучшению и доработки. Например, email рассылка, конвертация :) => 😀, хранение черновика заметки в localStorage, кросс-постинг в телеграм канал и прочие нужные и ненужные штуки. В общем, всё то, что неизбежно ведет систему к усложнению.

Личный рекорд: 5км за 21:12

20241014_085315_b51d07.webp

Сегодня я пробежал пятерку за 21:12. Я когда-то смотрел на такую цифру и думал "ну чуть-чуть подготовиться и можно пробежать". Сейчас конечно совсем иначе на эту цифру смотрю. Подумать только, я пробежал километр за 4 минуты и 14 секунд. И так пять раз. Хотя как мы знаем (из прошлых постов) бежать пришлось не пять раз, а шесть раз. Потому что заявленная пятерка на самом деле шесть километров.

Но последний, шестой километр, это отдельный разговор. Если считать его, то общее время 26:13, а дистанция по часам 6,12 км. И вот он прям ощущался всем телом: ноги стали немного ватными, а в голове возникла мысль "А зачем?". И вот эта мысль очень коварная. На последних шестиста метрах меня обогнала девушка. Я заранее знал, что обгонит, она очень хорошо шла, потом перестроилась за меня, чтобы ветровой поток уменьшить и технично обошла в конце. И вот когда она обогнала, появилась мысль "а зачем?". И это вроде какие-то секунды пока ты пытаешься побороть желание притормозить, но это очень долгие секунды. Мало того, что ноги бежать должны, так еще и надо придумать как заставить себя ускориться. В итоге на последней сотне метров я подумал, что если не вжарить, то меня еще кто-то обгонит. И вжарил. Никто конечно не обогнал 😀

Сам очень доволен результатом, потому что всё было по плану!

PS: Спасибо за фото Анастасии Салтыковой

Как подключить кастомный домен на Cloudflare к Railsway

Перенес управление доменом на Cloudflare. И пришлось немного почитать документацию, как же настроить и соединить сайт на railway.app и домен на Cloudflare.

В первом приближении всё казалось просто. Railway.app генерирует проекту CNAME. Казалось бы бери, подставляй конфиг и всё. На практике оказалось чуть интереснее и документацию пришлось почитать немного внимательнее.

Сохраню для истории ссылку настройка корневого домена Cloudflare

Новисадская почти шестерка

Уже на следующей неделе новисадская пятерка. Которая совсем и не пятерка, а аж шестерка. Мы это уже тысячу раз обсуждали: готовишься бежать пять, бежишь и где-то на четвертом километре закрадывается сомнения. Кажется, где-то ошибка. Выбегаешь все пять… И до финиша еще километр почти. А ты уже, так сказать, в пижаме. И бежать-то может и хочется, но не можется.

Но в этом году, я опытнее. Хаха. Сразу готовлюсь к шести. Иногда готовлюсь, а иногда прокрастинирую. Вот даже сейчас, наблюдая как темнеет на улице, я гадаю какие же все таки у меня шансы выйти и пробежать 12 км, с какими то пугающими ускорениями. Шансы примерно 50/50. Если какой-нибудь пирожок не запрыгнет в меня в ближайший час, то шансы на бег сильно увеличатся. Но знаете, пирожки в это время суток очень прыгучие. Буду наблюдать за ситуацией.

Про технологии

Этот блог работает на WordPress. Точнее его часть — админка. А фронтенд на nuxtjs. Когда-то я много работал с WordPress. Был даже модератором русскоязычного сообщества, делал темы и сайт на заказ. И вот что хочу сказать: панель управления WordPress была и остается одной из лучших. Знаете слоган у Эппл “это просто работает”. Так вот то же самое можно сказать про админку вордпресса. Кликаешь пару кнопок и всё, можно писать.

Но за такое удобство приходится платить. Размер базы растет как на дрожжах. Версионность и черновики штука хорошая, но некоторые вещи сохраняются избыточное количество раз. В каталоге с изображениями через некоторое время начинается хаос, через полгода-год туда вообще лучше не смотреть — непонятно используются ли загруженные картинки или уже нет. Плагины и темы тоже стоят отдельной дискуссии. За столько лет развития WordPress написано огромное количество плагинов. Часть из них уже давно стали платными и перешли на систему месячных подписок. В результате обновления от разработчиков приходят чуть ли не каждую неделю и следить за всем стало очень сложно. WordPress стал очень сложным продуктом.

Но сложными стали многие системы. Помню как лет десять назад раскладывал в директориях css и js и прогонял gulp-task, чтобы мои псевдокомпонентики склеивались в банды. Потом появился вебпак, react/vue и компоненты стали настоящими, не псевдо. Потом структура приложений и сервисов усложнялась и вот уже появляются различные архитектурные слои. Нельзя просто взять и, простите, наговнякать. Надо все разложить по полочкам, настроить вебпак, отрастить бороду. Усложнился и javascript. Вот менеджеры состояний, вот веб-сокеты, local first подход. В какой-то момент проектирование архитектуры пет-проектов стало такой, что пока все подготовишь, уже запал кончился. А список пакетов из npm, которые еще надо установить — нет. Не то, чтобы это прям плохо, это естественное развитие и взросление системы. Просто стало сложно следить и управлять всем этим.

Но я тут начал книжку про Ruby on Rails читать. И для закрепления знаний, конечно писать код. И знаете что? В мире есть место где можно говнякать. Что 10 лет назад, что сейчас. Хочешь свалить все стили в assets/stylesheets? Пожалуйста. Хочешь вмонстрить кусок скрипта прямо во вьюху? Не возбраняется. Тем более, что это местами очень даже удобно. И вот я раньше сильно плевался от подобного подхода. Но сейчас… Не то чтобы я стал сторонником, но если кусок скрипта нужен только на этой странице, то может быть проще вздохнуть и добавить его туда.

И вот пет-проект на рельсах, где можно немного отступить от привычных норм выглядит каким-то глотком свободы. Уверен, что развивая проект, со временем он тоже станет сложным и его придется делать архитектурно красивым и структурированным. Но вот сейчас, кажется, я до конца понимаю как вышло так, что Ruby on Rails стал таким популярным, почему каждый год все ждут когда же он помрёт. А DHH раз за разом выпускает новую версию и RoR всё ещё популярен.

Мне кажется потому, что это то самое место, где все ещё можно г… Гибко решать свои задачи. Ну вы поняли 😀

🎂🎉😀

Сегодня мне 40. Когда мне было 20, те самые сороколетние казались мне такими старыми. Вчера же двадцатилетняя девушка говорила мне “вы” “из уважения”. Забавно, но сейчас в 40, я не ощущаю себя на этот возраст. Ну может 30, ну 35. Ну максимум 38. Но 40! Цифра-то какая.

Меж тем, что мы имеем на этот момент:

— Построили дом, посадили дерево, растим и так далее
— Пожил в двух странах не как турист, а прицельно, надолго. В одной понравилось, в другой не очень.
— Бегаю. Так как не бегал ни в 30, ни в 20.
— Работаю работу и, в целом, доволен ей.
— Научился понимать что мне нравится, а что нет. Разобрался в том, что и как работает для меня и почему я что-то делаю, а что-то не делаю.

И вот каждый пункт по отдельности хорош сам по себе. А все вместе они вообще представляют собой классную смесь из которой и состою я. И конечно же я очень рад, что меня окружают очень классные люди: родители, семья, друзья и просто знакомые. Я благодарен всем, потому что отчасти именно благодаря им я есть я. С днём рождения меня и спасибо всем причастным 🙂