gazpacho

JavaOne 2008 Report, Part 4: Friday

I woke up Friday and decided to skip the final keynote address and remaining sessions. I had a raging headache and was anxious to get home. I did a little shopping for Mother's Day. Then I took the subway to the airport to see if I could catch an earlier flight. Unfortunately, I did not have luck and settled in for the four hour wait before my flight.

It was probably best that I did not good back to the convention center. I probably would have bought another book from the bookstore. Here is a list of books which I bought while at JavaOne:

  • Think Better by Tim Hurson
  • The Pragmatic Programmer by Andrew Hunt and David Thomas
  • Effective Java, 2nd Edition by Joshua Bloch
  • Prototype & Scriptaculous in Action by David Crane and Bear Bibeault with Tom Locke
Yesterday the headache returned. I spent most of the day taking it easy including a three hour nap. When I finally checked my email I saw this notice:

The JavaOne conference team has been notified by the San Francisco Department of Public Health about an identified outbreak of a virus in the San Francisco area. Testing is still underway to identify the specific virus in question, but they believe it to be the Norovirus, a common cause of the "stomach flu", which can cause temporary flu-like symptoms for up to 48 hours. Part of the San Francisco area impacted includes the Moscone Center, the site of the JavaOne conference which is being held this week. We are working with the appropriate San Francisco Department of Public Health and Moscone representatives to mitigate the impact this will have on the conference and steps are being taken overnight to disinfect the facility. We have not received any indication that the show should end early, so will have the full schedule of events on Friday as planned. We hope to see you then

I feel much better today. I am catching up on chores and preparing for my week. I am looking forward to discussing some of the interesting things I saw with coworkers and friends.

spacerPosted at 9:52 PM

JavaOne 2008 Report, Part 3: Thursday

Well folks, this is gonna be a short entry. Tomorrow is the last day of JavaOne. I need to pack up all of my stuff and swag in order to be check out tomorrow.

I dug the session on Nimbus. Vector-based UI components for a cross-platform look and feel just makes sense. The presenters showed off a nifty tool to design new vector-based components. Impressive stuff. I am anxious to download Java 6u10 and tinker with this. I am especially interested in reviving an old drum machine project I started writing in Gnome/GTK. I think I can utilize the customization available in Nimbus to make a custom, professional looking interface without the ugly hacks I had to use for GTK.

The Scala session made me want to puke. The presenter proudly proclaimed that the language is the next generation of Java and that it is everything that Java should be. I almost walked out when he said that they removed the "break/continue" mechanism in favor of "goto". WHAT?! I decided to stay for the rest of the session to give the presenter a chance to redeem my opinion of my language. No luck. I was not impressed. So friends, I flipped the bozo bit for Scala.

The Filthy Rich Client session was great. It really got me thinking. Last year I wrote an app that animates dots starting at the top of the screen and falling to the bottom. The problem is that I hit barrier where it would not run faster than 30 fps. At the beginning of the session they demonstrated bouncing balls app that ran at over 100 fps. They explained the issues with Swings timer thread. I am hopeful I can revisit the app and get it working at a respectable framerate.

The session on Unit Testing with Groovy gave me a bunch of ideas I plan to take back to work with me. I talked to some guys who commit to the Groovy project about how we can work about issues we have with testing singletons. They gave me an idea or two to try out.

The Java Posse guys gushed about Scala in their session. The session was fun but not great. It made me nearly regret my decision to skip Sun's After Dark party where the band Smash Mouth performed.

Overall it was the best day yet. I may not post the next blog entry until Saturday. I will be travelling tomorrow for over six hours and will be crossing two timezones. Calfornia was okay but will be happy to return to the familiarity of Illinois.

spacerPosted at 1:58 AM

JavaOne 2008 Report, Part 2: Wednesday

Ok, I just got back from the Sun Developer Network Party. I am going to make this short. My plan is to revisit these blog entries once Sun releases the videos and slides from the JavaOne sessions in the near future. Here's my brief recap of today's fun.

First of all, Scott Davis is a brilliant speaker. I highly recommend his Groovy: the Red Pill presentation. I missed this one at No Fluff, Just Stuff a few months ago. You will not look at the EXPANNNNNNNNDO-METACLASS the same way again.

The Struts 2 presentation flew over my head. I wasn't sure if it was my relative lack of experience with Struts 1 or the presenters lack of examples. When the speaker pronounced HTTP as "Haytch Tee Tee Pee" it pulled my mind out of any comprehension of any point that he attempted to be communicated. This session was a waste.

The OpenSocial Container presentation discussed a project named Shindig. One of the presenters started working on his Web 2.0 social network website in January and finished in April. Am I in the wrong business?

I cannot wait for the Compelling User Experience session to make it online. Nothing was sacred. The presenter threw stones at a lot of today's paradigms. I couldn't agree with him more!

The video games BOF introduced me to the javagaming.org forum.

The Groovy in a Cloud session got me to thinking about the benefit of deploying virtual servers much more quickly than it would take any corporation's purchasing department to acquire the equivalent harware.

The GWT and Comet session introduced me to the Grizzly Comet project which uses contrinauations to push data asynchoronously from the server to the client. Imagine an auction website where an auction's high bid is updated automatically on your web page without having to refresh the page. Who knew it was possible to suspend a browser's session?

The Groovy Builder session discussed making Domain Specific Languages (DSLs) with a part of the Groovy language with which I am not yet familiar.

Ok, friends, more later.. Off to do a bit of reading before turning in.

spacerPosted at 1:44 AM

JavaOne 2008 Report, Part 1: Tuesday

I made the trip out to San Francisco for JavaOne. The first day kicked off with a speech entitled Java + You. I came in late because, well, I had an issue finding the right conference center.. not Moscone West, not Moscone South, but Moscone NORTH, whew! I enjoyed the talk until they trotted out Neil Young, the ancient musician and liberal crackpot.

My first scheduled session was on Project Darkstar. The presenter covered Sun's massively-multiplayer system. In describing the server he mentioned the design goal on achieving low-latency using objects that sounded a lot like stateless session enterprise java beans (EJBs). In his demo he used assets from Bioware's Neverwinter Nights -- while that was cool it looked dated. I found it strange that the demo for a MMO was empty except for the player character.

The talk for Project Aura was better. This is an open source project that provides recommendations based on classifications. They pointed out the shortcomings of the traditional recommendation engines, specifically music recommendation systems. Their approach would improve on them by automatically classifying music using artificial intelligence. They also show why the recommendations are made. This would be an improvement over, say Amazon inexplicably recommending clean underwear when I look at a book on chaos theory.

Most sessions are a cattle call. Imagine a large nerd herd of hundreds of attendees congregated outside conference rooms waiting for the room to empty and the staff to let them in. Lunch was the worst crowd. Thankfully, the lunches were boxes and line moved quickly.

After lunch I attended a session on upcoming Java changes. There are interesting things coming. Here is what I managed to scribble down:

Multi-catch

