Wednesday, November 26, 2008

Mono Accessibility 0.9 Released!

Yesterday, Brad announced the first release of the Mono Accessibility team's work, which started a little less than a year ago. It's pretty exciting for us to put out this developer preview release; I'm interested to see what people make of it.

The goal of the first phase of our project, which will culminate in a 1.0 release early next year, is to make Winforms applications accessible in Linux with traditional at-spi tools like Orca and Accerciser. In 0.9, we offer support for most Winforms controls (Button, Label, ComboBox, ToolStrip, WebBrowser, etc). In 1.0, we will be rounding out this support to include the remaining controls (DataGridView, TreeView, custom controls, etc), in addition to fixing bugs and improving stability.

It may not sound that exciting to enable accessibility for Winforms apps. After all, you probably aren't using very many on your GNOME desktop today. However, there certainly are some cool open source apps out there (Paint.NET, NClass, etc). And the main benefit will be for overall Linux adoption. There are many businesses, large and small, schools, governments, non-profits, etc...that are stuck on Windows because they have custom applications written using APIs like Winforms. One goal of the Mono project is to provide a migration path for these potential Linux users. Accessibility support is often a requirement, so by making these custom Winforms applications fully accessible in Linux, we are enabling Linux adoption scenarios that would have been too expensive before (rewriting your internal tools is not cheap or easy).

If you are not familiar with our project, let me briefly explain what it is we are doing:

We are implementing Microsoft's "User Interface Automation" (UIA) specification on Linux. During the first phase of our project, we are focusing on the "provider side" of this specification, which offers interfaces that are implemented by the accessibility/automation "provider" for a given control. This is similar to implementing ATK interfaces for a GTK+ widget, if you are familiar with that. We have been writing UIA providers for all of the Winforms controls.

The other half of our work this phase has been creating a bridge from UIA to ATK. This bridge translates between UIA interfaces and ATK roles/states/etc. This is the piece that makes a Winforms application look like a GTK+ app (or any other app written in a toolkit that exposes a11y info over at-spi) in a tool like Orca.

It's pretty cool the way this fits together. Next year, after 1.0 is released, we'll begin the second phase of our project. It includes two major efforts:

First, we will be making Moonlight accessible in the same way we have made Winforms applications accessible. We will create UIA providers for Moonlight controls, and they will automatically gain accessibility via the exiting UIA<->ATK bridge.

Second, we will implement the "client side" of the UIA specification. This is a set of interfaces designed to allow an accessibility tool (think Orca) to interact with accessible applications. It is similar to the at-spi interfaces, and we will in fact be implementing it as another bridge, this time translating "client" UIA calls into equivalent at-spi calls. The benefit here is that as Windows developers create accessibility and automation tools using the UIA interfaces, they will be portable to Linux (and vice versa).

Accessibility is a great feature for users and potential customers. Automation support is invaluable to testers, software QA, and even users who just want to streamline common tasks. With the release of Mono Accessibility 0.9, we are growing the landscape of accessible applications. We look forward to your feedback (and bug reports)!

Monday, October 27, 2008

Got a G1, Yay Linux!

So I caved and got a G1. I may write an in-depth review after I've had it longer, or I may not, but here are the highlights:

  • I can has source!
  • No need to print from Google Maps when I leave the house.
  • Better reception in my house with T-Mobile than I had with AT&T.
  • ConnectBot SSH client works great with my screen+irssi setup.
  • Used ShopSavvy at Sports Authority yesterday to convince Ellery it was worth getting her a shiny new pair of rollerblades. Hold phone up to barcode, see local and online price comparisons.
  • Used Shazam to find out what's playing on the radio. Hold phone up to speaker, wait a few seconds, prompted with all the info you could desire, including a link to download via phone at Amazon MP3 store.
  • Unlock screen shows when my alarm is set to go off.
  • Keyboard surprisingly comfortable to use.
  • Camera image quality decent.
  • Easier than I thought to patch HAL (or just edit .is_audio_player) so that G1 Just Works in Banshee:

G1 in Banshee
Click for larger view, obligatory F-Spot Awesomeness

  • My thumbs are a bit fat to use on the touch screen (I have somewhat-deformed wide thumbs). So, no one-handed use.
  • No visual voice mail.
  • When interacting with a phone service, like voicemail, and you are prompted to enter digits, I go into freak-out mode, because I look at the screen and it is blank, so I have to unlock, then find the dialer so I can hit a number, which can be kind of tricky depending on how the call started. I can probably flip out the keyboard and use that, but as I said, I'm in a panic.
  • Not sure how to carry this thing. It comes with a sleeve/pouch/thingy, and for now I put it in there and then in my pocket, but now it takes two hands and an extra few seconds to answer my phone. What do people do? I'm used to having a crappy phone that can live in the same pocket as keys and other dangerous items!
  • Camera slow, worthless in low-light situations.

Really looking forward to Tomdroid!

Wednesday, October 22, 2008

Tomboy Planning Meeting Tomorrow

In case anybody's interested, we're having our planning meeting for this development cycle in #tomboy tomorrow...

Thursday, October 23, 2008 at 1930 UTC

That's 12:30 PM PDT, 8:30 PM BST, etc etc.

Everybody is welcome! We've started a wiki page to gather ideas before
holding the meeting, so check it out here, and add your name if you're
attending, along with any ideas you might have:

Topics to dicuss:
* Features for this cycle
* Cross-platform updates
* Plans for bug/patch days to clean up bugzilla

