Skip to main content

Basic Shell/Unix Commands

· 3 min read

I get rusty from time to time and need a quick tutorial to get myself back into the tech game. This reference doc is fairly basic but saves me the trouble of having to google (which doesn't work in China) other reference websites or Stackoverflow.

Convert Multiple Images Into One Single PDF

· 2 min read

A lot of manga series found online are in image format, like JPG or PNG and it's one image for one page. Mac's Preview app can read them if needed, but that's not very convenient. It would be nice to convert them into one single PDF file so that it can be read in any device and easily shared with others. This can be accomplished with a command-line tool ImageMagick on Mac.

Basic PostgreSQL Commands

· 2 min read

We use MySQL for Linkqlo app as that was part of the good old stack of PHP-MySQL chosen by the IT vendor we worked with. In 2015~2016 as we gradually refactored PHP endpoints into Haskell, we started running into various issues of MySQL since some of its libraries didn't work well with Haskell or our deployment script. Eventually they were all fixed, but it was a big hassle. For our new Mirror Mirror app, since it was built from scratch, we chose a stack that would fully leverage our technical capability - Haskell for endpoints, React-Native for front-end, PostgreSQL for database, and Nix for deployment.

How To Make App Store Submission

· 8 min read

Making an app submission to Apple's App Store is like configuring Amazon's AWS service. From a technical standpoint it's not scientifically difficult, nor an engineering feat worth bragging about, but it's complicated and often confusing because we have to play by the rules set by Apple and Amazon and that introduce a whole world of pains on its own. It's a muddy water where if you have been there, done that, you know what to do, sort of, through a series of trials and errors. If you are new to this process or haven't done this in a few months, you just have to man up and read through some notes from the past in order to stay on the right path.

My Favorite Podcasts of 2017

· 11 min read

Back in 2008~2009 when I was soaked in the underground music scene in Beijing, I thought about creating an English podcast to introduce indie rock music from China to the western audience. The inspiration came from a four-hour mp3 file of Anthony Wong of Tat Ming Pair of Hong Kong in his early radio DJ years. In this audio clip Anthony Wong was commenting in Cantonese on Depeche Mode's latest album in the background music of Tour de France by Kraftwerk. It was devilishly cool.

hitchiker's guide to web3

How To Git Tag A Commit

· 2 min read

Tagging helps to keep track of key versions of a codebase. During the last few frenzy days toward submission of a new app to iTunes Connect, I sometimes make 10~20 commits a day to clean up various small patches here and there. One month from now when memory becomes hazy, it's important to be able to identify exactly which version of the binary on the git server corresponds to the one that is currently available in App Store. I follow the below workflow to tag a particular commit.

How to Serve Wordpress Site from Subdirectory

· 3 min read

Wordpress by default is installed in the root directory var/www/abc.com/public_html. This causes a lot of inconvenience as often we need to install other files into separate subdirectories under root directory. A good installation practice should keep every project in its own subdirectory.