try { // stuff } catch (X1, X2 e) { foo(); } catch (X3 e) { bar(); }
Safe Re-thow
try { // stuff } catch (final Throwable e) { logger.log(e); throw e; }
Switch on String
switch (value) { case "red": foo(); break; }
Modules
module org.netbeans.core; package org.netbeans.core.utils;
Annotations (JSR 308)
Adds annotations on generics List <@NonNull String> strings; Adds annotations to casts endRegex = (@NonNullPattern) endRegex;

I went to a session on Grails that was pretty similiar to the class I attended at No Fluff, Just Stuff a few months ago. Following that I went to a class on GWT where the only thing I picked up was that testing GWT classes in difficult. Then I ended the night with a session on writing plugins for Eclipse, NetBeans IDE and IDEA. The main takeaway from that session was that Eclipse uses plugins in SWT and everybody else uses Swing.

It has been a long day. I have classes tomorrow on Groovy, Struts 2, OpenSocial and Comet. So I'm off to bed to do a bit of reading before calling it a night.
spacerPosted at 12:56 PM

Groovy Credit Card Number Validation

Back in March I attended a software conference hosted in St. Louis called No Fluff, Just Stuff. The lectures introduced me to some cool new technology. It was small and intimate. I had an opportunity to speak to the instructors and conference organizer.

The classes I took covered these technologies: Ajax, Hibernate, Spring, Terracotta, Grails, Groovy and GWT

During one of Jeff Brown's Grails talks I heard him say that there is built-in validation of credit card numbers, but it is limited to just checking the size. It is possible to validate the value of the number using the Luhn Algorithm. So, the following is my implementation of Luhn validation written in Groovy and suitable for use in Grails.

class LuhnValidator { def isValidCreditCardNumber(number) { def sum = 0 def alternate = false number.reverse().each { value -> if (value =~ /\d/) { def n = value.toInteger() if (alternate) { n *= 2 if (n > 9) { n = n % 10 + 1 } } sum += n alternate = !alternate } } sum % 10 == 0 } }
spacerPosted at 9:16 PM

Improving Cell Phone Reception

I have Verizon. A coworker described how to improve cell phone reception.

The cell phone has a Preferred Roaming List (or PRL). This list tells your card which towers to look for when establishing connection. As new EVDO towers are installed, your PRL will become out of date because it won't know to hunt for these new towers.

From http://www.verizonwireless.com/b2c/howTo/prlHowTo.jsp

Updating Preferred Roaming List(PRL)

Verizon Wireless is constantly advancing its roaming technology to provide you with superior roaming capabilities. By updating your PRL every few weeks, you can be sure you have access to our enhancements. As a result you may experience:

* Longer battery life
* Fewer dropped or blocked calls
* Clear, crisp connections in more areas across the United States
* Ability to connect to the digital network in more parts of the country

Instructions for updating your PRL:

1. Power on your phone within any Verizon Wireless digital service area.
2. Dial *228 and then press SEND (this call is airtime free).
3. When prompted, press option 2 to update your phone's roaming capabilities
(the update may take up to 2 minutes).
4. Once completed, a confirmation message will appear to inform you that your phone has been re-programmed with the new PRL.

spacerPosted at 7:15 PM

Ode to the iPhone

This poem is dedicated to those who possess the iPhone and those who wish they did:

ODE TO THE IPHONE

Twinkling
All that glitters is not
A high-tech surrogate for
Something you cannot do without
This year
Who cares

No keys
Just use pointy fingers
Touch the screen wherever you wish
It will find your important contact
Last year
Who cares

Look there
It rotates quickly
And plays your tunes nicely
Web browser says Democrats win
Evil fools
Nobody cares

Cellphones
A computer and radio
Together in one small package
Is not magic technology
Learn more
I care

Our world
Does not spin around desire
It makes its trek past the red sun
Without the latest gadget
Not that
You care

spacerPosted at 1:29 PM

It's Elive

To update an earlier blog post I found out that Fraps installs a custom codec. In order to implement responsive video capture they don't have much time to apply compression. The resulting AVI files are massive. Their website recommends tmpgenc (Tsunami Mpeg Encoder), VirtualDub and Windows Movie Maker to compress the video files.

I tried out Cinerella and Enlightment using a LiveCD Linux distribution called Elive. Let me be polite. I was not impressed. I had to raise my eyebrows a sneaky tactic the distro owners decided to use to make money off of open source software. If you want the latest stable version, you have to donate money in order to download it over a decent server. If you choose to download it without donating money, then they send you to a slow server (5 kbps download speed!) that sometimes stalls. Dirty! I opted to download an unstable development version that was available on a mirror site in Indiana (200 kbps download).

spacerPosted at 10:55 PM

Dots Are Famous!

I decided to attempt to make a movie of a simple Java program I wrote and upload it to YouTube. Nutty, huh? I used a program called Fraps to capture video of the program in action. Fraps is relatively inexpensive and is a breeze to install and configure. So, I uploaded the resulting AVI file to YouTube. YouTube gave me a "processing" message and later gave a "that part of the site is down for maintenance". This is what kills me. My customers would blow a fuse if their website showed a maintenance message instead of serving their needs. Imagine visiting Google only to see a terse message about the site being down.

Digg, YouTube and Myspace are notorious for making their sites inaccessible due to maintenance. How many billions of dollars are these sites worth? Can't they hire engineers who are smart enough to handle redundancy and fail-over while accomplishing maintenance? *cough* Hey, corporate owners, if you need some assistance, you can always examine my resume.

The movie failed to upload due to an issue with an unsupported codec. So I spent some time on the site reading the help pages. I learned that for best results I should resize the video to 320x240. So, I fired up Microsoft Movie Maker. In addition to resizing the video I added a title screen, credits and some music my brother Kevin gave me sometime last year. I saved it as a WMV file and uploaded it to YouTube.

This time the file was successfully uploaded. Here is the end result. In this video I am clicking on the screen spawning dots. The dots are affected by gravity and fall to the bottom of the screen. I hope you enjoy the cheese factor.

spacerPosted at 9:26 PM

Hotlinkers for Reagan

Hotlinking is the act of displaying an unauthorized image, video or other file on your own web page when is stored on another server, esp. without asking permission from the owner. It amounts to bandwidth theft from the hosting server.

My personal domain, gazpacho.net, was once the victim of a hotlinker. Somebody used an image on my site for his avatar in a forum hosted on a machine in Italy. I would not have minded if he made his own copy. But I didn't like seeing the traffic from his forum posts in my web log.

So I decided to teach him a lesson. I modified the .htaccess file on my web server to include the following lines:

RewriteEngine On
# Teach an Italian hotlinker a lesson by replacing our image with another
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} ^http://(www\.).*it/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|bmp)$ blog/archives/images/reaganrocks.jpg [L,NC]

Let me explain what the above entries do. It tells the web server that for any web server with an .it (Italy) domain that tries to link directly to any GIF, JPG, PNG or BMP file give the reaganrocks.jpg file instead.

So instead of the Black Label Society image the forum poster wanted, he saw an image of the greatest American president ever.

spacerPosted at 7:44 PM

Open Office Owns

If you use OpenOffice, I highly recommend upgrading to version 2.2. Autokerning is now enabled by default. It makes a noticeable difference in making documents easier on the eyes.

I tried out the Folding@Home client on my Playstation 3. It is interesting to watch the ball-n-stick molecule model twist in real-time. In the background is a rotating Earth with points of lights around cities. The program caused my PS3 to run hot. The fan was so loud I had difficulty getting to sleep. I decided to move the PS3 out of its shelf in the entertainment center and place it on top where it can get better air circulation.

I believe the trouble with my Linux box is the Ethernet adapter card. Since NewEgg didn't have the Intel card I wanted I decided to get a Trendnet TEG-PCITXR gigabit Ethernet card. It is supposed to have good Linux support. Does anybody have experience with this card?

I am helping to write the Spycraft LARP (Live Action Role-playing) game for DieCon 7. I set up a Wiki for the all of the authors to use. I have spent the better part of the past week creating pages for last year's characters and brainstorming pages for this year's game. I'm a little disappointed that the organizers don't have more of a sense of urgency since the game is close to eight weeks away. Last week I changed my plans in order to get together with the others. I didn't hear anything so I contacted one of them who told me the meeting wasn't going to happen. Frustrating! Ah well, I gotta tell myself I am only volunteering my help. If I was in charge of getting the game together, I would do things differently.

spacerPosted at 8:14 PM

ATI Says No Devices Found

My buddy Tom E. has been experimenting with writing a X-windows framework in C++. He wanted me to look over his source code and get it running. This motivated me to get X Windows running again my Linux box. It has been many distributions and kernels ago since I've run X. Mostly my Linux box acts as a server. I secure shell (ssh) into it whenever I need to do anything.

So I downloaded the latest version of the ATI proprietary drivers. It seems to install successfully but X fails to start. I see the following message: "No devices found". Grr. After tweaking my xorg.conf with no success I decided to get X running with the generic VGA drivers. This time it failed with a message about being unable to load the default fixed font.

I poured over online forums discussions. Eventually I discovered that between distributions of Fedora, they decided to move files around including the fonts. They now live in /usr/share/X11/fonts. I modify the xorg.conf file again as I shake my fist at Fedora. Finally I had success!

The issue with the ATI driver bugged me. I used the lspci to determine what kind of Radeon card I had in my PC.

$ lspci | fgrep -i radeon
It told me I had a Radeon 8500 LE. Oh, no wonder! According to the ATI drivers page they no longer support the Radeon 8500 as version 8.28.8. I was trying to use the latest version, 8.35.5. So it turns out "No devices found" really means "We don't support your crusty old video card". Fortunately I remembered I had a Radeon 9800 Pro as the result of a recent upgrade. I installed the card and rebooted. X now works in all of its accelerated glory. Hurrah!

spacerPosted at 1:41 AM

Fedora Is Not Yummy

My Fedora Linux installation does not update itself automatically because of a bug that has been documented for at least five months. I could disable the yum-updatesd script and hack a cron script to manually do a yum update daily. But I am a little sour. The distribution maintainers have an apparent lack of interest in fixing the update mechanism at the heart of Fedora. It does not help that yum is written in Python, a language that triggers my gag reflex.

I feel the pain that Eric Raymond, a high profile Linux developer, wrote about in his public trashing of Fedora. After 12 years as a faithful Red Hat/Fedora user I am seriously considering switching to the next version of Ubuntu which is due out on April 19th.

Also, R.I.P. John Backus and thanks for BNF

spacerPosted at 2:57 PM

The Engineer Gets a Week

Our break room at work had some yummy baked goods today: a giant cookie, some doughnuts and a cake that read "Thank you Engineers of Lockheed Martin". Our site manager sent an email that mentioned National Engineers Week and thanked us for our contributions and support. w00t! So to all my fellow software engineers out there: Happy Engineers Week!

I decided to troubleshoot my dead Linux box last night. It booted up right away! It lives! I stayed up late installing over 200 updated files. So far it seems to be running well. I plan to continue to watch it and replace it sometime in the near future.

When my mail software came back online, I caught up on my email and realized I missed a memorial service for my best friend's mother this past weekend. Words fail to describe how terrible I feel. He drove to my home town to pay respects when my father passed away last year. He's probably disappointed; I'm a bad friend right now. I'll give him a call tonight to try to make amends. I'll see if he wants to go out for drinks and will make a generous donation to a charity in his mother's name.

UPDATE: I took my friend out for drinks. We had a great time. I'm going to give a donation to the American Cancer Society.

spacerPosted at 4:07 PM

Atime Linux Performance Tweak

I saw the following nugget of information on the Kernel Newbies website:

'Atime' is the 'Access time' field of a file: When a process reads a file, its atime is updated. Disabling atime updates, with the 'noatime' mount flag, is probably the most used performance tweak that linux administrators use: An active server is continually reading files, generating lots of atime updates, which translate to metadata updates that the filesystem must write to disk. And writing those updates can seriously damage your performance. Believe it or not, a busy server like kernel.org (vsftpd + apache workload) cut their load average in half just by mounting their filesystems with 'noatime'.
spacerPosted at 12:06 AM

Underrated Items of 2006

It is time for my third annual list of underrated items. The past year, 2006, once again gave us its share of hype and hero worship. This is my list of underrated items that I feel deserve some exposure.

Last year I mentioned a gazpacho dot net podcast netcast. I am still toying with the idea. I am especially inspired to produce something light-hearted and funny.

spacerPosted at 10:10 PM

FC6 Panic

I installed the latest Red Hat Linux distribution, Fedora Core 6. The kernel paniced on me! This causes all of the Windows boxes to not see the Internet since the Linux box hosts my DHCP server. Grr, my Internet access may be spotty for a few days until I determine what I want to do.

spacerPosted at 4:27 PM

What the Wiki

whiteshirtMonday night I augmented the Wikipedia entry for Kobolds Ate My Baby (KAMB) to mention the LARP that Atomic Squash ran at Archon 30. I also added an entry for Atomic Squash. My writing was reverted so fast that my head is still spinning. The wiki admins decided that my KAMB entry was "a vanity post" and that Atomic Squash did not rise to the level of a notable organization verified by reliable sources. I am angry and hugely disappointed.

I had lunch with my boss Tuesday. I was pleased that she promised to find me a teammate for my projects. I have been fortunate to work with some bright and talented coworkers. Other managers, of course, have recognized my teammate's accomplishments and have lured them away with promises of exciting research projects and their own teams to lead. I couldn't be happier for their accomplishments, but it represents a brain drain from which I have to recover.

My buddy Raeliste sent me a Halloween card. It really lifted my spirits! After my birthday plans fell through last week, I spent the night dining alone. I have been a little down since then. Getting a card from a lovely woman boosted my self-esteem and libido.

Lucy nee Annie sent me a video of herself clucking like a chicken. It started with a meme that linked to page that would sloganize your name. My slogan: What would you do for a Tom? She responded that she'd cluck like a chicken. I followed up with a message telling her I'd like to see that. She sent me a video a little later. Too funny!

Mozilla Firefox 2.0 is love. Built-in crash recovery and spell checking is a solid improvement!

spacerPosted at 4:25 PM

Flashed My Firmware

I flashed my firmware. I am not ashamed. I downloaded new firmware for my wireless router, a Linksys WRT54G. I choose Thibor's HyperWRT. You see the Linksys firmware is based on Linux and was open sourced. A couple programmers have extended the code with new features. Among some of them are the ability to secure shell (SSH) to the router, have start-up scripts, increase the transmit power, overclock the processor, set QOS for Battlefield 2 and filter port scans. I flashed the firmware less than an hour ago. So far I am pleased with the performance. I plan to experiment and monitor its performance over the next week.

spacerPosted at 10:02 PM

You Are My Deathstar

Hello friends. It has been a while since I have made a sizable blog entry. Back on Labor Day my mother came to visit. I have mentioned before that I lost my father earlier this year. Mom brought an old PC from my late father's business. I plan to take the hard drives out and browse through them for anything important. She also brought some JRR Tolkien books I had bought Dad as Christmas gifts. Somehow I did not expect to see them again. You never give a gift expecting it to show up again on your kitchen table. I have an idea. Since I was a teenager the first time I read and enjoyed the Hobbit, I want to take the books to Archon and give them to a teenager there. It feels like the right thing to do.

Mom and I went to St Louis Bread Company. We tried their Crispani pizza. I had the Sausage and Apple. Mom had the Three Cheese. All in all they were pretty good. I'm grateful too that we didn't have to sit in the waiting area of a restaurant.

Last weekend I had dinner with a friend at Plaza Frontenac. It was nice to catch up. Funny thing is I used drive by that mall every weekend for three months. I never stopped by to check out what it had to offer.

I have a personals profile on Yahoo! Personals. So far the only date I have managed was with a woman I already knew. I just do not get responses from women in which I am interested. I have responded to women in whom I am not even interested. I wanted to see if they would respond. Nothing is more like a Deathstar to my ego than to get the virtual cold shoulder. I hear folks say that they have had luck. But, sadly, my experience has been different.

Well, I got fed up with sub-par performance of my Linksys WRT54G wireless router. I bought a replacement in case I wanted to hack the ROM on my current router and bricked it by accident. Fortunately, that was not necessary. I reset it to its defaults and tweaked parameters. I changed settings one at a time and examined performance changes. I learned the following:

  • Enabling burst mode is not good
  • Changing the channel from 6 (the default) to 11 helped considerably
  • Anytime a 802.11b device uses the router the performance of my 802.11g devices drop
  • Increasing the value of beacon interval to 360 milliseconds improved performance on my laptop two rooms away
I upgraded the firmware on my Playstation Portable (PSP) to version 2.81. This allows me to download and play game demos. I downloaded the Loco Roco Demo from Sony's site. It is a cute little game. You control a gelatinous blob by tilting the screen left and right using the shoulder buttons. Pressing both buttons at once bumps the screen causing your blob to bounce. The goal is to collect fruity looking widgets while avoiding the spiky looking whatzits. It is very entertaining but can be frustrating. The graphics are brightly colored and interesting. The soundtrack is a hauntingly sweet Japanese tune.

Black Label Society recently released their new CD entitled Shot to H-ll. Amid a collection of mellow meandering songs with aimless lyrics these songs stand out:

  • Concrete Jungle - a grinding metal song. this is where BLS shines
  • Blacked Out World - another heavy song. a little softer but still a decent tune with some good riffs
Saw "American History X" last night. I noticed that Ethan Suplee, the actor that plays Earl's brother Randy in the sitcom "My Name is Earl", played a skinhead in the movie. The dude has a huge range of acting ability.

You may have had some problems accessing gazpacho.net lately. Dreamhost, my web hosting provider, has been suffering network issues for a number of weeks now. The past couple of days they struggled with router issues that resulted in intermittent loss of access for my web friends. Just today they replaced the router and promised that things are better. Here's hoping.

I have toyed with the idea of producing a podcast. I'm thinking about doing something funny. I am considering spoofing commercials, mocking liberal politicians and so-called public radio, doing man-on-the-street interviews with America on current events, giving treatment to ridiculous social mores and perhaps producing an episodic radio play. Are there any female friends who want to lend voice talent? gratis? I'll buy pizza.

spacerPosted at 1:33 AM

Krugle Bungle

Krugle, the open source software engine, went live on June 14th. In spite of me submitting bug reports several times during its beta, the developers have chosen not to fix a fatal flaw. Krugle does not behave well with tabbed browsers! If you try to open a link in a tab, it will just give you an empty page. They insist instead on opening a new "tab" on the current window. This is counter-intuitive and frustating. Hello! Has any Krugle people ever tried a browser other than Microsoft Internet Explorer 6.0? Mozilla and Firefox have tabbed browsing. Microsoft plays catch-up with Internet Explorer 7.0 when it adds tabbed browsing. If you are looking for code, skip Krugle.

spacerPosted at 6:27 PM

Warming Up the Brain Farm

Sock PuppetMy badge for Gen Con Indy arrived by mail today! There are less than thirty days until the con. Today a coworker told me, "I heard you're taking a vacation soon." Indeed.

I'm giving a training class of web services today. They want record the lesson to video so that employees can watch it over the company intranet. Does that make me famous? I threatened to present the slides through a socket puppet. Heh. Sounds like something that would end up on YouTube. Too bad the material is proprietary.

I can't sleep.

spacerPosted at 5:12 AM

Why I DreamHost

When Tom Joined a StartupI use DreamHost to host my web pages. More than one tech-saavy friend has been suprised that I use a web hosting provider instead of putting the pages on a computer I maintain. I guess I look at it as outsourcing. I pay a reasonable fee for a service.

Here are things that a web hosting service takes care for me:

  1. Hardware upgrades
  2. Configuring server software
  3. Security updates to software
  4. Contacting the upstream provider during DOS attacks
  5. Monitoring system load
  6. Monitoring disk usage
  7. Ensuring 24/7 availability
  8. Failover in the case of power failure
  9. Managing email addresses
  10. Managing DNS records

spacerPosted at 5:01 PM

Computers Dream of Strawberries

When Tom Joined a StartupComputer Scientist Alan Turing in his paper entitled "Computing Machinery and Intelligence" postulated that computers will never be considered intelligent machines. They are defined by what they cannot do. As an example he seemed confident that computers can never be taught to enjoy strawberries and cream. He lists the following things computer can never do:
Be kind, resourceful, beautiful, friendly, have initiative, have a sense of humor, tell right from wrong, make mistakes, fall in love, enjoy strawberries and cream, make someone fall in love with it, learn from experience, use words properly, be the subject of its own thought, have as much diversity of behavior as man, do something really new
I believe that computers can be programmed to think. They just do not think the same way humans do. We already know that machines called planes can fly. Observe that planes do not fly the same way that birds do.

Can computers dream of strawberries? No, they cannot even enjoy them. Yet, they can approve mortgage applications, predict the weather and keep the brakes on cars from locking. I see promise in more sophisticated artificial intelligence. We should not limit ourselves by assumptions about what computers cannot do.

spacerPosted at 3:25 PM

A Perfect Disk

I found a good disk defragmentation program for Windows XP named PerfectDisk.

Let me explain what a defragger does. As you create and remove files in Windows, gaps can appear in the "map" the operating system keeps of the disk drive. This causes the pieces of your files to get stewn all over the drive. Consequently, the drive spends more time seeking those pieces when you load a file. This translates to longer load times. As a result Windows feels sluggish and unresponsive. To be fair Microsoft does include a defragger. But comparing it to PerfectDisk is like comparing a bicycle to a Cadillac.

I downloaded the trial version of PerfectDisk and ran it. I noticed a marked improvement right away. Even though I had faithfully defragged my disk using Window's defragger, PerfectDisk made even more improvements. It reordered the files based on how frequently I used them, consolidated more free space and even defragged my system files in offline mode -- something Windows does not offer.

In short I'm a believer. I bought two licenses, one for my PC and one for my notebook. If you're interested in improving Windows performance, I recommend you download and try the free trial version of PerfectDisk.

spacerPosted at 8:09 AM

Blu-ray Java Games

Java Duke. Used with permission.
Duke, the Java mascot.
Used with permission.
Lately, the Java programming language has been a popular choice for web applications and enterprise level software. But it may soon attract the attention of homebrew game programmers. Java was accepted as part of the official standard for Blu-ray content authoring. This means that every Blu-ray device, including the Sony Playstation 3, will support Java. According to a Simon Morris blog entry enterprising game programmers may be able to write some Java ME code, burn a disc and play the creation on their HDTV. We shall see.
spacerPosted at 4:01 PM

Devil's Day

Today is 06/06/06. That makes it "6-6-6", or 666, which is the Mark of the Beast. Folks are doing fun things today like releasing a movie about a demon child. Oh, the delicious Ann Coulter is releasing "Godless", her latest tome on the stupidness that is today's liberalism.

I am gonna have a little fun, too. Check out the devilishly funny System Administrator Song from Three Dead Trolls in a Baggie


spacerPosted at 8:41 PM

Slide Rules, Uhm, Rule!

This month Scientific American has an article on the slide rule. It seems the term "computer" user to refer to humans who spent their time calculating numbers. If you call yourself a nerd and have never taken the time to fool around with a slide rule or an abacus, then you aren't really a nerd. Learning to use one of these analog calculating devices will help you appreciate the beauty of number theory and realize the importance of estimation and verification.

They have plans on how to construct a slide rule.

spacerPosted at 7:41 PM

Security Testing

Tom in a Black ShirtSecurity testing is more than doing a port scan. Read the bug reports for the operating system and development software. Are you vulnerable to cross-scripting scripting? http request smuggling? Think about the people involved in operating and maintaining the software. Are they vulnerable to social engineering? Secure design documents. Shred anything that you don't plan to archive and that contains proprietary information about your software.

This concludes the week of testing topics. Do not be shy to tell me what you think.

spacerPosted at 7:00 AM

Operational Validation Testing

Crusher Model ViewerOperational validation testing, or assessment testing, is testing that occurs on the operational system. Often the other testing is done with old (but known) data. Operational testing occurs with current, live data. Sometimes the users change their behavior and send data in a new and unexpected way. It is important to test that software handles live data correctly.

Testing week concludes tomorrow with the topic of security testing.

spacerPosted at 7:00 AM

Better Living Through Technology

I read in a press release that Lockheed Martin (LM) has developed counter-insurgency (COIN) surveillance technology based on the idea that insurgents behave like street gangs. Chicago has been using a technology named I-CLEAR (Illinois Citizen Law Enforcement Analysis and Reporting) on a daily basis to track crime trends and check criminal backgrounds of wanted offenders. The technology has been expanded by the military to protect U.S. troops and Iraqis from homicide bombers and improvised explosive devices (IEDs). How cool is that?

spacerPosted at 1:47 PM

Performance Testing

In the Kitchen with TomPerformance testing, or load testing, investigates how well your software system performs under load. Your software may behave differently when there is one user and when there are fifty simultaneous users. I am loath to admit that I worked on a system that locked up when there were five simultaneous users. Hey, it wasn't my design!

The point is that some errors only manifest themselves when a load is applied to the system. This testing finds things such as deadlock, memory leaks and invalid use of such things as shared memory, semaphores and threads. Any change that could adversely affect performance should be tested.

This week of testing topics continues tomorrow with my discussion of operational validation testing. Don't miss it!

spacerPosted at 7:00 AM

Verification Testing

New Orleans HurricaneVerification testing, or requirements testing, is testing to make sure the software meets the project's requirements. This testing is usually done by a third party, i.e. not the developer. Many companies have a dedicated test team for this function.

If you work with an independent tester, be sure to make them a part of the project from the being. This includes design meetings. Their job is to look at the requirements and figure out how to test them. Take the time to explain your design and development to your test engineer. Do not focus so much on the coding that you neglect your team.

Speaking of requirements, the only hurricanes New Orleans requires are the mixed drinks. Don't ya think?

Tomorrow I plan to discuss performance testing.

spacerPosted at 7:00 AM

Integration Testing

Bat CarIntegration testing, or end-to-end testing, tests how well software components integrate. For large projects there may be several different components that are written by different people or even teams. There is a potential for a breakdown in communcation. For example one component may feed another component by placing a value on a database table.

While unit testing is focused on source code modules, integration testing is concerned about the system as a whole. In this testing data may be fed into the system to watch how it behaves when it reaches your source code and, in turn, how your code affects other components.

It is important to understand the system architecture as whole. Write a formal plan that describes two things: 1) what you plan to test and 2) what you expect the results to be. Document any results that differ from your expected results. They should either be fixed or explained.