My personal goals for this cycle:
* Solid Windows binaries with every 0.13.x release
* Experimental Mac binaries with every 0.13.x release
* Power through bugzilla, with a major focus on memory/performance
issues and other long-standing embarrassing bugs (like note renaming
* Better community management on my part, frequent bug/patch days, not
letting patches rot in bugzilla. Basically, enabling our awesome
contributors instead of frustrating them!

Monday, October 20, 2008

Tomboy Preview for Windows and Mac

Please To Try

At the end of August, I told you about my little project to bring Tomboy to Windows users. Well, last week I finally merged that code into trunk. And then Friday, the excellent Mono team released a Mono 2.0 installer for OS X, and I found that my Windows build of Tomboy finally worked pretty well on the Mac, too. Of course, some platform integration there would be nice...

Click for full-screen shots. Notice that I added a menu for tracking open note windows, and attached the classic recent notes menu to the dock icon. This is not the most elegant solution, but I wanted Mac users to play around with it and share their own opinions. I'm very open to changes here. :-)

I didn't have any plans this weekend, so I present to you "preview builds" of Tomboy 0.13.0 for Windows and Mac OS X. I'm distributing them with the disclaimer that they are not widely tested, though in my own testing I have found no bugs that would make me worry about loss of data. Just consider yourself warned, and please back up your notes.

If you find any bugs, or have ideas for better platform integration, or find issues with install, please please PLEASE file bugs!

Click to file a bug for Tomboy on Windows!

Click to file a bug for Tomboy on Mac OS X!

Mac Instructions
  1. Install Mono 2.0 for Mac OS X.
  2. Download and mount the Tomboy disk image.
  3. Drag Tomboy to Applications, run!
  4. (optional) Copy your notes to ~/.config/tomboy

Mac Known Issues
  • Shortcut keys all use Control instead of Command.
  • The Bugzilla add-in doesn't work.
  • In the note window toolbar, notebook names can be ellipsized oddly.
  • Hand cursor doesn't show when hovering over links, but they're still clickable.
  • No keybindings support.
  • No i18n support.

Windows Instructions
  1. Install Medsphere's GTK# SDK installer (the runtime installer should work, but in my testing it did not install a particular registry key needed for Tomboy to recognize its presence).
  2. If you are running Windows Vista, you may need to follow additional instructions to work around an installer bug.
  3. Restart your computer.
  4. Download the Tomboy installer.
  5. Double-click to install!
  6. (optional) Copy your notes to %appdata%\tomboy

Windows Known Issues
  • Menu rendering issues.
  • Two console windows appear briefly when Tomboy starts (fixed in Mono.Addins SVN).
  • No drag and drop from other apps into Tomboy (appears to be unimplemented in GTK+ for Windows).
  • If you try to run Tomboy twice, it should show the Search window instead of launching again, but sometimes it will not show the Search window until you have interacted with Tomboy in some other way (by hovering over a window or clicking the tray icon, for example).
  • No i18n support.

Big Thanks

This was actually a pretty easy job, thanks to these folks:
  • Eoin Hennessey, who pioneered a lot of this work in his banshee-osx git branch, which he and Aaron are merging into Banshee trunk this week. Among other things, he created Mono bindings for Imendio's excellent ige-mac-integration library, and scripts for building app bundles.
  • Andrew Jorgensen, Thomas Wiest, Marc Christensen, and Geoff Norton of the Mono team. These guys have been rocking hard on Mono's Mac story, and it shows. Thanks especially for getting me a build of MonoDevelop in time for my Saturday hack fest!
  • Aaron Bockover, who keeps threatening to do a Mac release before me.
  • Brad Taylor and his old Medsphere cronies, who whipped gtk-sharp on Windows into shape.
  • All GTK+ developers and porters, especially those at Imendio!
  • The entire Tomboy community, especially Dmitry Kostenko, Doug Johnston, and Samuel Vandamme for their patches to help make Tomboy on Windows a reality. You guys are awesome!

Tuesday, September 30, 2008

Touching Banshee, Porting Tasque

Toward a more clickable Banshee

I've written on a patch to make the artist and album text in the Banshee track info display interactive. 95% of the time I am listening to my library on shuffle, and sometimes I hear a song and decide I want to hear more from that artist or album. Well, with my patch, you can click on either to perform a search on your library.

You can also right-click and add the album or all tracks by the artist right to the play queue, which is my favorite Banshee trick now. Have you ever used the Banshee Play Queue? It's really cool...if you're listening on shuffle and you add a bunch of stuff to the play queue, it will play those items in order and then go back to shuffling through your library (or whatever you were listening to before you shoved stuff into the queue).

Click to see low-quality demo on YouTube.

So why is this still just a patch and not in Banshee SVN? Well, really, it's kind of ugly, don't you think? Here's this pretty Banshee UI with some gross hyperlink-looking text in the middle of it. What do you folks think I should do?
  • Use a different color, like "Selected"?

  • Only change the text color on hover?

  • Both?

The only thing I like right now about having it colored all the time is that it makes the feature more discoverable. But is it worth it? Any thoughts on the appearance or behavior of this feature? If you build Banshee from SVN, give it a try and see what you think!

I'm busy lately so if somebody else wants to mess with this bug, be my guest. It won't get into SVN until after Banshee 1.4 is released, anyway. ;-)

Tasque Goes Cross-Platform

I couldn't sleep Thursday night, so I yanked some of my code from tomboy-portable2 and got Tasque going on Windows. Then I decided Tasque is simple enough to play with that I'd better get it going on Mac OS X, too. This weekend I even put together I nice little disk image for Mac users. Big thanks to Eoin Hennessy for creating Mono bindings to Immendio's Mac/GTK+ integration library. The next Tasque release will be equally supported on Linux, Windows, and Mac, so feel free to start filing bugs.

Really this is just an excuse to try stuff out for Tomboy.

Tuesday, September 23, 2008

Tomboy 0.12.0 Released

Yesterday I unleashed the latest stable Tomboy release. This has been a less active cycle than usual, but in 0.12.0 you can experience the wonder of:

  • New Tasque add-in

  • Add "New notebook..." menu item to Notebook toolbar button

  • Many fixes to note synchronization

  • Improvements to Bugzilla and HTML Export add-ins

  • Tray icon ported to Gtk.StatusIcon

  • Support for --debug, --trace, and --profile when running Tomboy
The following contributors were especially helpful in making Tomboy 0.12.0 happen: Boyd Timothy, Alex Graveley, Alexey Nedilko, John Anderson, John Carr, Jon Lund Steffensen, Łukasz Jernaś, Romain Tartiere, Sebastian Dröge, Stefan Cosma, and Stefan Schweizer. A big thank you to them, and to our hard-working translators, too!

