July 2005 Entries

Asakusa

Asakusa Pagoda Yesterday we were given a tour of Asakusa from an old family friend who resides there. He is an “Edoko”, a 3rd generation Tokyo native. Apparently, it takes three generations before you get to carry the Tokyo native membership card. I’m not sure if it gets you into the hottest clubs or not, or even if it at least provides car insurance on rentals, but I am sure it is an honor nonetheless.

Anyways, sources tell me it is the same way for “Parisians”. You’re not a Parisian unless your parents and their parents were born and raised in Paris.

Asahi Corporate headquarters My grasp of Japanese is still pretty close to non-existent, but even I was able to tell that he had an Edoko accent. They can’t pronounce the “h” sound so he prounces Asahi, “Asashi.” And when he says, “You’re welcome”, he says “Doi Tamashte” instead of “Doi Tashi-Maste.”

Speaking of Asahi, a fine beer, that’s a picture of their headquarters to the right. They used to have the brewery there in the city, but no longer. That piece of gold on top is supposed to be beer foam. Is anyone getting thirsty?

In any case, I won’t bore you with all the history of Asakusa, as I cannot remember much, but instead will point you to my photo set on Flickr, in case you are interested in seeing more photos.

Dinosaur Roar But I will mention that the day prior, we were in a mall when we ran into Harry here on the left. The mall had a couple of animatronic dinosaurs on display. Their movements were quite impressive and not at all machine like, except for the fact that they mostly repeated their motions over time and they didn’t pounce on me, rip out my jugular, and drink in my blood. That’s what I would expect if they were to act lifelike.

Spirited Away Hotel

Since I have a free moment (and the internet connection is back up), I thought I’d write a short status update of my trip to Japan. But first, let me point out that I used the term “status update”. What am I? A project manager?

In any case, we’re having a pretty nice time. Below is a little mural of photos I’ve taken thus far. Yes, I have been suppressing my Asian side by not being quite as trigger happy as one would expect.

Meguro Gajoen

The Bathroom One of the highlights so far was our one night stay at the Meguro Gajoen Spirited Away Bridgea luxury hotel that served as the inspiration for the location of the movie Sen to Chihiro no kamikakushi, otherwise known as Spirited Away. This place was one large museum piece. For example, though it is a bit dark, the picture to the right is of the main lobby bathroom. Notice it has a freaking bridge in there! Does that bridge look familiar?

Hotel Lobby The lobby of this place was breathtaking with its collection of historical artifacts, paintings, a pathway with water on both sides. Check out that archway within the lobby walkway. Notice the water on the left and right corners. The place even had waterfalls in its garden.

Another angle Much of the original hotel grounds had to be razed due to an encroaching river. We took a tour of the original section that was spared the destruction due to its distance from the river. 100 StepsTo the left, you can see a picture of the famous 100 stairs. It turns out that there are only 99, according to our tour guide. I personally think they should add one just to be honest. In any case, I did remember this staircase from the movie.

Spirited Away Hotel I also remembered this main lobby area from the movie, when all the strange inhabitants of the inn gathered together.

More on Microformats

Kevin Marks says in the comments to my last post that my example of how a format designed for both machine and human readability might run into problems was a little contrived. My dear Mr. Marks how silly of you to say so. I must vehemently disagree with your lack of insight. That example was a lot contrived. I blame Jet Lag for the lack of a better example, but the point that I was trying to make (albeit unconvincingly), is that...

A format designed for both data exchange and data presentation cannot excel at both.

Keep in mind that this doesn’t necessarily mean that Microformats cannot do well enough for both tasks. I am simply attempting to examine the consequences of using Microformats over other approaches.

There are three particular areas in which I see significant differences between a data interchange format and a presentation format.

  1. Presentation
  2. Authoring
  3. Consumption

Presentation

Suppose you have a large set of data to send from one machine to another. Perhaps the statistical summaries for every soccer game played in a given month. Since we’re playing make believe here, also assume you’ve chosen XML as the format to represent that data. Are you concerned about the fact that the receiving machine is going to suffer from sensory overload trying to making sense such a large set of data?

Probably not.

When you choose a format designed for data interchange, you typically have no problems sending the entire data set. Machines don’t generally suffer from sensory overload.

But if you take the same set of data and want to present it to a human (using say, (X)HTML), you’d probably want to break it up into multiple pages, perhaps one per day, since that would be more readable for your soccer afficionado than simply cramming everything on one page (though many would-be web designers have committed such a crime in the past). Unlike machines, we humans do suffer from sensory overload.

Now it certainly is possible to send the entire data set to the browser and use DOM manipulation via Javascript to simulate paging, but that seems like a hack to me. First of all, why not do the simplest thing that works? It makes more sense to send only the data needed. Secondly, if you need to use DOM manipulation to present the data well, it just reinforces the idea that the format is not good for presentation.

Authoring

Have you ever written poetry? And no, I am not referring to your code, though I do see code as poetry at times. The difference between code and poetry is that there are no strict rules to poetry. Certainly there are some rules to some forms of poetry, but the only standard rule of poetry is that to make great poetry, you have to break the rules.

Now how many machines do you know of that appreciate poetry (If you know of one, let’s talk). Probably not any at this point in time. This is due to the fact that computers cannot understand free form input. They require input formatted accordirng to very precise rules. This is one of the difficulties inherent in having a human author create content using aformat for data interchange, humans in general are not precise enough. Let me give you a more concrete example.

XHTML attempts to merge the presentation format of HTML with the data interchange format for XML. In many ways, this is a praiseworthy goal as consuming (we’ll get to that) XML is much easier than HTML. And, XML is easy to validate as it has very strict rules. Unfortunately, strict is not something humans do well.

