Contacts page

I added a few more options for those who might want to contact me, so check out this new contact me page! Previously, there was only my email, and a few people even wrote me (not all of theme were spammers btw).

I included a few other channels, such as:

  • Signal
  • Mastodon

I thought about IRC and LinkedIn. I might still add IRC (placebo @ LiberaChat), but LinkedIn isn't the place for daily communications for me. It's rather a site I feel obligated to check out from time to time because how relevant it is (was?) for IT jobs in Estonia.

In any case, thanks for your attention to this matter!

Read more...

Easy to implement light and dark themes with light-dark() css function

With dread in my heart, I connected to the world wide web. I wanted to learn how to code the switch between light and dark themes for this blog, expecting some messy javascript hacks to load either one css file or another. To my pleasant surprise, I found a relatively new function that solves this exact problem: light-dark(). It essentially accepts two arguments: a color for the light theme and a color for the dark theme. Since the browser knows what the user wants, it picks the suitable color. That's it!

Dark and light themes

Read more...

New design

It was inevitable, wasn't it? After working on raweceek.eu with its old-school design and spending time looking at other websites a similar aesthetic, I couldn't not update my own blog. After all, this is my personal space on the internet, and right now, I want it to feel more fun and less sterile. This is the first redesign in my blog’s life, and quite frankly, I’m surprised I’m still using it after 1.5 years. Anyway, if you don’t see major changes, try refreshing the page with ctrl + shift + r.

Colorful pens arranged in a mason jar on a light wooden desk

Photo by Jessica Lewis 🦋 thepaintedsquare

Read more...

Switch to GitHub Actions and Packages

To no one's surprise, posting regularly to a blog when you have a job and when you don't are two different things. Nevertheless, I'm trying to reincorporate writing into my daily routine. If you're reading this, then I have succeeded! In the previous entry, I briefly described that I settled on a Go backend and a React web app for this site, explaining how code generation based on the OpenAPI specification simplifies the synchronization of any changes between the two.

Once the code is written and tested, it's time to deploy it to my VPS. I used a couple of tools for that, with the actual commands stored in Makefiles. For the Go service, it looked like this:

  1. Build a new Docker image.
  2. Save it as a tar.gz archive.
  3. Copy it to a remote server using scp.
  4. Load this image to Docker.
  5. Update the running container.

While I believe there's nothing wrong with this approach given the nature of the project, I wanted to switch to GitHub Actions and Packages. That would eradicate the need to define deployment properties on every machine where I code, let alone maintaining them up to date if. Moreover, even though the exact tools differ from company to company, this approach would be much closer to what a real business would do with their product. In other words, besides the personal interest, it is relevant to my job!

The transition was rather simple. I was already building Docker images, so all I had to do was to move this part to GitHub and push images to their registry. Here, I want to document what I did and think about what can be done next.

Read more...

The year of the personal web

Was 2023 the year of the personal website? And what about 2024?

I'm not sure about 2024, but on the last day of 2023, I'd like to respond to the first question posed by Matthias Ott. His Own Your Web newsletter was one of my motivations to keep working on this blog. Seeing others and their website designs reminds me of the days before social media, which had more room for personal expression.

I don’t mean everything is bad today. However, I like being able to personalize my blog with snowflakes, a Christmas tree at the bottom of the page, and altering the mood of my visitors. We can't do that on Facebook or Twitter, which I find odd. Many would enjoy and even pay for such personalization. The only example I can think of is Steam, where gamers can purchase various avatar borders, profile backgrounds, and other visual elements.

This year wasn't just about starting my website.

Read more...

How to generate RSS feed with ROME and Spring Boot

The modern internet is highly centralized. While independent websites still exist, we rarely go beyond the firsrt few search results and get news from social media. These platforms are the internet for many people because they not only help old friends stay in touch, but also act as content aggregators and providers, enabling algorithms to control what we see.

Recent changes on now X and Reddit pushed me to take a look at decentralized solutions. I joined Lemmy and Mastodon. Both are significantly smaller than their commercial counterparts and don't have as much content, which makes mindless scrolling for hours impossible. This change alone freed up a lot of time and helped me realize how addictive these services are.

On the other hand, the absence of a 'smart feed' puts responsibility of finding new content on the user. As I discovered, people continue to post on personal blogs, and some websites still generate RSS feeds. I believe it's important to have full control over our feeds. The cheap pleasure that comes with scrolling social media harms our lives and distracts us from our long-term goals. Instead of doing something useful, we spend endless hours arguing with strangers and watching memes.

Algorithms' job is to keep us engaged, they don't care whether we get useful information or engage in benificial activities in the process. In fact, platforms like Facebook profit off hate speech and misinformation. See also: How Facebook Became a Tool for Genocide.

To be part of the solution and not the problem, I decided to launch this blog a couple of months ago. Now, I want to introduce an RSS feed that should make following me easier. Let's see how I implemented it with ROME, Spring Boot, Docker and Nginx!

Read more...