The lack of activity during the 0.11.x cycle has disturbed me (especially because it's mostly my fault!), and I've written to our mailing list about how I think we can do better this cycle. One easy way you can help is by voting for your "favorite" Tomboy bugs.

I'll write more about plans for our next stable release after we have our dev meeting, but you can be sure that I haven't forgotten our proprietary compatriots. I'll be merging the tomboy-portable2 branch into trunk Real Soon Now.

Thursday, August 28, 2008

Hack Week III: Tomboy Joins The Dark Side

Tomboy on Windows Where It Belongs

As you all know, my job here at Novell is to migrate all worthwhile desktop Linux applications off of that ridiculous platform and onto Windows so that we can do away with this nasty open source stuff. Unfortunately I haven't yet gotten the paper work to close up my code for the latest victim of this effort, so for now dirty open source hippies can get it here:

Somebody even impersonated me and posted instructions and current limitations on our mailing list (soon to be replaced with a 1-900 number offering support for a reasonable fee).

And here's an image of what it looks like. Windows has a really awesome feature where you can press your "Print Screen" button, and then you dig around in the menus to find the excellent Microsoft Paint application, at which point you recall that you can produce a "screen shot" by "pasting". Then you save in one of a myriad of excellent file formats, and you have an image of what you were doing on your computer! You can then share it with your friends like so:

What do you think? Excited to end the Linux charade and switch to a solid and hip platform like Vista? Woo!

I feel very silly today.

Utah Open Source Conference

I was fortunate enough to get to join my friends and coworkers in Provo for this Hack Week. I normally work from my home office, so I'm having a blast seeing everybody. Today we're working at Salt Lake Community College as part of the Utah Open Source Conference. I'm actually talking with my buddy Brian Merrell about the efforts of the Mono a11y team (you know, my actual job). It should be fun, we've got some neat slides and we are both cool people so I don't really see what could go wrong. The UTOSC team has done a ridiculously awesome job setting up this conference, so I'm really excited to see everything come to fruition. We had a sweet speaker dinner last night but moron that I am I forgot my camera so you just have to take my word for it!

This Tomboy stuff still needs a bit of work so off I go. Hopefully having Tomboy run on more platforms will help us attract more users and developers. I know it's a popular request so I'm pretty serious about getting it supported in trunk. Later guys!

Monday, August 18, 2008

Minor releases: Tomboy 0.11.2 and Tasque 0.1.7

Hi everybody! Today I made two minor software releases:

Tomboy 0.11.2 features build fixes, a fixed crasher or two, and improved HTML Export functionality.

Tasque 0.1.7 makes translations actually work, and adds cool tooltips to tasks that show associated notes.

Due to time constraints, these releases do not have any silly names attached to them. I'll make up for this next time. ;-)

Monday, August 4, 2008

Tomboy 0.11.1 Released

I finally got some time this weekend to take care of some irritating Tomboy bugs, so today I present to you Tomboy 0.11.1, "A PhD in Horribleness":
  • New tray icon code using GtkStatusIcon (kill libegg, #349265, Stefan Cosma).
  • Fix crashers: #544406, #460642, #544996, #523035
  • Fix bugzilla addin to accept bug IDs of one or more digits (#533024).
  • Fix behavior when start note is recreated (#508982, Jon Lund Steffensen)
  • Include .mdb files during install. Allow --debug, --trace, and --profile options when running Tomboy.
  • Translation updates: ar, bg, ca, de, es, et, fr, gl, he, nb, nl, oc, pt_BR, sk, sv, th, vi, zh_CN
Major things left to do before 0.12.0 is released: Finish port to GtkPrint, fix major outstanding bugs in synchronization, and, if there's time, do some work on startup performance. All help is welcome, especially on the GtkPrint stuff! :-)

Monday, July 14, 2008

GHOP Awards Ceremony

I just finished a great weekend in the San Francisco Bay Area, thanks largely to Google and their Highly-Open Participation Contest (GHOP). As you may already know, Google worked with several open source projects to run a contest for high school-aged students to complete tasks ranging from translation and documentation to coding and other bug fixes. Vincent Untz, Andre Klapper, and Behdad Esfahbod, Lucas Rocha, and Christian Kellner ran things from the GNOME end, and did a great job. Unfortunately the awards ceremony for GHOP grand prize winners was scheduled for this past Friday, and they were busy at GUADEC. Since I had been involved in GHOP as a mentor, I volunteered to represent GNOME at the ceremony. Later, I found out that the Mono project was unable to send a representative as well. Their side was largely administered by Miguel de Icaza and Michael Hutchinson, and Michael asked me to represent them since I was already going to be there. So although I was probably the least-involved mentor at the ceremony, I was also the only one with two students. :-P

GNOME's Grand Prize Winner: Patrick Hulin

Patrick is a junior at Hopkins School in New Haven, CT. He finished several tasks, often swooping in to get the job done after another student bailed. He submitted fixes to Totem and ported baobab from gnome-vfs to gio, in addition to documentation and GTK+ performance tasks. I had a great time meeting him and his parents on Friday. I'm always encouraged to meet teenagers who actually *enjoy* math, and find opportunities to learn about software development. Patrick is going to be a counselor at a local computer camp this summer, brainwashing^W teaching teens the ways of code and circuit. We had a blast in the lobbies at each Google building, watching on a screen as the world's search queries scrolled by.

Mono's Grand Prize Winner: Dan Abramov

Dan is from St. Petersburg, Russia, and came to the ceremony with his mother (who had an awesome camera, I hope I get to see some of her photos from the trip). He's a largely self-taught 16 year old dynamo. He made some nice contributions to Mono, including Gendarme analysis rules and MonoDevelop addins and documentation. One of my favorite moments of this trip is when I was asking Dan about his future plans, did he intend to go to university in Russia, pursue Computer Science, etc. He told me that although he felt confident programming in managed languages like C#, he wanted to understand more about the low-level details. He asked me if I had read Joel Spolsky's article on "leaky abstractions", and described how sometimes .NET/Mono programming could be like that. I could only laugh with joy that this guy was already reading (and understanding) Joel.

Daniel and his mother
I think it's pretty clear that these students have a huge head-start in computer science. Everybody was interested and excited about open source software. I got a lot of questions about what it's like to work on open source software all day at Novell. Being there, it really felt like I was looking at the next generation of open source leaders. I can only hope they stick with it instead of going down the boring path of being a doctor or a lawyer or something. ;-)

Thank you Google for encouraging these kids, and providing incentives like GHOP and Summer of Code to keep them in our world.

The Visit

It was pretty cool to meet the mentor representatives from other open source projects, some of whom were actually Google employees. Friday was a busy day, what with touring the Google campus, having the actual award ceremony, being interviewed for YouTube (eep), and stuffing my face. We saw presentations about App Engine (by Guido van Rossum), Android (Romain Guy), Google infrastructure (Jeff Dean), and testing at Google (Bharat Mediratta and Mike Bland).

My favorite talk by far was the testing one. Bharat and Mike are among the better pair presenters I've seen, so it was a joy just to watch them. But the subject matter is dear to my heart. At my last company I was often frustrated with how difficult it was to proliferate best practices (specifically TDD) even within a single team. I was fascinated to hear how these guys just decided to fix the testing problem at Google, guerrilla-style. They introduced the awesome Testing on the Toilet newsletter, devised testing training and certification programs for projects and employees, and introduced "test mercenaries" to spread skills where needed by hopping from project to project, staying only a few months with each. Ingraining these practices in a company's culture is a singularly difficult problem. Their example is inspiring, though of course it requires constant ongoing work, and it might be difficult to convince any company to invest such significant resources into a never-ending program like that. I've been following the Testing on the Toilet blog for awhile, but meeting these guys was truly invigorating. I wish there had been time to chat them up afterwards!

The Rest

Over the weekend, Ellery and I visited our old stomping grounds at San Francisco State University, Stonestown Borders, and West Portal. We had a fun dinner with Liz and Bernat at Mozzarella Di Bufala. It was nice; I really do miss my friends sometimes. :-) Later we visited some family in the East Bay.

Ellery is Queen of the Campus
The rest of my photos can be seen on my picasaweb. By the way, Lazyweb, do you know how to tag all photos in an album at once?

Wednesday, June 25, 2008

Recent Hacks: and

The Mono a11y team has weekly iteration meetings in IRC, and we post the logs to the Mono wiki. Our version of MediaWiki doesn't automatically prettify IRC logs, so for awhile I was using Jamie Zawinski's to create HTML tables. Today I hacked it up to produce MediaWiki tables instead. I call it Fixes welcome (or better suggestions).

Also, I now live on IRC. Some people prefer to get me through IM, so I always have Pidgin running, but my online presence is mostly reflected in my IRC nick. I'm forgetful, so I kept noticing that I was "available" in Pidgin even though my IRC nick was "sandy|lunch", or that when I changed my nick from "sandy|brb" to "sandy" my Pidgin status would stay the same. I decided to automate that shit. Based on a bunch of useful code from Arstechnica's Ryan Paul, I present to you my first xchat plugin,

#!/usr/bin/env python

# Sets Pidgin status from XChat nick, assuming you use a style like:
# mynick => Available (status "Workin")
# mynick|busy => Away (status "busy")
# Hobbled together by Sandy Armstrong from code
# written by Ryan Paul (segphault) of Ars Technica:

import xchat, dbus

# Describe the plug-in metadata for XChat
__module_name__ = "Pidgin Status Plug-in"
__module_version__ = "1.0"
__module_description__ = "Set Pidgin status according to XChat nick"

# Specify status ID values

def nick(words, word_eol, userdata):
# Get new nick
if len(words) < 2:
return None
new_nick = words[1]

# Check for status
pipe_index = new_nick.find("|")
if pipe_index > 0 and pipe_index < len(new_nick):
message = new_nick[pipe_index + 1:]
# set away with status message
set_status("", STATUS_AWAY, message)
# set available
set_status("", STATUS_AVAILABLE, "Workin")

def set_status(name, kind, message):
# Create a new saved status with the specified name and kind
status = purple.PurpleSavedstatusNew(name, kind)
# Associate the specified availability message with the new saved status
purple.PurpleSavedstatusSetMessage(status, message)
# Activate the new saved status

# Initiate a connection to the Session Bus
bus = dbus.SessionBus()

# Associate Pidgin's D-Bus interface with Python objects
obj = bus.get_object(
"im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")

# Associate the nick function with the /nick command in XChat
xchat.hook_command("nick", nick)

Tuesday, June 24, 2008

Tasque 0.1.6 Released

Yesterday I released Tasque 0.1.6 to a legion of hungry Linux users. I can't believe it's been three months since 0.1.5 was released! You can expect to see 0.1.7 a lot quicker, especially because there are some good patches in bugzilla that just need a bit of review.

As you might expect, Tasque 0.1.6 is our best release yet. There's a new task entry widget at the top of the main window, and due dates are parsed right out of the task text. Plus, there are the usual handful of bug fixes, including a few crashers.

Give it a try, and let us know what you think!

Sunday, June 8, 2008

Dear LazyWeb: TiVo, MythTV, Decisions

So we have a TV in the bedroom now. We generally watch TV in the living room, where we have an old Series 2 TiVo that does the job. Now, in the bedroom, we miss the essential TiVo features: accessing recorded shows and pausing/rewinding/fastforwarding live TV.

As far as I can tell, these are my options:
  1. Buy a new TiVo + subscription for the bedroom.
  2. Set up a MythTV box in the bedroom that can get content from the other TiVo using tivodecode.
  3. Buy a MediaMVP or AppleTV and somehow rig it up with tivodecode so I can access content from the other TiVo. This doesn't allow me to pause/rewind/fastforward live TV, though.
Buying a new TiVo has the following costs:
  • New TiVo box: $99
  • New TiVo wireless adapter: $59
  • New TiVo subscription: ~$6/mo
  • Total over one year: $230
Option 2 is setting up a complete MythTV backend+frontend and deploying it in the bedroom. Considering that I'd have to buy a complete PC with a TV tuner, and I'd want it to be attractive and quiet, this would probably be $500-$800. Alternatively I could set up an ugly backend and an attractive frontend, but I doubt that would be any cheaper. This would allow me to have complete TiVo functionality (and more) in the bedroom, and would prevent me from falling further into the TiVo lock-in trap. It's a very tempting solution, but I'm put off by the initial cost.

The Hauppage MediaMVP seems pretty cool. It's hackable, can be made into a MythTV frontend if I ever decide to go down that road, and is super-cheap at $150. The only problem is that I'd either have to use Windows to serve it content, or hack it with MediaMVP Media Center, which doesn't seem very easy to use.

I'm not sure if I can use an AppleTV on my standard def TV. Its only advantage over the MediaMVP is sheer processing power (and easy-to-use interface if I used the provided software). It costs $229.

I guess I have to decide if manipulating live TV in the bedroom is important to me. If not, I could get a MediaMVP or AppleTV and rig up something on the server side to pull content from my TiVo and prep it with tivodecode. This could later be expanded into a full MythTV setup when I feel ready to invest in backend hardware.

However, if pausing/rewinding/fastforwarding live TV is a must, then it seems the more efficient choice is to buy another TiVo.

So, LazyWeb...what should I do? Do you use MythTV? Any compelling reasons that I should invest in setting it up?

Monday, May 19, 2008

Busy busy busy

If you've been desperately waiting for my weekly UIA status update, I'm sad to report that I'll no longer be posting those. You can track the team's progress via the development schedule page on the wiki. Never fear, if I have something interesting to share, I will make sure to post for you!

I've started helping out with Tasque maintenance, so I triaged a bunch of bugs and applied some patches. I think we'll be ready for a new release soon. I like working on Tasque; it's a fun project.

I installed openSUSE 11 Beta 3 in a VM last week. It's looking pretty good! The new intlclock applet is very cute with its weather integration. In openSUSE 10.3, I struggled a lot with package management...YaST's GTK+ interface was easy to use but crashed a lot, zypper had a very nice CLI but was ridiculously slow, and I ended up using the ncurses YaST UI, and leaving it up all day so that I could avoid the slow repository updates. In openSUSE 11, things are worlds better:
  • Zypper is wicked fast, and is now my favorite way to manage packages. All it lacks is tab-completion of package names, but running `zypper se somepackage` is so fast that I don't mind too much. ;-)
  • YaST's GTK+ interface has been updated to GTK2 (so it fits in with the rest of my desktop), no longer pops up a kabillion windows when you install packages (so I can, you know, use my computer while I install stuff), and seems really stable. I found some usability problems, but Sunday I wrote a patch and this morning Michael Meeks committed a modified version of it. YaST's GTK+ code was really easy to follow, by the way, considering I'd never looked at it before. Kudos to the YaST team!
I hope Firefox is better on openSUSE 11. Maybe it's just my crufty 10.3 install, but I've always had freezing/crashing issues with FF2 and FF3. It seems to be running fine in my openSUSE 11 VM, so I'll keep my fingers crossed. Looking forward to doing a clean install of openSUSE 11 on my main machine soon.

Oh and by the way, I'd like to toss out a quick immature Fuck You to Blogger for never auto-saving my posts, constantly crashing Firefox this morning, and having some weird display problem where the "Compose New Post" page has teeny tiny fonts. I guess I shouldn't care too much about the display of the page, since I apparently can't use it to write posts anymore. Normally FF3 restores the contents of text boxes after a crash, but for whatever reason this is not supported by Blogger. Hooray for using Tomboy as a text editor. :-/

Next, spiders...

Tomboy 0.10.2 Released; Please update your distro's packages if you want sync to work!

I just released Tomboy 0.10.2, which addresses a problem in newer distros where the output of `mount` has changed for FUSE shares.

This really needs to get into openSUSE 11, Ubuntu Hardy, etc, or else note synchronization works very poorly. If your distro has a policy of not taking new releases but you can take patches, here's a very simple patch against 0.10.1:

I look forward to upgrading sync to use GIO or Conduit in the future so that we can avoid these areas of fragility in our code base.

Monday, May 12, 2008

Tomboy 0.11.0 released, et UIA

This morning I released the first development release in the 0.11.x series. Tomboy 0.11.0 features Boyd's Tasque add-in, the beginning of John Anderson's rewrite of the printing add-in (goodbye libgnomeprint!), and even a patch or two from our founding father. The new printing add-in lacks a few features, most notably text styling/formatting. We'll make sure to get it fixed before 0.12.0 is released, but if you want to see it fixed faster, patches are welcome. :-P

Last week didn't feel very productive at work. I made one commit and a table mapping winforms controls to UIA ControlTypes. I don't really understand where the time went. :-( How many hours did I lose wrestling with my Vista VM, or exploring the Mono implementation of the WebBrowser control? Fortunately, as the table shows, I have PLENTY of work to do! So I'd better get to it...

Monday, May 5, 2008

Mario Kart Wii Friend Code

Forgot to Mario Kart Wii. Beat all 50CC races but still can't beat Jordan. I don't think there's ever been a video game where I could beat my friends. :-)

Here's my Mario Kart friend code if anyone's into that junk:


I'm too busy right now to rant about the absurdity of this friend code garbage. You can probably divine your own identical rant if you know that this 12-digit code is not the same as my 16-digit Wii friend code, which (as far as I can tell) is good for basically nothing.

UPDATE (sorry for planet spam): I'm not really playing much Mario Kart, so I haven't been putting in anybody's code. I left this post up because people seem to be using it as a resource to find other players. Don't expect me to join in, but please have fun!

UIA Status, All Moved In Edition

Moving was...exhausting. When I can find my camera, I'll post pictures of my new bedless office. In the mean time, here's what I've been up to in UIA Land:

Last couple of weeks
  • Started work on UIA providers for CheckBox, Label, and NumericUpDown. Extracted common functionality into abstract base class suitable for most Winforms controls.
  • Began writing tests of WindowProvider for Forms.
  • Worked with Andres to get child controls, specifically Buttons, mapped from UIA to ATK. Fun refactoring of UIA<->ATK bridge. :-)
  • A few dozen more unit tests of MS implementation, and associated fixes.

This week
  • Compile list of all SWF controls we need to support, and work with Calvin on a schedule for implementing them.
  • Fully implement the providers I started last week.
  • Help with mapping signals/etc between UIA and ATK.

Tuesday, April 22, 2008

Why do we bother with Linux? Also, UIA status, and Twitter revisited...

The Question

My good friend Aaron is a PhD student in Geology at Penn State. We've known each other since we were toddlers, and connect on many levels. He uses Matlab and god knows what other crazy software to write molecular simulations for his experiments, but he's not the same kind of geek as I am. After reading about Banshee on my last blog, he comments:
I really like reading your blog. I click on all the links and feel like I'm learning something. I do have one question though. When you are working to create these programs for Linux does it ever feel like you are reinventing the wheel? It seems like a lot of time and effort is spent creating linux versions of programs that already exist. Sure there are a few new features that are neat but the bulk of the work seems like recreation. I'm totally missing the point here right?
I've been thinking about this for a few days now. I'm not going to waste time arguing specifics about Banshee, bringing up examples of truly new and unique software on Linux, or explaining how even when we are reinventing the wheel, it is a worthwhile and fulfilling endeavor. Instead, in the spirit of Passover, I will address the general question, "four children" style:

So, why do I spend so much time working on Linux, when a no-cost proprietary solution may already be available?

The free software zealot says: "I will not use software unless it is free (as in freedom). Whether or not a proprietary solution exists is irrelevant; I have problems I need to solve, and if there is no free software that solves it I will create a new project. It is simply unacceptable to sacrifice my freedom for the sake of convenience. As Benjamin Franklin said, 'Those who would give up Essential Liberty to purchase a little Temporary Safety, deserve neither Liberty nor Safety.'"

The pragmatic user or programmer says: "It is in my best interest to use free software. If I find a bug or wish there was a certain feature, I can talk directly with developers about it, pay somebody to fix it, or fix it myself. I don't have to wait until it's in the best interest of some corporation. I don't have to be afraid of being stuck with unsupported abandonware."

The young developer says: "Reinventing the wheel is half the fun of writing software! Even if there *is* an existing free software project that mostly does what I want, I'll probably start one from scratch because then I can do it *my* way. If it's useful to others, then that's great, too. Duplication is par for the course in the software world; after all, weren't there plenty of media players before iTunes, and aren't there still? If there are multiple operating systems, applications, or web sites that appear to serve the same need, then you just need to look closer to understand what niche each is for."

The user who does not understand enough to know the difference says: "My friend/child/administrator set up my computer with Linux. If popular software isn't available on Linux, I'm usually lucky enough to find a suitable free alternative. I get free updates and no weird restrictions on how I can use my computer."

My own answer is a mix of those. Sure, sometimes when I'm writing code that could literally be copy/pasted from some Microsoft engineer's workstation, it's a bit frustrating. It's frustrating that other companies rarely see fit to release their code. But in reality, most code that I write isn't like that at all. It's written to solve a specific, unique problem, and when I solve that problem I feel fulfilled. Using and writing free software gives me warm fuzzies. And as a developer and demanding user, it is very important to me to have access to source code, so that I can fix bugs and add features I care about. Nobody at Apple ever cared about the problems I had using iTunes to burn CDs (every version and OS), and I couldn't do anything about it. That's the opposite of feeling warm and fuzzy.

I'd be interested to see how other developers answer this question, though.

Yay, UIA

Andres has started adding support for firing ATK events, so now we can see Windows Forms appear and disappear, as expected, in Accerciser. It's been fun working with him on this...I get the feeling we'd be a good pair for XP, if he wasn't on the other side of the globe. :-P I've written a lot of unit tests against Microsoft's classes and fixed ours to match that behavior.

This week I'll be continuing with that, and probably working with Andres to expand our event support. I'm excited to be able to send and receive standard window and button events. But I guess I'm easily excited?

Yes, Twitter

I've been experimenting with twitter, because it turns out people I care about are using it in non-masturbatory ways. I'm looking for a better client that I can read on *my* time (instead of being IM'd whenever a friend updates). Gtwitter isn't getting updates for some reason and Twitux requires newer GNOME libraries. If I start checking for new tweets more than twice a day I'll have to do something about this...

Wednesday, April 16, 2008

LugRadio Live 2008

First off, I want to thank John Anderson (sontek in IRC) for letting me join his motley crew of Utah Linux hackers this weekend. Ellery was a little concerned that I might wake up in a tub of ice, but instead I woke up in a bed with Joe. Who would've thunk? Trevor (heartsbane) was a blast to chill with all weekend. My only regret is that the weekend went by so fast that I didn't have much time to hack. John, however, managed to find the time to completely rewrite Tomboy's printing addin to use GtkPrint, which really rocks considering our cross-platform focus for this cycle. Also, we were possibly violating the GPL with borrowed GEdit code, so I feel a lot more warm and fuzzy about the new code. ;-) Joe started working on classic bug #350990, which has caused a few users to really bork their notes by making a few renames. This is awesome because that bug is evil and Joe went through the pain of reinstalling his laptop and getting the whole Mono stack set up so that he could help.

Joe, John, Trevor
Banshee 1.0 was a massive hit at LRL. I worked the openSUSE booth for a few hours each day, and lured dozens of people into my Banshee spiel/demo with the new absolutely rocking Banshee tee-shirts. I spread the word that Aaron and Gabriel would be giving a sweet demo, and sure enough, even though they were relegated to the hard-to-find lightning talk room (only 30 minutes, WTF?), we managed to pack in a full house. Watching Aaron and Gabriel is really an experience. I'm not going to use the word synergy because it's against my religion, but I'm amazed at the flow these two have even though they work half a continent away from one another. The talk was a hit, the demo was a hit, and you can check it out on Google Video.

The only thing that sucked, and yes I will call this out, is that network availability at LRL was complete crap. It's pretty hard to demo podcasts, bitchin' integration, internet radio, or DAAP support without an IP. Incidentally, it's also hard to submit patches, live blog, or get the latest source from SVN. For shame, guys, isn't there a solution for this? This was the one shitty thing at LRL and I would gladly pay ten times the entrance fee if it would help fix this.

On Sunday, it seemed that half of the people at LRL were wearing Banshee tee-shirts. Hells yeah!

Gabriel Burt conquers a tower of food
The best thing for me was just meeting everybody and hanging out. I got to talk a lot with Christian Hammond, but I was bummed to miss his Review Board presentation. I finally met Alex Graveley and Miguel, who are such a blast to hang out with. Some people really get it, and it's just refreshing to talk to them. Alex gave a pretty sweet demo of streaming virtual machines, which is actually something I've spent a lot of time thinking about so I was glad to see somebody doing something about it.

Miguel twitters, as I snap a pic for my blog.
I didn't really get to talk to Robert Love, unfortunately, but his Android talk was fairly convincing. I asked him if Android was going to be a real community-driven project, with non-Google folks having commit access, making architectural decisions, etc. I was thinking of the transition Apple has made with WebKit from "here's a code drop" to having a really great community project. Rob assured me that Android would be like that, and I trust him because he knows about economics and hawks and stuff. I'm not much of a Java fan, but I think I'll download the SDK and start messing around a bit. Hell, I may finally be convinced to buy a smartphone.

Travis Reitter (Soylent), Gabriel Burt (Banshee), Erinn (Debian)
You can see all of my pictures on my picasaweb.

Monday, April 14, 2008

LugRadio Live Rocked, and UIA progresses

So I'm on the plane back to San Diego after spending all weekend in San Francisco at LugRadio Live, and HOLY CRAP that was an awesome time. It could be that it was my first open source conference, or that I stayed with some awesome Utah hackers, or that I got to meet a ton of colleagues in person for the first time...but man I'm glad I went. Soon I'll post about the details, but for now I'll talk a bit about how the UIA implementation is going.

UIA Continues at a Reasonable Pace (watch out for dangling participles!)

For now we're sticking with the design approach I discussed last week for connecting the Winforms UIA providers to the UIA<->ATK bridge. But I didn't work much on that, because there are some issues with atk-sharp that Andres is busily hacking away at. Instead, I've been writing unit tests against Microsoft's implementation to pull out a ton of constant values that we need. This was really boring so I wrote a little program to automate it, though it's not very general. I think it would be cool to expand it to parse through MSDN documentation for some given classes and generate the boring unit tests for the appropriate fields/constants/etc. As it is it probably took me as much time to write the test generator as it would have to write the tests manually, and it's not terribly reusable. :-P I'll write more about it if it grows.

This week I'll continue writing unit tests, though I have some catching up to do because I spent Friday largely offline, and ditto today, so I've got to see where the team is. There's still plenty of work to be done in the providers and the core; they're just harder to test right now.

Tune In Next Time...

I started writing about LRL but it just got too damn long and I have work to do. But for now, I will fire the first volley in what is sure to be an extensive character debate. Here's young Aaron Bockover to share with you his impressions of LRL, through the magic of the karaoke Rickroll:

Monday, April 7, 2008

Moving, UIA Progress


Looks like we'll be moving from San Diego to Las Vegas some time around May 1st. We're having some trouble finding a decent home to rent, but I'm hoping that will all resolve itself in the next few days.

UIA Progress

Last week, Andres committed a ton of fixes to get stuff working in the UIA<->ATK bridge. I spent a few days working on my end (winforms and providers), until we finally got this:

Screenshot of a winforms app showing up in Accerciser!
So that was exciting. Our friends on the Mono team helped us figure out that some of our problems were caused by the fact that Winforms actually has a current dependency on GTK+ to get theme colors! The initialization of GTK+ before we load our UIA<->ATK bridge was causing runtime failures. We have filed a bug on it, and will probably be removing the GTK+ dependency in Winforms (see bug for details). Currently we work around it in our patch to Winforms.

Of course, the implementation to achieve this wasn't really too great. My providers were depending directly on Andres' bridge. So now it's time to start working more on the "core". I'm experimenting with it now. Here's an updated version of my old diagram, color-coded to differentiate between MS assemblies and our new assemblies:

Diagram of dependencies in UIA-related assemblies
Notice that I have removed the core, and in its place is the MS-defined UIAutomationProvider assembly. I played around with different designs, but there is a fundamental problem in that MS intends all interop between providers and *their* core to happen via a static class called AutomationInteropProvider, that lives in the UIAutomationProvider assembly along with a ton of useful interfaces. Well, we can't add new public interfaces to that assembly, but when messages come to the AutomationInteropProvider they need to somehow get to the bridge. And I'm trying to avoid excessive reflection.

So right now I'm assuming that I can define a good bridge interface in a new assembly, UIAutomationBridge, that only depends on MS's UIAutomationTypes assembly. A class in the UIA<->ATK bridge assembly implements that interface, and the AutomationInteropProvider uses reflection only once in order to find that class. This prevents me from using interfaces in the UIAutomationProvider assembly in the bridge interface, but I think this will be okay...we'll just have to pass a few things around as plain old objects, and document what the client can expect from them.

I'm thinking that this AutomationInteropProvider class is already designed to represent the "core", so I'm just going to run with that idea this week and see where it takes me. It's all happening in the olive and uia2atk projects.

My winforms providers are a little nicer now, but they're not much use until the bridge grows a little bit. So this week I'll focus a lot on these design issues, and also I need to write unit tests against MS's implementation to derive a bunch of constant values.

It should be a fun week; I like this sort of stuff.

Friday, April 4, 2008

Yahoo releases alpha Firefox extension, with Firefox 3 support!

2.0.39 alpha released! Check out the announcement. Please keep in mind that this is an alpha...if you want something guaranteed not to eat your bookmarks please wait for the beta which they will announce more widely.

I think I'm all out of excuses now, time to upgrade to Firefox 3!

Tuesday, April 1, 2008

Just (GNOME) Do It!

GNOME Do is da bomb. 0.4.0 makes me a better man.

That is all.

(Sorry for the ridiculously lame title, btw)

Monday, March 31, 2008

Tweeters, UIA Status

Climbing, Addiction

I took last week pretty easy, since I was still kind of wiped out from being sick. This allowed me to be refreshed and ready for my weekly Thursday rock climbing. This week our usual group was supplemented by new friends and some friendly geeks (it was almost a BarCamp reunion). I had a pretty good climbing night, and then we went out for dinner at Shakespeare's Pub which is always fun.

Dinner with a big group is interesting and fun because there are usually two or three main conversations going on, and the center of those conversations may shift around the table. What was weird at this dinner was that any time there was a lull in the conversation, the geeks produced their smart phones and (presumably) caught up on email, feeds, and general internet happenings. At the other extreme, if somebody made a particularly witty comment, these same geeks raced each other to Twitter it.

It was kind of surreal...I generally consider myself too plugged-in, so I avoid highly-addictive services like Twitter. During the recent San Diego fires, I did find Twitter the best source for fire news, but in general I've made a conscious effort to *not* join that community. I really wonder what these services do to a person's attention span. When spending time with tweeters, I get the feeling that if I am not a constant source of interest or entertainment, they will be quickly drawn back to the web via the nearest terminal.

Previously I've thought about how convenient it might be to have a cool smart phone that I could develop software for, but now I fear that my addictive personality would quickly fall victim to these pitfalls.

I kind of get the feeling that hyper-plugged-in people are not so much the creators of Web 2.0 as they are the "product" for some weird Web 2.0 economy. Although, they could just be geniuses with much more time and energy than I have... ;-)

UIA Status

In other news, I made some good progress last week. I have a hacky little patch to winforms that initializes the providers via reflection, and exposes a FormAdded event to get notified when forms are created. I really want to stress that this is just a proof-of-concept to get the pieces connected for UIA, and is not ready (for various reasons) to be proposed for inclusion in Mono. Anyway, this initializes our new UIAutomationWinforms assembly so that it can create providers as Forms are created. I also made a little more progress on the WindowProvider and ButtonProvider, but they haven't been my focus so they are still incomplete. I wanted to work more on our "core" that will connect the UIAutomationProvider assembly with the winforms provider and the UIA<->ATK bridge, but ended up getting stuck reading a lot of documentation about the Microsoft implementation.

Andres has done some awesome work to get the bridge working, so I'll be working with him to get the end-to-end model working. It will be very nice to have a thin vertical slice of our entire infrastructure working, so that we can at least see winforms windows in Accerciser. I'll be working on the core and improving providers this week.

Summer of Code Deadline Extension

Also, the deadline for submitting proposals to GNOME for Summer of Code 2008 has been extended by one week. I spent a lot of time this weekend reviewing the proposals we have received so far, and plan on spending next weekend in much the same way. There are some really great proposals in there, but it will be good to see what another week brings us. I don't expect to do any mentoring (I didn't propose any Tomboy ideas this year), but it's fun to help out with the whole process. My main role this year will be getting on people's backs about deadlines and overall status. ;-)