Holy Batcars! Don't miss tomorrow's blog entry when I will discuss verification testing. Boffo!

spacerPosted at 7:00 AM

Unit Testing

Wall Drug BunnyUnit testing is what software developers do to check each source code module and its methods. This testing checks invalid values being passed in parameters, makes sure errors and exceptions are handled correctly and ensures code cleans up after itself.

The closest I came to learning testing in college was unit testing. Of course I did not take a disciplined approach back then. No unit test plan was written, results were not captured and defects were not documented. Some may argue that documentation is boring and useless. But I have come in after unit testing and taken over projects in my career. Believe me you can have more confidence in the testing if the developers have a disciplined mind and take the time to document their unit testing.

Come back tomorrow when I will discuss integration testing. The bunny knows where you live.

spacerPosted at 7:00 AM

Fundamentals of Software Testing

This coming weeking I plan to discuss various topics in software testing. Today I am going to cover the fundamentals. Unfortunately, I do not recall formal testing being taught in college. My experience has come from on-the-job lessons learned.

To start with you should have at least three classes of servers. Your company and budget may be small. In that case the development and staging server could potentially share the same box.

TYPES OF SERVERS

  • Development Servers
  • Staging Servers
  • Production Servers

A development server is a server on which code is developed. Once development is completed, then it is installed on a staging server. A staging server should match the production server as closely as possible. This includes, the same version of operating system, the same software and the same configuration. The staging server is your last chance to discuss bugs before it hits the production server. The production server is the server that runs your code live. It is what your customer uses.

