color sorting

I find the idea of sorting a set of colors in interesting ways. It’s very much a perceptual problem. Different people will sort a color palette in different ways.

“web” palette sorted by saturation. (Some of these examples are truncated for formatting, see the sortpal pages for fuller versions)

People organize colors differently. Lots of ways to sort them mathematically. Some map well to what people perceive as correct. Some do not.

web palette sorted by proximity in rgb colorspace

Sortpal is project to try to visualize what some of these different methods look like, and how they compare to each other. It shows a set of color palettes, sorted by the various attributes like it’s redness, or brightness, or saturation. For example, in the “red” row, the reddest colors are at the far left and decreasingly red colors to the right. The width of the color depends on the number of colors in the palette.

web palette sorted by redness

Different color palettes can be chosen, including the 216 “web safe” palette (wiki), the X11/css “named” colors (wiki), the xkcd color survey (xkcd color survey), a rough approximation of the spot colors often used in print, a Hilbert curve through rgb space (wiki), misc artistic palettes, etc.

The sort methods fall into a couple of sorts (ha!):

Sorting by one component of a color space, the most obvious being the red, blue, green values of RGB:

web palette sorted by red, green, blue respectively

Hue, saturation, and value (HSL and HSV) is another color space, that maps a lot more naturally to how people understand colors.

web palette sorted by hue, saturation, value, lightness, respectively.

Hue or Saturation are probably what most people think of as the natural way to sort colors.

Another approach is sorting by proximity in the 3d color space. The idea being to start at the origin, and find the closest colors in 3d.

Hue, Saturation, Lightness 3d

Hue, Saturation, Value 3d

Red, Green, Blue 3d

The code is up at github. No promises to it’s correctness or functionality.

Note that for the most part, all of the methods shown here are described as being one parameter sorts, but in some cases there are secondary and tertiary sorts as well (hsv3d, and chroma ) mostly just to stabilize the sorts.

git diff like highlighting of extra whitespace in vim and emacs

via Jim Meyering via coreutils list

Some configs for vim and emacs to show trailing whitespace and other whitespace anomalies.

vim config

let c_space_errors=1
highlight RedundantSpaces ctermbg=red guibg=red
match RedundantSpaces /\s\+$\| \+\ze\t/

Emacs needs the Whitespace mode from

The default config is a bit overboard for me, so I use something more like:

