Dear FOSS Developers

I’m speaking specifically to FOSS developers who are involved GUI / Human Interface type development and design.
There’s apparently a percentage of ya’ll who seem to think that the proper way to execute a program represented by an icon is to just click on it.
Once.
I have one thing to say to that. Or. Several things. With the same message…
NO NO NO! WRONG WRONG WRONG! BAD BAD BAD!
Every once in a while someone seems to think that it’s proper to make it so if you click on, say, a Firefox icon, it means ‘Start Firefox RIGHT NOW’. This is ridiculously, painfully WRONG. A desktop contains objects. If you touch something, it doesn’t mean “EXECUTE THIS RIGHT NOW, NO MATTER WHAT IT IS”.
Imagine if this were taken on in the real world. Your car would start whenever you touched your keyring. If you touched the handle on your sink faucet, water would come gushing out immediately.
This pattern has been cropping up in KDE on occasion, though I’m assured it will not be the case in KDE4. Gnome is rife with it. And Puppy Linux, an OS that can run via LiveCD, will happily start up a 60meg program (Firefox) if you happen to touch the Firefox icon on the desktop. Just touch it. A process that can take 4-5 minutes in LiveCD mode.
So, in conclusion. No. For the love of all that is sane, do not do perpetuate this bad design.
Warm regards, me.

Rockin in the Workshop

So there’s this house we’re calling Interlude. It’s a rental, we’re living in it since we sold Homeport and is our home until Mosaic is ready for us, sometime late next year.
It has a usable basement, with a high ceiling and dry floors. Not particularly warm in the winter, but usable.
I’ve moved my workbench, my tool chest, all my tools and parts and other debris into a nice little work area, and have been slowly working on various projects (such as the Mame cabinet – see that post for a picture of my workshop space).
But something was missing.
Broken RokuThis past weekend, I finally gathered together all the pieces of the Roku Soundbridge M500 I won from Radio Paradise two and a half years ago. Not long after I got the Roku, it broke in a funky way – part of the LCD display went blank. I contacted Roku about getting it repaired, they said to send it in and they’d look at it, but I never got around to doing so. Ah well.
This past weekend I powered it up again, just to see if I could get it useable in the workshop. Oddly, it came up fine, even connected to our wireless network. With 3″ of the left side of the LCD out of action, I had a hard time navigating the menus until I found the ‘brightness’ function, cranked all the way up, gave a sort of ‘shadow’ on the LCD where the text was. A few updates later, and I was up and running with RadioParadise, listening through the old stereo I had installed a while back.
Ahhhhhh.
I really wish these devices (that stream audio either via wireless or network) were less expensive or easy to put together by hand. I could totally see having a bunch of these for Mosaic for public spaces around the community. “I’ll be out in the workshop, I’ll run up RP there.”

Apple continues to lose my respect.

Update 15:23pm.. – THIS BLOG ENTRY IS REFERRING TO A FAKE POST ON THE FAKE STEVE JOBS BLOG. I was duped, hook line and sinker. I’m annoyed at being deliberately mislead, but relieved that my rabid furniture-chewing has no real basis. I’ll leave the post here as an example of my own duplicity.
It’s been a hard fight for me.
I’m completely taken by Apple’s designs, platform, and technology. They’re the only company to take Unix seriously enough to put a front end on it that WORKS. Their hardware is sexy as all git out, and for the most part, works very well.
I have considered seriously going the Apple route more than once. Ditching this Linux thing and embracing Cupertino.
There’s always been this nagging, though. Apple is very lawyer-heavy. They tolerate no smack-talk from the little guy, and have a tendency to go all Corleone on anyone who even HINTS at revealing their deep dark secrets.
But now I think they’ve overstepped their bounds.
In the past, when Apple threatens a writer or publisher, the contents of the negotiations are kept secret. A site disappears, the negotiations are private, and we assume they reached some amicable settlement.
One fellow isn’t going quietly into the night. Daniel Lyons, the author of the “Fake Steve Jobs” blog, which has been a satirical poke at the head of Apple, is being attacked by a pack of rabid lawyers. While there may be a small bit that they disagree with, Daniel has gone the unusual route of publishing exactly what the lawyers are saying to him. The most recent exchange has said lawyers saying, in essence, “You should play nice with us. Here’s a list of your assets you own. Here’s where your family and your home are. Would be a shame if something were to, like, you know, happen to any of them….

