Tuesday, February 9, 2010

Buzz

(Rhetorical question) How long does it take for a blogger entry to show up in buzz?


Edit:  I don't think I have PubSubHubbub enabled, or Feedburner doesn't support it yet.  It's taking a while to show up. :(

Thursday, June 4, 2009

Removing mac’s downloaded application security warning

I recently ran into a problem where a program on my mac wouldn't save my acknowledgment of the "X is an application that was downloaded from the Internet" warning, despite my repeatedly confirming I really wanted to open the application.

I think the problem stems from the fact that I installed the program for all users from another account, so the permissions were all wonky and wouldn't save the new xattr.  Here's the solution:

$ cd /path/to/application
# View all files with extended attributes
$ ls -lsa
# To see the files that are quarantined:
$ xattr -l * | grep com.apple.quarantine
# Remove the extended attributes
$ sudo xattr -d com.apple.quarantine \
$(xattr -l * | grep com.apple.quarantine | \
awk -F: '{print $1}')

Thursday, May 7, 2009

forcing mdadm device names at boot

I had this fun problem when I upgraded my machine recently where the mdadm RAID array in my external enclosure would be detected before the RAID on my internal drives if the computer cold booted with the external enclosure turned on.  This created a problem because mdadm wanted to assign /dev/md0 to the array in the external enclosure, and LVM was expecting a different array to be there.

Setting the super-minor on the superblock of the array didn't seem to have much affect (from what I can tell it wasn't even being written).  The solution is to specify the UUIDs of the arrays with the device names you want in your mdadm.conf.  Here's what mine looks like:

dknowles@bender:~$ cat /etc/mdadm/mdadm.conf | grep ARRAY
ARRAY /dev/md1 level=raid1 num-devices=2 \
UUID=6e5ff2ae:5724fb93:a0a0eea7:e933aaa5
ARRAY /dev/md0 level=raid5 num-devices=3 \
UUID=40a6c7b8:76b2e648:a0a0eea7:e933aaa5
ARRAY /dev/md2 level=raid1 num-devices=2 \
UUID=e4977645:8fd7f50c:a0a0eea7:e933aaa5

Presto! Now from a cold boot, all the drives are detected normally. Which is good because now my backup cron will stop sending me error emails every night. On to the next, more interesting problem in my life! :)

Saturday, December 27, 2008

mythbuntu, ltsp and home directories

Since I just spent about an hour trying to find this again, mythbuntu diskless clients have an "overlay" where the home directories and some other files specific to each instance are stored.  On the server, you can find these in /var/cache/mythbuntu-diskless/overlay/[mac_address]/

Monday, April 21, 2008

Linux software raid notes

This is mostly for my own reference, but someone else may find it useful.

I currently have two raid volumes in my home server. They're running on four disks, which are partitioned thusly:

root@bender:~# fdisk -l /dev/sd[abcd]

Disk /dev/sda: 400.0 GB, 400088457216 bytes
255 heads, 63 sectors/track, 48641 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sda1 1 48641 390708801 83 Linux

Disk /dev/sdb: 400.0 GB, 400088457216 bytes
255 heads, 63 sectors/track, 48641 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sdb1 1 48641 390708801 83 Linux

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sdc1 1 48641 390708801 83 Linux
/dev/sdc2 48642 60801 97675200 83 Linux

Disk /dev/sdd: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xb7e306eb

Device Boot Start End Blocks Id System
/dev/sdd1 1 48641 390708832 83 Linux
/dev/sdd2 48642 60801 97675200 83 Linux

Using the partitions as raid targets, I end up with two raid volumes:

md0 : active raid5 sdd1[3] sda1[0] sdc1[2] sdb1[1]
md1 : active raid1 sdd2[1] sdc2[0]

On top of these raid volumes, I'm running an LVM so that they can be easily resized:

root@bender:~# pvdisplay
--- Physical volume ---
PV Name /dev/md1
VG Name vgraid1
PV Size 93.15 GB / not usable 9.88 MB
Allocatable yes (but full)
PE Size (KByte) 16384
Total PE 5961
Free PE 0
Allocated PE 5961
PV UUID NX3sku-sNGU-yqyw-3peE-Bd8W-KjBo-xsUol8
--- Physical volume ---
PV Name /dev/md0
VG Name vgraid
PV Size 1.09 TB / not usable 14.31 MB
Allocatable yes (but full)
PE Size (KByte) 16384
Total PE 71540
Free PE 0
Allocated PE 71540
PV UUID wtYFqQ-499L-BbuB-zaRb-EV16-Y5sT-ZcG65b