By seperating the servers in this way you can test on the staging server and develop on the development server. This is particularly useful if the test takes a long time. The developers can start working on bug fixes even before all of the tests complete.

Stayed tuned for tomorrow's topic: Unit Testing

spacerPosted at 1:29 PM

Krugle and the Microsofties

There is an interesting project that aims to be the google of freely available source code. I have high hopes for krugle. It is a search engine that is smart about how source code is organized. Instead of just treating code just like lines of text, krugle organizes it into projects and displays it with syntax highlighting. Right now the site is in closed beta. I cannot wait to try it live.

Microsoft Research scientists say that schools and colleges are not training the next generation of scientists with the necessary computer skills. Hey Microsoft, how about you give us the next version of the Windows operating system before you judge? The last Microsoft Windows release was Windows XP in 2001! Computer journalists initially forecasted the next version in 2003. But after a redesign, streamlining planned features and a recent restructuring, we can look forward to seeing Windows Vista sometime next year.

spacerPosted at 7:00 AM

Disaster Recovery For Technology

Happy HourOne of my first tasks when I joined the staff of the U.S. District Court was to write a disaster recovery plan for the IT department. While everyone knows the importance of backups (right? RIGHT?), not everybody considers the importance of establishing offsite backups.

Offsite backups are critical for disaster recovery. You will need them in the event a disaster causes physical damage to your computers.

