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.

Facebook. Am I missing something?

Dave Belfer-Shevett's Facebook profileSo I have a profile on Facebook. It’s been enjoyable fiddling around with the apps and linking up with other folks, and all that has been peachy keen. In particular, I rather like the Twitter-esque ‘Status Updates’ that folks can use to say “I’m home, and eating sushi” or whatever else strikes their fancy.

The problem is, I frequently see a Status update where someone says “I’m feeling down” and what I really want to do is go “Oh? What’s up?”

But it appears the only way I can do that is to:

  1. Click on the users name to go to their profile
  2. Click on ‘Send [user] a message’
  3. Type a subject “So you’re down?”
  4. type a message
  5. hit send

This doesn’t seem like the interactive social structure I was looking for, where I could simply follow up on something I see with a “hey, what’s up?”. A message sent as above has no context, is not attached to the status update, etc etc.

In fact, Facebook seems structured in a way to NOT encourage that sort of spontaneous communication. It’s more geared to “Lets funnel people toward shared functions or applications” as opposed to “Lets make it easier for people to communicate.”

What am I missing? The initial funness of the site is starting to wear off a little bit. There’s zillions of people on Facebook. What keeps them there?

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.

OLPC G1G1 Program netting $2m a day

As reported on Engadget :

Negroptone’s OLPC Buy One, Give One program has been extended to 31 December, 2007 — well beyond the initial two-weeks originally announced. The deal buys both yourself (or rather, your kid supposedly) and a tot from a developing nation new XOs for just $399. Already, the non-profit claims to be pulling in about $2 Million worth of “donations” each day. They’ve also opened up bulk buying to schools in quantities of 100-999 ($299 each), 1000-9999 ($249 each), or 10,000 and more ($199). Oh, and the program is now officially renamed “Give One, Get One” (GoGo) — we presume BoGo’ing the kids just sounded a tad too dirty.

We ordered one for Zach already, and I’d been curious about how the sales were going. Folks on the Freenode channel were saying that the manufacturer would build based on orders, and if orders were slow, they wouldn’t ramp up the daily production. But it looks like things are moving briskly.
Yay!

Dear eBay. Fix your HTML. Again.

I know you’re the largest online auction house on the planet. I realize that despite the bazillions of dollars you rake in on a yearly basis, you still haven’t been able to hire a single competent site designer, and after 10-ish years of operation, your site still looks like it was hacked together by a business major playing around with Microsoft FrontPage.
Requiring ActiveX when selecting images to upload is patently ridiculous, particularly when my browser signature specifically says I’m coming from a Linux box.

c.activeXVersion = ‘1,0,3,48’;

You’ll be receiving a bill shortly for the 20 minutes I spent booting my Windows machine, moving images over to it, and recreating my auction from scratch.
Luv, me.

Life snapshot…

“Dad?”
“Yeah zach, what’s up?”
“I’m posting something in a forum, how do you make a link?”
(Dad pauses here, thinking scary thoughts about open forums, but willing to check it out…)
“What forum?”
“OneMoreLevel”
(Another pause to check it out – chats about online games. Okay, this seems innocuous enough…)
(details about how to make a PHPBB link in a forum post)
“Oh, that’s easy, thanks!”
“Enjoy!”
sakkura. My son. Am I ready for this? I mean, he’s already talking smack to other players 🙂 🙂 🙂 . Not sure if this should make me squee with glee or totally give me the heebee jeebees.

Mame Cabinets – Things learned thus far

Blk and FroggerWe’re about halfway through the whole Mame project hullaballoo, so, since I inflicted my Mame cabinet on Ubercon a week and a half ago, it’s really only fitting I take a few minutes to contemplate the lessons learned so far.

First and foremost, I have no regrets embarking on this whole rigamarole. It’s been a tremendous amount of work, but it’s work that’s resulted in something tactile. I can point to the cabinet and say “See that? I built that. And those folks gaming on it? Yep, they’re enjoying themselves because of my handiwork. Rock on.”

That’s not to say the path hasn’t been without it’s bumps and bruises. None of the decisions I’ve made so far are gruesome enough to regret, but it’s certainly time for a bit of reflection. Lets see what’s working, and what isn’t.

Works