Thursday, March 27, 2008

Yeah, I think I'll attend LugRadio Live USA

LugRadio Live USA 2008 looks like it's going to rock hard, and Southwest has cheap fares, so I think I'll go this year.

But before I book a hotel room or bother friends in the east bay...does anyone have an open couch, or a hotel room they want to split costs on?

I figured I'd go up Friday morning and leave Monday morning.

Monday, March 24, 2008

Fevers and hacking go together like rocks and rollerskates

So I was pretty sick last week, running a high fever for several days. Consequently, I didn't get a whole lot done. But here's my status since my last update...

I talked with Jonathan Pobst and Geoff Norton to figure out how we should hook into the winforms implementation...Calvin, Andres, and I had been discussing the idea of implementing the UIA providers directly in the winforms assembly. Turns out we really can't be adding anything public to winforms or even adding additional dependencies, since we need to match the Microsoft implementation. Therefore, we'll be trying the following approach:
  • Winforms UIA Providers are implemented in a separate assembly (WinformsAutomationProvider).
  • When the Winforms assembly initializes, it will use reflection to initialize required UIA assemblies like the provider implementation (and possibly the UIA<->ATK bridge).
  • The WinformsAutomationProvider assembly will use reflection to hook into an internal Winforms event that will allow providers to be created as new forms and controls appear. This internal event may need to be added to Winforms.