Things have changed since I wrote that first disaster recovery plan. Nowadays renting space on a managed Internet server is cheaper than tape backups. Take a look at file hosting providers and online backup and recovery services.

spacerPosted at 7:00 AM

Tangled Brier of Dependencies

Tangled WiresWhen dealing with project schedules, a dependency occurs when one task must complete before the next one can begin. Ideally you want to minimize the impact of dependencies on your schedule. One method is to schedule many tasks in parallel. If a developer is waiting for another task to complete, the schedule can give another task on which she can work.

Joel on Software says that dependencies are so obvious that he thinks that they should not be tracked. I agree that they can appear obvious to experienced project managers. But project managers are not the only people to use schedules. A new employee may want to use your schedule as a basis on which to estimate their schedule. Remember that your "customer" can also include your team and your company.

So, identify dependencies, document them and manage them with parallelism. Your project and your customer will benefit.

spacerPosted at 7:00 AM

More Choice, New Hope

The FamilyLets face it. We are all different. We have different tastes and like different things. Wouldn't it make sense that having choices would better please more people? In a recent article in the Linux Journal entitled "Separation of Church and Choice" the author made a case that choice alone is not a good reason to create software. While his article is churlish and bashes religion, it did make me think of an interesting question: Are too many choices in software bad?

The short answer is, of course not! I snicker when I hear about the supposed "tyranny of choice". Competition is good. The fact is that the strong will survive. The weak will adapt or find a small niche of supporters.