I spent some time not too long ago attempting to make my blog XHTML 1.0 Transitional compliant. I succeeded in getting the front page to validate, but would often post content that would break validation. Imagine how bad it would be if I allowed HTML comments from visitors.

Now suppose I am writing a blog entry where I want to add a microformatted item in my blog entry. There are an infinite number of ways I could make a mistake and thus render the microformat useless and unreadable by a machine. Writing for machines takes a lot of discipline (think programmer), and humans don’t naturally do it well. We require debuggers, compilers, unit tests, etc....

As you read this, you’re probably thinking that better tools will ameliorate this problem, and you are probably right. When such tools appear, they may make this point somewhat obsolete. But I still want to contrast this approach to how my RSS feed is authored. I simply post content to my blog. The content gets stored in a structured table. An RSS generator (a machine if you wil), authors the structured data. No extra work on my part. Yes, it is a little less flexible than the alternative, since any new piece of information I want to include in the feed has to have some persistent storage associated with it and code written to author it. This is a classic trade-off. I don’t have to worry about messing around with tools or proper formatting when I create content, I merely cram it into my blog and the machine does the rest.

Consumption

The other issue I have with Microformats is the Screen Scraping issue. Some Microformat proponents propose that we start building aggregators using Microformats instead of RSS. The problem with this approach as I see it is that these aggregators have to resort to screen scraping to find the appropriate markup within an HTML page. With RSS you have the benefit that the entire document is well structured, not just small sections within the document. You can use mature technologies to validate the document before you spend time trying to parse it. How well can you validate an HTML file that contains microformats alongside tag soup?

What Happens to Microformats When XHTML is widespread?

Microformats is designed to present data in a structured manner that works in current browsers. In a way, it is a compromise. XHTML promises the ability to add any kind of structured data (properly scoped by a namespace) to an HTML document, but XHTML is not yet well supported. So Microformats were created as a hybrid of XML and HTML. But what happens when XHTML is supported well. Are we going to settle for a bunch of divs to represent our data, or will we use more meaningful XML tags?

Microformats Benefits

Ok, now that I’m done being critical of Microformats (and I’m only critical because it is the new kid on the block and I want to know why I should support it, if at all), I would like to point out some benefits that occurred to me, apart from the ones I mentioned previously.

The first benefit is that it can work now. To the previous question I raised about what happens when XHTML arrives, one can say, “Who cares, it isn’t here now!” Touche! As the Greasemonkey script illustrates, people are already starting to take advantage of the presense of microformats to enhance user experience.

In part, this is an illustration of the Betamax principle. Although, I may think that RDF or XML feeds are a better technical solution to the problem Microformats tries to solve, the better technical solution doesn’t always win. Often, the more convenient solution wins. That’s why VHS won.

Second, it is flexible. By flexible, I mean that I can add microformat data by simply publishing the format. I don’t have to add a new table in my database to store hCalendar entries and then create a proper UI to add those entries. Instead, I just post a blog post and carefully format the post with the hCalendar format. Sure, I might screw it up, but I can do this now, without a recompile.

A third benefit I have heard mentioned is that it is more easily indexed. I don’t necessarily see why that is so as I have seen many RSS feeds indexed by Google.

Conclusion

So at this point, I am still a bit ambivalent about Microformats. I’ll probably sit back and watch how well it is adopted and see if there is a groundswell of support. We’ll definitely incorporate it into Subtext if it becomes adopted in a widespread manner. Just don’t expect to see me cheerleading a push to create Microformat aggregators. I still think RSS does a great job of that and I believe it does a better job than Microformats would. It is well known and just starting to gain mainstream recognition. There’s no point in splintering the aggregation industry at this point, confusing the layperson as a result. Besides, I have a significant time investment in RSS technologies I am not willing to give up just yet. ;)

Making Heads or Tails of Microformats

I had an email discussion with Dimitri about Microformats a little while back, trying to understand the purpose of Microformats and what they intend to solve.

At the time, the potential benefit I saw was that it might allow CSS writers to share stylesheets for marking up certain types of content. For example, suppose we standardize the markup for a calendar event (say, using the hCalendar format). Now if I write some seriously sweet CSS that makes calendar events explode off the page, I could send that CSS to you and it would be immediately useful. No need to reformat it to reflect the structure of the HTML used to render your calendar event, assuming you followed the standard.

At the time, I was focused on the fact that according to the microformats about page, microformats are designed for humans first and machines second.

However, the fact that microformats are machine readable lends itself to other potential uses. For example, the Microformats blog recently highlighted a Greasemonkey script that parses out hCalendar events and provides links to import them into a calendar application.

Now while I try to keep an open mind, I find it odd that Microformat proponents are attacking the use of XML on the web.

This is where I find the goals of Microformats to be a bit far reaching. As far as my understanding goes, they present Microformats as a means to have your website be the API, attempting to make technologies such as RSS obsolete. The problem I have with this idea is that data exchange and presentation are often at odds.

For example, suppose I want my presentation to only display calendar events for the current week, but I want users to be able to import calendar events for the month. However, I never want to display a month calendar, for aesthetic reasons. It seems the Microformats method would be for me to have a month’s worth of calendar events on the page, but use CSS to hide those I don’t want displayed. Or, I could allow a query string parameter to specify how many entries to display, but how would I make that parameter discoverable without messing with my presentation (i.e. without placing a link to it)?

Instead, I might choose a standard XML format for calendar entries and provide a auto-discoverable reference to the calendar entries much in the same way that HTML pages add auto-discoverable references to RSS feeds. What’s so wrong with that?

It seems the Microformats user might say that the separate XML feed is not necessary. Why duplicate content? This is a fairly good point worth considering. The goal of Microformats is to provide a information in a machine readable format as well as human readable. Part of fulfilling that goal is to ensure that the presentation degrades well in a normal browser.

