I’m rather excited about this. Saw this talk right here.
Oh, and then there’s this.
I’m rather excited about this. Saw this talk right here.
Oh, and then there’s this.
It’s the 14th already, and I actually blew through my record budget within the first week. I would have made this post earlier but
So here they are, in all of their beautiful waxy glory.
Not bad for $50 right? The Eternal record is killer, I saw the artwork in the record store and it struck me as Electric Wizard like, so I picked it up, brought it home, and found out a) it’s rare b) it’s pre-electric wizard c) IT’S HEAVY
In some of my spare time I’m working on modernizing Banshee’s hardware support (all the while lamenting the death of HAL). With HAL we had a nice (although monolithic) toolkit-agnostic hardware layer that was used through dbus. HAL was deprecated in favor of using udev, which is the the Kernel’s hardware event system. I’m sure udev is much nicer from an engineering point of view, but it’s certainly not as nice for application developers as a big old dbus-interface where any information about hardware could be retrieved was. Regardless of how I feel about HAL, HAL is still gone, so Banshee still needs updated to udev. Since udev is so new, no one had made C# bindings for libgudev yet, so I decided to take a stab at using GAPI to generate C# bindings. After hours of talking to myself in irc, trying to trick RAOF into doing my work for me, gudev-sharp is born! It just successfully ran the (incredibly simple) test code I wrote just to make sure it wouldn’t segfault. If you’re interested in modern hardware support via C#, help write unit tests!
I know some people are going to say “bzr? launchpad? And you want this adopted?”. It can move whenever it needs to, LP and bzr are my tools of choice, but if upstream Mono wants to move this into svn, I’d be happy to see it go.
This is how I manage my tasks with Hiveminder on a weekly basis and the Perl script that helps me do it. I don’t really expect the Perl script to be useful to anyone as-is but portions of it may be useful to others, as well as the general work flow, so I’ve decided to share them.
At Linode we have a wiki page where we list 5 or more tasks we wish to accomplish during the week. There is a heading for each employee and below the heading we place our tasks. Throughout the week we can add additional tasks or mark existing ones as done.
I’ve used Hiveminder for some time. When we started the weekly task lists at Linode I found that taking a few minutes to figure out which tasks I wish to complete in the coming week works quite well for me. I started marking these tasks with the ‘week’ tag in Hiveminder. I quickly ended up writing a perl script, week.pl, to help me manage hem.
First thing Monday morning I run:
This prints a report with two sections. The first section lists tasks that currently have the ‘week’ tag with a line through the task ID if it is completed. This gives me a nice summary of what I planned on accomplishing the previous week and how I did. The second section lists all of my tasks currently visible in Hiveminder. I hide tasks that I know I’m not going to work on in the next few weeks so this list is usually no more than 20 or 30 items.

