The rest of the inauguration day story

The group of us that went down (my sister and I, plus two of our friends), secured our spot on The National Mall (close to 12th St NW and Madison Drive) before 9 AM.  They replayed some of the concert from Sunday while we stood or sat in the cold and waited.  What you may not have caught on TV was the big laugh we in the crowd made the first time an announcer told everyone to take their seats.  The other bit the broadcasts may not have shared was the booing from the crowd when George W. Bush was announced.

Getting out of DC took us longer than getting in.  The police and National Guard personnel were not very helpful at all.  We spent a lot of time stuck in a confused crowd at L’Enfant Plaza because they decided to change one of the entry points to exit only and didn’t tell anyone.  We saw uniformed National Guardsmen standing on top of escalators who did and said nothing.  I still haven’t figured out how all that law enforcement managed to not have a single bullhorn or PA system to direct crowds.  The four of us managed to find our way to the other L’Enfant Plaza entrance by worming our way through the crowd.  We might have seen it sooner, were it not for the fleet of tour buses parked on D Street.  They were tall enough to block the other entrance from view, even when I got a chance to stand on a low wall.  The commingling of people trying to get on tour buses and those of us trying to get into the Metro station (each of us going in different directions) contributed to a lot of gridlock.  There was at least one ambulance trying to get through part of the crowd we were stuck in, and they weren’t having much luck.

The Metrorail folks definitely get an A for today’s performance.  We didn’t wait more than a minute or two for a train the entire day.  They had enough cars that we didn’t have to let a single train pass in order for all four of us to get on.  Law enforcement in the L’Enfant Plaza area gets a D.  No crowd direction or control, no information or conflicting information.

Even with these minor hassles, I’m glad I went down there.  I had great company with me and a good time as a result.


So close, but so far away

We were making great time until we tried to get to L’Enfant Plaza. Even though we caught the first train that showed up, we spent over 20 minutes waiting in the tunnel because of another train.


On the train to downtown

We got on the train at Wheaton around 6:40am. There was a bit of a crowd on the platform, but we all got on the train with no problem. Once we got to Silver Spring Station, the train was packed (even with 8 cars).

By 7:06, we got to New York Avenue Station, the last time I could post before we went underground (and out of reach of the AT & T network).


Headed downtown

Of course it’s crazy for me to brave the cold and the crowds to see Obama’s inauguration on a jumbrotron far from the actual swearing-in–but I’m still going to do it.  He’s the first (and only) candidate I ever donated money to, so I’ve got to be at least somewhere in the vicinity.  I’ve got my route picked out, my wake-up time, cold-weather gear, pocket-friendly food, and enough memory cards for the camera to last all day.


Windows 7 Beta

Here are my brief impressions of it so far:

Installation

Requires that Vista be on the machine in order to upgrade to Windows 7 Beta.  Otherwise, you have to do a clean install.  Unfortunately, you have to attempt the illegal upgrade before you get the message that tells you this.  If Microsoft is trying to get people to let go of XP, letting them upgrade from XP directly to Windows 7 might be a good idea.  Otherwise, the install was pretty straightforward.

IE8

Disappointing.  It can’t render www.vmware.com correctly, so I couldn’t download VMware Player from the site.  I had a copy on a flash drive fortunately, and was able to install from there.  Firefox works just fine (so far).

Virtual Machine

It looks like there’s some sort of permissions thing preventing me from running them.  Adding the VMWare Player created an additional user on the machine.  When I tried to open the VM I already had, I got some odd sort of permissions error.

Drivers

Windows 7 Beta detected the biometric scanner on the Lenovo T61 I’m using and directed me to the most current driver.  Once I “enrolled” my fingers, it worked just fine.  It didn’t have any trouble at all with the SanDisk Cruzer Micro 2GB I’m using either.

Miscellaneous

The way Windows 7 handles active program icons in the start bar is rather clever, though it still retains the unfortunate multi-function button for logging out, switching users, shutting down, etc.

More impressions later as I play with the operating system more.  This version of the beta doesn’t expire until August 1, 2009.


World of Goo

For years I’ve been more of a console gamer (XBox 360) than a computer gamer, but World of Goo is trying very hard to change that.  I don’t normally like puzzle games, but World of Goo tricked me by hiding the puzzle/construction/physics inside a hilarious cartoon.  In addition to being fun, simple to control, and great-looking, it’s just $20.  So far, it’s available for the PC, Mac, and Wii.


In Search of Wireless Internet