For example, a competing approach to avoid duplication of content might be to simply specify a calendar event namespace in an XHTML file and embed that within the markup. The problem with this approach is that many browsers and web authors do not truly support XHTML properly. Thus, tags for alternate namespaces do not show up, violating the Microformats goal of degrading gracefully. Not only that, but most XHTML pages end up as being served as tag soup because they are sent using the mime type text/html. [See Sending XHTML as text/html Considered Harmful].

However, therein lies the problem with Microformats when compared to a non-presentational XML format like RSS. If you recall, RSS stands for Really Simple Syndiication. It’s not just that it is simple to syndicate content, but that (in theory) it is simple to parse such a feed since it relies on strict XML. Parsing HTML is much more difficult to do because of the inconsistencies and all the effort that goes into understanding malformed HTML. Unfortunately, that is exactly what a consumer of Microformats is essentially forced to do, since Microformats are intended to degrade gracefully. Microformats aren’t limited to XHTML and can be placed in valid HTML documents, making it much more difficult to validate a Microformat snippet.

In any case, it’ll be interesting to see how the use of Microformats unfold. As Greasemonkey becomes more prevalent, I imagine the popularity of Microformats might also take off. If I misunderstood microformats, be sure to let me know.

Ill Communication No Longer

You just have to love modern technology and its power to shrink the Earth. I had a meeting over Skype with Micah in San Francisco from here in Japan with no discernible lag at all and wonderful audio quality. Later, I had an MSN Messenger chat conference about RSS Bandit with Torsten in Germany and Dare in Nigeria. What a small world indeed!

Please excuse me as I go over to Google Earth, zoom out, and use my mouse pointer to spin the globe.

A Rasta Ride to the Airport

Rastafarian FlagFor those of you who give a damn, we made it safely to Japan. The trip itself had quite an interesting start in the form of a cab ride to the airport with a, ahem, slightly odd-in-the-head fellow.

It started off innocuously enough as we called a cab to take us to the airport. When the driver called to let us know he was outside, we hurried out looking for the cab, but had difficulty finding it. We then noticed this dark Suburban pull out and the driver gruffly barked that we needed to come over to the other side. Gee, it should have been obvious to look for a dark Suburban, as opposed to, say, a bright yellow or green vehicle.

Nonetheles, he lightened up as he put Akumi’s suitcase in the back. It had a red, yellow, and green striped band around it which he loved. When we stepped in the car, it became apparent why, the back of the front seats were covered in laminated Rastafarian writings, the kind you might pick up in Venice beach. This guy was a Rastafarian. You know, a movement of Jah people.

As we stepped into the vehicle, I noticed some political material as well, such as a picture of Bush and the Saudi Crown Prince hand in hand next to a poem about how the author dreamed he ran into two devils holding hands. Odd to have such religious and political writings all over the back of a cab, but hey, it’s Los Angeles! In any case, once he started playing some Reggae, my trepidations were put at ease as I relaxed to the rasta beat, intent on enjoying the ride.

However, that only lasted a few minutes. He started furiously shuffling through a huge pile of CDs in the midst of driving. He seemed to find what he was looking for without hitting anybody, and started playing some instrumental reggae. At this point, he started singing out loud, filling in the missing words to the music!

Ok, I consider myself a very tolerant and understanding person, but this came across as a bit odd, even for Los Angeles. But hey, they man was feeling it, so we sat back and tried to relax again and enjoy the ride. The only problem was as we pulled onto the freeway, the driver got more and more into the music. He started pounding out the drum beats on the panel between his seat and the shotgun seat. He turned up the music and sang louder, gesticulating wildly with his right hand in the mode of a rapper feeling the flow.

His song selection began with repeating...

Jah Rastafari, he is my sheperd. Jah Rastafari, he is my sheperd...

...transitioning into such favorite classics as...

Why why why why why Why why? We have no social security. We have no social justice. Social inequality. How much longer? Why why why why Why why...

He was briefly interrupted by a phone call in which he had to relay a phone number for a customer in his Jamaican drawl that the customer had trouble understanding. He soon grew impatient and exclaimed, “Do you want me ta drive over tere ta write it down for you?” (imagine Jamaican accent). He then repeated the number and said, "I hope you got it." *click*.

He soon resumed the show, ending the trip on...

True Love. True Love. True Love. I will love you tenderly. I will love you Sincerely. I will love you gently. A love that is transparent....

At this point, I looked over at Akumi and she had lost it. The entire ride, we fought hard to keep our composure, be respectful, and not laugh. But this was too much and she was nearly in tears. I nearly lost it seeing her lose it, but as I was in his line of sight via the rear view mirror, I struggled with great effort to keep it together. This guy is driving us rapidly down a Los Angeles Freeway and seems a bit loose in the head. I don’t want to piss him off.

What put us over the edge wasn’t just that he was singing. I seriously love Reggae music. The kicker was just how awful he was. I mean, he would give William Hung a run for his money. What a relief to finally exit the cab and plant our feet safely in the airport. As a memento, I secretly recorded a snippet using the voice note recording feature on my cell phone. If I can figure out how to get it off the phone, maybe I’ll share it sometime.

Joel Inserts Foot in Mouth and Then Shoots Self in Foot.

For as smart a guy as Joel Spolsky supposedly is, you’d think he’d keep his dumb ass remarks off his blog and between himself and his interns.

In his latest ego-inflating piece of verbal masturbation, Joel insults the internal corporate developer.

Is software really about artistic high notes? “Maybe some stuff is,” you say, “but I work on accounts receivable user interfaces for the medical waste industry.” Fair enough. This is a conversation about software companies, shrinkwrap software, where the company's success or failure is directly a result of the quality of their code.

