A picture by Charrise Kenion, Unsplash

In IT, dealing with date and time, can be quite challenging. There are a lot of things to consider and things can be quite complicated especially when you need to make changes to an already existing system.

The purpose of this blog post is to surface the importance of thinking about your data type more carefully, especially when you are dealing with date and time.

The Basic

To limit the scope, we would only talk about three data types

  • DATE, which represents a date
  • DATETIME, which represents a date with a time component
  • TIMESTAMP, which represents a date, time and a timezone…

So recently I came across a block of code, which sent me thinking for a whole night. The code worked just fine but something about it really bothered me and I was thinking, “Can it be made better?

image borrowed from TheHoot

The code is more of less like the following, where isAllowed is a network call to an external API.

I have been programming in Scala for a while now, and I love it. Not just because it’s more pleasant to read/write than Java, but it also introduced me to functional programming. A programming paradigm that makes it easier to reason about your program. As I learn further, it becomes apparent to me that picking up Haskell is just a natural progression because a lot of tutorials actually refers to Haskell.

The problem here though, picking up Haskell is not easy. It took me days just to get a simple Haskell program running. I wish that there’s this concise article…

Well it’s simple really, use Circe 😉.

There are heaps of useful tutorials on the internet on how to use Circe. However most of those tutorials are too focused on one specific topic with one specific example.

I haven’t found an article which I can read through (for example while I’m commuting), especially those who can give me a good flow in learning Circe step by step in various scenarios. That’ s why I write this blog, I hope that this article can be the one.


First of all you need to setup your project to use circe. …

I have been using IntelliJ for developing my Scala applications. It is a very good IDE, and arguably the most powerful one out there. However it felt old, sluggish and dated, compared to newer IDEs like Visual Studio Code (VS Code for short) or Atom.

Now why Atom instead of VS Code? To be honest, it is just because I want to try using it again. I had used it in the past for my JavaScript projects but now I am using VS Code, which is arguably a better IDE for JavaScript. …

So recently we inherited an isomorphic react application that was “a bit” outdated. It was developed in Node 4, hadn’t been touched for a while, and it had quite a few dependencies on modules that were no longer maintained by its author. It was not straight forward to setup and it was not dockerised. Naturally, the first thing we did, we dockerised it. It was a fulfilling journey and I learnt quite a bit. So here I am, sharing what I learnt in form of this blog post.

Docker for Development

We knew from the start that we wanted to produce a docker…

So, I was trying to learn how to build an Android app with Kotlin using Android Studio. The app is meant to grab data via a REST call and display it on the screen. Sounds simple eh? Surprisingly it wasn’t. There were a few gotchas I learnt a long the way and there wasn’t any straight forward tutorial out there to do so. Well for a Kotlin beginner like me anyway. So here I am, sharing my learning in a form of a blog post.

To make the blog post not too long, I decided to break the post into…

Writing code in a modular way, has a lot of benefits, like: re-useabilty, smaller compile size, faster development time, etc. This is especially true where the ecosystem is thriving with a lot of libraries like JavaScript.

Writing modules in JavaScript itself can be done in multiple ways, which is what this post is trying to cover.

1. ES6 module

ES6 is the standard JavaScript way of doing modular code. There are actually two ways of doing this in ES6

  • Named export
  • Default export

Interestingly, both can be used together. Note that by default this ES6 Module is not supported by Node. …

Many of you probably already knew, react-router is now at version 4. It comes with several changes but unfortunately, the tutorials that are floating around in the internet today may not be necessarily up to date. This can be frustrating for some, well … it was for me. Thus I’m writing this blog, documenting the gotchas, I learnt along the way.

Different router for different environments

In version 4, there are two different kind of routers:

  • react-router-dom to be used in a browser
  • react-router-native to be used in a react-nativeapp

For me, I was building a static website so I used react-router-dom

import { HashRouter…

Throughout the years, I have been installing various different Linux distributions on VirtualBox for fun. Recently I just did it again, this time with Fedora 25.

Why Fedora 25?

There is no compelling reason really. Mostly because my previous Mint box is quiet old. So I decided to try something new, maybe something not Debian based. I used Ubuntu for work.

Other reasons:

  • Upgrading from Fedora 24 to Fedora 25 is relatively painless. Well that’s what I read from the internet
  • Wayland. I am sucker of a better GUI / UX, so Wayland is something that I want to try.

Djoe Pramono

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store