Having said that I see a case for cutting through the clutter. If you put together an integrated software system and plan to support it, then you will limit the number of supported choices. This makes fixing problems manageable. Also, provide a help system, e.g. a software wizard, to guide novice users by recommending common choices. It will keep them from becoming overwhelmed with new software.

Now, who wants some pie? What kind of pie?

spacerPosted at 7:00 AM

SQL in Baghdad

This made my night. I received this email just minutes ago. At first I thought it was junk email. But I found out it is an unsolicited job offer. Any takers?


Subject: SQL in Baghdad
Date: Tue, 21 Mar 2006 21:16:43 -0800

Tom,

We need a senior MSSQL developer with a secret clearance on our development team at Camp Victory in Baghdad. Would you know someone who might be interested in such an assignment?

spacerPosted at 11:23 PM

Coding Standards Give Software Quality

Nothing Good on TVHow do you measure the quality of software? What distinguishes good source code from bad? Coding standards measure software quality.

Well-written coding standards define naming conventions. They also describe how comments document code. They discuss the layout of source code modules. They forbid the use of goto statements and self-modifying code. They may discuss the management of dependecies. In general coding standards draw on developer experience to produce guidelines that make code functional, readable and maintainable.

Your organization may bristle at the idea of a formal coding standards document. A coding checklist may suffice in its place. This gives guidance to the developer and may give a good discussion point for a peer review.

Speaking of quality, why isn't there anything good on TV?

spacerPosted at 7:00 AM

When Web Applications Want a State

Prarie Dog from South DakotaOne of the lovely things about the Web is that you can traverse pages in any order you like. Sometimes it is necessary to remember information between pages. Think about Amazon.com's shopping cart. As you find items you like, you can add them to the shopping cart. When you are ready to check out, the items selected are displayed. In order to remember information as you navigate between pages, a web application has to maintain 'state'. In computer geek terms we say that the shopping cart application is stateful.

In order to remember your shopping cart items the application uses a server provided construct called a session. A session persists for a specified period of time across multiple connections and page requests from the same client. Using the session and a database we can store, retrieve and associate session data with a given user ID.

One mistake to maintain state is to use hidden form fields. This is a security risk open to an exploit known as cross-site scripting. It is much better to store such values on a database instead. You can use the session id as a key field. On subsequent pages the value can be looked up.

Another mistake is to try to maintain state by trying to persist data in objects declared in servlet code. This breaks down when there are multiple users. These objects are not thread-safe. That is, one user's data can corrupt another user's data.

So a good way to implement state in a web application is to use a database in conjunction with the session. By avoiding some common mistakes you can protect your website.

spacerPosted at 7:00 AM

Plan Multiple Phases

Wire Dog SculptureIt has been my experience that short-term projects with a small team are the most rewarding way to produce software. Long running projects tend to suffer team turnover and burnout. A large team introduces new issues such a potential breakdown in communication.

Unfortunately not every project can fit inside of a three or six month schedule. It may be necessary to divide a project into phases. The purpose of each phase would be to fit into a short-term schedule.

The customer may be enthused by early versions of the software and may want to add new features. Also, the engineers may want to write geeky stuff that could help the project but whose scope is outside that of the project requirements. I recommend that you avoid this feature and requirements creep. Track the requests and assign them to later phases.

By focusing on short-term projects your customer will appreciate the quick turnaround of new software releases. Your team can take pride in their accomplishments. A successful project release will help motivate them as they start the next phase of the project.

spacerPosted at 7:00 AM

Rocking the KLOC

Tom's HandManagement might want to measure how productive their computer professionals are. One way to determine this is to count the lines of code (LOC) that have been produced. The term KLOC means 'a thousand lines of code'. The thinking is that the more KLOC written, the more productive the team is. Lets take a moment to examine this more closely.

Do comments count toward the KLOC count? If not, why do you wish to penalize programmers for documenting their work? If yes, is a developer who writes a two hundred lines of comments accomplishing more than a coder who wrote fifty lines of code?

It may seem counterintuitive, but a programmer who writes fewer KLOC may actually be good for a project. Writing good software is a matter of managing complexity. An experienced developer will identify code that does the same work and will refactor the code to eliminate redundancy. So, eliminating lines of code is actually a good thing for a project. It helps reduce complexity which improves the time it takes to make code fixes.

There are better ways by which to measure productivity. One such method is to measure project hours. Project tasks are written down in a schedule called a work breakdown structure. Then an hour estimate is assigned to each task. Before a project starts the developers review the schedule and make any adjustments. Then developer productivity can be measured against how closely they follow the schedule.

Onions to the KLOC, orchids to project hours! Agree? Disagree? I'd love to hear about it.

spacerPosted at 7:38 AM

Version Control Saves Sanity

Tom's BookshelvesSometimes when you change code to fix a problem, a new error is uncovered. Sometimes the error was introduced by your fix. Other times the error existed but was masked by another error. When the error is found, you will want to compare the latest version of source code against old versions to see what has changed. A version control tool is invaluable for this task because it keeps track of the all versions of files.

Without version control two coders may attempt to change the same file. Changes can get lost. One coder might save his work over another coder's work thus clobbering her changes. Some types of version control software work as a library. That is, they allow only one coder to check out and change a file at a time. Other software permits multiple coders to each work on private copies of source code and merges their changes when the code is checked in.

Team members can easily update their copies of all the project's files to the current versions. Without version control software this process can be time consuming and tricky.

If you mess up code badly, version control software can revert any file to a previous version. This frees developers to try bold, daring ideas.

Version control software can allow projects to fork off the main baseline into seperate branches. In fact multiple projects can each work on seperate branches of source code. Once a project is completed its branch can be merged back into the main baseline.

Integrating version control software with defect tracking software gives a powerful tool to maintain projects. You can use identification numbers assigned by the defect tracking tool to identify code changes. Then it is possible to examine of the history of file changes to see that bugs were fixed.

I have been amazed by the number of places that attempt to write software without version control software. It is not strictly necessary to have a version control tool in order to write software. But I would not try to work on a project without such a tool.

spacerPosted at 12:29 PM

Code Comments That Work

Tom Being SillyDocument your code. This is done by inserting comments. The computer ignores them but they are read by other programmers. Almost all serious programming languages allow comments. However, not everyone agrees on how many comments to write and what they should contain.

A common practice I have seen is to write program prologues. These are a collection of comments found at the very beginning of a source code module. Usually it documents: a copyright notice, the source code module name, a description, the date created, the author's name and the revision history.

Each method can also have a prologue that documents: the method name, a description, the parameters and the return type. I have heard it said that these comments are not necessary since code is self-commenting. The argument goes that if the author chooses a descriptive name for a method and its parameters, then no comments are necessary. In practice this is never true. Don't be that lazy and arrogant developer who needs a swift kick in the posterior.

It is possible to go overboard and document too much. The problem here is that as code changes you now have an additional task of maintaining the comments. A good rule of thumb is:

Comments should document the "why" not the "how"
For example if the developer choose to implement a splay tree he should not document the fact that it is a splay tree. Why? Because another developer may decide that a red-black tree performs better and replace the original implementation. Now the comment has to change, too. It is better to document things like hacks and decisions that maintaining developers should notice. For example, if there is a bug in the third party library you use to format a date, a workaround may be developed to fix it. A comment should be written to document the fact that the code has been written to work around the problem.

