| Ask Me Anything | Build | GitHub | Mastodon | SourceHut


This server provides the following services to the public.

DNS server

The DNS server is run using rescached on the following port,

  • DNS over UDP at port 53,

  • DNS over HTTPS at "",

  • DNS over TLS at port 443.

Check the IP address using dig or ping to domain

We use CloudFlare DNS as parent name servers.

AUR repository

See for more information.


Most of my personal projects is open source and available on my Github and Sourcehut.


The asciidoctor-go is the Go module to parse the AsciiDoc markup and convert it into HTML5.


awwan is configuration management software, infrastructure as file and directory layout. In other words, awwan is command-line interface to execute multiple lines of command in the local or remote server using SSH.

Do you have a collection of shell scripts to manage one more similar server? Do you ever want to execute only part of your shell script in remote server? Are you get tired with learning others syntax and tools for provisioning your own server, while you need is a handful knowledge of shell script?

If yes, awwan is the right tools for you.

beku (deprecated in favor of Go module)

Beku is command line program to manage packages in user’s environment (GOPATH or vendor directory). Beku provide syntax like pacman. This program exists long before before godep or Go module exist and stable.


ciigo is a program to write static web server with embedded files using asciidoc markup language. This site and is written with ciigo as framework.

This website is my second contribution to Go community. Its goal is not only to provide help, through translation, for Indonesian to learn more about Go but also to provide an ecosystem for Indonesian Go community, for example, vlog and blog in Indonesian language, and sharing open source works written in Go. The website is freshly launched, they are still more works to be done, though.


gorankusu is a Go module that provide HTTP service with web user interface for testing HTTP endpoints (like Postman) and for load testing. For the load testing we use vegeta as the backend.


Command line interface for Time-based One Time Password (TOTP).


haminer is a library and program to parse and forward HAProxy logs to InfluxDB for mining HTTP requests.


Hunspell dictionary for Bahasa Indonesia.


karajo is the library and program to implement HTTP workers and manager similar to AppEngine cron. karajo has the web user interface for monitoring the jobs.

libvos (unmaintained)

libvos is a C++ library. First implementation was intended for reading and writing Delimited Separated Value (DSV) data, but then its evolved and have more capabilities. Current features included Buffer module, File module, Socket module, reading and writing INI file format, FTP (server and client) module, DNS module, and Oracle Client Interface module.


pakakeh.go is collection of Go packages. The most outstanding packages are WebSocket (server and client), DNS (server and client), email (client only), STMP, and MemFS (memory file system).


Rescached is resolver cache daemon. It is a DNS forwarding server, serve the clients queries, but also caching all the queries and answers for later use. The idea is to minimize network traffic for outside DNS queries and to manage local zone files. The first implementation was written in C++ and then re-written using Go.

The is translation of their original website to Indonesian language, to help newcomers learning Go programming language. This is my first contribution to Go community.

vos (unmaintained)

Vos is a program to process formatted data, i.e. CSV data. Vos is designed to process a large input file, a file where their size is larger than the size of memory, and can be tuned to adapt with machine environment. Vos can do sorting, formatting, filtering, and join, by reading input file and its configuration script. Its written in C.


Git - Tutorial

This talk contain history, terminologies, tips and tricks, and quick git practice for push, pull and merge using local directory as remote.



Bad coding practices. This journal collect the bad coding practices that I have found during my journey maintaining legacy software.

Peculiar engineering at new company. Notes on software engineering or IT in general at new company. This notes is intended for a reflection of me not to criticize my team or company.

Ask Me Anything. A light version of question and answers related to my history and backgrounds as software engineer.

karajo: integrating SourceHut Webhook. An article that describe how to integrate SourceHut with Karajo.

Best TV series. List of best non-America TV series that I watched in the past years.


Research on SSH with 2FA. In this journal, we review several options to manage SSH authorization beyond using public keys, possibly also enabling 2FA, using Time-Based One-Time Password (TOTP). Some of the alternatives that we will review are Google Cloud OS Login, Smallstep, Teleport, and google-authenticator-libpam.

Using systemd mkosi for development (round 2). Continuing previous attempt, in this journal we take different path.

Using systemd mkosi for development. In this journal, I will take a notes on my journey learning and using mkosi as part of integration tests for developing awwan. The goal is that when I run make on awwan repository, it will create and run a container using systemd-nspawn(1) with SSH server running, and run all tests inside the container.

Reviewing status page websites. This journal review and dissecting several famous status page (or also known as service health).

Replacing Postfix with OpenSmtpd. I have read several articles on OpenSMTPD and interested to use it. In this article we describe the process to replace Postfix with OpenSMPTD.

Email server using Postfix, OpenDKIM, and Dovecot. This article describe my current email server configuration using Postfix, OpenDKIM, and Dovecot.

Better approach for type and variable naming. Naming variable is still hard, at some point. In order to make it less hard, we can create barriers, to round naming scopes, by applying several rules.


Creating personal AUR builder and repository with karajo. This article describes step by step process to create personal AUR builder and repository using karajo. At the end of this article we will learn how to build AUR package with clean chroot, learn how to sign package using GnuPG, and learn how to operate karajo service.

MySQL, surprise!. Things that will surprise you when using MySQL.

Finally, I use GPL. My inner thoughts on why I finally choose GPL.

Flag based continuous deployment. This article looks on how to manage multiple features developed, activated, and deployed in multiple environments while still maintaining linear history.