100 Words in 100 Days 2/100: An evolving API 2
November 11, 2019
In last article our startup CTO Lucy shipped their first version of API for announcing a request of van service in the system. Some of the engineers with keen eyes may spot there are a lot of problems with the first version, feel free to comment here and let’s chat!
100 Words in 100 Days(1/100): An Evolving API (1)
November 10, 2019
This is my second attempt to revive a habit to write technical article. Everyday. Let’s see how it goes.
Thucydides on Strategy is a book of introduction to strategy
March 17, 2019
Recently reading up the history of Greece and stumbled upon this book in the library. This book is surprisingly easy to read and well-structured. I enjoyed it quite a bit. Thucydides is a historian in Ancient Greece. He witnessed the Peloponnessian War from 431-401 BC between Athen and Sparta. He is the first person who take a meticulous record of the war.
How do I estimate my tasks
December 21, 2018
A short story of an ordinary discussion in GOGOVAN software engineering team
How to build robust GraphQL APIs
May 27, 2018
Just read this awesome article in building GraphQL APIs. Github and facebook have created their own public facing GraphQL APIs. When I first dapple with this topic last year, one of the crucial question is resource management. Resource management is specifically the CPU and memory usage of data persistence layer.
Golang-journey 101 - defer
May 14, 2018
I am trying to explore the possibilities of adding another tools in the arsenal of my team. Rails is awesome in rapid development, developing and iterating business logic, and most of the tasks in a web / mobile app are being taken care of. But everyone knows the elephant in the room — performance. Ruby is notoriously bad in performance, some of our services areas slow as 20 rps in 14 core machine! Data engineer in our company suggested us to try node / Golang. Coming from nodeJS / JS background, I am quite familiar with the Good, Bad and ugly of node and its ecosystem.(That’s another post)
1 action to beat hopelessness
May 13, 2018
In our generation, we have a lot of seemingly unsolvable problems. The city is dying, the country is dying, hell even the world is dying. The mainstream media is broadcasting depressing new. The government is doing nothing to rectify the imbalance of prosperity. The state is moving to destabilize the world to keep their power. Everything is breaking our generation will to change.
Best man speech
May 10, 2018
This piece stayed in Draft for almost 3 years already, I better publish it
How to make agile work as a developer? (Pt. 3)
May 8, 2018
How to make agile work as a developer? (Pt. 2)
May 8, 2018
Previously in Pt. 1, we have discussed why developers in Hong Kong or Taiwan think scrum is not working for them and one of the tactics on how to start the discussion with other stakeholders on the day to day activities of you and your team. Let’s discuss more about tactics we are using in GOGOVAN.
How to make agile work as a developer? (Pt. 1)
May 8, 2018
Today I came across a very thought provoking post about why scrum / agile doesn’t work in most of the company in Taiwan1. In essence, the author make a point that as a senior developer of the team, beside of coding features and improving infrastructure, he has to deal with many non-development duties such as mentoring junior developers and attending business meetings as developer representative. Doing these duties don’t count in the sprint and most of the time he had to work overtime and make up for the misses. This triggers a lot of comments, I am also in. I asked about how we should solve this problem and the author replied with one of the post he had written some times later.2
May 5, 2018
近排香港啲統治者好似short左咁連自己母語都唔敢認。唔知幾時我地會怕到連自己母語都敢講唔敢寫。我個人好衰，越唔俾做越唔make sense 嘅規則越會去打破。咁我幾中意寫野，寫野可以令我飛黎飛去嘅思想理順一下。一路寫一路可以諗清楚自己想講咩，想講一個點嘅故仔或者令人明白一個點嘅concept。
1 function to call when setInterval has failed you
March 15, 2017
From time to time, we have to check if something is finished, or a particular script has been loaded successfully in the browser, we would make use of the
Why Machine learning tools need GPU to shine — a deeper look from software perspective
March 8, 2017
In our previous article, we have discovered GPU programming in the most unexpected place - an API of a SaaS product. It is the JQL of Mixpanel. And in this article we will explore further about the relationship of GPU programming and machine learning or deep learning. They are the most trendy terms in the tech world nowadays. So what is the connection between machine learning / deep learning tools and GPU programming? I guess every software developers will immediately scream “parallelization” and call it a day. But why is that so? Why is parallelization has anything to do with machine learning and GPU programming?
Reducer in Mixpanel API is weird, but genius
March 1, 2017
Mixpanel had been a crucial tool in my previous 2 startup jobs. We have to compile a lot of different views for our team to make decision based on the Mixpanel data. They can be very different and flexible. This flexibility is the key to mixpanel’s success. To leverage this, they need a very comprehensive query language for developers/marketers to perform complex queries on the data.
How can you display mathematical equation in HTML? MathJax can help.
February 22, 2017
Get Things Done has a new mission
February 1, 2017
Starting from February, Get Things Done will become a platform for product developers and data analysts to write about their learnings on those topics. Topics may include “how to better develop an X product in Y language” or “How to start competing in Kaggle?”. To start out, I will post a long article monthly on a topic of choice.
January 1, 2017
What a good team taught me about software engineering
January 7, 2016
Last year I was very privileged to work with some of best engineers you can find in the region. Together we delivered products in the top-most software engineering quality. Here I learned a lot from my colleagues. Here is a summary of my learning in the last year.
Year of Learning
December 31, 2015
First of all I am grateful that I am still able to pursuit my goals. I am still the immature son of my wonderful parents and aging grandparents. I am still the talk big do small brother of my careful brother. For that I am very grateful to have them with me.
The time Meteor Blaze data context screw me up
December 15, 2015
孟母三遷 vs Tina from Vallejo
November 15, 2015
The mornings and nights around Tenderloin
November 9, 2015
How a single icon delights 50% of our users
November 5, 2015
Originally post in Medium
Bounce off Ideas
July 14, 2015
May 20, 2015
二十一世紀第十四年，香港人經歷了一個壯闊波瀾的雨傘革命，為掌握自己的命運踏出了第一步，相信很多人已經choose the red pill，回不了去。CODE4HK 和大家一起，經歷了很多高高低低。
November 18, 2014
The journey in MPM as a software engineer
September 7, 2014
This is a shortened version of being a Software Engineer in MPM. MPM was providing mobile payment service for both consumers and merchants. Merchants could have a whole new channel to interact with their customers and vice versa.
April 5, 2014
My First Post in Get Things Done
September 21, 2013
This is my first post in this new found freedom. Jekyll and ability to self-host!
Just Another Day in Android-land: Expandable TextView with Custom Ellipsis
August 26, 2013
After over 4 months of my first notorious “death march” our team can at last have life. I finally have time to write a custom component for my future use. It is a customized TextView with a few customization on the function that trim down excessive characters. Suppose the UI can only display a limited lines of characters by specifying android:maxLine attribute, The TextView can be clicked to show the whole text. Also the ellipsis (…) at the end of the text while trimmed, aka ellipsized, can be customized.
Just Another Day in Android-land: The unexplained Locale
March 30, 2013
Personally I think this is a very bad decision. But I have not tried hard enough to convince people it is a bad idea.
Just another day in Android-land: DatePickerDialog that honor the app locale
January 25, 2013
Recently our company needed to unify the whole app into one locale, we have faced obstacle in making the DatePickerDialog to use app locale instead of system locale. In case you don’t want to read my story of finding, you can directly download it. For the patience, here is the long story.
Android Back Stack Best Practice (without action bar)
November 11, 2012
One of the recurring problem of developing Android application is the notorious back stack. In our application, we firstly following the o’almighty advice of Google and following the advice religiously.
Android Development: How the Spinner and PopupWindow finally clarify my misconception about Context
October 28, 2012
In my recent development, I have received a requirement to put Spinner inside a PopupWindow. I expected an easy task. When the popupwindow is shown, there was no error whatsoever. But whenever I click on the spinner, the program F.O.R.C.E.D C.L.O.S.E.D. (On a side note, Forced Close should be replaced by a swear word). The logcat gives a BadTokenException and asked if my Activity is still running. You must be kidding me, I was calling the Spinner when the Activity is running, and of course it is in the UI thread. I am not able to pinpoint the problem, and Google doesn’t really help much this time. I was forced to use my brain at last. I was excited.
July 12, 2012
When I am doing system Design, there are some recurring problems. One of the problem is to represent status of certain records. Take an example of a transaction table.
PHP is English
July 4, 2012
Recently many software gurus(e.g.: [Jeff Atwood](http://www.codinghorror.com/blog/2012/06/the-php-singularity.html & Fabien Potencier) whom I admired debates how good/bad PHP is. Some criticized, with strong technical reasons that PHP should be cast to hell and leave them rot like what we did to COBOL. I wholeheartedly agree with them. PHP is simply not suitable for large projects. My experience with plain PHP, Wordpress and Drupal makes me want to strangle myself over and over.
My killer interview question (for junior software engineer)
June 9, 2012
This post is full of ignorance. But my main point still stand.
Gotcha in CodeIgniter
May 29, 2012
My follow-up on dynamic typing
May 3, 2012
In my previous post, I’ve mentioned that it is up to the implementation to define whether the function will behave properly. Another issue that I can came out with is the readability of your code to average Gilbert. I have once written a function, which came back to bite my team. The function briefly return whether the user is activated or not, and return NULL when the user is not found.
Why I prefer static typed language
April 28, 2012
Yes. It is been a long time.
Where to fork a thread?
February 16, 2012
This is a repost of a post in Tumblr over a years ago. Time flies and I found the solution.