Define: Family

It’s been two years since I blogged about the new challenges and first official day at U Connectivity Services as a CTO. Today, with a mix feeling between sadness and excitement, I must say that I have to move to the next thing.

First, it was inevitable to say that two years was really short. If you worked for a company that you don’t like or even you hate, two years would produce a long list of miserable and a thousand reasons why you never want to work there. That’s not what happened to me. Two years was really short I couldn’t even imagine I wrote a resignation letter a month ago. Two years and I realized that I’m going to miss one of my family I had in just a few seconds.

I still remember the day we designed, developed and maintained some software for our digital signage out of home (DOOH). We came from nothing to almost 40 sites spreading across all over Indonesia in just about two years. What we’ve built so far was not just only a standalone DOOH but more than that, we successfully connect all of them to our central network (we often called it “command center”). With the technology we used, it’s save to say that our DOOH is potentially capable of doing almost anything you can imagine with a big screen, camera, an Internet connection and some sensors in and out backed with a complex management system in the cloud ranging from clustering management, customization based on customer to hardware monitoring and complex automation to rule many things in harmony.

During those exciting times, I also often worked closely with other team from sister company such as IndonesianCloud and Femto Indonesia. A few months later, I knew almost all employees from all sister companies.

This is what makes me want to define a family. I realized that they’re not just only co-workers. They’re all families. We’ve worked closely, laughed together, lunch, even dinner, or having snacks, nap time, back to work again, almost everything I’ve done, I’ve done those things with them close or around me (in a corporate way, we say it, “team work”).

So, is this the end of our relationship? No. That’s why I used “family” instead of “co-workers”. Family relationship should get stronger and stronger and never last. And that’s also what I’ve got in these two years. They’re all my families.

Signing Off

I’m signing off from the company I’ve worked but never do that from families in there. I never really want to signing off and leave. Those two years and relationship we’ve built are priceless and never be converted to anything.

So, where am I heading to?

Starting Monday, I will be joining Ardent Labs as their VP of Engineering.

Oh, you might see the “maintenance mode, we’ll be up soon, bla bla bla” page from the official website. That’s okay, I hope it won’t hurt you. But I promise, as soon as the site goes live, that is one of the first best thing we do at Ardent Labs. I’m expecting more to come.

On Blocking The Internet

Last night, I couldn’t access Reddit site. The weird thing was that I could access the landing page, but couldn’t access categories under it. I’m using Bolt and to those of you surfing through other ISPs, you might or might not get the same result as I am.

This reminds me of recent action from Kominfo ministry, Tifatul Sembiring who’s blocking Vimeo from the Indonesian users. So, let’s talk a bit about this blocking thingy.

You don’t. You shouldn’t.

However, I understand that porn sites are dangerous to our child, our next generation who watching porn instead of making something else. Learn sciences. Teach and share their knowledge. Practice for the Olympic games. Read books. Write a novel. Build a startup. And much everything else which has nothing to do with porn (except, they decide to build something around porn. It’s a different story).

So if you want to block that porn, just block that single porn (which would be difficult of course because there’s a huge amount of them and the effort is worthless), not the whole platform.

This is why I always questioning the ministry’s question, “Internet kencang untuk apa, tweeps?” (what is the purpose of the fast Internet, tweeps?)

Mr. Sembiring, I might not know where were you when we have only had 56kbps to browse the Internet. I also didn’t know whether you understand this and how it worked and what kind of pain we endured when some beeps indicating connection failed occured. I might lucky to get early access to the university network and use lynx to browser the Internet faster, but where were you at that time? Do you know that our speed today, is better than years ago and with better connection means better business, better research and better communication?

Your question about the purpose of the fast Internet should be asked years ago when we just only have a few sites to open, namely Yahoo, Altavista, MySpace, Friendster as well as mIRC and Yahoo Messenger and another old-style resources such as Gopher and BBS. Today, that question, I told you Mr. Sembiring, isn’t relevant anymore. Way irrelevant.

So, please go back to the way you are, as a politician, and stay away from the Internet. There’s a lot of great things happening in another side of the world and you’re still asking about the purpose of the fast Internet.

Go home, you’re drunk.

How I "Defeated" Jakarta’s Traffic Jam

Usually, I never complained about Jakarta’s traffic jam. Not before I moved to a new office and new house. Right now, I have to travel around 30km to go to the office (so it doubled to 60km to go back and forth). It was fun driving that long before the traffic jam get worse and worse (and the worst yet to come). So, this is how I play “cat and mouse” with the traffic jam.

Jakarta’s traffic jam is probably one of the worst things happened to the people work and live in this city. No one could escape from it. While I realize that I couldn’t handle it, I try to handle myself to become better on how to avoid it. So here’s my personal analysis on the traffic jam that might occur throughout the day and how, later, I can avoid it and gain more productivity.

Please keep in mind that this is just for my own case and if you want to try it, make sure you’re OK with that. I’m not responsible for any effects that might occurs along with this ‘trick’ :)

Let’s start.

Continue reading

The Joel Test in Real Life and How I Try to Get 12 Points

When I was assigned as a CTO, I was very excited. I think it’s time for me to brought the joy and delight of coding. So I wrote my plan ahead and I have a commitment to applied the Joel Test. It’s not an easy road though and in my one and a half year as a CTO, I will share how I have achieved more than a half of them.

