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 http://www.emacswiki.org/emacs/WhiteSpace

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

;http://www.emacswiki.org/emacs/WhiteSpace
(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)))

gitconfig

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 http://stackoverflow.com/questions/3357219/expose-the-date-a-commit-was-pushed-to-a-repository
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
openbugs = showbugs -s NEW,ASSIGNED,NEEDINFO,FAILS_QA,REOPENED,ON_DEV
closedbugs = showbugs -s PASSES_QA,VERIFIED,RELEASE_PENDING,CLOSED

# 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.

card_red_2
The card in “ready to hand out” mode

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

card_caliper_2
After snapping out parts.

card_caliper_slider
Folding over the slide

card_caliper_assembly
Next step in assembly.

card_caliper_complete
Assembly completed.

card_caliper_8mm
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 www.adrianlikins.com.

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.

laser cutter cutting

Fiddling around with the laser cutter at Techshop. I used inkscape to vectorize some doodles, then cut then out of paper using the Epilog laser cutter at Techshop.

Paper cuts very well, with pretty good detail (see the hatching cut out from the doodle in the front for example). I’ve tried cutting acrylic as well, and it cuts well too, but in some of the detail areas, it unmelts into a bit of a blob that makes detailed parts harder to extract. Need to try it again with more power to see if it will cut a wider kerf.

I also tried engraving/rasterizing an image. I think it turned out pretty well, almost exactly what I was looking for. It did burn through a little bit in one section, but I could fix that in the image. The image itself started off kind of “pointilist”, which I vectorized with some of the settings tweaked a bit so it would blurb some of the points together so it would hold together. Then I “engraved” it instead of cutting it out, but with the power set high enough to burn through the paper.

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 shapeways.com 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.