...

Sadly, this doesn’t really apply in non-product software development. Internal, in-house software is rarely important enough to justify hiring rock stars. Nobody hires Dolly Parton to sing at weddings. That’s why the most satisfying careers, if you’re a software developer, are at actual software companies, not doing IT for some bank.

Now, let’s put aside for the moment the arguments on how outstanding internal developers are just as important as outstanding shrink wrap developers. Scott Reynolds does a nice job covering that.

The real question here is just who on god’s green Earth does Joel think makes the recommendation to buy his bug tracking and content management software? It certainly isn’t management or the Linus Torvalds of the world clamoring for FogBugz. Hmmm, call it a hunch, but I would imagine a large proportion of his sales come from internal corporate developers. So how much sense does it make to give them the big middle finger while sitting smugly cloistered away in your ivory tower divorced from reality?

Now I agree with his general point, that if you’re in the business of software, you should hire the best programmers you can get. I don’t think his goal was to alienate corporate developers, but to illustrate one unique aspect of how hiring the best applies to shrink-wrapped software.

Here’s why: duplication of software is free. That means that the cost of programmers is spread out over all the copies of the software you sell. With software, you can improve quality without adding to the incremental cost of each unit sold.

Essentially, design adds value faster than it adds cost.

Where I disagree is his casual dismissal of non-shrink-wrap developers. Hitting the high notes isn’t always about creating emotional appeal with a shrink wrap product. Sometimes it’s solving an engineering problem in such a creative or elegant manner so that millions are saved, or in the case of Apollo 13, lives are saved.

How about this for a principle, For many internal developers, millions of dollars, the entire business, even lives may be at stake (for example, the Shuttle programmers), all resting on the integrity of a single copy of unique software. How is the best any less needed in this scenario?.

I could say more, but I need some sleep. I’ve got a plane to catch.

Heading to Japan

Tokyo Tomorrow we head off to Tokyo, Japan for a memorial service to celebrate the life of my wife’s father. We’ve both been very busy with our respective work, plowing ahead head down. It finally feels good to lift our heads above the chaos and exclaim...

Holy Shit! We’re leaving for Japan tomorrow and we haven’t packed!

In any case, we are looking forward (as always) to staying with Akumi’s mother and her wonderful cooking. The geek in me enjoys the technological aspect of visiting Tokyo as much as the food. It’s like visiting the Epcot center only cleaner and the people with the high tech gadgets are real, not animatronic.

If I have the time, I’ll try posting a few pics here and there while in Japan. Ja Mata Ne!

What Happens when you Cross-Breed Barney and the Tele-Tubbies?

You get BoohBah!

This is supposedly for kids, but it is about the most trippy subversive thing I’ve ever seen. Please excuse me while I check myself into a psychiatric ward.

Skype Out and Touch Someone

Skype My wife usually uses a cheap calling card to call her mother in Japan. Unfortunately, for the last month, every time she would try to call, there would be problems. Today for example, they were having problems routing calls and she kept waking up some man in god only knows what god forsaken country he was in.

I suggested she finally give Skype a try and she’s now downstairs on her iBook chatting with her mom. Since her mom doesn’t have a computer, she’s using the Skype Out service which is still much cheaper than using the phone.

I don’t exactly know why, but I find this use of computers and software so interesting and compelling. Part of it is the simple enjoyment of seeing how technology can foster community and communication. But more personally, it is also the excitement of seeing software and technology that I am excited about that my wife can also enjoy and be excited about. Most of the time my excitement for technology falls on deaf ears.

Hey honey, check this out! These new Visualizers allow me to view the values within a Hashtable while stepping through the debugger. Does’t that just blow your socks off!?

Umm... sure it does honey.

Reach out and Skype someone.

I just read what I wrote up there and it sounds just like a Skype ad. Hey Skype! Pay me! ;)

IPod DJ Mixer

IPod DJ MixerWhen this whole “Software Development” fad dies out (and yes, I am using air quotes here with the two fingers), I know what my next calling will be: An IPod DJ!

Oh yeah, I’ll definitely be using this at the next house party I throw. And yes, Kid AND Play are both invited.

Why The Customer is Always Right

Dave hits it on the nose here with sublime timing. The customer is always right. Get a clue, Toshiba.

Your Next Tablet Hard Drive - Solid State Baby

Samsung SSD Too bad these things aren’t out yet. With no moving parts, this thing sips power, less than 5% of the power consumption of current hard disk drives, while blazing at 150 percent of the performance of comparably sized drives.

The downside is that these will start off much smaller than your typical hard-drive and the first ones won’t be available until August. I need a new drive before Tuesday when we leave for Japan.

Tablet PC (Toshiba M200) Woe - Goodbye Hard Drive

Toshiba M200 I’m pretty bummed today as my Tablet PC went on a holiday and refuses to come back. I’m pretty sure it’s a problem with the hard drive as the last event viewer message I saw was a warning that the system detected an imminent hard drive failure. That’s when I started backing everything up.

Hey there buddy, thanks for the heads up, but if you see it coming, can’t you do something about it?

The worse part is that I am getting the warranty runaround and I am not yet sure who is at fault. Toshiba is telling me that my warranty was only good for 90 days because it’s a factory reconditioned system. Well that’s odd because the warranty pamphlet that came with it says that I have a year warranty. Specifically it says...

One (1) Year Limited Warranty ENCORE Notebook Computers

For ENCORE (Remanafactured) Notebook Computers Purchased within the Fifty (50) United States and District of Columbia.

If that weren’t enough, the sticker on the back of the computer says the following:

This Toshiba Computer Product has been reconditioned, and although not new, is warranted by Toshiba America Information Systems, Inc. under its standard Limited Warranty, excluding any coverage for external blemishes.

Now let’s see, I bought the computer in Californ-eye-aye, which qualifies as being a member of the Fifty United States. A Tablet PC is a notebook. And it is remanafactured. Now I wonder what leads me to believe I am still covered?

The nice lady in a far off country on the phone for Toshiba told me that some remanafactured PCs come with one year and others come with three months. She says I?m in the three months camp. She says resellers such as Tiger Direct (her example, not mine) sometimes tell customers what they want to hear, and not the truth about the warranty. I wonder if she’s blowing smoke up my rear (an impressive trick) or if indeed, the retailer pulled a fast one on me.

So tomorrow I need to call PC Video Online to find out their version of the warranty story. Worst case scenario, I’ll purchase a new and even better hard drive. Either way, this sucks.

UPDATE: I called PC Video Online and they told me that they are indeed an authorized Toshiba reseller and that they don’ open the boxes they receive from Toshiba. Therefore, they have no responsibility for the warranty materials packaged within.

As Walter (a brilliant lawyer I might add) pointed out in my comments, it does appear that I am entitled to a one year warranty. From various reports around the web and my comments, it seems that hard drive failures in the M200 is quite common. At this point, I don’t necessarily want the same old hard-drive anymore. I just want Toshiba to honor its commitments.

[Listening to: Remind Me - Röyksopp - Melody A.M. (3:39)]

Pics of Real Madrid vs Galaxy Game

I forgot to link to my pics on Flikr.

This Song Is So Much Fun

James Lavelle I’ve been pretty head down lately with work. But I just had to take a short break to blog this sweet funky song. The refrain is too catchy. You can click on the image to the right to sample the CD at Amazon.

I hope to see you soon
In La La Land.
Something about those little pills
unreal
the thrills
they yield
until they kill a million brain cells.

I have a feeling he’s not singing about a particular physical location, but “La La Land” is a common term for Los Angeles. Breathing the air here will have the same effect as the little pills he mentions.

Disclaimer This blog in no way promotes nor condones drug use. It promotes interesting music. Just assume the lyrics are discussing aspirin. Very potent aspirin.

[Listening to: Green Velvet - La La Land - James Lavelle - Fabric Live. 01 (2:39)]
Technorati Tags:

Real Madrid Was a Treat, Despite Glitches

Zinedine Zidane

You know how in Monopoly you can draw a Community Chest card that says “Bank Error In Your Favor, Collect $200?” We had one of those moments regarding the Real Madrid vs Galaxy game.

The Galaxy put in place a rule that in order to purchase tickets to the Real Madrid game, you had to purchase as many tickets to another Galaxy game. A somewhat sleazy tactic to raise sales, but I wasn’t complaining too much. I figured more soccer is better than less.

So we purchased two tickets to the July 4th game against New England and two tickets to the Real Madrid game. In the mail, we only received one ticket for the Real Madrid game.

So I sent emails and got on the phone to customer support last Friday to no avail. I discovered that we only were charged for one ticket, so I began to worry that we would not be able to pick up another ticket because the game was sold out. Yesterday, I spent an hour or so trying to work my way through customer support to make sure our other ticket would be there at the box office and would be seated next to the first ticket.

When we got there, the will call line was a mess. It seems that everyone who bought via the Galaxy Online website was having problems with their orders. Apparently they were unable to send out all the tickets they intended to and got a lot of orders wrong. The line was held up as they tried to print the tickets from the system while scalpers hovered about offering tickets for $200 a piece.

I wanted to hand the Galaxy my business card and tell them I can help build them a new software system and business process to improve their ticket sales management. ;) Meanwhile, those who purchased from TicketMaster seemed to have no trouble at all.

Sure enough, when we got there, we got a second ticket in a completely different section. However, it turns out that they could only give us a $75.00 ticket in a much nicer section (which I think they comped us). Not pleased with the prospect of my wife sitting alone, I figured we would both check out the section to see if there were empty seats.

It turns out that the ticket was in an ideal location, section 108 row M right near midfield, much better than our original seats. We decided to try it out and we ran into a couple of soccer buddies (one who works for Fox Soccer Channel) and a few empty seats in a prime location in section 109. Goooooooooooooal!

The game itself was quite entertaining. It was clear that the Galaxy was overmatched, as Real Madrid scored early and with ease on the part of Zidane’s superb play. However, the Galaxy put in a good showing and showed some grit. The highlight though, was Zidane’s amazing control and composure with the ball, not to mention scoring midfield seats.

Google Has The Answer To Life The Universe and Everything

Calculator Try searching for the following search term in Google...

The Answer To Life The Universe and Everything

Or just click on this link.

See Your Name In Pictures!

Did I ever tell you I really love Flickr? I’m sure I have. Anyways, found this little gem via Roy.

hlopes_aMetallic Aflag emblemDSC00055Smartie lid \"e\"One Letter / D

The interface is also RESTful in that you can append your name to the end of the URL. For example, http://metaatem.net/words/Haacked.

My name above is displayed by adding the following script tag to this blog post:

<script type="text/javascript" src="http://metaatem.net/spell.php?picsize=s&string=Haacked"></script>

Model View Controller Application Block in .NET

Ok, one of you forgot to send me the memo about the MVC application block released by Microsoft. Fess up. Who forgot to send the memo?

Perhaps I missed this because they chose the name “User Interface Process Application Block” (“UIP” for short). A name that means very little to me and would not catch my attention. Not a big deal, but it seems to me that “MVC Application Block” would catch developers attentions more to its real use, unless there really is more to it than just MVC (which I have not yet investigated).