And now, the fun stuff. Here's how the original raid5 volume was made (which was originally missing a 500G disk, because it died on me when I first got it):

root@bender:~# mdadm --create --verbose /dev/md0 --chunk=128 \
--level=5 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1

root@bender:~# pvcreate /dev/md0

root@bender:~# vgcreate -s 16M vgraid /dev/md0

root@bender:~# lvcreate -l 47693 vgraid -n bigdisk

root@bender:~# mkfs.xfs /dev/vgraid/bigdisk

[note: this was done a while back, so i"ve lost the output. for output example see below when i create my raid1 array]

I finally received my new 500G drive from RMA, so I had to resize the raid5 to include the new disk. Here's how it's done.

First, create the new partitions to match the size on the other drive. (see above) Then, resize the raid array (takes a while...I started it then went to sleep, then it was magically done when I woke up this morning)

root@bender:~# mdadm --add /dev/md0 /dev/sdd1
mdadm: added /dev/sdd1

root@bender:~# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Fri Mar 21 09:52:31 2008
Raid Level : raid5
Array Size : 781417472 (745.22 GiB 800.17 GB)
Used Dev Size : 390708736 (372.61 GiB 400.09 GB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Sun Apr 20 23:28:58 2008
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 64K

UUID : 2621450e:bb4f9269:a0a0eea7:e933aaa5 (local to host bender)
Events : 0.17564

Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
2 8 33 2 active sync /dev/sdc1

3 8 49 - spare /dev/sdd1

root@bender:~# mdadm --grow /dev/md0 --raid-devices=4
mdadm: Need to backup 384K of critical section..
mdadm: ... critical section passed.

root@bender:~# mdadm --detail /dev/md0
/dev/md0:
Version : 00.91.03
Creation Time : Fri Mar 21 09:52:31 2008
Raid Level : raid5
Array Size : 781417472 (745.22 GiB 800.17 GB)
Used Dev Size : 390708736 (372.61 GiB 400.09 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Sun Apr 20 23:29:48 2008
State : clean, recovering
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 64K

Reshape Status : 0% complete
Delta Devices : 1, (3->4)

UUID : 2621450e:bb4f9269:a0a0eea7:e933aaa5 (local to host bender)
Events : 0.17680

Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
2 8 33 2 active sync /dev/sdc1
3 8 49 3 active sync /dev/sdd1

root@bender:~# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Fri Mar 21 09:52:31 2008
Raid Level : raid5
Array Size : 1172126208 (1117.83 GiB 1200.26 GB)
Used Dev Size : 390708736 (372.61 GiB 400.09 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Mon Apr 21 09:15:38 2008
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 64K

UUID : 2621450e:bb4f9269:a0a0eea7:e933aaa5 (local to host bender)
Events : 0.277372

Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
2 8 33 2 active sync /dev/sdc1
3 8 49 3 active sync /dev/sdd1

root@bender:~# pvresize /dev/md0
Physical volume "/dev/md0" changed
1 physical volume(s) resized / 0 physical volume(s) not resized

root@bender:~# vgdisplay
--- Volume group ---
VG Name vgraid
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 1.09 TB
PE Size 16.00 MB
Total PE 71540
Alloc PE / Size 47693 / 745.20 GB
Free PE / Size 23847 / 372.61 GB
VG UUID JPEInC-5bNp-f0iC-3611-qIIn-Drhd-A3xInG

root@bender:~# lvextend -l +23847 /dev/vgraid/bigdisk
Extending logical volume bigdisk to 1.09 TB
Logical volume bigdisk successfully resized

root@bender:~# xfs_growfs /dev/vgraid/bigdisk
meta-data=/dev/mapper/vgraid-bigdisk isize=256 agcount=32, agsize=6104704 blks
= sectsz=512 attr=0
data = bsize=4096 blocks=195350528, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal bsize=4096 blocks=32768, version=1
= sectsz=512 sunit=0 blks, lazy-count=0
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 195350528 to 293027840

root@bender:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 73G 63G 6.2G 91% /
varrun 1.9G 264K 1.9G 1% /var/run
varlock 1.9G 0 1.9G 0% /var/lock
udev 1.9G 120K 1.9G 1% /dev
devshm 1.9G 0 1.9G 0% /dev/shm
/dev/sde1 280G 271G 8.6G 97% /export/myth
/dev/mapper/vgraid-bigdisk
1.1T 453G 665G 41% /export/archive

Since I now have my two 500G disks, I have an extra 100G on each (since I made all the partitions match to raid5 with the 400G disks) so I can raid1 those for a wonderfully redundant backup array.

root@bender:~# mdadm --create --verbose /dev/md1 --chunk=128 \
--level=1 --raid-devices=2 /dev/sdc2 /dev/sdd2
mdadm: chunk size ignored for this level
mdadm: size set to 97675136K
mdadm: array /dev/md1 started.

root@bender:~# pvcreate /dev/md1
Physical volume "/dev/md1" successfully created

root@bender:~# vgcreate -s 16M vgraid1 /dev/md1
Volume group "vgraid1" successfully created

root@bender:~# vgdisplay
--- Volume group ---
VG Name vgraid1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 93.14 GB
PE Size 16.00 MB
Total PE 5961
Alloc PE / Size 0 / 0
Free PE / Size 5961 / 93.14 GB
VG UUID Cxrf05-HaUJ-sPHx-Ai9P-eRYL-Ofoz-mnIsFx

--- Volume group ---
VG Name vgraid
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 1.09 TB
PE Size 16.00 MB
Total PE 71540
Alloc PE / Size 71540 / 1.09 TB
Free PE / Size 0 / 0
VG UUID JPEInC-5bNp-f0iC-3611-qIIn-Drhd-A3xInG

root@bender:~# lvcreate -l 5961 vgraid1 -n backup
Logical volume "backup" created

root@bender:~# mkfs.xfs /dev/vgraid1/backup
meta-data=/dev/vgraid1/backup isize=256 agcount=16, agsize=1526016 blks
= sectsz=512 attr=0
data = bsize=4096 blocks=24416256, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=11922, version=1
= sectsz=512 sunit=0 blks, lazy-count=0
realtime =none extsz=4096 blocks=0, rtextents=0

root@bender:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 73G 63G 6.2G 91% /
varrun 1.9G 264K 1.9G 1% /var/run
varlock 1.9G 0 1.9G 0% /var/lock
udev 1.9G 128K 1.9G 1% /dev
devshm 1.9G 0 1.9G 0% /dev/shm
/dev/sde1 280G 271G 8.6G 97% /export/myth
/dev/mapper/vgraid-bigdisk
1.1T 453G 665G 41% /export/archive
/dev/mapper/vgraid1-backup
94G 544K 94G 1% /export/backup

Huzzah! Less likeliness of lost data due to my stupidity! Now to write some scripts to do automatic backups. :)

Sunday, February 24, 2008

Re: What I Want

A while back, I posted about a google reader function that I wanted--the ability to seamlessly share things from google reader to my blog. Lazyweb wasn't much help, so I rolled out a quick-and-dirty greasemonkey script to do it. You can find it here: http://www.dknowles.org/other/google-reader-cross-share.user.js

Right now, it works by clicking on the share icon below a reader entry. I'm not catching keyboard shortcuts, so it requires a physical click. (fine with me, as I'm a keyboard junkie and can't be bothered with constant naggings about sharing on my blog)

The regular "use-at-own-risk-may-break-at-any-time" disclaimer applies. Ideally, I'd eventually like this to make a greader-styled popup that asks for your blog entry, but that requires more work than I'm willing to put into this. Plus, this works as-is. If there's interest in this, I can put it in SVN somewhere so people can give back and extend it and stuff.

Tuesday, January 29, 2008

Intellectual property & t-shirts

My awesome obama shirt wasn't even up for a whole 24 hours before it got flagged by the people at cafepress.  I sent a nice email back asking for a specific reason for why my shirt was taken down, and I actually received a human response outlining everything.

While I don't agree with the auto-flagging of copyrighted material, I do appreciate the human response, and I understand why they won't sell the shirt.  My problem with this is that it's typically the copyright holder's burden to flag infringements, and it feels icky for a company to take the task off the hands of the copyright holder.  Of course, these days it's nearly impossible for a copyright holder to find every infringement.  And it's also possible that the Obama campaign has already had some sort of agreement with cafepress regarding what is fair use and what isn't.  I'll just cover my eyes and ears and hope that's the case.

So maybe it's my mistake for using such a large company.  Maybe I'll have better luck infringing copyrights with a smaller company (printfection, maybe?).  Not that infringing copyrights was my end-goal, but it's something to keep in mind nonetheless.

On the upside, I did get a shipping confirmation from cafepress today.  So maybe I'll still get the two shirts I ordered.  That's all I wanted anyway--a cool shirt to wear on super Tuesday to Manuel's.

Monday, January 28, 2008

Randall Munroe endorses Obama

O RLY? YA RLY.

This is an interesting endorsement.  Munroe (of xkcd fame) is typically not very political on his webcomic.  I think this just comes to show how important this election is.  Maybe this will at least get some of the young, tech-savvy (read: nerdy) vote to reconsider.  I get the impression we've lost a lot of this demographic to Ron Paul, which is a shame.

Vote!

Sunday, January 27, 2008

NO WAI

I had this awesome idea for a t-shirt the other day. Luckily I have moderately okay photoshop skills and cafepress at my disposal. So, now I can actually have the shirt. Huzzah!

http://www.cafepress.com/dknowles2.219891180

Oh--and make sure to vote this year, kids.

Sunday, December 23, 2007

What I Want


A seamless google reader / wordpress integration.   



I want to be able to pull up the links I've shared in my google reader and write comments about them to post directly into my blog.  Most of the time, I read articles directly in reader so it's a pain to have to click the links copy them, then paste them here to comment on them. I'm thinking either a greasemonkey script, or maybe a way of making a daily digest.   

Anyone in the lazyweb want to make that happen for me? :) 

link of the day

24 people who mattered in 2007



A nice list of people who mattered (in the technological world) this year.  There's a number of people on that list whose work I follow pretty closely, and a few more that I've heard of before.  Good stuff.

Saturday, December 15, 2007

Link post

Tuesday, December 11, 2007

Duplicate entires be gone!

I've got a bug in one of my scripts somewhere that's saving multiple entries for video files in mythtv's videometadata table. Here's a quick hacky SQL query to find them:


SELECT intid, filename, coverfile
FROM videometadata
WHERE filename IN
(SELECT filename FROM
(SELECT filename, COUNT(*) AS ttl FROM videometadata
GROUP BY filename HAVING ttl > 1
) AS tmpfoo
) ORDER BY filename

O NOES! My precious datas!!

Maybe one day, I'll convince myself that using MySQL transactions is a good idea, and start using them whenever I do SQL writes.

In related news, I just NULLed out all my coverdata fields in my mythTV's mythvideo table. Regenerating all of that crap is really tedious, as the website's API I use gets flaky after I hit it with a few hundred requests in a matter of minutes. :(

Sigh.

Update:

All fixed.   Took ~90 lines of python.  Good script to have around anyway:  looks for entries with no/missing/invalid coverfile and tries to re-fetch it from thetvdb.com.  One day I'll get all this crap into SVN.   I'm getting quite the collection of these handy scripts. :)

Sunday, December 9, 2007

Love & Hate

I've come to the conclusion that I hate all blogging software.  It all sucks.  None of it fits my specifications, but I'm too lazy/busy to write my own.  For now I'm settling with WordPress, but I'm not completely satisfied.  I was fairly okay with Movable Type for a while, but I got really frustrated with its admin interface.  It's really slow.  And I tried to set up dynamic page loading (lets face it, I'm not getting enough traffic here to take down my shared host), but then realized it wanted to use PHP for some ungodly reason even though the rest of the app is written in Perl.  (Yaay consistency!)

I'm hoping I'll be more satisfied with this WordPress nonsense, but I'm not optimistic.  (Well, as optimistic as one can be about a PHP app)

I wish there was a good blogging solution written in Python.  Then again, python support on shared hosts isn't all that great.  And likely more work than I'm willing to put forth.

As for the love part of this, OpenID gets my thumbs up.  I've been a fan since brad first posted about it way back when. I've never done much with it until now, though.  I get a free identity with my livejournal account, but I'm really not a fan of having my old whiney LJ entries be the face of my identity.  So I set up an account with myopenid.com, which seems pretty solid.  And I set up dknowles.org to be a delegate for the identity.  I'm pretty sure I could do the same thing with LJ serving my identity instead, and dknowles.org would show up in comment posts and what not; but I'm mostly over the LJ thing anyway.  I should probably just subscribe my few remaining friends that write there to my google reader.

Tuesday, December 4, 2007

A Shit Leopard Never Changes Its Spots

I installed Leopard on my work Macbook Pro on Friday. Other than some corporate image wonkiness (there's always something...) it's been an incredibly pleasant experience thus far.

At first, I wasn't a huge fan of the new dock UI. It's growing on me, though. Mostly it's probably because I made it even smaller than it used to be, so the bright light things that show when an application is open isn't so offensive anymore. Or maybe I've just gotten used to it.

Stacks looked like nice eye candy at first, but not so useful. But I've come around. Adding my downloads folder & my applications folder to my dock is a really handy, quick way to access those things. (Of course, I usually default to quicksilver keyboard shortcuts for applications)

Spaces is by far the best virtual desktop implementation I've seen yet on mac. It's still lacking a few things: a keyboard shortcut to move windows to different desktops, proper option+tab app switching behavior, maybe screen edge triggers for moving windows to other desktops. But once I figured out how to have firefox windows on multiple desktops, I was sold. That was always my biggest shortcoming with virtue/desktop manager/any other solution I've tried in the past.

The new terminal is wonderful. I spend a lot of my time (at work & at home) inside a terminal session, so having a sane implementation is a godsend. (Although iTerm has become a really good drop-in replacement lately) Built-in tabs, better/more configuration options, proper keybindings are all great additions. The only thing I've had a hard time adjusting to is the lack of select-to-copy. Between my linux sessions & the old iTerm functionality, that's going to be a hard habit to break.

From a work point-of-view, I'm enjoying filevault not taking a shit every few days. I've had it want to clean up once or twice now, but it did it automatically and didn't take very long. It's about freaking time.

Autofs + kerberos nfs is great. I can access all my work auto shares from terminal without any wacky configuration nightmares. It just works.

Likewise, the new mobile account option is really nifty. Lots of things are auto-syncing from work when I'm there (or VPN'd in) which makes my life easier.

There's also a lot of small UI tweaks that I really like. An example: the networking pane in system preferences is pretty. Showing a lock next to secured wireless networks in the tray menu. The new finder look. All good things IMO.

Now for my biggest gripe thus far:

The translucent menu bar is really ugly. I really like blue backgrounds (the tiger default background anyone?) and the translucent menu bar turns a pastel blue with this configuration. Bad move, apple. You've been known for that glorious grey menu bar for years. Why change now?

All in all, I'm really happy with my Leopard install. Between Apple & Google's macops team, I've got a really awesome cutting-edge OS on my laptop. And it's pretty. And I like pretty things. :)