(require 'whitespace)
(autoload 'global-whitespace-mode "whitespace" "Toggle whitespace visualization." t)
(autoload 'global-whitespace-toggle-options "whitespace" "Toggle local `whitespace-mode' options." t)

;turn on the more or less git diff --color whitespace highlighting
(setq whitespace-space whitespace-style (quote (face tabs trailing space-before-tab newline empty space-after-tab indentation)))


I finally started organizing the various git commands and aliases I use alot, and published them to github. My gitconfig repo.

Some of these are useful only for projects similar to mine (fedora, tito based, bugzilla, etc) but I think some of then are generally useful.

A few favorites:
# commits not pushed to $1
unpushed = cherry -v

# ignore po files in "git log", sorry translators ;-<
slog = "!sh -c 'git log --no-merges $1 `ls | grep -v ^po`' -"

# what tag contains the sha
whatrelease = name-rev --name-only

# what branch contains the sha
contains = branch --contains

# what got pushed to master in the last hour
# based on
justpushed = log origin/master@{\"1 hour ago\"}..origin/master --

# show a list of branches sorted by time of last commit
brage = "!sh -c 'for C in $(git for-each-ref --sort=committerdate refs/heads --format=\"%(refname:short)\") ; do git show -s pretty=format:\"%Cgreen%ci %Cblue%cr%Creset $C\" \"$C\" -- ; done'"

# show a list of tags sorted by when they were tagged
tagage = "!sh -c 'git for-each-ref --sort=taggerdate refs/tags --format=\"%(refname:short)\"'"

# show a list of every branch and show there latests commit, sorted by last commit
brlog = "!sh -c 'for C in $(git for-each-ref --sort=committerdate refs/heads --format=\"%(refname:short)\") ; do git show -s --pretty=format:\"%Cgreen%ci %Cblue%cr%Creset $C\" \"$C\" -- ; git show -s $C ; echo; done'"

# needs python-bugzilla, and git-showbugs

# show a list of files with bug fixes in them, sorted by popularity of occurance
# aka, list the buggy files
buggyfiles = !"git log --format=\"format:%n\" --grep \"^[[:digit:]]\\+:\" --name-only | grep . | sort | uniq -c | sort -n"

Business card caliper

This is a project I’ve been experimenting with at Techshop Durham. It is a laser cut business card that folds up to create a working caliper. I’ll probably make some for myself, Rod-o-Rama, and lintqueen.

The card in “ready to hand out” mode

Card assembled, ready to use. These particular examples were actually cut out of paint chip cards (lintqueen’s idea).

After snapping out parts.

Folding over the slide

Next step in assembly.

Assembly completed.

In action, measuring an 8mm hex key. Accuracy and precision are not too bad for something folded out of paper.

It’s cut and engraved with the epilog laser cutter at Techshop Durham. Initial design scratched out on paper, transferred to Inkscape, final tweaking in Corel Draw (actualy, lots of tweaking, since it did a horrible job importing the svg).

It still needs some refinements, like better instructions and possibly an illustration or two. I have some minor aesthetic tweaks in mind as well, but this version is mostly complete.

The corel draw source file is here. That file could use some cleanup, and I’d like to get it back into a open format like svg, but that will do for now. Consider it under Creative Commons.

Creative Commons License
Business Card Caliper by Adrian Likins is licensed under a Creative Commons Attribution 3.0 United States License.
Based on a work at

N sources of nerd guilt

Things that cause tech guilt.

– I should backup more often.
– I should use any/stronger crypto on everything.
– I should really change my password
– I should blog/twitter/facebook/otherwise broadcast desperate attempts to get people to pay attention to me more
– I should blog/etc less
– I should update this system
– I should really automate this task
– I should write this code using WhizBangTech instead of the way that works and I actually know.
– I should optimize this code
– I should document this.
– I should file a bug report about this.
– I really should refactor this code.

ring ring, fedoraphone!

I managed to get one of my machines installed with a os version I didn’t want, and no way to change it. Normally, this means it’s time to koan/cobbler to get it re-provisioned. But I couldn’t log into the machine to do anything. I could of reinstalled it from a cd/dvd, but I hate burning cd/dvd’s for that. I could of written an image to usb key and installed from that, but I didn’t have any with me.

So I decided to try what Mark Cox; did and try to boot it from my phone. I more or less just followed the steps he mentioned, though I had to get some 3rd party software to expose the storage card as a usb device.

But that aside, it worked. Not the fastest way to boot, but it got the live image running so I could do a hard drive install.  Kind of cool. Wonder if there is anyway to support i386/x86_64 live images on the same card?

it will blend

Spent most of Sunday trying to learn how to use Blender (Blender the 3d modelling app, not the home appliance. I’ve already gotten my KACBO [Kitchen Aid Certified Blender Operator certification]).

I knew it was a fairly impressive app, just from seeing what the kids did at the Red Hat High blender course a few years ago.

It’s not the easiest thing to learn how to use, especially since I haven’t really tried any 3d apps in about 10 years. The last time I tried it, it was all CSG based apps for building models for POV-RAY. Blender is mostly a mesh based modelling tool, like most modern 3d apps.

The main motivation being a combination of sites that offer web based 3d printing like and the possibility of Techshop Durham getting a 3d printer in the future.

I only made it through a couple of the tutorials so far, but it’s been fun. Just need to figure out something cool to design and print.


I posted a small script I use to help manage the git repo’s of func to github. It’s named gum[1].

The basic idea is you include a gum.conf config file in your repo, that defines where you can find all of the repo’s and branches of the project in question. It’s got a couple of commands to add list the repo’s, add a repo, or add all of the repo’s. It always names the branch in the form remotename-branchname.

I wrote it since it seemed I would end up with a different version of the git repo on every machine I used, and I got tired of tracking down remote and branch names to add them to each src checkout I was using.

[1] mainly to annoy skvidal ;->