<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jauhar&#39;s Blog</title>
    <link>https://blog.jauhar.dev/</link>
    <description>Recent content on Jauhar&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 18 Dec 2025 23:10:00 +0800</lastBuildDate>
    <atom:link href="https://blog.jauhar.dev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Back To Basic: Intro To The Big O</title>
      <link>https://blog.jauhar.dev/blog/2025/12/18/back-to-basic-intro-to-the-big-o/</link>
      <pubDate>Thu, 18 Dec 2025 23:10:00 +0800</pubDate>
      <guid>https://blog.jauhar.dev/blog/2025/12/18/back-to-basic-intro-to-the-big-o/</guid>
      <description>Big O is often used to describe how fast an algorithm is. However, it&amp;rsquo;s not quite right. It doesn&amp;rsquo;t measure the speed of the algorithm. Rather, it categorizes algorithms based on how radical their growth is. Formally, we say that it describes the complexity of the algorithm. This can be quite confusing for most people because the word &amp;ldquo;complex&amp;rdquo; is usually used to describe things that are difficult to understand. Additionally, the term complexity described by Big O is not for humans, but rather, for computers.</description>
    </item>
    <item>
      <title>X3DH: Making Sense of Signal&#39;s Key Exchange</title>
      <link>https://blog.jauhar.dev/blog/2025/07/30/x3dh-making-sense-of-signals-key-exchange/</link>
      <pubDate>Wed, 30 Jul 2025 22:01:38 +0700</pubDate>
      <guid>https://blog.jauhar.dev/blog/2025/07/30/x3dh-making-sense-of-signals-key-exchange/</guid>
      <description>Extended Triple Diffie-Hellman (X3DH) is the key-exchange algorithm used by Signal for its end-to-end encryption (E2EE) messaging app. It is a complex algorithm that comprises multiple runs of DH (Diffie–Hellman) key exchanges. In this post, I&amp;rsquo;m going to try to make sense of why such a complex algorithm is needed, why a simple DH key exchange is not enough, and why we can&amp;rsquo;t just use TCP over TLS for a secure messaging app.</description>
    </item>
    <item>
      <title>Intro To High Performance Golang: Redis Clone</title>
      <link>https://blog.jauhar.dev/blog/2025/02/09/intro-to-high-performance-golang-redis-clone/</link>
      <pubDate>Sun, 09 Feb 2025 21:05:00 +0700</pubDate>
      <guid>https://blog.jauhar.dev/blog/2025/02/09/intro-to-high-performance-golang-redis-clone/</guid>
      <description>I will show you how to improve your Golang application performance by building Redis from scratch. I use Redis as the case study since it&amp;rsquo;s well-known, fairly easy to implement, and quite challenging to make it perform better. I did a live streaming to demonstrate all of this a while back, but it was in Bahasa. This blog post aims to make the content easier to consume and reach a wider audience by presenting it in a written format and in English.</description>
    </item>
    <item>
      <title>Advice For Junior Software Engineer</title>
      <link>https://blog.jauhar.dev/blog/2024/06/01/advice-for-junior-software-engineer/</link>
      <pubDate>Sat, 01 Jun 2024 12:05:00 +0700</pubDate>
      <guid>https://blog.jauhar.dev/blog/2024/06/01/advice-for-junior-software-engineer/</guid>
      <description>I&amp;rsquo;ve been working professionally as a software engineer for more than 5 years and I want to give you advice to be a better software engineer. There are things that I think would help most people to start their journey in software engineering world.&#xA;Learn From Multiple Sources Most of the content I found on the web is not of good quality. Even the paid one. If you read an article or a tutorial on the web, you should always assume that it might not be good quality content.</description>
    </item>
    <item>
      <title>Does Software Engineering Require Math?</title>
      <link>https://blog.jauhar.dev/blog/2024/05/06/does-software-engineering-require-math/</link>
      <pubDate>Mon, 06 May 2024 05:31:00 +0700</pubDate>
      <guid>https://blog.jauhar.dev/blog/2024/05/06/does-software-engineering-require-math/</guid>
      <description>TL;DR: You do need math, but you might not need its notation. Math notation is just like a language - you don&amp;rsquo;t have to know it, but not knowing it limits your ability to learn from mathematical sources. You can still learn from another language, though. But, knowing the math is not enough. You also need creativity to solve a problem.&#xA;Does software engineering require math? That question is often asked by people who think they are not good at math but want to be a programmer.</description>
    </item>
    <item>
      <title>Get Away From Reflection Overhead In Go</title>
      <link>https://blog.jauhar.dev/blog/2024/04/08/get-away-from-reflection-overhead-in-go/</link>
      <pubDate>Mon, 08 Apr 2024 14:51:00 +0700</pubDate>
      <guid>https://blog.jauhar.dev/blog/2024/04/08/get-away-from-reflection-overhead-in-go/</guid>
      <description>Reflection is very useful in Golang. Without reflection, data encoding functionality like JSON, Gob and XML won&amp;rsquo;t be possible. Even a very crucial package like fmt uses Golang&amp;rsquo;s reflection to do its job. Outside the standard library, people also often write their own utility function using reflection to perform various tasks like deep copy, check equality between two objects, calling a method based on their name and pretty print golang&amp;rsquo;s objects.</description>
    </item>
    <item>
      <title>My View on The Term Asynchronous</title>
      <link>https://blog.jauhar.dev/blog/2023/12/15/my-view-on-the-term-asynchronous/</link>
      <pubDate>Fri, 15 Dec 2023 00:41:38 +0700</pubDate>
      <guid>https://blog.jauhar.dev/blog/2023/12/15/my-view-on-the-term-asynchronous/</guid>
      <description>People really bad on agreeing on technical terms. Sometimes, we use different terms for the same thing and use the same term for different thing. Learning a concept from one source might lead you to use a particular term where other source use different term for that same concept. Even worse, sometimes we use a same term for different concepts. And actually, this is not specific to software enginners, I remember there was a viral math problem 60÷2(3+7) that nobody seems to agree on the operator precedence.</description>
    </item>
    <item>
      <title>Golang Implicit Interface Implementation</title>
      <link>https://blog.jauhar.dev/blog/2022/11/29/golang-implicit-interface-implementation/</link>
      <pubDate>Tue, 29 Nov 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.jauhar.dev/blog/2022/11/29/golang-implicit-interface-implementation/</guid>
      <description>In Golang, we can&amp;rsquo;t explicitly says that type A implements interface B. Implementing an interface is done implicitly. It&amp;rsquo;s kind of like Python&amp;rsquo;s duck typing, if it looks like a duck and quacks like a duck, it’s a duck. In Golang, If a type A has all the methods defined by interface B, it means A implements B. Consider the code below:&#xA;1// package cache 2type KeyValueStore interface { 3 Get(ctx context.</description>
    </item>
    <item>
      <title>Writing Simple Redis Server With Python</title>
      <link>https://blog.jauhar.dev/blog/2022/10/25/writing-simple-redis-server-with-python/</link>
      <pubDate>Tue, 25 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.jauhar.dev/blog/2022/10/25/writing-simple-redis-server-with-python/</guid>
      <description>Let&amp;rsquo;s write a simple Redis server using Python.&#xA;Redis is an in memory key-value database. Key-value database is very simple. At very minimum, there are two kind of queries: SET and GET. You can SET a key to a value, and you can GET a key to return a value. Of course, in practice, we need more capabilities than just SET and GET such as delete, timeout, scan, etc. Although, I can argue that most of those operations technically can be achieved by SET and GET operations.</description>
    </item>
    <item>
      <title>I Prefix and Impl Suffix</title>
      <link>https://blog.jauhar.dev/blog/2022/09/22/i-prefix-and-impl-suffix/</link>
      <pubDate>Thu, 22 Sep 2022 09:05:37 +0700</pubDate>
      <guid>https://blog.jauhar.dev/blog/2022/09/22/i-prefix-and-impl-suffix/</guid>
      <description>I often found people write codes with a pair of interface and implementation. This happens usually when working on codes with dependency injection pattern. There is an interface for every implementations. Sometimes, it is hard to find a good name for the interface and implementation type since they describe the same concept but have different role. One of them is the interface whereas the other one is the implementation. For example, suppose you have a tax calculator logic in your codebase, how do you call the interface and the implementation.</description>
    </item>
    <item>
      <title>Don&#39;t Use Auto Increment ID By Default</title>
      <link>https://blog.jauhar.dev/blog/2022/09/06/dont-use-auto-increment-id-by-default/</link>
      <pubDate>Tue, 06 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.jauhar.dev/blog/2022/09/06/dont-use-auto-increment-id-by-default/</guid>
      <description>Often, when building a software, we assign auto-increment id to our entities. Somehow, this is a very common pattern when working with relational database such as MySQL and PostgreSQL. For most of the time, it&amp;rsquo;s not a big problem, until things started to scale.&#xA;Suppose you build a website where the users can sign up to your website. If you are using relational database like MySQL or PostgreSQL, the most straightforward way to store the user information is by having a users table with auto increment id for the user id.</description>
    </item>
    <item>
      <title>About Me</title>
      <link>https://blog.jauhar.dev/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.jauhar.dev/about/</guid>
      <description>My name is Jauhar Arifin. I&amp;rsquo;m just yet another software engineer interested in compiler design and distributed systems and trying to learn new things everyday. You can find me on GitHub, X or send me an email.&#xA;My Journey To Programming I used to do competitive programming. I won a silver medal in Indonesia National Science Olympiad back in 2014 when I was in high school and this was one of the most influential milestones in my software engineering journey.</description>
    </item>
  </channel>
</rss>
