Posts

Thank You Traveloka

If you read my blog you'll notice that I joined Traveloka around 9 months ago. It was my first time working for a product company and it was a great experience. I've always worked for a service company before that. Traveloka is an amazing company and the growth is staggering. I learned a lot about working with app at scale and the mobile app landscape. The experience gained is invaluable. Around 4 years ago I had this idea about a social shopping app called nawaran . I built it in 3 months and launched it but the ecosystem wasn't ready. So I decided to shut it down. A few months back I had a chat with some friends with a similar idea. They are building something similar and I thought that it's about time I chase that dream. This is when I decide that it's time to move on and so I joined them. Fast forward a couple of months and here we are, on my last day as a Traveloka employee. Thank you Traveloka, for giving me the chance to get exposed more to the prod...

Everything Happens For A Reason

Image
Everything happens for a reason. I know it sounds cliche but it's true. You may not realize what the reason is now. But there's a big chance that you'll know it later. I've always dreamed of being a pilot as a kid. I grew up with that dream and took a good care of my eyes. When I was 18 and about to graduate from highschool, my Mother disapproves of my dream. So, I moved on and took computer science. One thing stayed. I always take a good care of my eyes, until this day. I got married when I was 24, had my daughter when I was 25 and had my son when I was almost 27. Now I had a second daughter at 31. When my son was about 1 year old, we realized that something wasn't right with his right eye. We went to the doctor for diagnosis and teatment. The doctor said that we'd have to wait until he's 2 years old for futher treatment. The diagnosis was Strabismus . When he was 2, we went to the ophthalmologist. He had his first pair of glasses because his right eye...

Android TDD Using JUnit, Robolectric and Mockito

Image
Android now supports unit testing. Android unit testing runs on devices or emulators that adds extra time during development. I'm a big fan of TDD and the way android testing is done does not help me much. However... Thanks to Robolectric, headless testing is now possible by leveraging gradle. I wrote this post as a result of trying out several different approaches that confused me. Hopefully this one will help you set it up better. How? First, current common Android development projects are tightly coupled. Most stuffs are done in the Activity or Fragment, blame the tutorials. This makes it hard for us to actually do unit testing since a unit test should be isolated. The tight coupling makes unit testing impossible. Then, come this approach called Model - View - Presenter (MVP). MVP aims at separating concerns. The three components involved handles different concerns: Model This component groups all data related concerns. This component handles data que...

Minimalist Distraction Free Setup

Image
I got a new MacBook air at the new company I work at . Unlike my previous MacBook air, this one only runs i5, 4GB Memory and 128 SSD which means I have to preserve a lot of space to have a nice coding rig. I have to be able to code android and iOS on this one. Plus, I should be able to hack stuffs on it for my personal fun as well. So how do I deal with that? I need to reserve around 9GB for XCode, 7 GB for Android Studio + SDK and around 20 GB for basic OSX stuffs. Plus I have to reserve the iWork and iLife stuff since this is a company laptop and someone else who's gonna use it later after me. I'm a big fan of music and movies, and the space limits it. So how do I deal with it? Use the cloud. I put all my old codes in a private git repo. I stream all my music using deezer and put all my favorite movies on my Google Drive account. Now I can still have it while I run on a minimal setup. As a comparison, now I have 83.59GB of free space out of 128GB on the new ...

Thank You IceHouse

Last Friday was my graduation day from IceHouse University . It was a wonderful 2 years journey and I consider it as a university since I learned a lot more stuffs there compared to my previous 7 years in the tech industry.  Not only that, I met a lot of interesting people there. I met the team who rose from being laid off by Yahoo!, and they're truly inspirational people to work with. I met an unknown guy from Singapore who became my best friend at IceHouse and now became a CTO at bridestory. I met one of the most prominent geek in Indonesia who now leads an RnD lab. I also met a travelling designer, a cool frontend guy who likes to go to beer garden, a tech guy who refuses his parent's wish to be a government guy just because he thinks it's not geeky enough, a really smart geek who comes from no man's land and become the first winner of code of the week at IceHouse, a developer evangelist turned engineering lead, a photonic science master degree graduated from Ge...

Been a long while

It's been a long while since I last wrote on this blog. I know. It's been almost a year but I was busy doing a lot of stuffs. Along with my team, we built a retail platform that combines augmented reality, location technology and cool analytics as one product. I also built zappr  in my free time and I have several more ideas that I want to build within 1-2 months. I have learned a lot in the past 11 months. I learned more on how to lead engineers to actually build products and how to market it. I learned how to manage engineers by treating them as normal human beings, not production machines. I believe that I have had some of the best lessons so far in my life. Also, I'm going to go for a new challenge. After more than 2 years at Ice House , I finally decided on taking up a new challenge in a product company. Make no mistake, doing services for others are cool and you can learn a lot of things. I just want to do things that I can actually pour my heart into. Build t...

Form and JSON Post Request Value to Model Mapper Functions For Flask

One of the iritating part that you have to deal with when you're handling POST requests in Flask is how you map the values into the model. It could be in JSON or in common form format. Usually this is what you do # say this is your model # using SQLAlchemy class User(db.Model): username = db.Column(db.String(50)) password = db.Column(db.String(50))         email = db.Column(db.String(50)) first_name = db.Column(db.String(50)) last_name = db.Column(db.String(50)) # this handles the common form request app.route('/process_form',methods=['POST']) def data_process(): new_user = User(                                  username = request.values.get('username')                                  password = request.values.get('password')                   ...