And then, I swear to friggin God, there’s a list of my assets with an estimated value for each and I suppose the implied threat that I stand to lose them. Which kinda scares the living shit out of me, to be honest, since they’ve got a pretty thorough list, which means they’ve been doing some research on this and the offer didn’t just come out of thin air. Their lists includes my home address, most recent assessed value of my house and all the information about my mortgage; a rental property that we own; my bank accounts and investment accounts, including the college funds for our kids, whose names are used; and our boat and two cars.

This is disgusting. The Fake Steve Jobs site is satire. It’s amusing, entertaining, and does nothing to harm Apple. But Apple is coming down on Lyons like a pack of wild dogs, and no ethical, moral, or financial boundary will stop them from destroying Lyons.
This is not a company I can, with any real conscience, support.

XO Laptop environment – Try it yourself!

I can’t help it, I’m too impatient. While waiting for my Zach’s XO laptop to arrive, I wanted to get a feel for what the environment was going to be like.
The XO uses a modified version of Redhat’s Fedora operating system, with a custom written ‘desktop’ called Sugar. Coupled with Sugar are several tools, including a music editor, video application, several programming tools, a web browser, etc etc. The environment had to be built in a way that non-english-speaking children could pick it up easily, and if the early reports are true, the team has done a great job at this.
But I wanted a chance to work with the environment before the laptop arrived. Fortunately, there’s a great series of pages on the OLPC Laptop wiki that describes how to set up an emulator, and run the laptop OS on your desktop machine.
After a little fiddling, I got it up and running, and was able to play around with the environment for a while.
First note – the emulator runs things -slower- than the laptop itself does, so I had to take into account I was seeing things at about half the speed a typical user would. But even with that, I was able to get a good feel for what the user experience was like.
I recommend anyone interested in this system to follow the emulator steps and take a look at it. I’m of the opinion that with several million of these going out to kids all over the world, the environment and tools are going have a major impact on the net at large. Opensource code (all written in Python, very good visual programming tools (like the Logo environment pictured here) – all will contribute to a new digital landscape over the next few years.

Dear Intarweb…

Somewhere, back in the mists of UI design, some bright light came up with the idea of making options in an application or desktop environment selectable by using a mouse to point at a menu along the top of a work area, clicking on the menu, and having it present more options.
This was called a ‘Pull down menu’
Handy! Picks were readily available when needed, and stayed out of the way until requested.
I’m fairly sure the original designers of menuing systems never said to themselves, “Hey guys, I think it would be a good idea to SHOW A PULLDOWN MENU JUST BECAUSE YOUR MOUSE HAPPENED TO ROLL ACROSS IT ON ITS WAY TO PAUSE YOUR MUSIC!
I’m flabbergasted that the ‘popup menu’ has become de rigeur in web pages. It’s a terrible UI design, and consistently gets in the way when trying to do other things. There’s no other menuing system on the planet that does this. Menus should show up when you ASK for them, not because you happen to TOUCH it. That’s what the little button the mouse is for. See? Clicky clicky. Now you try it.
Not that I expect this to change anytime in the near future. There’s a revolution going on in UI design now, with AJAX services redefining what it means to write a UI. Unfortunately, I have yet to see any AJAX application that comes near the functionality of existing systems. It appears programmers are going back to 1985 and starting over, thus jettisoning all the lessons learned in the last 20 years.

Google Sketchup – Okay, this is cool

I’ve been having fun playing with Sketchup, Google’s 3d modelling system. At first I avoided it because there was no native Linux version, even going as far as to get it to run under Wine (a process that… well, didn’t fail completely, but did result in a tool that’s unuseable – invisible menus, etc).
After biting the bullet and installing it on clipper, I set about learning what it could do. The project I had in mind was to model Mosaic’s building site in Berlin, MA, so folks could have a feeling for what it would be like walking
There was certainly a period of mental adjustment. After all, it’s not easy trying to model a 3d object using a 2 dimensional input and display method. But after a while, the keyboard shortcuts began to come naturally, and I found myself enjoying manipulating objects in this non-existent space.
I’m probably halfway through things so far. I’m regularly updating the drawing in 3dWarehouse, Google’s sharing service for Sketchup. If you have the tool, feel free to download the drawing so far…

I’ll let folks know when I’m done. But Google. Please? Make a Linux native version. You’ve already got Windows and Mac. This can’t be that hard.

Linksys router upgrade

Nothing like a nice quiet thanksgiving weekend to take it easy around the house, enjoy some quiet time with the family, and… UPGRADE YOUR ROUTER!
Our Linksys WRT54g has been happily managing our net connection for about 2 years now. I’ve been noticing some twitchy problems with it off and on (about once a month it stops handing out DHCP addresses, we have to reboot it), and it has shown other small problems. The final straw came about 6 months ago when I realized I had lost the administration password. This meant I couldn’t even log INTO the router to find out what was wrong with it. Something had to be done!
(6 months later)
Okay, time to fix it! I reset the router (holding in the reset button for 10 seconds does this) which resets it to factory defaults. The default password on Linksys routers is just ‘admin’ in the password field (surfing the neighborhood? See an SSID of ‘linksys’? Hit 192.168.1.1, and try ‘admin’ in the password field. Welcome to someone’s router! – some versions of the linksys may require admin in the username field as well).
The first thing I did was confirm that I could log into the router and that default configurations worked with our Comcast cable modem (they did). After resetting the password and the SSID, I took the opportunity to upgrade the firmware in the router. And I’m super-happy I did.
The firmware I was using was v 1.00.02. The current version is 1.02.2. The number of ‘fixes’ between those versions? somewhere around a bazillion. On the one hand, I do appreciate that Linksys is actively updating their firmware. On the other hand, that’s a lot of bugfixes for a router that’s only 18 months old.
I’m seriously considering checking out DD-WRT, the opensource firmware for the WRT54G. It has a truly impressive feature list, including native OpenVPN client and server support. Unfortunately, my router is a Version 6, which only has 2mb of flash in it. That means I can’t run fit a larger firmware image onto the device. Alas. Maybe I’ll eBay an older revision that has 16meg in it.
For now, I’m back up and running, and hopefully won’t have my roomies having to fight with constant connection drops and router resets.

Can’t go flying? How about the next best thing.

I have a strong attraction to flight, in all it’s forms, but I feel the strongest attraction to things that are the closest to free flight… it’s one of the reasons I’m very interested in soaring – it’s as close as I can get without actually growing wings.
But, what if you can’t fly yourself… How about flying models? Okay, that’s fun, but you can’t actually get IN the plane and fly it around.
Or can you?
[youtube http://www.youtube.com/watch?v=K2ezJKQa2Us&rel=1]
This was linked from all over the place, but today’s reminder of it came from Hackaday.

Photo Managers – Digikam rocks

Today I am full of Mad Love for DigiKam, the photo manager distributed with KDE. I’ve been using it off and on for a few years, and for one reason or another, I would stray away and use manual file copies for a while.
As of about a year ago though, I’ve moved to using it full time for managing the (sometimes hundreds) of pictures I take in a given session. There’s a whole slew of wonderful functions in it, but the ones that made me finally stick with it can be summed up as follows:

  • Automatic directory creation and sorting when importing from the camera. Directories can be created according to the date the picture was taken (importing 250 pictures from my camera may make 4 directories, if I was shooting over several days)
  • Direct support for my Canon 400D. When I plug in the USB, KDE prompts me to start Digikam, and everything is imported.
  • Full support for Exif data, including image orientaton, etc. Exif data is never removed or ‘flushed’ from the images.
  • Excellent export functionality to either Flickr or to a series of HTML files and thumbnails.
  • Very good gallery organization, sorting, and previewing. I can work with thousands of images and sort them into appropriate directories.
  • Tagging allows sorting and categorizing of images without reordering the directories. Searching for tags, dates, or other data generates a new view based on the tag criteria.
  • Easy calling of external programs such as The Gimp for post-processing.

All of this, combined with, well, it LOOKS great, make Digikam one of my favorite KDE apps.

Thank you Sun and Ubuntu!

… and the cast of thousands that made installing a Sun JDK onto Linux as simple as:

root@endor:~# apt-get install sun-java6-jdk
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following extra packages will be installed:
gcc-3.3-base java-common libstdc++5 odbcinst1debian1 sun-java6-bin sun-java6-jre unixodbc
Suggested packages:
equivs binfmt-support sun-java6-demo sun-java6-doc sun-java6-source sun-java6-plugin ia32-sun-java6-plugin sun-java6-fonts
ttf-baekmuk ttf-unfonts ttf-unfonts-core ttf-kochi-mincho ttf-sazanami-mincho ttf-arphic-uming libmyodbc odbc-postgresql
libct1
Recommended packages:
libxp6 libnss-mdns gsfonts-x11
The following NEW packages will be installed:
gcc-3.3-base java-common libstdc++5 odbcinst1debian1 sun-java6-bin sun-java6-jdk sun-java6-jre unixodbc
0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
Need to get 42.3MB/43.1MB of archives.
After unpacking 128MB of additional disk space will be used.
Do you want to continue [Y/n]?

For those on the sidelines, Sun has not been particularly forthcoming regarding a licensing arrangement that makes the RMS-ites at least mildly comfortable with automating an installation. In point of fact, I believe Debian is still uncomfortable with the whole license arrangement, though they do have it in the non-free repository.
Up until recently, getting Java onto a Linux box was, well, not difficult, but certainly not trivial. I’m happy to say it’s gotten as easy as installing any other package, which, with current package managers, means it’s a breeze.
Yay progress.

Of Systems and Services, Mame and Madmen…

It’s been a challenging few days here at Chez Geek. In true journal fashion, here are the highlights, because I know my devoted readers are sitting on the edge of their seats, waiting for every geeky installment of my daily encounters with recalcitrant hardware, misconfigured servers, and twitchy environments.
Ahem.
Of Mame
Mame console underneathOn Friday night I finished wiring the console. I’m short a half dozen buttons, so some functionality is missing, but I really wanted coin drop buttons. I picked up a couple small single-throw pushbuttons I had lying around, and wired them in with duct tape, so now I can ‘drop coins’ to get credits just by pushing a button on the console. Looks like ass, but it does work. I’ve ordered the new buttons, and they’ll arrive in a couple days, and I wanted to play games NOW.
There’s a whole post about things I’m learning regarding building a Mame cabinet, but that can wait. For now, I’m using deathstar, my MythTV box, as my ‘mame front end’. MythGame is “okay” as far as interfaces. Mostly it’s “okay” because it’s actually working correctly, and works with the controller. I’m hoping to haul the entire setup to Ubercon this coming weekend, so minimizing fuss is a big win.
Of Stonekeep and Conventions
Next weekend I’ll be down at Ubercon in New Jersey. This of course means I need to get most of the CONGO system up and running to run badges. Unfortunately, endor is not behaving. After almost 4 years of constantly apt-getting and updating packages on it (Starting from a Debian ‘woody’ install), a series of packages failed miserably during an upgrade (I haven’t really worked on it in about a year), and has left it in an unuseable state. I’ve backed the data off it, and reloaded Ubuntu Feisty Fawn on it. There’s a bunch of configuration that still needs to be done, and that’s making me nervous so close to an event. At least the install seems to have completed cleanly.
Those are the two primary things on my mind these days. Oh, and in the background is ongoing Java work and the slow moving ahead of Mosaic Commons, but that’s sort of the ‘steady noise’ bits. I’m just covering the highlights right now.

Audacity Ate my Konqueror

I’ve been having a problem in KDE for the last 6 months or so (perhaps longer, I’m not sure). On the face of it, it seemed like a standard file association problem, but it was pervasive.
Recently I switched to using Konqueror as my primary web browser. With the advances in plugin support for things like Flash and Shockwave, the actual browser platform has become less important. Since I switched away from Firefox, I’ve been using Konqueror and, for the most part, things have been pretty good.
Except for one annoying bit.
Because I’m a developer, I have to, on occasion, do the ‘View Source’ thing from inside my browser to see how the HTML, CSS, and JavaScript in a page I’m working with is put together. For some bizarre reason, Konqueror had decided that when I selected View Source, it would try and open the source in… Audacity.
Now, I’m all for great programs like Audacity. It’s a fantastic multi-track audio editor. But in no way, shape, or form is it a source code viewer.
This afternoon I finally sat down to try and figure out what the heck was wrong. Konqueror has a great tool for associating various file types with helper applications (something old time users of Mozilla are very familiar with), but the sheer number of associations is staggering. And since I didn’t know what type was that was causing the external app to be launched, I didn’t know which one to look for.
I got my first clue when I noticed that Konqueror had associated .py (Python) files with Audacity. “Aha!” sez I, “That’s not right!” – I started to change the association, then went “Wait, I don’t want Audacity started ever. Just remove the helper.” Which confronted me with the dialog box stating that Audacity had been attached to text/plain and could not be removed.
Another clue! Navigated to text/plain, saw Audacity listed in the helpers, and promptly moved it down to the bottom of the list (Okay, maybe someday I’ll want to use Audacity. Allow me my foibles.) Clicking Apply and then trying a view source finally got me… the source!
Note that this entire problem was solved inside KDE without resorting to editing configuration files, typing cryptic commands, or knowing esoteric and mystical Linux incantations. It was a misconfigured browser, nothing more. In the good old days this would have required said gyrations to fix, but I’m constantly impressed at how far environments like KDE have come, making problem solving like this a lot more intuitive.

My Gibbons Runneth Over

Now there’s a topic that won’t make much sense unless you’re in the Linux community.
This week saw the release of Ubuntu 7.10, aka ‘Gutsy Gibbon’. I’ve been firmly in the “Stick with the stable releases” Linux camp for quite a while, even when Debian was pushing 2 years behind on their ‘stable’ release.
I’ve been running Ubuntu 7.04 (aka ‘Feisty Fawn’) on yawl for the last year or so, and have had nothing but good things to say about it. It’s been stable, useable, and lets me do my work. Excellent.
Yesterday I ran the update process and told the system to update itself to 7.10. The total processing time would be about 2.5 hours, due to a gig and change of data that needed to be downloaded (okay, I have a lot of packages), so I decided to go to lunch.
Upon returning, I answered 2 questions about local files I had modified, let the installation finish, and, with a small dose of trepidation, rebooted.
It came back fine.
In fact, everything came back fine. I have seen not the tiniest indication of a problem. Ubuntu just upgraded something like 1100 packages on this machine to newer versions, and everything Just Plain Works. All my basic tools are fine, if upgraded and showing some new bells and whistles. The traditional boondoggles of Linux system maintenance never even flinched. Sound, network, accelerated graphics (I have an nVidia card) – all came back up flawlessly, even with my desktop back as it looked before.
There are some noteable changes in the new release. The file manager has been replaced with ‘Dolphin’, which I have to say the jury is still out on. Initially I was very nervous about replacing my beloved Konqueror file system browser with something new, but my initial impressions of Dolphin are good. Everything seems there, if a little heavy on the big icons. I’ll play with it a while and see if it will cut the mustard.
This is how computers are supposed to work. No license hassles, no nightmare changes from one revision to another, no “Burn it to bedrock and reinstall from scratch” problems with upgrades, or problems with “This app worked with my old OS, but doesn’t work with the new one!” – one big distribution contributed to by everyone, with everything updated at once and confirmed to work together.
Yay Ubuntu!

The XO Laptop – OLPC comes true.

I rarely get involved in rallying folks to humanitarian causes or try to entice people to donate time any money to charities. When I do, it’s generally about something I feel quite strongly about.
About 2 years ago the faculty members at the MIT Media lab launched a project called One Laptop Per Child, the idea being that if a laptop could be built for $100, millions could be produced and distributed all through the developing nations through donations, government support, and other forms of philanthropy. The driving force is to try and make a direct impact on the socio-technological gap that is so apparent across the worlds population.
The result of this project is the XO Laptop, a machine designed by the OLPC team to address the specific challenges that will be encountered by children using the machine where there are no power outlets, or no internet, and where conditions may not be as squeaky clean as they are in your typical home office. The laptop itself, by modern standards, is underpowered, but the design is so open, so green, and so sturdy, you can’t help but be impressed.
This is a laptop designed for children to carry around with them, anywhere, anytime. It is waterproof, dirt proof, the battery lasts many many hours, it can network itself to other laptops arond it (a ‘mesh’), and it can run off a $10 solar panel (and recharge from it too).
There is an excellent video review of the XO by David Pogue on the NY Times website. Even if you aren’t interested in the machine directly, watch the video for an idea of what it’s all about.
Now, the XO laptop didn’t come in at $100. It actually came in at $183. As things ramp up, they hope to get the price down, but it’s still a little more than they anticipated.
So as part of their launch, the OLPC project has a special offer.
On November 12th, you can go to XOgiving.org and enroll in the “Give one, get one” program. You pay $400, and get an XO laptop of your very own. “Wait, $400? That’s twice what you said!” – Yes, it is. Because if you purchase an XO laptop for $400, a second laptop will be sent to a child in a developing nation.
My wife and I are seriously considering one of these laptops for our 8 year old son, and the added benefit of benefiting a child elsewhere is just icing on the cake.
If nothing else, watch the David Pogue video for all the details on the machine. It’s a remarkably green, well designed, and rugged little machine.

A Peek Under the Covers – Windows XP Registry Keys

While working on my current Java project, I needed to better understand how the Preferences API stores data. My initial instinct was to dig around in my home directory looking for a .java/Preferences file or something similar. Perhaps under Linux, this would have been the case, but Preferences is platform agnostic, and under Windows, it uses the Windows Registry.

I’ve long since tried to drive out my knee-jerk reaction to the Registry. The initial implementations of it were awful, and prone to easy corruption. Navigating the registry has never been what one would call ‘simple’, but after a while things settled down a bit and stabilized.

In this case, I was using a simple Java command to store some values for a Webstart launched client:

prefs = Preferences.userRoot().node(nodeName);
prefs.put("ExpoLoginName",userField.getText());
prefs.put("ExpoPassword",new String(passwordField.getPassword()));

Pretty straightforward stuff. In general, the code was working as expected, but I was seeing doubling of some of my values. What I needed to be able to do was actually see the registry stored values themselves, without going through the interface, to see if I was actually storing the values properly, or things were going wrong on the way out.

This unfortunately brought me in contact with the Windows native tool ‘REGEDIT’. This tool came out quite a while ago, and is the defacto standard way of editing, browsing, and searching the Windows Registry. Unfortunately, regedit hasn’t seen any interface upgrades in approximately an eon. It is painfully difficult to work in, and while yes, it gets the job done, little interface quirks can flat out destroy productivity. For example. The FIND function (amazingly, bound to ‘^F’), does in fact let you search the registry for a key or value. But, it is a one-way search, from the current position forward. It does not wrap. It also does not RESET when you change to a new search term. So if your first search finds a match, say, at the 5th from the bottom key (by the way, the window does not scroll to show you where your match hit. You have to scroll it manually), and you decide to search for a second term, it will only search the last 5 rows in the registry.

I lost half an hour searching for keys I KNEW were in the registry, because my first search had set the pointer so low. GAARRRHHHH!

What I found most entertaining about this path was it gave me a chance to look under the thin veneer of civility that Windows brings to the operating system experience. Take for example the screen shot above. Note that the keys stored in the registry have been altered from their internal values. Some bright Windows developer back in the dark ages realized they should tell the difference between an upper case letter and a lower case letter. Rather than, say, writing that into the logic of the registry, they cleverly decided simply to preface upper case characters with a forward slash.

Ah, but that brought up a problem! You could now not store a forward slash into the registry! Not to worry, we’ll just change any forward slashes in the registry to backslashes! Sounds like a great plan!

This sort of tortured logic is what you see happening in student built technology experiments, hacked together during all night jolt-driven marathons. It’s not something you’d see in the largest software company in the world. Their programming practices, in theory vastly improved from the early days, wouldn’t allow such awful hacks.

Would they?

Update – it appears, due to notes in the comments, that the registry values hack is due to Java’s interpolation, not Windows. Java needs to specify slashed items because the backing store being used in this instance (Windows Registry) is case insensitive. If a different backing store were being used, that wouldn’t be happening. My apologies to Redmond for assigning blame. On this one thing. 🙂