Just recently I was working on a UI that could have benefitted from the MVC pattern. I decided not to roll my own at the moment since I was trying to rapdily prototype the UI. I was implementing this UI in ASP.NET, but with the idea that a WinForms version could also be useful at some point.

Fortunately, Mark Seeman comes to the rescue with this article, “Easy UI Testing - Isolate Your UI Code Before It Invades Your Business Layer”. Mark succinctly outlines how to implement the Application Controller pattern using the UIP and completes the picture with UI agnostic unit tests (using NUnit) of the controller logic. You know how I loves me some unit tests!

Mark, I owe you a beer for highlighting the real potential underneath this hidden gem of an application block.

Video: The And 1 of Soccer (Football for you Brits)

Soccer Video This is one of the freshest soccer videos I’ve ever seen. All moves that were obviously copied from poachers watching me on the pitch. In a way, this is like those fancy “And 1” basketball videos, except these moves are all legal... and it’s soccer.

UPDATE: I guess it helps if I actually link to the damn video. [Link]

Code Camp Black Rock City?

Black Rock City Ok, this is kind of a crazy idea, so as Ron Burgundy would say,

I wanna say something. I'm gonna put it out there; if you like it, you can take it, if you don't, send it right back.

I have to admit, I am a bit jealous that there hasn’t been a Code Camp in the Los Angeles area AND that I cannot attend the Portland Portland Code Camp. It sounds like there will be some very interesting people attending and giving talks.

For the uninitiated, a Code Camp is a weekend gathering of geeks for the community by the community. Geeks from all over gather to hear other geeks (generally not big name speakers) talk about interesting code and tech. It is not Microsoft specific, though there seem to be a lot of .NET focused talks.

Now you might say I should quit my bellyaching (if you were inclined to use such dated phrases) and suggest that I start one in Los Angeles. That’s really a great proactive idea and I hope someone takes it up because I simply can’t. At least not this year because I have too much work and two mandatory trips I am taking. The only way I could help organize one is if I were to combine it with one of my trips.

So here’s where the crazy idea part comes in. The week of August 29 through September 5 (give or take a day), I’ll be out soaking in the ambiance of Black Rock City in the desert near Gerlach Nevada attending a quaint little festival known as Burning Man. Wouldn’t it just totally suit my agenda (and kill two birds with one stone) if I could drum up interest in a Code Camp in Black Rock City? I’m really not sure how many attendees are code jockeys and would be interested in this, but if we even had ten people, it’d be worthwhile. It wouldn’t be too hard to get it on the BRC calendar of events as perhaps a more informal version of Code Camp.

It’s too bad I didn’t have this idea before because I might have been able to get Chris Sells involved as that crazy cat went to Buring Man last year.

In any case, I read the Code Camp Manifesto and I do see one potential issue:

#2 Says that code camps are always free. Burning Man itself is not free to attend, but we could certainly make the code camp free within the context of Burning Man.

So what do you think of the idea? Do you think I’m smoking something, because I’m not. At least not right now. Or is this perhaps not a terrible idea? Thoughts? Are any of you even going? Maybe if Scoble puts the word out, we can see if there’s any interest.

This is just an idea I’m putting out there. I am making no commitments or guarantees.

[Listening to: GF - Burning Man (Gee Shock Remix) - Anthony Pappa - Nubreed 001 CD2 (4:58)]

Roof Sex

Chairs Having SexWarning! This video contains graphic scenes of home furniture having sex. Although the video might be safe for work, the audio portion is not (for those who cannot see the screen). So turn down the volume a bit and check out this funny video.

Debugging Detective Stories

Scott Hanselman has the interesting tendency to run into the weirdest debugging problems.

When I worked at Solien, I had the same talent for uncovering strange bugs. My CTO at the time said I had the “Gift Finger” which is German for “Poison Finger”. My blessing (or curse) was the anti-Midas touch in software. Code that seemed to work just fine would suddenly collapse in a flying mess of runtime errors when I took a look at it.

Fortunately, I was as good at tracking down the root causes of bugs as I was in coaxing them out of hiding. In a similar vein, Scott describes a harrowing account of some in depth detective work he did to track down a particularly tricky bug. Reading his account felt like watching a good Columbo episode. He really does give it the pacing and tension of a good detective story.

That gave me an idea. Why not try to aggregate some great “Debugging Detective Stories”? Scott suggested the name “CSI:ASP Debugging”. I don’ know if such a thing would warrant a published book (or a TV pilot), but at the least, I could collect some on my blog here. So if you have a great story of debugging a particularly nasty bug, post it in the comments of this post or post it on your own blog and link to this one.

As for me, I don’ have any good debugging stories off the top of my head since, as an independent contractor, I no longer have coworkers to introduce bugs to the code. ;)

Yes, I am kidding.

Problem: Can't Access Anything on LocalHost?

Just the other day, I tried viewing a web application I’m developing on my local machine. After navigating to http://localhost/MyWebApp/ I got a blank browser screen. Nada. Zippo. Nothing. Not even the benefit of an error message.

Fortunately, the nice people at SysInternals have graced the development world with their suite of fantastic utilities including TCPView.

I ran TCPView and noticed that Skype.exe was listening on port 80. I shut that down, restarted IIS and sure enough, my local sites were back to their springy selves.

Turns out that the latest version of Skype attempts to listen in on port 80 and 443 by default, in case your firewall blocks all other ports. That’s an interesting feature, and one I’ll probably thank them for some day, but I wish they would have indicated that they were going to attempt this.

To fix this issue, I went to the Tools | Options menu in Skype and selected the Connection and unchecked the box next to “Use port 80 and 443 as alternatives for incoming connections.”

Yes! Moving from VSS to Subversion

