Annual Review for 2012

Posted on January 3, 2013

img for 2012 review 1


In the very early 2012, I went to Beijing and joined in ScentLibrary (气味图书馆) to help build the tech department. Thanks to this opportunity, I set up the whole network architecture from scratch - from the topology design, routing rules, DNS/DHCP setup, NAT/firewall rules to several supporting services. This experience provided me a solid experience when I started up my own company later this year.

I peaked Mt.Haba (5396m) in May. It is the first snow mountain in my life. I had been preparing it since the start of this year. The 14-hour continuous ascending was both challenging and exciting.

Late in May, by the invitation of Peter, I went back to Shanghai and initiated the endeavor to bring our shared dream to reality. The ideas we are trying out includes this.

In November, we launched Huali(花里花店) after one month’s prototyping and preparation. Since then this project has drawn support from a passionate and young team and is being cultivated by us now.

Achievement in Hacking

The main achievements in 2012 are mostly in the fields of programming. Comparing with last year, there are progress in three fields :

  • More programming output. In the 2nd half year, I was more active in writing programs due to the familiarity with programming environment and fluency in programming language.
  • Wider range of knowledge about computers. The programs I crafted this year varied a lot, they range from command line tool, web page parser, chat robot, automation script, API wrapper and web applications.
  • Wise choice of tools. Last year, I could only follow the choices of the herd by blind but now I could weigh the options I have at hands and choose between them accordingly.

System Administration

In 2012, I have completed the following projects related with system administration:

  • Set up a corporate Ethernet infrastructure in ScentLibrary using a Linux box as gateway, DNS and DHCP server.
  • Accomplished the Stanford open course “An Introduction to Computer Networks” with a score of 880/960. 2
  • Summarized the knowledge about building an environment ready for application deployment with capistrano-zen and open-sourced it.

As all the endeavors was worked out on Linux, I became more familiar with it. I studied one of the best invention on Unix - the pipeline. I also touched the surface of the book “The Art of Unix Programming” to know more about the programming styles of Unix.

Among all the tool, git has changed the way I work and study. After learning the internals of git and I integrated it into my daily work flow. git has also become the tool to check the team member’s work, do code reviews and exchange opinions with other people at At the end of year, I installed an internal git hosting application with gitolite and gitlab, it provides our team more control over the development process.

I also got to know the basis of network infrastructure of the Internet. I dived into this field with no experience, I struggled for a while - reading academic books about computer network, reading manuals for implementations, trying out new tools. Fortunately, with the help of two friends - Adieu and Zhanzhong, I completed the infrastructure at last. Within the process, I learned all the internal workings such as DHCP, NAT, Routing tables the hard way. Then after I finished the Stanford course about computer network, I linked all the knowledge together and formed a basic knowledge about how the Internet works from bottom up.

Programming and Web Development

Here is the website, web application or programs I wrote in 2012:

  • Made three static sites: zenhacks, manzuo, wazo. All open-sourced. 3
  • Accomplished the UC Berkley open course “Software Engineering for Software as a Service” with a score of 1975/2126. 4
  • Crafted a prototype of manzuoapp with nodeJS, MongoDB and Redis.
  • Crafted an e-commerce web application for huali with Rails.
  • Wrote a small tool ask one day at a hackthon with my roomate Kuno, it helps you accumulate your knowledge about commandline tools.
  • Wrote a simple Ruby wrapper foxit for gitlab API v2.
  • Created a bot to parse the and mirror it privately with express. The source code is here.
  • I learned and improved the tool I am using for programming and became more effective with them. Checkout my vim config files and fish config files.

Through the working with various web application, I gained an in-depth understanding over HTTP - a communication protocol between two processes across the Internet just as any RPC service. I’ve worked with beautifully designed APIs such as Github’s and also have designed APIs for manzuoapp and built wrapper around exist API. Through the process, I was more aware of the RESTful design principle.

I adapted the ideas in the 12 factor app when design the architecture for the Rails application. I broke down the application into difference Unix processes - web apps, background workers and http workers. This separation helps the application to allocate different responsibility to different processes.

