TurnKey Linux Virtual Appliance Library

Phone vs email vs text chats on IM (instant messaging)

Phone vs e-mail

Alon and I usually shy away from handling things over the phone because it requires coordination (especially when you have different time zones), breaks up our work-flow, and isn't self documenting.

In fact, when I'm working I usually put my phone on silent and as far from reach as possible because nothing breaks up my concentration like a phone call. E-mail I can send and reply to in my own sweet time. A phone demands your attention this very instance. Drop everything and talk to me right now!

Nootropics: meta-research summary

For a while now I've been interested in experimenting with stuff that can improve mental functioning so I've spent some time researching nootropics (a broad class of psycho-active supplements) in depth.

Three strikes - time to automate!

I caught myself today repeating a few basic operations by hand what seemed like a zillion times. Over and over again. I didn't really notice it at the time but it was really slowing me down.

For example, after committing to tklbam I would create a tklbam testing package, copy the package to one of my test machines, install it and remove the archive.

The wonderful and terrifying implications of computers that can learn

Watch this. It's a TED talk on Deep Learning AI algorithms:

I think the presenter is overhyping the implications of the technology in the short term. But in the longer term, he's right. Software is eating the world, AI is disrupting the value of human labor (starting with unskilled labor and gradually moving upstream) and those jobs are never coming back.

How to debug a broken cron job

I just fixed a broken cron job. It turned out it was a PATH issue. By default cron doesn't have /usr/local stuff in the PATH.

Tips on how to debug cron:

  • change the schedule for the cron job so it runs every minute. It's harder to debug something that happens infrequently.

  • Make sure syslog sends cron logs to /var/log/cron.log. On one of our servers this line was commented out for some reason:

Why use XMPP: native clients vs generic IM alternatives

XMPP, the eXtensible Messaging and Presence Protocol (translation: open IM) rocks. It has a rich feature set. It's well designed. And as a bit of a security nut I especially like that it supports strong encryption and uses a decentralized, federated protocol like e-mail. Anyone can install their own Jabber server (like TurnKey ejabberd). That way private conversations within your domain never leave the security of a server under your direct control. Just like e-mail.

Less is more and the magic number is four

Remember this posts title. It not only rhymes. It's the law!

Sometimes the truth is a bit counterintuitive. Conventional thinking is that more is better. More features. More choices. More options. More is more right?

When we first tried redesigning the Hub's front page we made this mistake. We were so proud of all the big and small features that made the Hub easy to use we listed all of them. As a big wall of text no less. In retrospect I don't know what we were thinking.

My last Perl program - a Perl obfuscater that can eat its own tail

OK, I admit it. I used to program in Perl. And I liked it! My Perl programs were terse. If I could shave a line off, I did. In fact, I spent a non-trivial amount of time figuring the shortest possible programs that solved various problems. Often that meant resorting to various tricks and arcane features of Perl that nobody other than me would bother to understand. I took pride in that.

Python optimization principles and methodology


The basic methodology for optimization:

  1. Discover where you program is spending its time (hotspots vs coolspots)

    A good way to get an overview is to use the Python profiler. The Python profile will usually be included in Python's standard library:

4 simple software optimization tips

1) Always be experimenting!

Trying to squeeze out more performance out of your program? Don't be afraid to experiment!

In practice what that means is you setup small, simple throwaway experiments to establish how things work when you're not absolutely sure you fully understand something such (e.g., how many times a second a certain function can be invoked, how the profiler measures blocking IO or the time it takes a sub-program to complete).