I take this report into the Monday morning meeting with me. During the meeting, I’ll glance over this list and select items for the upcoming week. I also use this page to take notes on during the meeting, writing down any new tasks that come up in the meeting.
After the meeting, I add any new tasks generated in the meeting that I won’t be working on this week to Hiveminder.
todo.pl comes from App::Todo, a command line Hiveminder interface. The braindump command launches $EDITOR where I add new tasks, one per line. The braindump syntax allows for specifying tags, setting priorities, and other things as well.
Next, I prepare the task list for the upcoming week:
The edit command iterates over each task tagged with ‘week’ if the task is not marked completed. It prompts whether or not I wish to carry the task over to this week (leave the tag). Any tasks marked completed have the tag removed automatically.
The add command works the same as todo.pl’s braindump command except the ‘week’ tag is automatically applied to the newly created tasks. The full braindump syntax is available for specifying other properties of the tasks.
The update command grabs my tasks tagged with ‘week’ and formats them one per line started with ‘ * ‘, a wiki bullet list. It grabs the current wiki page, finds my heading, substitutes the formatted task list under the heading, and submits the change. It also stores the path given in the YAML config file.
This opens the stored URL for this week’s tasks wiki page in my default browser, allowing me to confirm week.pl did what it’s supposed to.
Later in the week once I’ve done something:
This retrieves the task(s) tagged ‘week’ that are not marked completed containing the given string. If there was only one match, the script marks it as done and then outputs the current state of tasks tagged ‘week’.
Same as update before, except when no URL is given, the URL is read from the configuration file. This way I only need to worry about the URL once per week, the first time I update for the week.
So there you have it. If you are also using Hiveminder, maybe aspects of my work flow will make sense for you and pieces of the Perl script may be useful. If you aren’t using Hiveminder, maybe you will be inspired to check it out. I use michael@thegrebs.com on Hiveminder in case you feel the need to assign me a task or wish to gift me another year of Hiveminder Pro ;)
I spent some time with a few colleagues yesterday and came to the conclusion that true enthusiasts gravitate toward talking shop with one another. This is true even of casual situations. I’ve had plenty of “getting to know you” and “let’s just hang” social situations with other geeks where we might start out talking about any old thing but end up having an enthusiastic exchange about computers. I don’t view this is as negative. On the other hand, plenty of mailing lists and other communication media devoted to discussions of specific topics end up going “off-topic” as people socialize more generally. Fine, so it goes both ways.
It’s good to love what you love and even better to share it.
Tonight I finally pushed the revisions to bzr that removed Docky from the Do source tree. For a while now Docky has been being developed as a stand alone application separate from Do. The two projects were limiting one another, so a decision was made to split them out. In the future there will be some of docky <–> do integration, but for now Docky is going to be the most kick ass Dock you’ve ever seen, and Do is going to be the most kickass launcher/everything-else-do-does you’ve ever seen.
In Ubuntu Lucid you can install Docky from the software center, otherwise the source is available at http://launchpad.net/docky. Today is the start of a new day in Do, development is going to start rolling again, and there should be a new kick ass release in the coming months. We’ve let things slide, but we’re kicking it back into gear.
I know this is a controversial opinion, but I want to be one of the few to publicly announce that they love the window controls on the left side of the window. They’re so slick looking! It takes about 10 minutes to adjust to the change, but the beauty is worth it. A very small price to pay for a major improvement of the look and feel of the desktop.
Now, for those who don’t want to adjust (which is fine, really!) I have a prescription for what ails you. Yes, this is a shameless plug, no this is not snake oil. This is real jawn which will make your left-side-window-controlled hell-of-a-life into the garden of eden you never dreamed it could be. 40 virgins? No.. Jimmy Hendrix and Neil Peart (yeah, I know he’s not dead, just bear with me) jam sessions? No… This isn’t religion, magic, mysticism, mass hysteria, or Minnesota swap gas. This the Do window manager plugin.
No video support? Try youtube.
And here’s a youtube version, if you’re not down with HTML5.
You can install it from apt://gnome-do and apt://gnome-do-plugins. Thw window manager plugin is enabled by default in Lucid (and maybe Karmic?)!
A problem has been following me around for a couple of years. Emacs, in which I have been spending more than a small portion of my time, has had a problem that would manifest in any non-X mode. It persisted across multiple terminals: putty on Windows back to a Linux box, emacs -nw in a GNOME Terminal , even a bog-standard Linux console. Specifically, hitting ‘Page Up’ and would result in the string ‘5~‘ being printed and ‘Page Down’ would result in '6~‘. Not deadly, but just enough to throw me off my stride when moving around files. I’d never gotten around to sorting in out, since it worked just fine when running as an X server.
This came up after the PLUG meeting last night, over pizza and beer at the Best House last night. As Walt pointed out, there was almost certainly a very good reason for this, and it would be living somewhere in the years of messy accretions that comprise my .emacs file and its satellites.
I knew this was probably the case. Like most .emacs files, mine was not planned. It grew from bits and useful snippets, mode hooks, random configurations, pieces that crept in as distribution cruft, and pastings of now-unknown provenance. The whole morass needs a good mucking out, but that’s not on the to-do list. Perhaps, though, I could finally get the nagging problem resolved.
The first test was an obvious one: remove all the startup files and see if the problem went away.
Now, at some point I acquired a set of XEmacs startup files. The reason for this is hazy…I haven’t used XEmacs in years. Nonetheless, there it is: an .xemacs folder with an init.el and custom.el. At some point, something broke when I tried to take my .emacs file and .emacs.d folder without bringing .xemacs along for the ride, so the path of least resistance was to let it follow me from machine to machine ever since.
After renaming all the startup files, the problem was indeed gone and I could happily page up and down. From there on, the process is a mechanical one: add files back in until it fails, then comment everything out in the file and add chunks back in until the problem returns. Once it does, you can be pretty sure you’ve isolated the problem.
Indeed, the problem was lurking in .xemacs/init.el, in the following pair of lines:
(global-set-key "\e[" 'enlarge-window)
(global-set-key "\e]" 'shrink-window)
It seems to me like a slightly odd manifestion, but there you have it. With those lines removed, my Emacs bliss is unimpeded.
I really ought to get around to getting rid of that XEmacs cruft.
(CC-licensed image of a cricket from TaranRampersad’s flickr photostream.)
Having stashed a bunch of data in a python dict, one often needs a quick way to extract the n largest. Inconveniently for the particular problem I was working on, the key value for the dict was an object and the associated value was a floating-point weight. A quick-and-dirty method is to use insert all the dict-keys into a heap, using the dict-value as the heap-key Fortuitously, Python has both a heap module and convenient functions for using it in exactly this way.
import heapq
def dict_nlargest(d,n):
return heapq.nlargest(n ,d, key = lambda k: d[k])
d = { 'a':10.0, 'b':2.0, 'c':5.0, 'd':3.0, 'e':15.0 }
print dict_nlargest(d,3)
Which neatly prints a list of the keys associated with the three largest values:
['e', 'a', 'c']
The heapq.nlargest() function can also use arbitrary object attributes as keys, as well, by supplying a one-argument function to the named parameter key. (This is the role of the lambda in the examples above and below.)
import heapq
class Toy:
def __init__Toy(self, s, i, f):
self.s = s
self.i = i
self.f = f
l = [ Toy('a', 10, 4.4), Toy('b', 4, 12.0),
Toy('c', 2, 20.0), Toy('d', 1, 5.0) ]
# largest by the 'f' attribute
print heapq.nlargest(2, l, key = lambda o: o.f)
# largest by the 'i' attribute
print heapq.nlargest(2, l, key = lambda o: o.i)
This is fine for a one-off, but you’ll likely want to maintain this information in a data structure if this you’ll be performing this operation multiple times on a large collection.
I am very excited by some of the NoSQL stuff out there and enjoyed a recent Ars Technica article. The first page is some neat background and the second page has a good overview of some NoSQL options out there.
I'm sure most of you have heard about the rather big story of Lower Merion School District allegedly spying on students using laptops in their school issued machines. As more news comes out about this, I'm personally getting more and more disturbed by it.
I think my views are somewhat unpopular, but I have a real problem with the basic premise that high school students (or any students) are untrustworthy and need anything approaching the sort of monitoring that went on. Even if we assume for a moment that they only ever used it as claimed, to recover stolen laptops, it seems to me even this was aimed at keeping students honest by not allowing them to steal these machines and sell them. While I don't question that such a thing may happen, I believe that protecting against it in this manner is not ideal, at best.
The issue isn't just a few laptops, and even if we find this school district was in fact using this software to spy on other occasions, I think it goes much further than just this story. In the grand scheme, this isn't even important. What IS important is the slow erosion of rights of our students. Students today are told they essentially have no rights beyond the right to an education. This incident is just an implementation of this policy, of showing these kids that they really don't have any rights, in or out of school. Month after month, new stories surface of how students are being punished or at least spoken to for things they are doing outside of school, for posts they are posting on line, for pictures they are taking and sending to friends. Why is this tolerated still?
Our rights are not something to just let slip away, and teaching our youth that they are mutable and unimportant is no way to raise the next generation in this nation. This is a deep issue with national, and even worldwide implications, not just a few pictures from a students laptop. Amidst all the chaos around this issue, lets not forget the big picture.
These kids are tomorrows adults. Start treating them like it.
We're continuing to finalize details on fosscon, with registration now open and sponsorship opportunities posted. I'm terrifically excited about the prospect of this event and can't wait to see it realized.
We've also just moved, which is adding to the chaos... of course, by just moved, I mean we moved nearly a month ago, and we're still settling in, but the best part of this for me is clearly setting up my new basement workshop. There is TONS more space in this new house, and this means I have plenty of space to setup my equipment and have a little fun... finally. The only bad news is it looks like my o-scope gave up the ghost shortly after the move.
All in all, love the new place, hated the move, and hopefully we can stick here a decade at least.
I’ve made a resolution to make my bed every day. This post is for public accountability of this resolution. I know that most people reading this will never be near my bed, but if we’re chatting at some point please ask me how it’s going and give me a hard time if I say I’ve been slacking.
No that’s not my bed.
Ever since installing Karmic on my main box, audio has been an intermittent annoyance. While I like the idea behind pulseaudio, its presence in Karmic has certainly has contributed to a few headaches (made painfully worse when I imprudently tried exploring the network multicast features). I’ve had most of the bugs worked out for a while, except for one: before a sound is played back, a loud, unpleasant, sharp crack is emitted by the speakers. After that, sound playback proceeds normally…music, further OS alert beeps, no problem. However, after a period of idleness without any sound activity (ten seconds, in fact), the next speaker access will result in the same loud report. Even though annoying, this problem has not been critical.
The box is custom-built system based around an Asus P6T motherboard, which has has an onboard RealTek ALC1200 for sound. This shows up in Linux as
00:1b.0 Audio device: Intel Corporation 82801JI (ICH10 Family) HD Audio Controller
and thus uses the snd_hda_intel kernel module (Intel High-Definition Audio).
Having just had occasion to look into my /etc/modprobe.d/alsa-base.conf, I found this exceedingly suspicious pair of lines:
# Power down HDA controllers after 10 idle seconds options snd-hda-intel power_save=10 power_save_controller=N
The 10-second time-out surely could not be a coincidence.
Sure enough, commenting it out has removed this lingering audio annoyance (which turns out to be completely unrelated to pulse). It appears this issue is already known: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/417302. As one commenter observed: “I was also affected by this. I think this is a bug – speakers should not produce unpleasant sounds for [no] apparent reason.” This is a sentiment with which I can only agree.
I’ve been spending too much money on records recently so I’ve decided to give myself a soft-limit of $50/month to spend on records. At the end of each month I’ll do a post of what I got with my $50 that month. I say soft limit because if I come across a copy of SUNN White 1 for less than $100, I might buy it despite my $50 limit. I’ve already gone over that limit for February, so I won’t be buying any new records this month except for $1 porch sale/thrift store records.
2010 has been a good year for record hunting. Here are my 2010 record scores for January and February.
The Facedowninshit record is on yellow, too. Unfortunately, my record player broke the other night! I guess I’ll be scouring craigslist this weekend trying to find a new turntable.
This June, in Rochester. Fosscon is a free and open source software conference, assembled by the foss community and for the foss community. You can be a part of fosscon. All of us involved are very excited as this great project moves forward! Take a look at http://fosscon.org, registration will open soon. Besides checking out the website feel free to drop in #fosscon on chat.freenode.net to talk to others involved in fosscon.