Hello World! You found me!
TLDR: Gmail appears to support IPv6 for SMTP by broadcasting an IPv6 address
for its IMAP and SMTP services. However, whatever behind the IPv6 address
doesn’t accept SMTP connections.
You just need to choose a window manager. Compiz comes by default with Ubuntu so it’s a good choice if you don’t want to install new stuff yet. Openbox is also a sane choice. Xmonad is my favorite, so I’m going to use it as the example here.1
Recently I had a chance to come back to Malaysia for a few days and was introduced to a few “rules” when using GrabCar, a taxi-like service that some refer to as “anti-taxi”.
Update: current Nginx (1.10.1) and OpenSSL (1.0.2h) have good defaults. None of this is needed anymore \o/
In a search to ensure forward secrecy on all servers I manage, I needed to figure out a list of ciphers I want to use. There are numerous articles on the web that tells you what to use, but they are either vague about what really to use, or give you a long list of things you don’t know or care about. After quite some reading and experimenting I finally got a grasp of it, and the end result is not as scary as what those articles say.
There is also a tldr at the end for the lazy ;)
In August 2013, I started working on fooCam. It’s a little app that scratches my own itch. I quickly got the app to do everything I wanted it to do, slapped the MPL on it and submitted it to F-Droid. Without any intention to monetize, I did not want to spend $25 to submit the app to Google Play Store. All went well until today, GitHub user @programmin1 informed me that the app is already on Google Play Store.
Recently I was taken aback to find that my Amanda backups didn’t contain files. Not even a single file! All that I had backed up were empty directories. Luckily it was part of a check and I didn’t lose anything. The incident, however, reminded me of the biggest problem with backups: you don’t want to realize that your backups are broken when you need to restore something. That motivated me to write a script that simulates what I will do when I need to get a backed up version of something. Writing the script taught me a few things about threading in Python, which was totally unexpected, but exciting.
Docker seems to be the new hotness in the devops world. It runs applications in isolated containers, providing the benefits of virtualization without the hassle of virtual machines. Today is a Cogini Hackday, and I chose to dive into Docker. This is still a very young project, but it has the potential to change the way we do software development and deployment. I’m going to compare Docker with Cogini’s current best practice :)
A long long time ago…
Actually not that long ago, a friend and I were talked about perfection. During the half-joke half-serious discussion we came across the term “perfectly stupid”, which seemed to be one of the floweriest insults we knew at the time (we were secondary school kids at time, by the way). Since then I have heard of many jokes aiming at people’s lack of brilliance, though I haven’t heard any that I would call “perfect”. The word “perfect” is just that far away for me.
Then my friend suddenly thought about reversing the words, so we had “stupidly perfect” and start to wonder, which of the two combination carried more insult.
After incorporating Powerline into my dotfiles I got a very good looking prompt for Bash and Zsh, plus a nice status line for Tmux and Vim. I quickly noticed some performance problems, but they didn’t seem serious and I considered that an acceptable trade-off for features.
Two weeks into Powerline, I still felt the ugly spots that I pointed out:
- High prompt generation time
argparseneeds to be installed for Python older than 2.7
Unfortunately I did find more bad news.
Today while doing some reading I came across some comparison of quicksort and merge sort. Then a question struck me: what is the “best” sorting algorithm? I know I had thought of that question time and again, but I have never got down to figure it out. Well, until today.
Wikipedia has a table comparing a bunch of algorithms, that can be sorted by each property (best case, average case, worst case, memory usage and stability). However, I find that a bit of work is needed to figure out the “best”.
Update: Powerline Revisited
A while ago I came across Powerline for Vim, which is a plugin that shows a pretty status line in Vim. Needless to say, the default status line is awful, and I am too lazy to set up my own status line. Even if I did, my status line would probably not look as good as this. I grabbed vim-powerline feeling thankful, like every time I grab a Vim plugin.
I did notice, however, that Powerline for Vim has a big deprecation warning in the home page, pointing to Powerline as the replacement. Unfortunately, the new Powerline required Python 2.7, and I’d need to install something system-wide using Pip. Meh, that’s against my idea of having per-user configurations. Users should be able to configure their applications without having to obtain administrative access.
Recently, having some free time, I decided to hack Powerline eliminate the need to install it system-wide.
People say that it’s good for a sysadmin to be lazy. Fair enough, a lazy sysadmin has more incentive to automate things. The same can be said about programmers, or IT workers in general. After a while everyone starts to go around saying that ey is proud to be a lazy person. Employers start to look at laziness as a desirable trait.
The default HTTP check in Nagios only checks for one URL, which is the IP address of the host. In a world where everyone is using name-based virtual hosts this is not very useful. Moreover, in some cases you may need to check different URLs of the same site to ensure that it’s working. This post will show you how to do that.
Every once in a while you need to copy files from one computer to another. Across different operating systems, a sneakernet (read: copying files using a USB flash drive) seems to be the best option because most (if not all) computers can handle a USB. However, the process may become cumbersome because:1