Remember that comments are written for humans. Be aware that other developers read them. Do you really want them to remember you as a foul mouthed crank? Think about that before vent your frustrations in your code comments. Just a thought.

spacerPosted at 4:37 PM

Can Programming Be Art?

Tom Expresses HimselfI was thinking about the whiny outburst of former Winamp programmer Justin Frankel a few years ago. He started Nullsoft, made Winamp and then sold it to America Online (AOL) for $86 million. Then the renegade developer released a piece of file sharing software that was embarassing in light of the proposed AOL and Time Warner merger. When AOL did the corporately responsible thing by blocking the software. Frankel threw a fit. In his blog entry he states: "For me, coding is a form of self-expression" and "The company controls the most effective means of self-expression I have". Boo hoo, poor millionaire! He did not get much sympathy from us professional developers.

So, I pondered these questions: Is coding really a form of self-expression? Can software engineers express themselves in code? Can programming be considered art?

Let me clear us something. Coding, or programming, is only one-fifth of the complete software engineering process. All of the steps are: design, programming, documenting, testing and maintaining.

I like to compare software engineering to building a car. Is car building art? The process of assembling a car can hardly be considered a form of self-expression.

There are certainly cars that people think are beautiful. But mechanics do not sit around with stacks of auto parts and try to make a Mustang. There usually is a design first. Also, most cars are safety tested. I think it is irresponsible to release software without testing it thoroughly. Why aren't more software companies held responsible for the financial impacts that their buggy products cause? How is it we have come to expect computer software to fail? That is a discussion for another blog entry.

How does software get written? In the corporate world it starts with a business problem. For example a chain of Mexican restaurants might ask: "How many fajitas did I sell yesterday?" The initial step in software engineering is to identify the business problem and gather requirements. Then a design is developed. If a design is good, then the process of coding is almost mechanical. Of course, there are issues that arise that need creative solutions. I think the structure of software code and creative solutions to issues are the closest a coder really comes to self-expression.

So, can programming be art? No. Coding is best accomplished by a disciplined engineering approach rather as an art project. The resulting software can be admired and maybe even be considered art. But sitting at a computer and writing code is not a form of self-expression. That's best saved for blog entry comments. Practice self-expression. Please post a comment.

spacerPosted at 6:27 PM

More Additions from the Archives

I made more updates to this blog thanks to the Wayback Machine at archive.org. I dug up the web log entries I made around January 2000 at the now-defunct sleepwalkertc.com website. The web site was for a project to make a H. P. Lovecraft inspired total conversion to the Unreal Tournament game.

spacerPosted at 1:47 PM

Here's a Room, Here are Some Tools, Here are Some Guys

ENIACThe unveiling of the ENIAC, the world's first electric digital computer, celebrated its 60th birthday yesterday. Computerworld posted a previously unpublished interview that sheds new light on the origins of the system and how pathetic the press is. I roll my eyes at the questions like "Did the military guys working on ENIAC salute the machine?" and "There's a story that ENIAC dimmed the lights in Philadelphia when it was in use." Studying the operations of a electro-mechanical machine developed by MIT's Vannevar Bush, J. Presper Eckert got the idea to replace mechanical integrators with electrical ones. As a result Eckert came to believe that the entire system could function electronically. The first significant task for the ENIAC was the development of the hydrogen bomb.

spacerPosted at 6:16 PM

Sync Your Clocks

Flava Flav wears a ClockFlavor Flav knows what time it is. He wears a clock around his neck to help.

A common problem I have encountered in software development and testing is clock synchronization. Internal computer clock time will drift to inaccurate values even when initially set accurately. PC clock circuits only cost a few cents to make and are notorious for becoming wrong over time.

This causes a variety of problems. Developers on Unix systems like to use the 'make' command. This command compiles new and modified code without having to recompile unchanged code. It uses the clock to deteremine which files need to be recompiled. If source code resides on a separate server and the clocks are not synchronized then the make program will not work correctly.

Another problem manifested by unsynchronized clocks is correlating test results. Imagine running a load test on system where the client, database server and application server all have different times. Someone trying to analyze the results of the test will go cross-eyed trying to examine critical events in the test. I have seen this problem at two different companies now.

A network time server should be used to keep every computer's time in sync. The most used solution for clock synchronization is the Network Time Protocol (NTP). It utilizes a client/server architecture based on UDP message passing. Fortunately, it is also built into the latest versions of Windows and most Linux distributions.

In order to keep your clock in sync in Windows right-click on the date/time in the task-bar. Now click on 'Adjust Date/Time'. Now click on the 'Internet Time' tab. Yeeeeaaaahhhh Booooyyyy!

spacerPosted at 3:25 PM | spacerLeave a comment

Underrated Items of 2005

The past year, 2005, brought its share of hype and hero worship. As I did last year I decided to give a select list of underrated items some exposure.

I read an excellent article on podcasting. Would anybody listen to a gazpacho dot net podcast?

spacerPosted at 10:26 PM

An Idea for Movable Type

I use Movable Type to manage these blog entries. I had an idea for a plug-in: a plugin that allows Movable Type to interface with subversion to allow templates to be version controlled.

spacerPosted at 11:29 PM

Disco Dance Floor USB

Hackaday posted an article the other day on MIT's USB-controlled Disco Dance Floor. The technology geek in me loves this idea. My brain boggles at the fun possibilities with this expensive toy. I was delighted to see engineering students at the nearby Washington University built one.

spacerPosted at 1:13 PM

Amazon's Mechanical Turk

An email arrived today from Amazon announcing the Amazon Mechanical Turk web service. It is named after a famous 19th century chess playing machine that turned out to really have a person inside.

Amazon touts the service as "Artificial" Artificial Intelligence. It works like this. A company may send trucks through a business district taking photos. They then need somebody to pick the best ones for a database of store images. In exchange for a couple cents a human can take a look at a few photos and select the one that best looks like a storefront.

Developers can use web services to submit tasks to the Amazon Mechanical Turk web site, approve completed tasks and incorporate the answers into their software applications. To the developer the application sends the request to the web service. In turn the service returns the result. Behind the scenes the results are the product of human input. Humans come to the web site, search for and complete tasks and receive payment for their work.

Got spare time? Earn a few cents.

spacerPosted at 9:35 AM

Elements of Web Design

This weekend I discussed potential web page designs for Atomic Squash with Jason. Our conversation reminded me of some slides I wrote for an advanced HTML class at work. Over the years I have seen many poorly designed websites. Web page authors, it seems, tend to make some of the same mistakes when first learning HTML.

The following is a list of elements of good and poor design.

Elements of Poor Design

  • Avoid gaudy backgrounds. A simple color is better.
  • Avoid unreadable text and background combinations. You know about what I am talking.
  • Do not make "Under Construction" pages. It is best just not to show a page that does not have content.
  • Avoid frames. They break bookmarks. Use a table or div tags for layout instead.

Elements of Good Design

  • Make a site map. If you have a large collection of web pages, this is invaluable.
  • The top of the page is the most valuable part. Put a navigation bar and the most important content there.
  • Use footers. Footers provide a visual cue to the end of content.
  • Use context. Avoid "Click Here".
  • Give file sizes for files over 100kb in size. This prepares the user for large downloads.
spacerPosted at 10:30 AM

Computer Science Projects That Interest Me