Recently, I’ve gotten a couple of questions from family about where they can get wireless internet access.  People usually mean wi-fi when they ask this.  I tend to address this problem by location–either you want wireless internet when you’re at home, when you aren’t, or both.

The variety of places offering wi-fi is definitely increasing.  Beyond the usual suspects (Starbucks, Panera Bread, airports and hotels), it’s showing up in other places (e.g. downtown Silver Spring).  If you want to find the nearest wi-fi offerings in your zip code, visit http://hotspotr.com/wifi (thanks for the link Adrienne).  If there’s a charge for the wi-fi access, the service is mostly likely provided by one of the major cellphone service providers (Verizon, AT&T, T-Mobile).

For wireless access at home, you have your choice of any provider who offers broadband access.  For most of us, that provider will be a cable company like Comcast or a phone company like Verizon.  Either type of provider will be able to offer you a modem that provides wired internet access and wireless internet access.  They may try to charge extra for setting up more than one computer, but I recommend not paying.  You’ll be able to get a family member or friend to help you for free, or a local high school or college student for a lot less than Comcast or Verizon will charge.


Alternatives to Microsoft Office

My dad asked me yesterday if there were any free alternatives to Microsoft Office.  The one that came to mind right away was OpenOffice.org.  Writer, Calc, Impress, Draw and Base are the OpenOffice.org answers to Word, Excel, PowerPoint, Visio and Access.  The suite is free, open source, and available for Windows, Mac OS X, Linux, and Solaris.

If you’re ready to embrace cloud computing, even more options are available to you.  Google Docs offers word processing, spreadsheets, and presentation capabilities.  It does a nice job of handling Microsoft Word and Excel files.  Another alternative to the Microsoft Office suite comes from zoho.com.  It offers the same level of compatibility with Word, Excel, and PowerPoint of Google Docs or OpenOffice.org.  Zoho.com offers a wider variety of applications than Google Docs.  They use plug-ins to integrate with MS Office, Outlook, Internet Explorer, Firefox–even Facebook and smartphones (iPhone and Windows Mobile).


Free Tech Support

For family and friends of mine who don’t work with computers, I often act as free tech support.  To bring something a little different to this blog in 2009, there will be posts from time-to-time that share a question I’ve answered about technology for someone.


Free Test Data

If you find yourself in need of test data (and if you write software for a living, you’ve got that need pretty often), pay a visit to generatedata.com.  You have your choice of five different result formats: HTML, Excel, CSV, XML, and SQL.  If you’re using it for free, you’re limited to 200 rows of test data.  Donate $20 or more and the limit increases to 5000 rows.  If you don’t mind fiddling with PHP and MySQL, you can download the generator for free and set it up on your own server.


Another use for RSS feeds

Caphyon, the vendor of Advanced Installer, has a feed for updates of the software.  A brief look at the feed shows a pretty regular schedule of updates.  Each entry in the feed contains the release notes, with new features, enhancements, and bug fixes.

Quick thanks to my friend Dave, who sent me a tweet about this product.  Now we’ll see how it stacks up against InstallShield.


Clever Twitter Client

Some googling for Mac OS X Twitter clients revealed this clever one.  I wasn’t aware of Fluid, Hahlo, or site-specific browsers (SSBs) before checking out the little video.


Finally joined Twitter

Being part of The Borg Facebook wasn’t enough–I joined Twitter a couple of weeks ago.  At least so far, it has succeeded in connecting me with the few friends of mine I haven’t found on Facebook yet.  I don’t use it from my iPhone that much yet, but fring seems to be a good enough client.


Comparing XML Strings in Unit Tests

Comparing two XML strings is painful.  So of course, my current project required me to come up with a way to do it in .NET.  I could only use version 2.0 of the framework, and I didn’t want to add more dependencies to solution that already has plenty (which ruled out XML Diff and Patch).  So far, I’ve come up with the following bit of code:

The validationXml contains a string representation of the XML being validated against.  It also means I only have to create one instance of XmlDocument.  After creating an XPathNavigator on the XmlDocument being compared,  an XPathExpression for the subset of XmlDocument being validated, and an XPathIterator, it can be called.

The “params” keyword makes the last argument optional, so it can contain zero or more names of XML elements to ignore when deciding whether or not to call an Assert.  I’m still figuring out how to optimize this, but I think it’s a good start.


Flu tracking, courtesy of Google

According to this story in the New York Times, Google can detect regional flu outbreaks up to 10 days ahead of the Centers for Disease Control and Prevention.  Check out Google Flu Trends to see data for the U.S., and for individual states.


Converting File URIs to Paths