Lets start things out on a positive note. What’s working?

  • Xmame
    Because I’m using an older version of MythTV on deathstar, I’m still using Xmame. In the retrogaming world, Xmame is a dinosaur. Most serious Linux-runners have moved on to SDL-mame, which is more up to date and has had some wonderful work done to it. Having said that, Xmame has behaved swimmingly for running my games. I will certainly migrate away from it to SDL mame soon, but for the time being, it’s working great.

  • I-Pac from Ultimarc
    Originally I was going to hack in the console controllers using USB-based gamepads modified for the pushbuttons and joysticks. But after thinking about it, using a $39 iPac keyboard encoder seemed to be by FAR the path of least pain. The board arrived, and was up and running in no time. In the basic configuration, it’s awesome (and they even have a USB version now. Double-bonus).

  • Plywood
    I had my misgivings about using raw plywood on the cabinet. However, it’s working out remarkably well. Cheap, easy to build with, quick to assemble. Once the entire cabinet is done, I’ll sand, paint, and finish the surfaces so they’re less rough on the skin, but all in all, I’m pretty happy.

  • Panel layout
    I was very nervous about this one. I came up with my own joystick / button panel layout, after looking at various ones online. It’s not a massive variation from standard 6-button + JS arrangements, but it was also not from any known template. Single player and dual player gameplay worked just fine, with the joysticks and buttons and other controls all working the way they should, and players being comfortable with where everything was.

Needs Improvement

Since the project is only halfway done, what’s really on my mind are the things that don’t work so well. So here’s my punchlist of stuff I want to work on…

  • deathstar
    This makes me sort of sad, but I have to really take it into account. deathstar has been my all-around mythtv / retrogaming box for several years now, and it’s showing it’s age. It’s a mere Athlon 1400, and the larger games were not running well on it. That, combined with it being a full size chassis (heavy!) means that there are better options for the brains of the box. A new machine is really needed

  • Mythgame
    This is the component in MythTV that is used for playing retrogames. In theory, it has a nice GUI interface that allows basic menu navigation, even using the joystick and buttons. In practice, it works VERY poorly. Keystrokes were misplaced, the menus were hard to navigate, and searching through large game lists was nigh on impossible. There are several other Linux front ends kicking around on the net, it’s time to explore the others.

  • 4 way Joysticks
    I picked up the standard el cheapo 4 way microswitch based joysticks off ebay. They’re.. okay. I can feel the springs already wearing out on the left hand controller (it now has ‘slop’ in the neutral position). I’ll need to replace them with 4 / 8 way joysticks with a restrictor plate at some point.

  • Cabinet stability
    If anything pointed out that an arcade cabinet needs to be stable, it’s schlepping the whole thing to a convention and back, and letting others bang on it. The cabinet needs to be SOLID. The current incarnation is getting there, but I’ll need to pay more attention to stability.

  • Monitor size
    I used a spare 15″ LCD monitor, sitting on the cabinet, for gameplay. While this was ‘okay’,it missed a lot of the arcade experience. A 19″ ‘high mounted’ display, which I’m planning for the upper part of the cabinet, is definitely going to be the way to go.

All in all? I’m reasonably happy with the progress. I can see where I need to improve things, and see where things are working. I’m still playing games on it and enjoying it, but I also want to improve and expand it. All good traits, I think.

It’s 8AM, and you are…listening…

… to rain.
This week has me down in New Jersey visiting my client. These visits are invariably very productive, very tiring, and very important in maintaining an even keel and a steady course on the work that’s being done. (I blame the rain for all the nautical references. Hopefully it doesn’t carry over into my drive to the office). The visit is pretty much a repeat of the other times I’ve been here. The seasons just keep changing, so sometimes it’s hot, sometimes it’s snowing, today, it’s rain.
One thing that has struck me is that I’m actually commuting to work. Up in the morning, do my morning stuff, pack up, drive to the office, do that stuff, then drive back to the hotel. It’s a short commute, only about 9 miles (I keep saying I’ll bike to the office some day, but haven’t yet), but it’s far more of a commute than I have when I’m at home. I’m still not sure about which one is better for me in the long run, but the variation lets me have perspective on it.
In a year, there’ll be a whole new living situation, so it’s not like we’re in a long term situation with the commute. There’s change-a-comin.

Zorching Memory Leaks. I Am Teh Stud

Tonight, I am Da Man.

