<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://bridgetownrb.com/" version="2.0.5">Bridgetown</generator><link href="https://seroperson.me/feed.xml" rel="self" type="application/atom+xml" /><link href="https://seroperson.me/" rel="alternate" type="text/html" /><updated>2026-02-13T02:43:35+00:00</updated><id>https://seroperson.me/feed.xml</id><title type="html">seroperson’s website</title><subtitle>My personal blog with articles and thoughts on various software development topics: Scala, Nix, Jekyll, Bridgetown, JVM things and so on.</subtitle><author><name>seroperson</name><email>seroperson@gmail.com</email><uri>https://seroperson.me/</uri></author><entry xml:lang="ru"><title type="html">Live Reloading на JVM</title><link href="https://seroperson.me/ru/2025/11/28/jvm-live-reload/" rel="alternate" type="text/html" title="Live Reloading на JVM" /><published>2025-11-28T00:00:00+00:00</published><updated>2025-11-28T00:00:00+00:00</updated><id>https://seroperson.me/ru/2025/11/28/jvm-live-reload/</id><author><name>seroperson</name></author><category term="jvm" /><category term="scala" /><category term="java" /><category term="kotlin" /><category term="live-reload" /><category term="hot-reload" /><summary type="html">В этой статье я хотел бы обобщить всё, что мы знаем про Hot/Live Reloading на JVM, и далее показать, как я пришел к реализации универсального Live Reloading решения для любых веб-приложений на JVM. Вкратце, в этой статье мы: - Попробуем сформулировать, какие виды релоадинга бывают. - Подробно рассмотрим, какие реализации существуют на JVM. - И немножко обсудим детали реализации универсального решения, и что вообще к нему привело.</summary></entry><entry xml:lang="en"><title type="html">Live Reloading on JVM</title><link href="https://seroperson.me/2025/11/28/jvm-live-reload/" rel="alternate" type="text/html" title="Live Reloading on JVM" /><published>2025-11-28T00:00:00+00:00</published><updated>2025-11-28T00:00:00+00:00</updated><id>https://seroperson.me/2025/11/28/jvm-live-reload/</id><author><name>seroperson</name></author><category term="jvm" /><category term="scala" /><category term="java" /><category term="kotlin" /><category term="live-reload" /><category term="hot-reload" /><summary type="html">Here, I want to summarize everything I know about hot and live reloading on the JVM and then show how I ended up implementing a universal live-reloading solution for any web application on the JVM. In short, in this article: - We&apos;ll try to answer what types of reloading we know. - Then we&apos;ll take an extended overview of existing reloading solutions on the JVM. - Finally, we&apos;ll look into the details of implementing the universal framework-agnostic live-reloading solution.</summary></entry><entry xml:lang="en"><title type="html">Making your JVM application interruptible</title><link href="https://seroperson.me/2025/10/20/interrupting-jvm-application/" rel="alternate" type="text/html" title="Making your JVM application interruptible" /><published>2025-10-20T00:00:00+00:00</published><updated>2025-10-20T00:00:00+00:00</updated><id>https://seroperson.me/2025/10/20/interrupting-jvm-application/</id><author><name>seroperson</name></author><category term="scala" /><category term="java" /><category term="kotlin" /><category term="jvm" /><category term="interrupt" /><summary type="html">Today we&apos;ll discuss how to make your JVM application interruptible, what exactly it means, why you would need it, and how it can improve your development experience.</summary></entry><entry xml:lang="en"><title type="html">Implementing a JWT-based authorization for zio-http</title><link href="https://seroperson.me/2025/09/03/zio-http-jwt-auth/" rel="alternate" type="text/html" title="Implementing a JWT-based authorization for zio-http" /><published>2025-09-03T00:00:00+00:00</published><updated>2025-09-03T00:00:00+00:00</updated><id>https://seroperson.me/2025/09/03/zio-http-jwt-auth/</id><author><name>seroperson</name></author><category term="scala" /><category term="zio" /><category term="zio-http" /><category term="pac4j" /><category term="jwt" /><summary type="html">Recently I&apos;ve published my `pac4j` wrapper for `zio-http`, [zio-http-pac4j][1]. For those who aren&apos;t familiar with the underlying technology, [pac4j][2] is a Java security framework which allows you to easily implement authorization and authentication mechanisms. Today I want to show how to implement JWT-based authorization using this library.</summary></entry><entry xml:lang="ru"><title type="html">Мультиплеер в Цивилизации 5</title><link href="https://seroperson.me/ru/2025/09/01/civilization-5-multiplayer-modding/" rel="alternate" type="text/html" title="Мультиплеер в Цивилизации 5" /><published>2025-09-01T00:00:00+00:00</published><updated>2025-09-01T00:00:00+00:00</updated><id>https://seroperson.me/ru/2025/09/01/civilization-5-multiplayer-modding/</id><author><name>seroperson</name></author><category term="reverse-engineering" /><category term="cpp" /><category term="gaming" /><summary type="html">Некоторое время назад я участвовал в разработке поддержки мультиплеера для одной глобальной модификации Цивилизации 5 и сегодня хотел бы поделиться здесь некоторыми подробностями о том, как устроена сетевая игра, как всё-таки запустить ее с модами, что с ней вообще не так, и как мы это фиксили.</summary></entry><entry xml:lang="en"><title type="html">Choosing a self-hosted web analytics solution</title><link href="https://seroperson.me/2025/08/12/choosing-a-self-hosted-web-analytics/" rel="alternate" type="text/html" title="Choosing a self-hosted web analytics solution" /><published>2025-08-12T00:00:00+00:00</published><updated>2025-08-12T00:00:00+00:00</updated><id>https://seroperson.me/2025/08/12/choosing-a-self-hosted-web-analytics/</id><author><name>seroperson</name></author><category term="web-analytics" /><category term="self-hosted" /><category term="open-source" /><category term="google-analytics" /><summary type="html">Recently I decided to finally get rid of Google Analytics in favor of a self-hosted solution. That&apos;s how it went, a list of available options to migrate and why you need it too.</summary></entry><entry xml:lang="en"><title type="html">Simple Reminder Telegram MiniApp</title><link href="https://seroperson.me/2025/06/19/simple-reminder-telegram-miniapp/" rel="alternate" type="text/html" title="Simple Reminder Telegram MiniApp" /><published>2025-06-19T00:00:00+00:00</published><updated>2025-06-19T00:00:00+00:00</updated><id>https://seroperson.me/2025/06/19/simple-reminder-telegram-miniapp/</id><author><name>seroperson</name></author><category term="telegram" /><category term="miniapp" /><category term="bot" /><category term="scala" /><category term="svelte" /><summary type="html">I&apos;m glad to present you my another pet-project and, as before (**[📫 Link saver bot for Telegram][1]**), check the internals, discuss the used technology stack and other things.</summary></entry><entry xml:lang="en"><title type="html">Previewing nix-managed dotfiles</title><link href="https://seroperson.me/2025/05/26/previewing-nix-managed-dotfiles/" rel="alternate" type="text/html" title="Previewing nix-managed dotfiles" /><published>2025-05-26T00:00:00+00:00</published><updated>2025-05-26T00:00:00+00:00</updated><id>https://seroperson.me/2025/05/26/previewing-nix-managed-dotfiles/</id><author><name>seroperson</name></author><category term="nix" /><category term="dotfiles" /><category term="configuration" /><summary type="html">Some time ago I wrote an article **[⚙️ Managing dotfiles with Nix][1]**. Since then not many things have changed in my repository, but recently I managed to implement a feature, which I&apos;ve been aware of for quite a long time: previewing dotfiles.</summary></entry><entry xml:lang="en"><title type="html">Preparing a project to be vibe-coded</title><link href="https://seroperson.me/2025/05/02/preparing-a-project-to-be-vibe-coded/" rel="alternate" type="text/html" title="Preparing a project to be vibe-coded" /><published>2025-05-02T00:00:00+00:00</published><updated>2025-05-02T00:00:00+00:00</updated><id>https://seroperson.me/2025/05/02/preparing-a-project-to-be-vibe-coded/</id><author><name>seroperson</name></author><category term="ai" /><category term="vibe-coding" /><category term="cursor" /><summary type="html">If you are an IT specialist, you have probably heard about tools like [Cursor][15], [Windsurf][16], [Cline][17], and [Roo Code][18]. These tools can create entire projects for you even if you don&apos;t know programming. You just need to download an IDE (or VS Code with some extensions), give it instructions, and wait for the result. If you&apos;re lucky, it will even work. I have spent some time using these AI tools, and today I want to share my experience about how to prepare a project for &quot;vibe-coding&quot;. I used Cursor the most, but it doesn&apos;t matter much because all these tools use the same AI models. The main difference is usually the UI. What I&apos;m going to talk about applies to all these kinds of tools.</summary></entry><entry xml:lang="ru"><title type="html">Работа с callback_data в Telegram-боте с использованием protobuf + base85</title><link href="https://seroperson.me/ru/2025/02/05/enhanced-telegram-callback-data/" rel="alternate" type="text/html" title="Работа с callback_data в Telegram-боте с использованием protobuf + base85" /><published>2025-02-05T00:00:00+00:00</published><updated>2025-02-05T00:00:00+00:00</updated><id>https://seroperson.me/ru/2025/02/05/enhanced-telegram-callback-data/</id><author><name>seroperson</name></author><category term="telegram" /><category term="bot" /><category term="scala" /><summary type="html">Если Вы когда-либо разрабатывали Telegram-бота, Вы наверняка знаете, что такое [callback_data][1]. Если нет, вкратце, это произвольная строка, которая привязывается к кнопкам в чате, при помощи которой на бэкенде Вы определяете, какая именно кнопка была нажата. Когда Ваш бот масштабируется, скорее всего управление значениями `callback_data` превращается в &quot;кашу&quot;. По крайней мере, так произошло у меня. Поэтому сегодня я хочу поделиться с Вами практикой по организации этой всей &quot;каши&quot; в красивый и органичный код.</summary></entry></feed>