Last but not least, I finally adopted Ruby and Rails into production work. I finished reading on Programming Ruby and began to use Ruby to write day-to-day scripts. I also used Rails to build and all other personal stuff. I am happy to survive with these new tools and look for more fluent usage in the coming new year.

Besides the accomplishment in 2012, I had two main failures in 2012.

Main Failure

Communication Failure with Scentlibrary

The main failure at work is the failed communication with ScentLibrary. I, as the only tech person within the team, didn’t communicate with the board well. This corporation ended nastily. They ended up with a infrastructure without maintenance, I financial lose and extra reallocation cost.

I was quite furious when they cancelled the oral contract without notice and compensation. But when I settled down in Shanghai and talked this issue with some senior friends at TZG, I realized my own responsibility for that failure. I was too self-centered and overconfident when dealing with disagreement and conflicts, I didn’t sit in their seats to make communication happen. The ignorance of their needs make further corporation unreachable.

Break of Personal Reviewing Habit

Another failure is the break of my planning and reviewing discipline. It resulted in the gap between the goals set in the 2012 plan and the final accomplishment. I sadly found I failed myself in all fields other than programming. The personal management system I established in 2011 helped me stay focused, fight against distraction and concentration on long term goals which really matters. However, after moving to Shanghai, I stopped this discipline and never resumed it. For the second half year I was busy but not focused. In the last two months, when the new company started up, the errands chewed up the time which I should have put into long term goals.

Now I might look the other part of my 2012.

Other Part of 2012

Physical Training

Speaking of physical exercise, I kept my weekly schedule the first half year. I ran 10-20km per week and did some push-ups everyday. However, the exercise stopped when I got back to Shanghai. I didn’t do any physical training for the second half year. There might be two reasons for this:

  1. Lack of long-term motivation. I kept the exercise schedule in Beijing because I was preparing for the snow mountain climbing. Once it was achieved, motivation disappeared.
  2. Lack of community support. I ran with a bunch of friends in Beijing, this support from friends helped to keep motivation high.

As a result, my health declined. My back and shoulder pain became more severe. Once in a while, I would feel the back pain every morning when I got up. My sleeping patterns also went worse - I could not sleep before 3/4am and hardly woke up before 10am.

To ease the back pain, I switched to a standing desk in October and it helped to ease the pain in shoulder and back. I will continue this practice.

Next year, re-establishing the exercise routine will be the main goal.

Design, Blog and Travel

I didn’t make any progress in design in 2012. Scheduled time is all squeezed out by programming activities. I attempted to learn drawing from this excellent illustrator I met in ScentLibrary, but I left Beijing too quickly to have a chance to draw more than a basic cubic.

I also fell short of the articles I should have written. I ended up with four articles. I also drafted about capistrano internal workings, xmonad setups but didn’t have a chance to polish them up and make them publishable. Less of focus has impaired the deliberate effort which is necessary to cultivate an idea into article.

For the traveling plan, I didn’t get the chance to Southern-Asia and Russia because the unscheduled work changes in the middle of the year. But I did accomplish peaking Mt.Haba. I had been preparing it physically for more than half year and thanks to the mild weather and the help from our guide, I didn’t encounter any fatal setbacks. The 1700km daily ascending was challenging but the views and the final peaking experience was worth all the effort. Check out the photos here.

The reading routine beyond programming also fell short of planning. But I did encountered some unexpected good books:

In the aspect of social activity, I seemed more active comparing with last year due to living locations. I attended several tech gatherings in Shanghai such as HuJS and RubyConf China. I attended Hobby Project Day twice and topped both times. I also co-hosted Wazo Box and made a speech about Chinese color there.


In summary, 2012 was an unbalanced year for me, all my time and effort has been put into hacking and programming (as I really enjoyed it!). But this unbalanced life also hurt: my health condition declined severely, design and art practice had no progress, exploration was halted etc. Balancing programming and other parts of life will be a challenge for me in 2013.