I made a diagram of this to help me visualize the interaction. It assumes the existence of a UIA "Core" that would sit in between provider implementations and potential bridges. This would be a more flexible design, but there's no reason we can't just have our provider implementations go straight to the UIA<->ATK bridge if that makes the most sense.

In the future there will be at least one more provider implementation (Moonlight), and potentially there could be other bridges if we needed to target other accessibility platforms. Anyway, the big question mark in there is who is the one to initialize the bridge. That's probably a piece of conditionally-compiled code sitting in the core, though I haven't really thought much about it.

So I've been working on provider implementations for Form and Button, with some success. I also experimented with a couple of ways to set up the internal Winforms event. By the end of this week, I will have created the infrastructure for the WinformsAutomationProvider assembly, which will include my Form and Button providers. I will have a patch to Winforms that initializes that assembly, so that I can dynamically create providers as forms are created. I may also work on the Core or whatever else needs to be done.

I'm looking forward to a more productive week.

Monday, March 10, 2008

A week in Cambridge, a11y status, new Tomboy release, and other hacking

So I spent last week in Cambridge, getting to know Mike and Andres, who just joined the Mono Accessibility team. Aside from consuming massive amounts of seafood, I became a lot more familiar with the project and the entire accessibility landscape. I do wish I'd seen more of Boston, though.

