Happy Penguins at LinuxFest Northwest 2014 Party

I felt like I had a lot of camera issues at the start (which first was needing to go back home in order to retrieve all my SD cards, pppt.) Indoor pictures are always difficult, and as such, to make these look less like snapshots, I squirted a lot of Sriracha on these. Here are your spicy penguin pals:

Happy People at LinuxFest Northwest

For the first time in 9 years I decided to take my camera to the after-party. I found a lot of happy people. If you like the picture enough, let me know. None of these have been through post, so I could clean up your portrait a bit. Great to see you all there! I look forward to 2014!

Backups: Sorting Through a Restore

Linux Backups logo

Linux Backups

When you need to be rough with your data–change a bunch of files at once…and you might not do it right the first time. Or you need to recover something that grew a few bad sectors and you only have a bits of your file left. Do you have to restore ALL your work? How do you see where the changes are?

Let’s step thru a partial restore using tar and diff. For example, say I have a code directory that I’ve damaged with a regular expression. My work is in /home/work, my backups are in /home/backups.

I “untar” the backup in a temporary directory next to the work directory like so:

$ cd /home/
$ mkdir restore
$ cd restore
$ tar xzf /home/backup/monday.tgz
$ cd /home

With the two directory trees next to each other, finding the differences is easy. The -r switch for diff tell us to search an entire directory tree, and the -q switch tells diff to display a brief description of just file names. (Diff will work on binary files, so this command will also work on graphics and audio files, just don’t forget the -q).

$ diff -qr /home/work /home/restore
Files /home/work/lib/BugCatcherHelper.java and /home/restore/lib/BugCatcherHelper.java differ
Files /home/work/lib/BugCatcher.java and /home/restore/lib/BugCatcher.java differ

This example is obviously contrived, and often what source control should be used for, but not everyone uses source control.

Linux Photography: Basic Darktable Tutorial

I know why my first few minutes with Darktable seemed so frustrating–they were all me scrubbing this modal interface looking for things I thought all should be in a menubar. But there are no menubars. While DT has quite a bit of keyboard shortcuts (not discussed today) Those were no help because you have to study the Settings dialog Shortcuts tab…no quick to get started with when you’re used to mundane office software. Darktable is as different from GIMP as GIMP is from Photoshop. Is DT similar to PhotoShop? You tell me.

– select photos in light table mode

– enter darkroom mode


– select an action group “basic”

– enable a module DT-tut-008

– reset a module using the furthest right “standby” icon

– spot selects are often a rectangle

– return to lighttable mode

– turn down stars of photos you don’t want

DT-tut-002 DT-tut-015
– expand right sidebar

– select group, select all

– where will it save?

– export selected group with the Export button at the bottom of the column. This will batch-export all the photos on your light-table screen.


Certainly this is nothing like the GIMP. You do have to scrub the interfaces to find all the gritty little features, but it is more batch-oriented and possibly a cleaner work-flow.

Backups: one quick file backup alias

When you have a file you need to edit and you have the foresight to think, “whoa, make a copy before I destroy…” you often copy hulk.txt to hulk.txt.old (that’s using the minimum of keystrokes:

 cp hul[tab][tab] hul[tab][tab].old[enter].
Linux Backups logo

Linux Backups

Well, a week later, what do you rename your next .old file? .old2? No time to put this folder into revision control? Thought so. You can inspect that last modified time on your file with stat. Experiment with this first:

echo `stat hulk.txt | awk '/Modify:/ {print $2}'`

(*snrk* did I just get you use use Awk? OMG!)

So how does that help…more precisely, you’re asking how do I add that to a backup file name? One of many ways, and I will show you the method with least typing: use an in-place shell exansion.

cp hulk.txt .hulk.txt.`stat hulk.txt | awk '/Modify:/ {print $2}'`

STOP. What wee character did I just sneek into that filename? Hold on, first write it up in an alias so you can reuse it:

alias bu="cp hulk.txt .hulk.txt.\`stat hulk.txt | awk '/Modify:/ {print $2}'\`"

Right, the backslashes (or ‘hacks’ as I nic them) keep your statement from actually evaluating the command as soon as it’s defined. The backtick is the same as saying “bash -e …stuff...”. Anyhow, now type bu and you can backup hulk.txt again. Now type ‘ls’ and see where your backup is.

No file? And no error? Oh, right the period before name hides it (sneeky). This means the next time we accidentally do a “rm *” (which often appears when you say “rm * .old” — Computer, stop, replay with magnification: rm__*__.old ). You need a good-old-fasioned:

ls -a

It’s hiding. Let’s finish up here with your alias, properly written:

alias bu="\`cp $1 .$1.\`stat $1 | awk '/Modify:/ {print $2}'\`"

Can we do it without that crazy awk? Sure:

alias bu="\`cp $1 .$1.\`stat $1 --printf %Y '\`"

Now go make a backup…right now!

LinuxFest Northwest 2011: MySQL Overview

These are the slides I’ll be presenting with for my MySQL Overview talk. Last year I called it the “MySQL Buffet”…and I prolly have more slides up here than time window.


You’ll find a surprise slide, “boring” in there. And this is pretty much my take on the Oracle acquisition of Sun thus of MySQL AB. Any we trolls of why “MySQL Sucks” aside, are you really all that interested about what features and bug fixes Oracle management approves of…in an overview talk. My take: the griping, if you want to dig, is in the askmonty.org wiki. There they are discussing how they are trying to keep feature parity with the MySQL features and fixes.

MySQL and it’s sisters are not about to disappear, esp not with how promising Drizzle and Maria look, and that there are commercial consulting services like Percona that could resell services around both Drizzle and Maria.

LinuxFest Northwest 2011…comin’ round the mountain!

I’m looking forward to LinuxFest Northwest 2011 this year! I’ll be presenting on the MySQL database and how to control web traffic in Apache. I’ll even be presenting in the Linux Action Room and will get to show my evil grin to Chris and Bryan :-) I’ll be posting my slides ahead of time, I have one ready to post tonight.

Don’t forget the sunday bike ride! I’m guessing a ride to Hovander is what we agreed on, but let me know if you’d rather bike closer to somewhere that has more of Bellingham Bay, or closer to the pub…or whatever.