Convert multiple images to PDF

This command takes a bunch of images and makes a multi-page PDF out of them:

convert *.jpg -units PixelsPerInch -quality 100 \
  -density 300x300 +repage out.pdf

Battle Pillows

Your happy face, your red and cyan shoelace
Your cream denim melting on your legs
My lightheadedness ever since

Plenty of poke prints on your back
You deflect the poke monster’s attack
My waving a white flag

Kiss after kiss but never in excess
Occasional gaze only to catch a breath
My hands, sound asleep on your waist

Sauce and cheese raining on your dress
The same dish with a wildly different taste
My forkless dining experience

Smell of morning grass through the windows
Lifting mist of feathers from battle pillows
My eyeing your cozy toes

The medalist in every trolley race
Fair play never on your conscious
My losses’ only ever cheering audience

Guide to renting out your room

Here’re some tips I’ve learnt over the years sharing apartments. Some are only applicable if you live in the state of NSW in Australia.


read the rest …

The Art of Barebackness

Few years ago, I got a job in a team which was building a search engine from scratch akin to a real-estate directory (but not exactly that) where a user searches for houses in a town and can filter based on criteria such as price, proximity to amenities, etc.

Due to an extraordinary degree of collective laziness, we decided against IaaSes and went with a PaaS we were familiar with, the GAE. Very early on we noticed that users would only ever search for houses around a certain area and so we would never look across the entire dataset. There had to be a way to capitalize on this and sure enough, we found it: there was no need for a backend. The dataset for a locality and its surrounding was small enough to be downloaded to the user’s browser and be interrogated there.

read the rest …


Mile range spottable, untoppable, cuddleable bunny
Sing your song at the top of your lung, make my day sunny
Mess up the setup and eat the punch for lunch and you're still funny
Wish the most vicious and it will taste as sweet as honey

I slipped

I slipped
You didn’t catch me, you’re slow in that respect
My nose bled and it painted my lips as would a lipstick
As I rose, the seams of my pants ripped

Red plotted and bare butted by design, it appears
Hysterical laughter where there should be tears
Tendency towards an eternal wobble that no one hears
Wishful optimist without detectable fears

I tripped
You pushed me to my five point hit
Cared not to elaborate on the details yet
My gift to you burnt through its box when shipped

Tending the bar of self promises stocked with non-brewed beers
Deprived of the life raft impulse of shifting gears
Unequipped with the red whistle as drowning nears
Still hopelessly undecided after so many years

Epson DS-40 scanner on Linux

In my recent continuous attempt in getting rid of things bulky and/or replacing them with compact and simpler/multipurpose tools (I collectively refer to all these efforts as minimalism), I came across my bulky, but trusty, scanner which is part of a multifunction that I purchased for 20 AUD back in 2009. It had outstanding quality and served me for 7 flipping years and 3500 scans. It still works fine but, you know, it’s big for what it does. So I went and did some research and found Epson DS-40 document scanner. It’s not a flatbed but given its size and capabilities as well as my use cases, I’m OK with the compromise. One little thing though — not easy to get it working on my Archlinux installation.

read the rest …

Mail Exchanger (MX) Providers Market Share

I recently read an article that showed Google was the email provider for the majority of the top startups in US. This inspired me to find out, on a larger scale, which companies are the top providers of email across the whole Internet. However, what I ended up doing was to gather some stats on Mail Exchanger (MX) providers market share. The difference is subtle but important: an email provider offers a complete package where a customer is given an email address, an inbox where incoming emails are stored and a facility to send out emails. On the other hand, an MX provider only provides servers to receive emails. For example, they don’t necessarily provide storage (e.g. forward only).

The rest of this post documents how I went about it, the results and some other notes.

read the rest …

difftr — Diff Pentaho KTR files

I’ve been using Pentaho Data Integration (PDI) as part of my various jobs over past few years. PDI is an ETL tool that is often used for purpose of migrating data from one database to another. PDI runs scripts, in KTR format, which are directed graphs of steps, each of which manipulates the data rows that passes through them. For instance, an Add constant step adds new columns with constant values for all rows passing through it. PDI provides a visual development environment where these steps can be added and connected together as to make a program that takes a bunch of row + column data, manipulates them, and then outputs them.

Since KTR files are really just programs, they evolve and it is a good idea to keep track of their evolution using standard version control systems such as git. However, KTRs have an underlying XML format that is not persistent in terms of ordering of various elements, etc. Therefore, utilities such as diff are useless on KTRs. That’s why I decided to make a simple tool that would visually diff any two KTRs.

read the rest …

One for the team

Slapped and trapped the print in between
Hovered and suffered behind the seam
Coughed and roughed it up even further
Joined and coined this passage for the team:

Take a break
Make a mistake
Jump in the lake
Fight a snake
Ride an earthquake

Bake a cake
Eat a steak
Give it a shake
For heaven’s sake
Look at what’s at stake
And numb that ache
No matter what it’ll take