Tuesday, November 6, 2007

ddrtggtfrg

New personal goal: update this thing more regularly.

Earlier tonight, I was on gTalk talking to one of my friends/coworkers, and Sarah decided to start typing random characters at him. "ddrtggtfrg" is what came out, and my coworker thought it was an acronym for something. He made one up and submitted it to urban dictionary. Unfortunately, it's still pending editor approval, but you can view the preliminary entry. (hopefully that's not cookie-based or anything)

I signed up as an editor in hopes of seeing our entry quickly, but instead I ended up editing 80+ random new entries. Most looked like they were written by 13 year olds pissed off at their friends or teachers, but there were some gems in there. Maybe I should make moderating urban dictionary a weekly task of mine. :)

Monday, October 8, 2007

Sunday in the Park

Sarah and I wandered over to Oakland Cemetery yesterday afternoon for their Sunday in the Park festival. There was rumor of food and beer. (All you need to tell me) You can throw a rock at the cemetery from our place and it was gorgeous (although a bit hot in the sun) outside, so there was really nothing to lose.

All in all, I wasn't too impressed. Maybe it's because we showed up a bit late, but there wasn't a whole lot going on. There were only about 10 booths total, the only food was from The Varsity and Six Feet Under, and the only beer was from a Budweiser truck. (no support from local breweries?) There were a fair number of people out there, though, and we did get to see the inside of some of the mausolea. (they're typically not open) There's always next year...

What was pretty amusing, though, is that when we walked outside our loft, our apartment manager (he lives down the hall from us) was standing outside watching people get stuck in our gated parking lot. Priceless.

Oakland is also having a nighttime guided walking tour for Halloween. That sounds pretty awesome. Too bad it has a $15 admission fee. Seems a bit steep if you ask me, although the money does go to the good cause of cemetery upkeep.

Sunday, October 7, 2007

Blogger begin again

I've been trying to get a grasp on this "blogging" thing since somewhere around 1999 or 2000. You could say I'm an early adopter, I'd say I'm bad at being consistent (or good at quitting). But here's another try. I've had my fun with livejournal over the years, but my friends have all moved on and I figure I should grow up and play with bigger and better toys too.

My goal here is to give some of the random tidbits of useless (or, unlikely, useful) knowledge accumulated in my head back to the wonderful blogosphere community that so often feeds my desire to waste time or solve some weird problem. Common topics ahead include: atlanta, linux, mythtv, the internets, technology, and the occasional bit of politics.

Godspeed, fair readers.