How to write a good changelog

In a nutshell, think of your users.

They read top to bottom. They have a very limited attention span. Even if they read all the way through, they're probably going to pay more attention to things that come early. Before patience runs thin.

So your goal is not only to describe changes but to figure out now to communicate as much value to users before they lose interest. If you do a really good job, you might actually prevent them from losing interest and they'll read all the way through. Don't bet on it though...

Blog Tags: 

Another batch of changes to the TurnKey website

These past few weeks I've been having too much fun offline with my development clone of the TurnKey website, ticking items off of my todo list. Today I finally got around to the complex, tedious, and unfortunately uninteresting task of updating the online version of the website. Ah, a necessary evil I suppose.

On to the changes...

Blog Tags: 

Important security notice: Your TurnKey system may no longer be receiving automatic security updates

I have some bad news and some good news. The bad news is that if your TurnKey installation is older than 2 weeks you may no longer be receiving security updates.

The good news is that you are reading this and there is a very easy fix. Either reboot your system, or log in and restart the cron service:

/etc/init.d/cron start

Until you start recron, security updates and other scheduler related services (e.g., daily backups) will not work.

Python property gotcha

If you like using a single getter/setter function for your properties, watch out if using None for the default. If you do that you won't be able to set your property to None!

Example code and workaround...

Blog Tags: 

Use the stash, Luke (git-stash)

I was in the middle of developing a new feature for the TurnKey Hub when I received a bug report that needed to be fixed.

What to do? Throw away my current changes? Checkout a clean branch? Of course not! Just stash my changes away, fix the bug, and get my changes back so I can continue development.

TurnKey Domain management & Dynamic DNS

A while ago I was chatting with Liraz and said "wouldn't it be great if when launching a cloud server the Hub would perform some magic and assign the server a friendly name? I'm tired of remembering IP addresses, and logging into our DNS management console to setup records."

Then we thought, "lets make DNS easy, lets make it TurnKey". So we did...

No matter your use case, we got you covered:

Blog Tags: 

Vim file exploration tips

Find filename patterns

Using Vim's built-in file explorer, it's possible to find specific filenames by pattern. For example:

# :Ex is short for :Explore

# search all subdirectories
:Ex */Makefile
:Ex */*.c

# search recursively
:Ex **/Makefile
:Ex **/*.c
:Ex **/*tpl*

This will take you straight to the first match. If you want the next match after that:

<Shift-DownArrow>

And back:

Why I resist criticism (loss aversion and cognitive dissonance)

Have you ever felt like your Ego is getting in the way of being productive?

These last few days I've been feeling I might be overly resistant to criticism with regards to some new stuff I've been developing. So as an anti-dote I'm writing this blog post to remind myself why that might be.

In a nutshell, I think I tend to fall in love with my creations and let it bias my judgement.

Remember, the more effort you put into something the more attachment you feel towards it. It's a well known cognitive effect. You need to make sure you compensate for that and don't let your ego get the better of you.

Amazon FPS (flexible payments system) in a nutshell

A few weeks ago I looked into Amazon FPS (Flexible Payments Service), just to see what our options are for premium services like commercial support. You know, the stuff we can't give away even if we wanted to because their are real costs involved which we couldn't subsidize without going bankrupt.

Note that we're probably not going to be using FPS in the near term but I did research it exhaustively before I ruled it out (for now). While it's fresh in my mind here's the summary for the benefit of those who might be considering it as an option.

My code refactoring algorithm

You're looking at a block of Python code. It's not immediately obvious what it does. It's sort of a mess and you realize it needs to be refactored. But how? What mental algorithm do you use?

Pages