I spent most of this morning looking for a replacement to Application.ExecutablePath.  The reason for this was because certain unit tests that depended on this code failed when a used any test runner other than the NUnit GUI.  When using test runners like ReSharper and TestDriven.NET, Application.ExecutablePath returned the executable of the test runner, instead of the DLL being tested.

Assembly.GetExecutingAssembly().CodeBase returned a file URI with the DLL I wanted, but subsequent code which used the value threw an exception because it didn’t accept file URIs.  This made it necessary to convert the file URI into a regular path.  I haven’t found a .NET Framework method that does this yet, but the following code seems to do the trick:

private static string ConvertUriToPath(string fileName) { fileName = fileName.Replace("file:///", ""); fileName = fileName.Replace("/", "\"); return fileName; }

It's morning again in America

The U.S. is certainly a different place today than it was yesterday.  The commentary I’ve seen that sums up best just how different things are is this Tom Toles cartoon of Obama walking into the White House beneath these words:

We hold these truths to be self-evident, that all men are created equal.
Yesterday, America proved that we really believe this.

Election Day

I got in line a little over 30 minutes after the polls opened. According to the poll worker who came out to see how everyone is doing, the line was out the door by 6 am (1 hour before the polls officially opened).

My first clue as to how long this would take was the amount of cars parked everywhere. Every spot that isn’t marked handicapped is full. Every curb is full. People are double-parked. The loading dock on the side of the school even has cars and SUVs in it.

Update: Around 90 minutes after I got in line, I finally got to vote.  The line was still outside of the school when I left.


Mark Cuban, Keeping an Eye on the Bailout

If you’ve been listening to NPR’s Planet Money, you already know about BailoutSleuth.com.  But in case you don’t, it’s a creation of Mark Cuban (owner of the Dallas Mavericks) to report on how the money allocated by the bailout bill is being used.

They’ve already discovered that we taxpayers won’t know how much the companies working on behalf of the Treasury Department are being paid because that information is redacted.


My Two Cents on Reinventing the Wheel

Yesterday, I came across a spirited defense of reinventing the wheel in a recent post from Jeff Atwood.  Dare Obasanjo stands firmly in the “roll your own as last resort” camp.  In this particular case, Atwood asserts the following:

[D]eeply understanding HTML sanitization is a critical part of my business.
I'll take Atwood at his word on what's critical to his business (and what isn't), but it seems that there's a middle ground between his position and Obasanjo's.  Particularly when there's an open source solution available (SgmlReader in this case, since it's written in C#), adopting and improving it has these benefits:
  • Improved understanding of HTML sanitization for the adopter.
  • Strengthening of the existing community.
To Atwood's credit, he's made his solution available here so that all of us who write software for a living can benefit from it.  I would be very interested in seeing a comparison between the SgmlReader and Atwood's HTML Sanitizer to see which is better.

My own experience with reinventing the wheel (in software development terms) has rarely, if ever, been positive.  Therefore, I have a lot of sympathy for Obasanjo’s perspective.  Because I’ve inherited a lot of software from predecessors at various employers, I’ve seen a lot of less-than-ideal (to put it kindly) custom implementations of validation, encryption, search and logging functionality.

There are probably plenty of reasons that development teams reinvent the wheel in these areas, but one highly likely (and unfortunate) reason seems to be insufficient awareness about the wide variety of high-quality open source solutions available for a variety of problems.  I don’t know whether this is actually more true in internal IT shops than other environments or not, but it seems that way.  Encryption and logging in particular are two areas where it seems like custom code would be a bad idea for virtually everyone (except those actually in the encryption and logging library businesses).  With libraries like log4j, log4net, the Enterprise Library, and Bouncy Castle available, developers can spend their time focusing on what’s really important to their application.  Code for authentication and authorization seems like one of those areas as well.  It seems like there are a lot of solutions to this problem (like OpenID on the public web, and Active Directory in the enterprise) that time spent hand-rolling login/password anything is time not spent working in areas where more innovation is possible (and needed).

When I asked the question of “what should always be third-party” to Stack Overflow, I got some interesting answers.  Most answers seemed to agree that encryption should be third-party, except in rare cases, but there was surprising little consensus beyond that.  Beyond the scarce resources argument against custom logging (or other areas with widely available open source alternatives), there’s a diminishing returns argument as well.  I’ve only used Log4Net and the logging in the Enterprise Library, but they’re really good frameworks.  Even if I had the resources to implement custom logging well, the odds that the result would be a significant improvement over the existing third-party options are slim to none.  I’d like to see the quality argument made more often in buy vs. build decisions.