background

Martin Utama

Full-stack Software Engineer

I'm a full-stack software engineer based in Japan. My specialization is functional programming and concurrency.

What does it mean ?

In a short way, by using functional approach I work to improve software that suffers from poor performance, maintainability, and inability to scale. For example, a backend service that breaks down due to massive amount of incoming data or a web server that fails to cope with a large number of requests.

profile for inmyth at Stack Overflow, Q&A for professional and enthusiast programmers

Oracle Associate

I code in Scala, Java, and Javascript. Over the years I have also developed Android, web, cryptocurrency applications, among other things. Feel free to contact me to see how I can help you.

Contact me

Why functional ?

In today's world data is central to any software application. Especially as needs for machine learning application speed up like never before.

It's also presenting us with engineering issues we didn't foresee. Storing, transferring, transforming data of enormous scale can no longer be done with imperative approach which heavily uses mutable states. As it happens having such states on modern computers with many cores and on massive amount of data would generally lead to untraceable bugs and code disorganization. 

Functional approach helps visualize a solution as a series of discrete, stateless controls. So if data is a river, the solution would be a series of dams. In fact functional data processing is often referred to as stream.

To illustrate the advantages here are a few scenarios written in Scala and Java.


image

Memory efficiency

One immediate issue of working with big data is that there is no machine with large enough memory to load it. What people often do is break up the data to smaller chunks which in turn causes management headache.

This video compares the old approach and the new functional stream with Java Vavr to load a very large file. In the first part, all available memory is quickly  consumed and the program crashes. But in the second, memory consumption is kept under control. This allows us to use a small machine to process very large data.

image

Process recovery

Imagine doing a thousand of database queries or API calls and a network failure occurs. Almost all the time this will end in the whole process being restarted, wasting hours if not days. 

Modern reactive libraries like Monix have a functionality to do task recovery. The video here shows a recovery simulation on a stream. For each element that encounters an error, it will retry at most three times or it will give up and proceed to the next element (source code). As a result we can now avoid restarting the entire process from the beginning. Using functional approach we can easily define many such strategies that would help recover a process.

Projects

Some of the software development projects I did

image

Market-making bots

Market making is a trading technique that places buy and sell orders continuously and profits from bid-offer spread. Automating the trades is the job for bot.

These bots were developed to trade cryptocurrencies, one to operate on Ripple network and one on centralized exchanges such as HitBTC and Okex. 
The video here illustrates the bot's balance during the operation on Ripple network . It starts from seeding and moves on to countering and replacing consumed offers.

image

Item discovery app

The app searches for a product or service in an area. By typing a keyword user can see stores nearby that sell related products. In Asian countries, traffic in urban areas and cities are usually bad. The app would help users discover a product or alternative products without travelling too far.

The app integrates Android client, backend service, and various cloud components. Behind the scene the system makes good use of relational database and the  new MySql spatial feature that allows query by coordinates

image

Farm yield predictor

In Japan most farmers use a greenhouse to cultivate vegetables and fruits. This allows some crops like tomato to be planted irrespective of season. The predictor helps estimate demands and market price using past data for optimum profit.

This project was selected as a winner by IBM incubation program and finally acquired by Softbank. (press release by Japan Ministry of Agriculture, in Japanese)

image

Smarthome system

An Android app to manipulate home appliances as well as monitoring the surroundings remotely, developed before IOT became a word. Users can also communicate between camera and the phone.

Articles

Some technical tutorials or blogs I authored

Image

Futures Made Easy with Scala

Scala Futures enables composition of sequential or parallel asynchronous executions easily

Go to article
Image

An introduction to Vert.x, the fastest Java framework today

The idea is simple, run Node.js on the JVM. The result is one of the fastest frameworks today.

Go to article
Image

If you’re still using Synchronized, you should try Akka Actor instead

Mutex is difficult to work with and causes race-condition. Akka Actor helps untangle it.

Go to article
Image

Quick Introduction to Blockchain

Explanation on how Bitcoin blockchain works.

Go to article

Contact me

I'm available for software development projects or consultation. Feel free to contact me.

martin@mbcu.me

Image