I haven’t been writing because my blogging setup was broken. I was using Octopress as my blogging framework then and it was fantastic. Gradually the ruby toolchain was upgraded and Octopress wasn’t maintained. I was stuck on using ruby 1.9.3(gasp!). Until one day, on my new machine, I couldn’t get the old setup to work without herculean effort. I never found the time to fix it until today where I found a few minutes. It is still a static site on Github pages and it still runs Jekyll. I still use Emacs for authoring it, and Git for my deployment workflow. Nothing’s changed very much and I have no desire to change things. I’m just glad to be writing again.
-
posts
-
Refreshed blog
-
Lessons learned from implementing OKRs
Objectives, Key Result or OKR for short, is something I’ve came across from blogs and people. As I understood how OKRs help a company focus, I became intrigued. Staying focused is much easier said than done. When presented with choices, we often choose tasks that we like doing, the easiest or the most urgent, rather than the right thing that has the most impact. It is hard enough to do it on your own, let alone an organisation. In OKRs, I saw a system that can keep an organisation laser focused as it scales. I didn’t have a chance to implement it; until I co-founded Propine. While there’re plenty of articles about what OKRs is, there aren’t much written from those who’ve practiced it. After two quarters of practicing OKRs, does it work?
-
Hiring at Startups is not impossible
Hiring is hard. Hiring at startups is harder. Hiring well is incredibly important for a startup. Early hires establish the culture, set the standards and lay the foundation for the company’s success. I want to dispel the myth that it is impossible to hire high quality people at startups. Established companies don’t always win.
-
Launch phase at EF
This is part three of my experience going through Entrepreneur First. Conventional accelerators follow a process where they accept formed teams, spend 3 months preparing them for the Investor Day, following which the accelerator helps them with fund raising. EF don’t usually accept formed teams. Individuals join the program before they have an idea, form a team, validate an idea and get selected to join the second phase.
-
Thoughts on React with Redux
I have been writing React and Redux for the past months. React and Redux are not the first Javascript frameworks I’ve learnt; nor is it likely to be the last. We want something proven and something that has a thriving eco-system surrounding it. At this moment(2018), we see 2 options - React or Angular. We decided that React with the potential to support mobile apps would be the sensible decision. React coupled with Redux gives us the structure for a modern Javascript application. Well, nothing is perfect. Let’s visit some of those aspects where I felt it ticked and where it didn’t for React with Redux.
-
Team formation at EF
This is part two of my experiences going through Entrepreneur First. This is also where EF is different from other accelerators - team forming. From my earlier post, EF divides the cohort into 3 groups. The technical edges, the product edges, the domain edges, and not gently, people from different edges are nudged to team up. Did that happen?
-
Thoughts on dApp development
-
Joining EF in their third batch
I’m now with an accelerator called Entrepreneur First, most call it EF for short. I was accepted in their third batch in Singapore. That was sometime this year January. I’ve wanted to start my own company, having worked at many startups for many years. When opportunity knocked, I took it.
-
Things I would do at a new startup
With the benefit of spending years at the trenches, watching decisions and their eventual impact, subconsciously I’ve formed my opinion on what I would do if I were to start building a new product.
-
What is the probability of my child entering Nanyang Primary or Ai Tong
Like most parents in Singapore, we leave no chance to getting to the best schools for our children. My wife wants to move closer to Nanyang Primary to increase our chance of getting a place. I did not want to do that. Our chances are high enough that it doesn’t warrant such extremes. I realised I needed to prove my point.
-
Why am I doing a Math degree
I am applying to do a Math degree in my mid-thirties, knowing how much work that is, mindful of my work and family commitments, and not forgetting the cost. I’ve got an Electrical Engineering degree. It’s common to do a graduate degree, though a more conventional route would be to do a MBA or a Masters in Computer Science/Data science. Yet I chosen a Bachelor’s in Math.
-
Using more than a hundred stored procedures in production
At my present company Courex, we make heavy use of stored procedures, triggers and functions to run our production applications for over 2 years. At present, we have 258 stored procedures, 107 functions and triggers. Few companies use this many stored procedures. Would we recommend it? Yes.
-
Communication skills > Technical skills
Speaking or writing, is something I thought was basic, something anyone with a basic education can do. I felt that I was done with honing my language skills after I’ve left school. If the school thinks it was good enough to graduate, it was good enough.
-
Being an early employee at startup that exited
I am one of the early employees at Dropsuite, previously known as Dropmysite. Today, I was informed that Dropsuite has IPOed in the Australian Stock Exchange. Technically, it is a reverse IPO. The whole process took one year. The Australian Stock Exchange, or Australian investors, is known to welcome technology companies, which is why local technology companies choose to list there. Another local example is mig.me.
-
Running an ecommerce logistics business is hard
I came into the logistics industry knowing nothing about it. Along the way I’ve witnessed competitors going bust(Zyllem), new entrants, competitors switching from logistics to technology(Anchanto), and more. It is a hyper competitive industry. I hope to offer an insider view of the industry, to show why it is so challenging, which hopefully will discourage new entrants, in turn making my job easier.
-
Should you learn more programming languages?
In the book Pragmatic Programmers, the authors made a sensible recommendation: learn a new programming language every year. Each new programming language is a new perspective of solving problems. Adding more under your toolbox helps you gain different perspectives. It sharpens your technical judgment. But is it the best use of your time?
-
Deliberate Constraints
Two weeks ago, we removed the television in the house. The television, one of the staple appliance in every family where planners assumed that it was present in every house. It was the center of the living room. My children was spending too much time on the television for their parent’s liking. It has been 2 weeks. In the past during meal times, I see two zombies with eyes transfixed on the television; now they play with each other. Does having more things, means we lead a better quality of life?
-
Breaching the great firewall of china
It has been some time since I stepped into China. The great firewall has since advanced. This is a short guide to how to breach the great firewall meant for the technically inclined. This guide is accurate as of 2016.
-
Everday XPath - Operators
This blog post is part of a series on XPath. The content comes from my ebook EverydayXPath. Part of the content from the book will be released to the public as blog posts. In this post, we explain what XPath does. We disect the components of an XPath expression. And why the context is the key to forming the expression.
-
Everday XPath - Node Test
This blog post is part of a series on XPath. The content comes from my ebook EverydayXPath. Part of the content from the book will be released to the public as blog posts. In this post, we learn about the only mandatory part of the XPath expression: Node Test.
-
Everday XPath - The Expression
This blog post is part of a series on XPath. The content comes from my ebook EverydayXPath. Part of the content from the book will be released to the public as blog posts. In this post, we explain what XPath does. We disect the components of an XPath expression. And why the context is the key to forming the expression.
-
Writing an ebook
I spent the past 3 months writing an ebook: EverydayXPath. The idea came as I needed to write a Selenium script. Naturally I needed to use XPath for selecting nodes on the web page. As I was googling for solutions, documentation on XPath felt inadequate. I needed good examples and coherent explanations for the various operators. XPath and CSS are the two common query languages for querying XML/HTML documents. I felt there is a opportunity for a niche product. Let me share the setup I used for writing the ebook.
-
A firing
I was hooked by the documentary series: Chef’s table. Each episode is about a famous chef. What hooked me was how human each of them was. They are not famous by default. Everyone of them had their struggles. Each of their journey to the zenith was hard. Perhaps it is cultural. We are taught to portray ourselves as successful, taught to hide our own imperfections. If Chef’s table is angled to show how good the chef was, how talented they are, I wonder, would the viewer relate personally to the chef? It is because they are imperfect and everyone is, that they connect.
-
How does FreedomVPN work
I just watched the Champion’s League Final streamed live on my laptop. I watched it on PPTV in Singapore. This is made possible by FreedomVPN(Which amazingly, does not have a landing page of its own where I can link to). Recently, I switched my ISP(Internet Service Provider) to Viewqwest. This far, so good. Their product FreedomVPN, has opened the door to enjoying Internet TV from most of the popular content sites of the world. To many, it is like voodoo. Let me try to explain in broad strokes how they did it. Disclaimer: these are my conjectures and has not been validated with Viewqwest.
-
How to set up a remote VPN using Sophos UTM
My office has a Sophos UTM. It acts as a firewall for the office network. We also use it as a VPN server. It allows us to access the machines in the office network. More importantly, it allows remote users to access the servers. Our servers have access restricted to a white listed list of IP addresses. This way, we only open up the white list to the office network. This allows our people to work from anywhere. We don’t have to keep updating the white list of IP addresses. When I tried setting it up, I could not find articles documenting how to do it. Hopefully it will point you in the right direction.
-
Lessons learned when working with a remote team
I have both worked and managed remotely. I would like to share what works when managing a remote engineering team. Remote working is different from outsourcing. I would consider a remote team part of the company.
-
Prefer lifting to destructuring in Scala
This is one of the few things which I discovered along the way as I was learning Scala. Always prefer lifting a function than destructuring.
-
the tyranny of billing
Billing is a critical function of any business. It is more than just collection of money. What better way than to tell a story.
-
how to deploy a standalone server app
This post shares my experiences deploying a standalone application on a remote Linux server. By standalone application, I mean that the application is packaged as a single file. It could be a jar file or an executable packaged from Java/Scala/C/Haskell/etc. In my case, it was a jar file. My server is Ubuntu 14.04. My automation tool is Ansible and a dash of shell scripts. The process is very much influenced by Capistrano, a tool that is very popular for deploying Ruby web applications. There are three aims. One, I want to deploy in one step. Two, I want to version my deployment. Three, it should cater for easy rolling back.
-
The randomness idea filter
-
Entering the logistics industry
Early this year, I joined a logistics company. I’ve been working in technology for the whole of my professional life. This was a welcomed change. I was eager to see how different a conventional industry, such as Logistics, is like. The company is Courex. It does ecommerce logistics in Singapore.
-
How to configure WebDAV using Apache on Ubuntu
WebDAV is an extension of the HTTP protocol that allows users to manage files on servers. There are many ways to manage files on a remote server. WebDAV has several benefits over other solutions such as FTP or Samba. In this article, we will go through how to configure your Apache server on Ubuntu 14.04 to allow native WebDAV access from Windows, Mac and Linux with authentication.
-
Running a security disclosure program
-
Breaker 101: the experience so far
-
Three tips for managing complexity in Node.js projects
-
The library shopping checklist
-
Thoughts on Kinesis Freestyle 2
-
A quiet desktop
Can you work in a noisy room? No. Noise distracts. When you are working, your are mentally juggling multiple objects all at once. Just one slight noise and everything drops. Luckily all the companies I worked at had quiet working places. Quiet working places are usually the norm. It is item number 8 in the famous Joel Test. External noise is easy to identify. We even have laws against noise pollution. Everyone agrees that it is harmful. What I find that we often allow noise to pollute our desktop without second thoughts. What do I mean by noise?
-
First impressions of Leap Motion
For those who don’t know what Leap Motion is, take a look at this youtube video.
-
How to learn enough web design to not look scammy
I am a web developer by trade. I am not a designer. Like most backend engineers, I make things work. I don’t usually bother with making things pretty. Many people commented that I cannot design. I agree. I never had a penchant for design.
-
Customizing your Emacs Eshell prompt
If you use the shell in Emacs and you are not already using eshell, convert to eshell now! Eshell is the best terminal emulator available in Emacs. If you need convincing, please read this article from Mastering Emacs. Using grep in eshell is the killer feature for me. What the Master Emacs article didn’t elaborate is how to customize your eshell prompt. I’m going to share how to add colors and show the Git branch on your eshell prompt. This is how my prompt look like currently.
-
First impressions of the Ansible configuration management tool
While working at Action.io, we decided to use Ansible for managing our deployments. Previously we were using Opscode Chef. We felt that Ansible suited our needs better. Let me illustrate why.
-
Post mortem of Notifymode
In early 2012, I started Notifymode. Notifymode does application monitoring for Node.js apps. Notifymode could profile the functions and track CPU and memory usage. It provides a high level overview of how the Node.js app is doing. It was a bootstrapped project. I didn’t take any money. So why did I choose to build Notifymode?
-
My Standing Desk Experiment
I was intrigued about standing desks ever since I read about them. Will it make me more productive at work? Will it burn more calories(and help me lose weight)? One month ago, I decided to build myself a standing desk. Build is an overstatement. My total cost outlay is exactly zero.
-
Uploading images via Etsy API with Ruby
As I was building the photo genius app for Tailored, I was tasked with uploading images to Etsy via its API. There is little documentation on how to do this. So I’m going to show you how to do it.
-
How to write a command line application in Node.js
What is a command line application? Usually it means a program that is ran via the command line. It can be a simple script that changes your working directory. Or it can be a complicated program that has a multitude of options and arguments. Examples of command line applications are mutt, irssi, htop.
-
How to use Coffeescript in your Node.js project
Coffeescript is a popular language that compiles to Javascript. Many developers prefer to write in Coffeescript due to its elegant syntax. If you want to use Coffeescript to write your Node.js project, you can do so easily. I’m going to write a small project as an example of how to use Coffeescript in your project.
-
How to use exports in NodeJS
In any substantial project, it is necessary to separate your code in different files. Node.js implements the CommonJS API standard to load modules from other files. Using exports can be a source of much confusion in Node.js. Let us explore how exports works.
-
Customizing the Mac to behave like Xmonad
About 3 weeks ago, my Thinkpad died. It died of a fan error. Luckily, it caught me on Sunday when I didn’t have to work. I had to get a working computer ready by the next day so that work does not get disrupted. Faced with less than a day of time, the logical choice is to get a new computer.
-
My Solarized themed Arch Linux Setup
-
How SmugFTP came into being
SmugFTP is my side project. It has been out in the wild since this January. Why did I build it? The reason is I find uploading painful. I wanted to scratch my own itch.
-
Emacs vs Vim
I’m one of those who have tried both Vim and Emacs. I’ve always wanted to write a post to share my experiences on these 2 venerable text editors. Right now, my primry editor is Emacs. Not to say Vim is not good, but for Emacs fits my setup better. I’m typing this article on Emacs if you’re curious. First a little history. I started with Vim first. Once I got through the steep learning curve, it felt fast. I was typing faster. Vim made me saw how inefficient I was earlier. From time to time, I will see articles or comments that mention Emacs. My curiosity grew. I started trying out Emacs. When I started learning it, I forced myself to use only emacs for a week. After that week, I was able to memorise most of the basic key strokes. So after about 2 years of using Emacs, I think its the right time to summarise my opinions.