It’s rare I get to sit down and see, so directly, a problem in the code I’m working on. In this case, while running at Ubercon the other weekend, I noticed that CONGO was showing every sign of a memory leak. After a while I’d get sluggish performance, and eventually I’d get an OutOfMemory error from the JVM. Didn’t look good.

This had me in somewhat of a panic, since Arisia is right around the corner, and I need the system stable and useable for the event. With the help of the wonderous tool that is JConsole, I was able to actually see the memory usage going up in the JVM as I worked with the server. There was definately a problem.

It turns out my hastily set up code to handle changes to my JDBC driver was not being handled correctly. Apparently with the old mm.mysql driver, SQL handles were automatically closed at the end of use. With the new Connector/J driver from MySQL, you had to explicitely issue a close() statement on any Statement, or the handle would never be freed. This was probably always the case, it was just my sloppy code and a twitch of the old driver that made it never come up.

Unfortunately, this necessitated changing just about every SQL call in the server, all 10,000 lines of it. It was long, painful, boring work. I had some help from blk, but it still took a good week of off-hour fiddling to finish the changes and do some basic regression tests.

Tonight, I made the last set of changes, did some basic runthroughs, and didn’t have a single crash. With someone trembling fingers, I started up JConsole again, connected to the application server, and started working with CONGO. Registrant lookups, reports, modifications, creations, subscriptions, convention detail editing – throughout it all, JConsole happily continued showing the normal ‘sawtooth’ pattern of memory usage. Things would get allocated, used, and then the garbage collector would come along and reap the memory.

Success! I had successfully searched for, found, and fixed a major memory leak that was persistent throughout the code.

For those insisting on the details, here’s a properly structured, Prepared, and appropriately exception-managed call to get a number from the database. (And, before I get abusive comments all over the place, the Exception handling here is VERY POOR, and will result in a clean result coming back from the method, even though the call may have crashed. I know, thank you, now go away).

private static int calcRegistered(int cid, String typeName) {
PreparedStatement p = null;
ResultSet rset = null;
String sql = "SELECT count(*) AS total FROM reg_state " +
"WHERE state_cid=? AND state_regtype=? " +
"AND state_registered=1";
int value = 0;
try {
p = cserver.Conn.prepareStatement(sql);
p.setInt(1,cid);
p.setString(2,typeName);
rset = p.executeQuery();
if (rset.next()) {
value = rset.getInt("total");
logger.debug("tcalcRegistered: count for conference '" + cid + "', type '" +
typeName + "' is --: " + value);
}
}
catch (Exception e) {
dumpException(e);
}
finally {
try { p.close(); }
catch (Exception e) { dumpException(e); }
}
return value;
}

I feel all geeklystudly.

Next is to start seriously hammering away at the buglist, and get a test environment set up so other CONGO users can test out the new Merge function against ‘real’ data. If all goes well, we’ll roll this version into production in time to run Arisia.

Oops :(

IMG_1468.JPGI have a lot of laserdiscs. Last count had it around 210. Since we moved almost 2 years ago, about half of these were stored in the basement in what I thought was a stable box.
Well, it wasn’t.
Apparently the box had shifted and moved around a lot, and ended up with the discs leaning over on one side, where they stayed for a year. The end result is I now have a dozen or so burrito shaped laserdiscs.
I’ve reconfigured the stack, and owing to the fact that laserdiscs weigh a helluva lot, I’ve placed the ‘bent’ discs interleaved at the bottom, and placed the rest on top of them. Hopefully this will restore some sort of flatness.
If I have to write off the bad discs, it won’t be the end of the world. Most are available now on DVD (and have the benefits thereof, like better resolution and added features and stuff), but I don’t like having to replace movies I already own.

Yawl gets a new face.




New Desktop

Originally uploaded by eidolon

Investing in hardware for my workspace is always hard, particularly when it could easily be interpreted as “Oh, that’s just for FUN.”

But with the price of LCD monitors dropping, it was time to take the plunge and replace my 17″ 1280×1024 monitor with a Dell 2001FP 19″ 1600×1200 version. Ebay helped me find one for just a hair under $200, and a few days later, here it is.

Gutsy on yawl was very easy to reconfigure, using the nvidia-settings tool to generate a new Xorg.conf file (it was ALMOST pointy clicky from beginning to end, the only thing I had to do manually was copy the Xorg.conf file into place.

I’m already comfortably settled into the idea I’ve increased my desktop area by about 30 percent, but occasionally I find myself wondering at all this great real estate.

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.