I'm going to start blogging a sort of status report every Monday, to keep everybody informed about what I've done and what I'll be doing as part of implementing UIA on Linux. This is the first such entry. Last week was kind of a wash for development, but I did help get Mike and Andres set up, verify some of our unit tests against the MS UIA implementation in my new Vista VM, and delve into winforms code. We need some way to know when new Forms are created so that we can register them in the UIA-ATK bridge, but once they are created, I believe we can implement the UIA "provider" interfaces with just regular access to the public members of forms and their controls. Though I've been warned that it may be necessary to hook in a bit lower in the winforms code...

This week I intend to start implementing some basic UIA providers (window, button, etc). I'll drop some code into winforms to alert me when new forms are created, and since the UIA-ATK bridge is not quite ready, I'll write a few tests directly against the provider interfaces. Should be fun!

In other news, Boyd just released Tomboy 0.10.0! This is a nice release with a lot of polish. I think people are really going to like Notebooks...I'm looking forward to feedback that should let us know if we were right or wrong in going with Notebooks instead of free-form tagging (which is totally supported in the implementation, if anybody wants to write an addin or dbus client). I'm sure that we'll get a lot of good suggestions from our users, as usual. Soon we'll have a meeting to plan our next release, so keep your ears open!

I've also been spending some time on Tasky, which I'm liking a lot better than the other task programs I've tried. In general I like RTM's Gmail extension for Firefox, but its mouse dependence really slows me down. My favorite RTM/Gmail feature is how I can type in a task like "lunch today" or "release tomboy 0.10.0 march 10th", and it will become "lunch" or "release tomboy 0.10.0" with the proper due date set. I've implemented this for Tasky, though I don't yet support as many natural language phrases as RTM/Gmail does (we don't appear to have a cool library like Chronic for .NET). Hopefully some variation on my patch will make it into trunk, as I think this is the easiest way to type in tasks with a due date. What do you think?

Other things I'd love to hack on when I have time: offline Tasky for RTM, DAAP client support in Banshee trunk, and better refactoring support in MonoDevelop (like typing out a new method call, right-clicking the method, and choosing "Implement method"). I'll save my Tomboy thoughts for a future entry...

Tuesday, February 26, 2008

A Few Firsts

Monday had some pretty interesting firsts for me...
  • First day with a 30-second commute, instead of a 30-minute one.
  • First day where getting to my desk didn't require a badge and several security checks.
  • First day writing software for citizens instead of soldiers.
  • First day writing free software full-time.
  • First day working for Novell.
Yes, the rumors and tabloids are true: I've joined Calvin's accessibility team. I'm really psyched with this turn in my career. It's a nice change to support a cause that is more aligned with my own values. Not to mention that I'll be working with a bunch of engineers that I really respect, and from whom I hope to learn a lot.

Plus...I've always wanted to take my dogs to work! ;-) Working from home is...interesting.

Oh, and another first: this is the first day where I've been allowed to take a picture of my work area! Behold!

Just imagine a bowl of cereal by my headphones, a dog under the desk, and OpenSUSE on my awesome company-provided 24" LCD, and you'll see what I see right now.


Saturday, February 9, 2008

Hackergotchi Me, Please!

UPDATE 3.14: Thanks to Manuel for my new hackergotchi! Woo hoo!

P.S. Thank you to Bart and Dave Neary for their versions, which were also quite good.

Previous text:

I appear to be in need of a floating head. Anyone willing to give it a go? I think this would be a good picture for it...but I've been wrong about this before (click for full resolution version):

[Picture was huge! Thanks everyone]

I'm really enjoying My Own Kind of Freedom. I'm about 12 chapters in, and I'm amazed (but never surprised anymore) at Brust's ability to put me right back in the Firefly 'verse. I think I'm most pleased with his Jayne and River POVs. The style is just perfect.

UPDATE: Book was great. Can't wait to reread.

Tuesday, February 5, 2008

Brust Releases Free Firefly Novel!

One of my favorite fantasy authors, Steven Brust, wrote a Firefly novel some time ago, but was unable to get it published due to licensing issues. Well, as promised, he has published My Own Kind of Freedom as a free download on his website.

I haven't read it yet, but I'm eagerly looking forward to it. Brust never disappoints in style or characters, so I can't wait to see what he's done with the crew of Serenity.

Like most writers, Brust is basically a starving artist, so if you appreciate this or his other works, please consider donating a bit on his website.

Spoilery discussion is going on in the comments of this post at Steven's blog.

Lessig on Obama

Thanks to Chris Ball for linking to Lessig's Obama video. I often feel, after watching a Lessig presentation, that he has taken thoughts and feelings that I harbor but have been unable to express, and crystalized them into a digestible format.

I find the republican candidates unacceptable, and since Clinton and Obama do not differ significantly in their platforms, the only criteria for choosing are character, experience, and potential for support (ie, ability to follow through on the platform).

Obama clearly wins on character in my mind (and in Lessig's). I do not feel that Clinton's experience is particularly useful or applicable, though I could be wrong there. And although Clinton's political prowess may enable her to gain congressional and popular support, the optimist in me hopes that Obama's character will be able to achieve similar results without sacrificing his (and our) principles.

Now I just need to register to vote...

Tuesday, January 29, 2008

Epic Fail

I have to leave for work in 10 minutes, where we are entertaining out-of-town team members for whom I would like to appear sharp and professional.

My electric razor's battery died just as I finished shaving the right half of my face.

I like how the "battery low" indicator only started flashing after it died. Although it's possible I failed to notice it as I was busy shaving my face. I'm definitely not a fan of the quickly-decreasing battery life of this new razor.

Murphy, 1.
Sandy, 0.

Let's see how the rest of the day goes...

Monday, January 28, 2008

Bullets of the Past Week

  • I had the most perfectly constructed burrito ever in the history of the world, from the Chipotle in Escondido. Late dinner, no crowd, first visit to this location.
  • One week later, I had the most disastrously constructed burrito ever in the history of the world, from the Chipotle in Escondido. Late lunch, very crowded. I'm a little nervous to make a third visit.
  • On Tuesday I flew Delta for the first time in years, and was pleased to see that the in-flight entertainment system ran Linux (a Red Hat derivative, I think). I wasn't that pleased to see the in-flight entertainment system rebooting. My seat neighbor quipped that he hoped that wasn't the autopilot system failing. The return flight had no such rebooting.
  • Delta needs to work on the volume levels of their in-flight entertainment system when the PA kicks in. I eventually gave up and went back to the iPod because I was tired of having my ears blown out.
  • I climbed well Wednesday night, but just as I was ready to leave somebody showed me an awesome bouldering problem that I was too exhausted to really try. Looking forward to climbing this week.
  • I saw Superbad. Holy crap. Amazing. I could not stop laughing. McLovin! This was my first test of using Amazon Unbox via my TiVo. The download speed was abysmal. Netflix would have been more efficient, and the local Blockbuster more convenient. Once downloaded, it was nice to use my finely-tuned TiVo muscles to manipulate the movie, though.
It was actually a pretty good week.

Saturday, January 19, 2008

I hate rebates

Rebate mistakes of the last six months:

iPod nano - Purchased for $150, with a $150 rebate. Fat nano came out the week after the rebate expired. This became an over-the-top present for a lucky cousin. Not worth it.

VMware Fusion - Purchased for $??, with a $20 rebate. Expired with 2007. Worth it.

New Tires - $50-$60 rebate (advertised as "free" 4th tire). Don't know when it's due. It's in Ellery's hands. :-) Worth it.

Can I really call myself an adult? I think I need to accept that, for me, items cost whatever I pay for them at the point of sale.

I hate rebates.

Saturday, January 12, 2008

Middle-click on Tomboy Applet

UPDATE: Bug resolved with patch that adds a gconf preference defaulting to false. There is no UI to toggle this preference. The relevant key is /apps/tomboy/enable_icon_paste.

As posted to tomboy-list...

With regards to bug #359167, does anybody actually use this feature?

Most GNOME applets let you move them by middle-click-dragging. With Tomboy, when you middle-click on the applet (or notification icon), any text in the clipboard is pasted to the Start Here note, which is opened for you. I don't think this is documented anywhere.

Would you care if this feature went away?

Personally, I never use the Start Here note, so I'm probably not qualified to judge whether or not it is a useful feature.