<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gabriel Szabó</title>
    <description>The latest articles on DEV Community by Gabriel Szabó (@szabo2957).</description>
    <link>https://dev.to/szabo2957</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4206805%2F89ce9a08-4038-49be-a5a0-23e25c89aa2c.jpg</url>
      <title>DEV Community: Gabriel Szabó</title>
      <link>https://dev.to/szabo2957</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/szabo2957"/>
    <language>en</language>
    <item>
      <title>A developers journey to blogging</title>
      <dc:creator>Gabriel Szabó</dc:creator>
      <pubDate>Sun, 25 Oct 2026 17:01:45 +0000</pubDate>
      <link>https://dev.to/szabo2957/a-developers-journey-to-blogging-136f</link>
      <guid>https://dev.to/szabo2957/a-developers-journey-to-blogging-136f</guid>
      <description>&lt;h1&gt;
  
  
  My (almost) never ending story
&lt;/h1&gt;

&lt;p&gt;I have been a fan of sharing content for a long time. I liked writing down things, share it, make it available. I had several good reasons for this. For once, I forget things. I like writing things down so I don't forget them (which I truly tend to do). I also like telling stories. Also, last but not least, opening a small window into the chaos I call myself.&lt;/p&gt;

&lt;p&gt;My issue was however, that somewhere deep inside I was not a fan of of any blogging platforms I tried so far. I briefly used one of the major ones (I'm not going to call names), but then they changed and it got a paid service. Since I'm a big believer in freedom and open source, I quit that blogging platform. &lt;/p&gt;

&lt;p&gt;I started my own.&lt;/p&gt;

&lt;p&gt;And what a "platform" it was. A simple file hosting on my cloud machine. Static pages hosted by nginx a Linux box. That was my iteration zero. And guess what, it worked. I was happy for a while.&lt;/p&gt;

&lt;p&gt;Then came a crucial vacation, a.k.a. the point of no return.&lt;/p&gt;

&lt;h2&gt;
  
  
  Command line, CGI, Bash and a smartphone
&lt;/h2&gt;

&lt;p&gt;The urge of sharing some details during that vacation was at an all-time high for me. I really wanted to get something up and running so I can share about my vacation is it went on. The only issue was, that I only had an Android smartphone with me. So I did what people in they right mind (or those wanting to keep their sanity) should avoid, and made my first blog via my smartphone, an SSH connection to my Linux box and some previous experience with CGI and a custom CGI server I wrote in Java a few months back.&lt;/p&gt;

&lt;p&gt;My idea was simple in essence: created a small CGI shell script that was able to render Markdown files to HTML, parse request paths and some simple query strings. The project is still available &lt;a href="https://github.com/szabogabriel/CGIBlog" rel="noopener noreferrer"&gt;here&lt;/a&gt;. It's nothing fancy, but it worked well. However, believe me when I say, typing bash scripts on a virtual keyboard of a smartphone, and resizing images on Linux via CLI was not as much fun as I thought it will be. However, I ended up using that blog platform for a year or so. I eventually got fed up with the fact, that I had to SSH into my Linux box to create new entries since this blog was strictly just listing already available entries.&lt;/p&gt;

&lt;p&gt;I also tried running this CGI blog on a first generation Raspberry PI, but it was painfully slow. Like 1 sec per page rendering, slow. But this waste of performance got me into the next chapter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Java entering the scene
&lt;/h2&gt;

&lt;p&gt;At this point I already went through different attempts to make both my CGI server and CGI shell script implementations a bit more performant. I got some success, but nothing ground breaking. Eventually I hit a plateau, where I couldn't get it any better. At this point my CGI Java server was running with 1+ year uptime with only 8MB heap space and I got thinking: what if I would move the rendering of the Markdown pages to the Java CGI server. Enter uBlog.&lt;/p&gt;

&lt;p&gt;I still had the goal of a minimal memory and CPU footprint, ideally a high performance and lean code in mind. So I got busy. I kept things that worked just fine (socket connections instead of an established HTTP server, worker queues etc.).&lt;/p&gt;

&lt;p&gt;I created a first draft, that was still read-only. This means no editing, no updates etc. Just list the markdowns in categories and render them to HTML. I had some experience with &lt;a href="https://mustache.github.io/" rel="noopener noreferrer"&gt;Mustache&lt;/a&gt;. So I grabbed &lt;a href="https://github.com/szabogabriel/jMustache" rel="noopener noreferrer"&gt;my implementation&lt;/a&gt; of it as a baseline. I also figured that I have a legitimate use case for &lt;a href="https://github.com/szabogabriel/JDI" rel="noopener noreferrer"&gt;my dependency injection framework&lt;/a&gt;, so I included that as well. I grabbed a 3rd party Markdown rendering framework since my regex replacing markdown with HTML tags proved to be insufficient. At this point it started taking shape and I was happy. My blog written in Java was back on-line. Best of all, that it still only consumed 8MB heap space in production (4MB during local tests, but I "wanted to make it sure") and it rendered in about 1-2ms. Can't even compare to the CGI version and it's 2-300ms rendering times.&lt;/p&gt;

&lt;h2&gt;
  
  
  uBlog 1.0.0
&lt;/h2&gt;

&lt;p&gt;A few months (ok. A year) passed. A lot of things happened, and I had a lot of things to share. However, I still had to log-in via SSH and write out some markdown, link images manually etc. That's really not so much fun for me anymore, and to be honest, it kept me write my entries at all.&lt;/p&gt;

&lt;p&gt;My solution for that was the solution of any sensible engineer: extend my uBlog's functionality.&lt;/p&gt;

&lt;p&gt;So I did.&lt;/p&gt;

&lt;p&gt;I kept things that proved correct. The socket connection and custom HTTP handling, file listing, template caching etc. But I added new features, like cookies, user management, upload of files and images, customizing templates via externalized properties etc. It felt like fighting Hydra; after finishing one feature, two new ones were popping up. I did my best to stay true to my initial ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep the file listing and filesystem-based logic.&lt;/li&gt;
&lt;li&gt;Keep it light weight and fast.&lt;/li&gt;
&lt;li&gt;Target a single user instance (no tenants for example)&lt;/li&gt;
&lt;li&gt;Keep UI separated via Mustache.&lt;/li&gt;
&lt;li&gt;Make it open source and developer-friendly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I was working on it rather intensively for the last few weeks. And now I think I can finally say: it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Go live
&lt;/h2&gt;

&lt;p&gt;The project, although marked with version 1.0.0, is still in its early phase. I think however that despite that, it still delivers all the functions I would expect from such a platform.&lt;/p&gt;

&lt;p&gt;I can create entries via the web front end. Upload images and files.  I can also have unlisted entries and publish them via a generated link. There is no DB, just files on the filesystem and a few folders configured via environment variables. Memory consumption can get as low as 4MB heap (and around 40-50MB in total), rendering time on my local machine between 1-2ms for a simple template. Local performance tests (done via &lt;code&gt;wrk&lt;/code&gt;) with different templates and memory settings were also rather reassuring as well. See for yourself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3djozvfhu0umdz4demqk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3djozvfhu0umdz4demqk.png" alt=" " width="800" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I published it.&lt;/p&gt;

&lt;p&gt;I created a web available &lt;a href="https://ublog.online" rel="noopener noreferrer"&gt;here&lt;/a&gt; that is using uBlog itself to render. I also made a &lt;a href="https://hub.docker.com/repository/docker/ublog/ublog" rel="noopener noreferrer"&gt;docker hub&lt;/a&gt; for the project, so I can share it with non-Java / non-developers more easily.&lt;/p&gt;

&lt;h2&gt;
  
  
  The future
&lt;/h2&gt;

&lt;p&gt;I'm going to keep this as my personal blog engine for now. I also plan to make improvements with the basic philosophy of minimalism in mind. But I'm just one person and can do so much.&lt;/p&gt;

&lt;p&gt;That brings me here.&lt;/p&gt;

&lt;p&gt;I'm really interested in opinions of other developers and users. What do you think about it, maybe try it out and give me a short feedback about your experiences etc. Feel free to create your own themes and templates and share it with me. I'm more than happy to publish them.&lt;/p&gt;

&lt;p&gt;I know there are probably a lot of issues (probably mostly NFR) I'm not addressing currently. Feel free to ping me with those as well.&lt;/p&gt;

&lt;p&gt;My goal is not to create the new state of the art CMS. It's about improving something I genuinely care about.&lt;/p&gt;

&lt;p&gt;Thank you!&lt;br&gt;
Regards,&lt;br&gt;
G.&lt;/p&gt;

</description>
      <category>blog</category>
      <category>java</category>
      <category>webdev</category>
      <category>development</category>
    </item>
  </channel>
</rss>