I just received the good news from one of my clients that they installed Subversion over the weekend. We’ve all been wrestling with using Microsoft Visual SourceCrapSafe over the VPN (and yes, we tried out SourceOffSite which helped) but the sheer number of problems we ran into was overwhelming.

I had suggested they either look at SourceGear Vault or Subversion. In the end, they went with Subversion which is fine by me. That’s just one less SCC Provider to deal with. Sweeeeet!

Anyone Know Of a ASP.NET Connection String Custom Control

Before I spend time writing my own, does anybody out there know of an ASP.NET custom control that can render a nice interface for specifying a connection string?

Honestly, I think a TextBox does a pretty fine job of it, but I have to assume there are better options for those who don’t have the various connection string formats memorized. Ideally it would allow the user to select whether they want to use a trusted or integrated security connection, and based on that selection provide the correct fields to fill out.

HowTo Support your Favorite Blogger

Randy posts this summary list of tips from challies.com. It’s a nice list to be sure, but I’ve always been partial to a big fat wad of cash.

  1. Visit - This one may seem obvious, but to support your favorite blogger, visit his (or her) site.
  2. Comment - When you visit, why not leave a comment?
  3. link - If you have a website or blog of your own, link to your favorite bloggers every now and then.
  4. Encourage - Encourage your favorite blogger every now and then.
  5. Prayer - This is the support bloggers receive that they may never know about.
  6. Clicking Advertisement -Randy: Click fraud? Not encouraged.
  7. Affiliates - Many bloggers have affiliate accounts with various companies. The most popular of these is Amazon.
  8. Products - Many bloggers offer products through their sites.
  9. Tip Jar - Many bloggers have what is known as a tip jar. These are the little buttons on their site that say "Donate," "click to give" or something similar.

London Terrorist Attack

London Blast By now you must have heard that there was a Terrorist attack in London in which at least 33 are dead and many more injured.

There are a lot of photos coming into Flickr. Take a look at the “Hot Tags” in the last 24 hours such as blasts, bombs and london to see pictures from the ground.

My thoughts and well wishes go out to those in London, especially to those affected, their families and their friends.

First Wi-Fi theft Case Prosecuted

Walt highlights the first reported case of prosecution for Wi-Fi theft.

I agree with Walter when he says that...

If I were the defendant's lawyer, I would argue that (assuming its unencrypted) making a wireless network available to the public is tacit permission for others to use the network. With permission there is no unauthorized use, and no criminal activity.

Although sorry Walt, I’m not quite buying your alternative argument about “squatter rights” or “adverse possession”. A Wi-Fi network doesn’t suffer quite the scarcity as land (it’s orders of magnitude easier to create a new network than it is to create land).

Besides, no matter how long someone has been leeching off an unencrypted network, I feel the owner of the network always has to right to switch on encryption at any time. In a manner, it is similar to identity theft. I don’t care how long a thief has been using a victim’s identity, that thief should never have squatter’s rights or the right to attempt adverse possession on the identity.

Hey Look! I’m a Rock Star!

I don’t know who these people are, but How To Rockstar just wrote up my blog with a very nice review (thanks guys, I see you got the check I sent).

Seriously though, when someone says something this glowing about my blog, you gotta wonder when they are going to hit me up for money. Here’s a flattering (almost sycophantic) snippet...

While most of the writing is tech-ish, it's still damn-damn good. The opinions of this one man whose influence is so far-reaching as to be invisible are probably worth reading just to learn what everyone else is going to be thinking tomorrow. Or next year. Or five years from now. Or yesterday.

I’m happy to oblige. Five years from now, everyone will be thinking “Haacked? Nah, never heard of him.”. Oh, and also in five years, we’ll be remaking blogs rather than movies.

Dude, remember back in the day when we had Gizmodo. We’re going to do a remake, but instead of gadgets, it’s going to feature lizards. It’s going to be awesome.

Anyways, I can’t wait to tell our friends Tim and Laura who already call me and my wife “Rockers” as in “Rocker Phil”.

Know What You Really Think - Implicit Association

This caught my attention from Meta-Douglasp. From the home page...

It is well known that people don't always 'speak their minds', and it is suspected that people don't always 'know their minds'. Understanding such divergences is important to scientific psychology.

This web site presents a method that demonstrates the conscious-unconscious divergences much more convincingly than has been possible with previous methods. This new method is called the Implicit Association Test, or IAT for short.

I completed the Asian American-European American IAT and was relieved with the following result:

Your data suggest little or no automatic ethnic association with American or Foreign

Considering that I’m hapa, I’d have some serious self hate issues if I automatically associated with one over the other. ;)

Happy Fourth of July! Historical Outsourcing Lesson.

Flag The United States is like your family, it’s got its problems and can seem dysfunctional at times, but you gotta love it, and it sure beats being in some of them other countries.

So a toast to July 4th, the day the British learned that outsourcing key operations to those whose goals don’t align with their own can lead to disastrous results.

Note: I am not inherently against outsourcing, and in fact am a big fan of it when it is strategic. However, too many businesses use it as a cover for their mismanagement. You also don’t outsource your key competencies and critical services. And when you do outsource, you get what you pay for, so make sure your partners goals align with your own. When the Hessians just want your money, they’re toast.

The Evil Post

Dr. Evil It’s an odd quirk of our taste for “round” numbers that we tend to celebrate milestones that are multiples of a power of ten. For example, a 10th anniversary is somehow more significant than a 6th anniversary. Likewise, a 100th post is more significant than a 73rd post.

Kim Il Jong This post reaches a different sort of milestone, it is my 666th post. Yes, this post bears with it the mark of the beast. I dedicate this post to pure eeeeevil.