It’s pretty easy to achieve all of them, 12 points, when you work for a company like Google, Facebook, Yahoo or even Microsoft (yes, Joel said that Microsoft always run at 12 full-time. Incredible!). When I was at Yahoo, people were really supportive and we always try to achieve perfection in building and crafting a software. It would be different if you work for a company where not all people understand about Software Craftmanship. It’s more difficult when you work for a company (or clients) who has a type of “yesterday is the deadline.” Those kind of companies (and probably clients?) didn’t understand about planning, priority and design. The Joel Test will help you, my friend, and me to be not only an ordinary developer, but also an outstanding developer who always ship the best crafting code ever written.

Let’s get started.

Continue reading

How I Become More Productive in 2013

2013 is no more.

I’ve been struggling with too many distractions and interruptions that forced me to make a promise to revenge in the name of productivity. I’ve been doing one way or another to shake things up and counting the seconds on what I’ve done on my laptops.

Before I spit the things out that make me productive over the year, let’s admit some things that were truly distractions.

First and the most addictive one was Twitter. I’ve been struggling finding the way on how to make myself better at handling the Twitter’s stream but finally I found the way how to deal with such a hard-to-defeat distraction.

Second was email. I frequently found myself staring at Gmail more than often instead of doing something real. I do the fast-switching from Inbox, Spam, Trash, and labels such as android-dev, YouTube and Quora Weekly Digest just to see what’s new in it.

Anything else such as Facebook, Google+ and games on my tablet are distractions too, but not really disturbing since I rarely spent my time on those things. Fortunately, I don’t have any account (or maybe I just forgot the password and never logged back in) on Path, Instagram, and a bunch of me-too-chat-apps out there (however, I still stick with Google Hangout, Whatsapp, and Skype).

So, these are the things I’ve made throughout 2013 that made me more productive than ever:

Continue reading

Random Name API: One Hour Weekend Project

It might be not completed yet (name it “beta”) but I hope it helps everyone who in needs to generate random names (which is not just practically generate random chars but also human-readable names).


where nm is the number of names to be generated (in integer).


will generate 5 random names along with their gender (“M” indicates “male” and “F” indicates “female”).

The number of names is practically unlimited (in theory), but to keep the requests as efficient as possible (because I’m only using one dyno for the app), I’ve limited the number to 100 per request. However, you can use your script in any language to do the loop to get as many result as you want.

SSHMe, How I Manage and Connect to Many Servers

I’m not going to add another ‘me-too’ solution but if you wanted to know similar solutions, you can see here.

OK, here’s the situation.

I have many servers to maintain and connect to but every time I want to connect to one or two of those servers, I need to open my notes and type the username I have (along with the password) and the specific port, if any.

For example, I want to connect to machine A with IP using root to specific port 12020. So here’s what I’m doing:

$ ssh -l root -p 12020
root@'s password:

Now, I also want to connect to machine B with with IP using ‘ksetyadi’ to specific port 1224.

$ ssh -l ksetyadi -p 1224
ksetyadi@'s password:

This is easy when I only have one or two servers but actually, I have more than 5, actually 12, servers to maintain and using the old way is not easy anymore. Not fun.

So, what is the fun way according to me?

I opened my favorite code editor and start making my life easier and fun again.

Without further ado, see the code on Github.

A Guide to Running Unit Test using PHPUnit on Yii Framework

Let me tell you something:

TDD doesn’t drive towards good design, it drives away towards bad design. If you know what good design is, the result is a better design – Nat Pryce

I want to share my experience in setting up unit test (and later integrate it in CI –Continuous Integration) on my development machine. Hope this will save your time, my fellow developers, without going through of all errors and warnings I was stuck with before.

I’m not an expert on Yii even though I have years of experience in PHP. In fact, this is the first time I’m using Yii. In the real world where I live, work and play, I use CodeIgniter and CakePHP. In terms of TDD, I started using it almost 2 years ago (thanks to Yahoo!) and always using it in almost every projects including Android (Java) and Python.

FYI, I’m using MacBookPro with MAMP PRO (PHP 5.3.6) installed. It wouldn’t be too difficult for you if you use Linux since it’s a similar process. If you use Windows, well, then goodluck! ;)

Let’s get started.

Continue reading

Merge Sort: The Algorithm

This is it. The last time I wrote about Merge Sort was last night last week and now I will show you the fun.

So here’s the code I’ve written in 9 minutes 42 seconds (almost 10 minutes!) straight.

from random import randint

def sample_list(n, r):
    result = []
    for c in range(0, n):
        result.append(randint(0, r))

    return result

def merge(left, right):
    i, j = 0, 0

    result = []

    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            i += 1
            j += 1

    if i < len(left):
        result += left[i:]

    if j < len(right):
        result += right[j:]

    return result

def sort(mylist):
    if len(mylist) < 2:
        return mylist

    midlist = len(mylist) / 2
    left_list = mylist[:midlist]
    right_list = mylist[midlist:]

    left_list, right_list = sort(left_list), sort(right_list)
    return merge(left_list, right_list)

if __name__ == '__main__':
    l = sample_list(10, 1000)
    print 'Unsorted list'
    print l
    print '\nSorted list'

Pretty easy, right? Let me know if you have any comments or questions!

The Beauty of Merge Sort

First or second year of Computer Science’s students should not be surprised with this as this is one of the main subjects that must be mastered in order to advance to the next year. This subject usually taught in parallel with another algorithm in a lecture called “Introduction to Algorithm” or “Data Structures and Algorithm” depending on your campus.

It’s been years since I’ve got this material from university and I always come back to this subject again and again. Merge sort is one of the basic sorting algorithm but I still amazed with the way it do the sorting. So I set this weekend to visit the material again plus adding some more information about the merge sort into my head that once I’ve never known before (I’m not a nerd while back at the university so I don’t ‘eat’ everything my lecturer gave to me).

Let’s start with the easy one.

Continue reading