Dijkstra, a famous computer scientist, once said: "Computer science is no more about computers than astronomy is about telescopes." Computer science deals with design principles, requirements analysis, implementation of hardware and software, documenting and testing solutions and maintaining production systems. As you can see programming is only a small part of what is involved.

An article I read earlier this year lamented the fact there have not been any notable innovations in technology in recent history. So I thought about what innovations are possible given today's technology. The following is my list of computer science projects which are ripe for innovation and which interest me:

COMPUTER SCIENCE PROJECTS THAT INTEREST ME

1. Compiled Javascript

Javascript is an interpreted scripting language built in to most web browsers. Most interactive web pages utilize javascript to do things like validate input or dynamically change form elements. One of the weaknesses with javascript is that all of the comments are sent, too. For pages with large amounts of javascript this amounts to lots of wasted bandwidth. It should be possible to compile javascript into codes that can be run in a sandbox within the browser. The process of compilation would eliminate comments and distill the code into a compact collection of byte codes.

2. Wired Elvis

A computer science professor once wrote a program to algorithmically generated jazz riffs using a functional programming language. I've always wondered what rock and roll could sound like if it were generated by a computer. Lets put the core in Haskore.

3. Anonymous P2P Networking

Peer-to-Peer (P2P) networks have made headlines lately. A fundamental issue with today's P2P networks is that once you connect to the network your IP address is publicly available. This makes you a target esp. since information about your data transfers are routing through super nodes. It is theoretically possible to anonymize connection information. Some work has been done lately about obfuscating routing using a concept known as onion routing. It is not easy but I think it is possible to anonymize all connection information including the IP address. The question becomes, is it possible to ensure successful transfer given an anonymous destination? I think it is as long as you have at least three trusted servers. I haven't worked out in my head how to protect the servers against untrustworthy servers or servers colluding to "poison the well".

4. Whipping the WIMP

We can been using the same windows-icon-mouse pointer paradigm since it was invented in the 1970s. But people are still intimidated by using computers. Lets face it speech is a more natural means of communication. Advances in voice recognition mean that computers understand us better than ever before. Isn't time that we at least augmented our system software with voice and gesture recognition?

5. Morose Pointer

Alan Turing proposed a test in which a computer program tries to fool human testers into thinking that they are communicating with a human. Every year there is a contest in which competitors try to see who does their best to meet the Turing Test. I'd like to go step beyond this. Can a computer make you cry? Can we care enough about a computer program to feel emotion? The mind boggles.

6. Parallel Compiler

In college I did independent research in the area of parallel computing. The compilers available at the time were poor. The best available was a compiler that took the C programming language and did its best to parallelize the instructions. There were other compilers and languages but they were awkward and difficult to program. As multiple processor PCs appear on mainstream desktops, the question is: is it time for a new programming language? I believe it is time for a language and compiler that is designed around explicit parallelism.

spacerPosted at 9:34 PM

The Ultimate Machine

I want one of these for Halloween! From a biography of the late Dr. Claude Shannon:

The "Ultimate Machine", based on an idea of Mervin Minsky, was built [by Dr. Shannon] in the early fifties. The operation and spirit were well described by Arthur C. Clarke in Voice Across the Sea: "Nothing could be simpler. It is merely a small wooden casket, the size and shape of a cigar box, with a single switch on one face. When you throw the switch, there is an angry, purposeful buzzing. The lid slowly rises, and from beneath it emerges a hand. The hand reaches down, turns the switch off and retreats into the box. With the finality of a closing coffin, the lid snaps shut, the buzzing ceases and peace reigns once more. The psychological effect, if you do not know what to expect, is devastating. There is something unspeakably sinister about a machine that does nothing -- absolutely nothing -- except switch itself off."

spacerPosted at 12:12 PM

Excuse Me, Your Network is Showing

I bought and set up a Linksys Wireless-G Broadband Router. In the process of setting it up I was suprised to see no fewer than three networks in my neighborhood that broadcast their SSID and are not protected by sophisticated encryption. In fact one network router identified itself as 'Linksys' which leads me to think the owner just went with the factory settings. Tsk. Perhaps I am paranoid but I set my router to not broadcast my SSID.

spacerPosted at 11:42 PM | spacerLeave a comment

Dude, I Got a Dell

This week I got the notebook I ordered from Dell. It is a Dell Inspiron 600m, a cheaper model intended to hold me over until I upgrade my desktop computer. As a computer professional I like to upgrade my hardware every three to four years to stay current with trends. I'm due for a new desktop but am waiting until Microsoft releases Windows Vista, its next version of the Windows operating system, sometime next year. That way I can upgrade my PC and its operating system at the same time.

dell600m1
Shiny New Dell Inspiron 600m
tomdell600m
Another Look at the Dell

The first thing I did when I got my notebook was to uninstall all the bologna that Dell loaded onto it. I removed every trial program and unnecessary software package I could using the Add/Remove program control panel program. But I still got a nag screen from QuickBooks. Grr. I'm going to dig into the system this weekend to remove every trace of it.

Overall, I am pleased with the notebook. The keyboard is as wide as screen, i.e. 14 inches. After using a full-sized keyboard like the Microsoft Natural Keyboard, the notebook's keyboard feels tiny and cramped. The screen is crisp and bright esp after turning on ClearType.

As you can see I added a wireless notebook mouse . It is a Logitech V200 Cordless Optical Notebook Mouse. I am pleased with its performance. It tracks very well with no noticable lag. Also, it micro-receiver snaps onto the bottom of the mouse for easy storage.

tomdell600m
Tom Gets a Dell
spacerPosted at 10:43 AM

Windows Registry Files

I mangled my Windows XP registry. This incident started after I upgraded my HDD to a 200 Gb model. I took these steps: 1) exported up the registry to a USB thumbdrive, 2) formatted the new HDD, 3) reinstalled Windows XP and software and 3) double-clicked on the registry file to install its registry entries. I got an error griping about trying to update registry entries that were being actively used. Then, the regedit program closed. Does this mean a partial success? Short of scanning the registry and reg file there was no way of knowing. This probably messed up the registry.

I noticed that the system seemed to think it was in safe mode. Funny thing was that I didn't see any of the banners that are displayed when Windows is in safe mode. My PC consistently booted into Safe Mode without displaying the "Safe Mode menu", the one that you see if you press F8 at boot time. I searched Microsoft's knowledge base for an article how to get Windows to not think it is in Safe Mode. No success.

So I reformatted the HDD and reinstalled Win XP. This time I did not attempt to reinstall the registry entries. All works fine.

Lesson learned: do not try to install registry keys from an exported reg file. The regedit program does not fail nicely or attempt to clean up after itself.

spacerPosted at 10:04 PM

NIC Tango Uniform

Well, my Intel PRO/1000 network interface card (NIC) went on the fritz. The problem manifested itself by having my computer freeze. It even froze sometimes during OS boot time. I have come to expect this behavior from Windows. But when I booted to Linux and had the same problem, I suspected a hardware problem.

My first suspect were my hard drives. I have been getting SMART errors on them for a while. But I happened to notice that the system especially tended to slow down when it tried to access the network. I watched activity on my hub. My faulty NIC kept flashing on and off. The problem had to be the NIC.

After a quick trip to Circuit City and Best Buy I discovered that neither of them sell Intel or 3COM branded cards. I had to settle for a NetGear card for $25. The salesperson told me that they do not sell many Gigabit ethernet cards. I suppose since the 100 Mbit NICs were less than $10 after mail-in rebate that people opt for the cheapest card when installing a home network. Either that or they opt for a wireless network.

spacerPosted at 11:37 AM

Ice Your Cell Phone