Evil Calvin Not having a reputation evil, my first step is to gauge my current evil quotient via the “How evil are you?” website. Unfortunately I rated quite good on the Evil-o-meter. There was certainly work to do.

So chomped down on my Cuban cigar, fired up Internet Explorer (evil-o-meter rising) and navigated to the evil overload list. Using Powerpoint (+2 on the evil-o-meter) I copied the list verbatim (DMCA anyone?) and started committing them to memory.

After getting a bit bored, I spent a little time doing some stem cell research and even tried my hand at human cloning. I thought about having an abortion, but as I am male, had a tough time getting pregnant. So I changed tactics and bought an H2 and drove it into a nature preserve while smoking an illegal substance and drinking a forty.

At this point, I realized that to really get the evil-o-meter soaring, I should SPAM people. Not only should I create SPAM, I should write a web service to do so. I wrote one that returned an ADO.NET DataSet of email addresses and websites with comments enabled so that others could join in the SPAMination. Soon all the world would know about all the latest Texas Hold-Em websites.

Oh, did I mention that application is written with only one line of code? And there are no comments. And I used HTML Tables and NO CSS. It’s covered in Hungarian Notation. And I have promoted it as an example of “SOA”. And the application connects to the (non-normalized) database using the SA account without a password. I used inline sql without using parameterized queries. Yes, Satan himself is starting to get worried here. But then again, I personally didn’t write this code, I off-shored it to a sweatshop in China that employs overworked six year olds to hack out the code.

Evil Bert After all this hard work, I relaxed to a game of Dungeons & Dragons while watching a little sesame street to absorb the evil that is Bert. This led to an internal debate about which character is more evil, Barney or Bert?

Evil Barney After studying this mathematical proof of Barney’s evil and this essay, “Why is Barney Considered Evil”, I concluded that indeed, Barney is more evil.

I considered creating a Marketing website without an RSS feed, but not even I was ready to go that far.

After all that, I went back to retake the evil survey. It turns out that I may have done a bit too much research as the site declared that I wasn’t evil but clinically insane. Not bad for a day’s work. I wonder what post should I dedicate to insanity?

[Listening to: Thriller - Michael Jackson - HIStory, Past, Present And Future, Book 1 (Compilation) (Disc 1) (5:57)]

Sql Query Analyzer Template Parameters

I’m not sure if this is common knowledge, but you can place template parameters in your SQL scripts and evaluate them within query analyzer. I think I learned this one a long time ago from a former fantastic SysAdmin, turned DBA, turned Developer, Tyler.

Here’s an example of a short script that makes use of a template variable.

SELECT * FROM <tableName, varchar(32), 'MyTable'>

Paste that into SQL Query Analyzer and hit CTRL+SHIFT+M. A dialog to replace the template parameters will pop up like so

Replace Template Parameters Dialog

Just fill in the values and hit return and you’re ready to run the script.

The format for a template parameter is <parameterName, sql data type, default value>.

Technorati Tags: ,

Potential For A Subtle Bug in RFC3229 Implementations

In a previous post I mentioned a problem I was having with implementing RFC3229. Well I got that one fixed, but realized that I had another very subtle bug. One that is potentially encouraged by the examples in the spec.

Before I begin, please realize that the examples are not an implementation specification. They are simply examples of how one might implement this RFC. Having said that, many implementors will probably conform to the examples as I did.

At issue is that all the examples show an integer entity tag value. Presumably this would be the id of the feed item (or post) within your backend database. In Subtext, this value maps to an integer primary key field that is an auto-incrementing identity.

So suppose you have a blog an a reader with an RFC3229-compliant aggregator makes a request for your feed. It might look like

GET /Rss.aspx HTTP/1.1
Host: haacked.com
If-None-Match: "100"
A-IM: feed, gzip

The "100" represents the last feed item that the aggregator making the request saw. The server presumably does a lookup to return all feed items with an ID that is greater than this number, creates a feed with those items, and sends that to the client. Bandwidth is saved as the entire feed doesn’t need to be sent, just the items with an id greater than 100.

Now suppose you had posted five items since the aggregator last made a request. The response header might look like:

HTTP/1.1 226 IM Used
ETag: "105"
IM: feed, gzip
Date: Thu, 30 Jun 2005 23:48:05 GMT
Cache-Control: no-store, im

Your server is telling the aggregator client, “Hey! The last item you are getting has an e-tag of 105. Make sure to send the value 105 in your next request.”

Well at least that’s how I implemented it in Subtext. The problem is that this implementation has a very subtle bug. Can you see the problem?

Since the table that stores blog entries has its id field as an identity, I am assured that a newer element has a higher id than an older element, so that’s not necessarily the problem. The problem is that Subtext (and I presume other blogging engines) allows the author to create a post that is not published.

So suppose a blogger create a post with an ID of 106 that isn’t published. This same blogger then creates and publishes a post with an ID of 107. The next request for the feed will get just item 107 and the server response will look like

HTTP/1.1 226 IM Used
ETag: "107"
IM: feed, gzip
Date: Fri, 01 Jul 2005 01:15:03 GMT
Cache-Control: no-store, im

Now say that the blogger fixes up the oh so important post 106 and finally publishes it. The next request for the feed from that aggregator will look like

GET /Rss.aspx HTTP/1.1
Host: haacked.com
If-None-Match: "107"
A-IM: feed, gzip

Your server will send the aggregator all feed items with an id greater than 107, completely skipping the newly published item 106. This poor aggregator completely misses out on the beauty and sublime writing that was surely within post 106.

In order to rectify this situation, I need to add a DatePublished field to my database table and use that to as the entity tag and to determine which items an aggregator has and hasn’t seen. That will ensure that important posts aren’t ignored from RFC3229 compliant aggregators.