comments edit

Work has been crazy busy which has kept me from blogging much. We leave for Alaska on the 23rd and then for Japan on the 1st. I have a lot to get done before then.

comments edit

Not to just join the chorus, but I am blown away by Google Suggest. It’s a simple idea, but well executed - it guesses what you are searching for as you type it and presents the options as a list. If you’ve used the auto-complete feature in IE, you’ll get the picture.

\ Suuure… This is what you were *really* searching for.

So in the above screenshot, I’ve typed in “good clean f” and Google has presented it’s best guess in the text box as well as other options below.

comments edit

My neighbor Chris blogs about the harrowing “commute” from the Baghdad airport to the Green Zone.

In just a few minutes, we clear the gate and our driver floors the accelerator. The convoy blows onto Route Irish at 70mph, bumper to bumper, with local Iraqi traffic parting like the Red Sea before us. You can see that the locals are used to these mini-tanks and dive to the side of the road. We seem to be making good progress when, to my shock and horror, I see cars driving the wrong way on a 4-lane expressway and coming straight towards us. The PSDs don’t seem to panic and, as I learn later, flow of traffic and lane right-of-ways do not really translate in this country. Apparently, it’s quite common to drive “kamikaze” against oncoming traffic if you’re side of the highway is blocked.

You should read the entire account.

comments edit

Server on fire

In case you’re wondering how important those fans are inside your computer, we received an email from a tech at our data center informing us that smoke was coming from one of our web servers. And we’re not even serving porn.

We don’t need no water let the motherfucker burn! Burn Motherfucker. Burn!

comments edit

Fox Sports World is undertaking strategic initiatives regarding the branding, on-air look, and marketing of the channels. As a soccer fan (and a friend of an FSW exec) I’ve been invited to participate in a focus group to evaluate their projects tonight. My main suggestion will be start a new channel devoted to soccer. FSS (Fox Sports Soccer).

UPDATE: Well my main suggestion was unnecessary. Fox is planning to change “Fox Sports World” to “Fox Soccer Channel”. We evaluated some logos and slogans and talked about the identity of Fox Sports World. Received some nice swag too including a pen that lights up like a blue glowstick. Great for taking notes at your next rave.

comments edit

TabI chuckled to myself when I read this “public service message brought to you by the Terminally Picky Developers Association for Readable Code” on Craig Andera’s blog.

I admit it, I’m guilty of using Tabs, but I have (at least in my mind) a good reason. Besides the fact that the code looks fine to me, I like navigating my code using the arrow keys. With tabs, when your cursor is at the beginning of the line and you hit the right arrow key, the cursor jumps to each tab position. If you convert tabs to spaces, you have to hit the arrow key two to four times (depending on your setting) for each tab. Unlike the “most discerning developers”, my tabs are set to 4 spaces so that wolud be quite annoying.

However, if a coworker was to raise a big fuss (or if I ever work with Craig), I’ll consider changing my evil ways.

And to my non-tech friends, yes, programmers are this anal.

UPDATE: Aaron Robinson notes in my comments that I could navigate with CTRL and the arrow keys. A good suggestion, and I often do that, but it requires two keys at a time instead of one. Also, in the case of moving text back, if I want to move a line back a tab, I like that I can just hit the backspace key rather than SHIFT+TAB. Once again, it’s one key verse two. When typing is painful, I like to reduce the number of keystrokes as much as possible. But maybe I’m just being lazy.

comments edit

This is great! Rather than wait for all the RSS Aggregators to properly use the If-Modified-Since header, implement it on the server instead via an IP address and User Agent combination. Now your first thought is probably “Wait, that’s not perfect. What about users of internet providers such as AOL which uses a shared pool of IP Addresses?”

True, theoretically there could be an instance where you don’t receive a blog entry because your IP and User Agent string just happened to match someone else. But really, how many AOLers are subscribing to RSS feeds in the first place? RSS is still mostly in the domain of the more technically sophisticated. Secondly (unfair cracks on AOL aside), the chances that two users with the same IP and User Agent requesting your pathetic little blog close enough together in time is probably very slight.

UPDATE: A commenter lamented that users behind a corporate firewall will lose out. This is a more likely scenario as your coworker is likely to subscribe to the same blogs that you do. My solution is to only throttle aggregators that misbehave (you know who you are). Or conversely, don’t throttle well behaved aggregators. This provides incentives for the misbehaving aggregator developers to fix their aggregators. RSS Bandit is well behaved in this regard.

Xeni Jardin: Last month, Cory posted an item about Glenn Fleishman’s analysis of the impact of RSS aggregators on his blogs’ bandwidth use. (Link to previous BoingBoing post). Now, Glenn updates us with this news:

I’ve run the latest statistics on RSS usage after adding a simple throttling program that uses a database to track the last access by an RSS aggregator (or anyone trying to retrieve a syndication file). One retrieval per file update is now the limit. I’ve seen my bandwidth use on RSS drop almost in half with no commensurate drop in actual users, and only a single note describing a problem in retrieving my feed (from a very old aggregator).

Link

[Via Boing Boing]

comments edit

Robert Hensing, a senior member of Microsoft’s PSS Security Response Team, writes this enlightening post why passwords are so 5 minutes ago.

For you non-techies, the short answer is that you should be using pass phrases instead. For example, you might use a pass-phrase such as “my computer is secure!” or “just a cheeseburger in paradise”. The basic premise is that short passwords are easily hacked even when using non-standard symbols such as “p@$$w0rd”. Hacking tools are now sophisticated enough to deal with these type of passwords.

code, tdd comments edit

Although I agree in spirit with most of Joel’s discussion of methodologies and rock star programmers, I’m in a bit of disagreement over the quote from Tamir he posts.

For instance, in software development, we like to have people unit-test their code. However, a good, experienced developer is about 100 times less likely to write bugs that will be uncovered during unit tests than a beginner. It is therefore practically useless for the former to write these…

I disagree with this, but in part because I think this is based on a flawed assumption over the purpose of unit testing. This point assumes that the only objective for unit tests is to uncover bugs. In reality, unit tests serve a much larger purpose.

1. Unit Tests promote better interfaces.\ Certainly, if you are truly a rock-star developer, writing a class that is extremely usable might come intuitively to you. But I think even rock stars can benefit from writing client code that uses a class the developer is building. This process helps to make sure that the interfaces to the class are thought out, and probably doesn’t take much more time than thinking through the class design before coding.

2. Unit Tests are a great form of documentation.\ When learning a new API, often the first (or second) thing I want to see is sample code that uses the API. Well written unit tests are a great source of documentation for how a particular class is meant to be used.

3. Unit Tests are great as regression tests\ So you’re a rock star who doesn’t write buggy code. Are you sure the person who is going to maintain your code is also a rock star? What about the person who wrote the class your code is dependent on? As Code Complete states, 80% of a project’s timeline is spent after the code is deployed in the maintenance phase. At some point, someone will come in and modify the code and perhaps change it in a subtle way that doesn’t appear to be a bug, but violates an assumption made by the initial programmer. There are a thousand ways in which a developer can write perfect code, but have it break either now or later. Well written unit tests can provide a high degree of confidence that bugs that are introduced later are discovered quickly. It’s no panacea, but it’s sure as heck a lot better than having none.

So while I agree that blindly following methodologies is a hindrance to truly talented developers, I do believe that there are some practices that are worthwhile across the board. In a team environment, communication is of the utmost importance. Most developers don’t work in a vacuum and a writing unit tests is one of those practices that really help communication within a project and beyond. It helps communications with current team members as well as future team members to come.

So yes, being a monkey in a methodology is bad, but I think there are better illustrations of this than Unit Testing.

UPDATE: I’m not the only one who believes this. Seems Roy has a similar opinion to mine. As does Jason Kemp in my comments.

Technorati Tags: TDD

personal comments edit

Soccer Ball Americans often have a low view of soccer players (though that is changing in recent years). They don’t think of the sport as physical as football or even basketball. However from my experience, soccer players are every bit as tough as their counterparts in other sports.

Case in point, for the past two weekends in L.A. it’s been rainy and cold (don’t laugh, cold for L.A.). Both weekends we had games scheduled on the most perfect pitch and a full squad showed up. However, there have been several times that we couldn’t get a full squad for my morning basketball game at the Y because it was raining, and we’re playing indoors!

Rain Back to the subject at hand, there’s nothing like playing a solid game of soccer (or Football for my European readers or futbol for my spanish speaking readers) with rain pouring down. The artifical turf (the kind with the rubber pellets) actually grips the ball pretty well compared to grass which sends the ball skidding like a runaway luge team. The only difficulty is that the ball itself gets a bit slick, creating many opportunities for “whiffing”.

On rainy days, it’s helpful to have hair. For instance, I sent a perfect cross to the center and my teammate planted his forehead firmly on the ball, only to have the ball slide off and away. He’s completely bald.

Unfortunately we lost due to an own goal on a corner kick which made the score 2 - 1. I hyper-extended my arm at the elbow, so I’m in a bit of pain today, but I think it’ll heal up nicely.

comments edit

Recently I received some kind words from Scott Reynolds regarding my “excellent tutorial” on writing IBlogExtensions for RSS Bandit. Using my tutorial, he wrote a plug-in to send items in RSS Bandit to One Note. (There’s another plug-in that does the same thing here).

The same day I noticed this post on Channel9 in which a user wishes that using the “Blog This” plug-in that comes with RSS Bandit wouldn’t paste the entire text of the entry into w.bloggar. Instead, this user would prefer just the link to the entry.

Well, inspired by the kind words, I figured I could do this in a few minutes. So I built a new version of the IBlogExtension plugin that comes with RSS Bandit. This plug-in is configurable to allow posting the full text, the link only, or some generic text with the link. The generic text is something along the lines of

{Author} wrote this interesting post entitled “{entry title}” on {title of blog}.

The {entry title} is a link to the actual post while the {title of blog} is a link to the main blog. If some of this information is not available in the feed, the text is even more generic.

You can grab the plug-in dll here. Just copy it to the plugins directory within the RSS Bandit installation directory. For me, that’s in “c:\Program Files\RssBandit\plugins”. You might want to back up the old plug-in before overwriting it with this new one.

The Visual Studio.NET 2003 C# project file is also available here.

The plug-in makes use of embedded XSLT files for each type of post. In the future, it would be quite easy to allow user defined XSLT files that are not embedded. Please let me know if you find this useful. I’ll see if Dare and Torsten would like to include this in future releases of RSS Bandit. If you make improvements, please send them to me so I may update my files.

[Listening to: Feel So Good - Jamiroquai - A Funk Odyssey (5:21)]

comments edit

Ouch that smarts!

During my flight today a bag of ice fell off the cart the flight attendant’s were pushing up the aisle. Thinking it was a simple bag of ice, I picked up the ice and put it back in the bag. As I was holding the ice, I realized that it was much colder than normal ice. Much much colder. So cold in fact, it burned a bit.

Not to worry though, those long cold winters in Alaska prepared me for such cold. I’m impervious to it. Except in L.A. for some reason, when it’s cold there, I’m succeptible.

comments edit

I arrived in Toronto today and am staying at a very nice hotel. It’s called the SoHo Metropolitan and it sure beats the Super 8 I stayed in at Tech Ed 2004 (next door to Adam Kinney and Eric Porter). It’s too bad I’m only here one night as I was hoping to have time to check out the well equipped gym.

The reason I’m here is to get acquainted with the tech staff of our new parent company. I’ll be coordinating a lot of development with these guys. They primarily work with Java and we primarily work with .NET. However, XML is the glue that will help us all get along and sing Cumbaya around the campfire with group hugs and all that.

They’re in the process of exposing their platform as SOAP and I’ll be reviewing the architecture with my equivalent here. I’m looking forward to this as it will be an opportunity to really get some real world cross-platform experience.

In the meanwhile, my wife tells me the house is very quiet without me. I suppose because I am quite noisy. In any case, while she was walking Twiggy some guy in a car attempted to hit on her. Their conversation went something like this.

He asks, “Are you Thai?” “What?” she replies. “What ethnicity are you?” “WHY!?” she yells.

She’s quite the spunky one.

code comments edit

This is a fabulous post (did I just say “fabulous”?) on how to create self contained NUnit tests when you need a web server.

As you may know (assuming you’ve read this blog for a while, which is a BIG assumption), I’m a big fan of self contained Unit Tests. It’s a key component to having a self contained location independent build process.

I have an approach similar to Scott’s in unit testing some of the functionality of RSS Bandit. For example, I have tests that will create a web directory, start a Cassini web server, and then use the RssLocator class to search for RSS feeds. However, one problem I had that I hadn’t resolved was the issue that Cassini.dll needed to be loaded in the GAC.

If you were to obtain a fresh build of the RSS Bandit unit tests and didn’t have Cassini.dll registered, many of the tests would fail. I was planning to add code to register Cassini into the GAC, but Scott has shown the path to a better way. He demonstrates a method such that doesn’t require Cassini to be placed in the GAC. Brilliant! Once I get home, I shall make this change and truly rejoice at having self contained tests.

comments edit

My neighbor Chris is in Iraq as the #2 guy overseeing rebuilding projects as part of the Army Corp of Engineer. He’ll be over there for several months helping to rebuild the facilities necessary for providing clean drinking water and electricity.

Chris and his wife Susan are among the nicest people you will ever meet. Their dog Nelson was kind enough to show Twiggy the ropes as it comes to the best spots in the neighborhood for taking care of business. Susan is always offering to take Twiggy for a walk when we’re away at work.

In any case, with all the bad news coming from Iraq, it’s good to read about progress made in the rebuilding efforts. Here’s a snippet about his wild ride into Baghdad. Be glad your typical business trip doesn’t come with this sort of landing.

I’m safe in Baghdad….errr, well….I guess I’m just “in Baghdad.” The flight into Baghdad International Airport is one I will always remember, no matter how hard I drink to forget it. There’s 40 of us packed into a C-130, which was never intended as a passenger plane. There’s no “passenger area” in these planes, just the cargo hold with jump seats running down the sides and a row down the middle. Only two small port-style windows on either side. We’ve got a military dog on the plane with us, not real happy in his crate and letting the whole world know about it. It’s so noisy you have to wear earplugs and shout at each other to be heard. About 10 minutes outside of Bagdad, we begin our descent from 30,000 feet. That’s right, 30,000 feet in 10 minutes. Not to mention that the pilots fly a corkscrew pattern to avoid potential rockets (they haven’t had one yet, but nobody wants to be the first). Let’s just say, the dog wasn’t the only one howling on the way down. \ \ After a hard landing, they popped the hatches and we put our feet on Iraqi soil.

I’ve flown in a C-130 myself and can vouch for how uncomfortable a ride it is. However, I’ve never experienced a landing quite like his.

[Via Live from Baghdad]

His ATOM feed is here.

comments edit

A while ago I wrote about AmphetaRate, a blog recommendation engine that takes user ratings of blog entries and serves an RSS feed of recommended blog entries.

Later on I wrote an article about how to build an IBlogExtension plugin which was added the the RSS Bandit documentation site.

As a warmup to writing that article I wrote an AmphetaRate plugin to work through the kinks of writing a plugin for RSS Bandit. However I never released that plug-in as I wasn’t ever sure if it was working since all my recommendations were “training” recommendations.

This is a classic chicken and egg problem. If there aren’t enough users using AmphetaRate, the quality of recommendations are poor.

In any case, I noticed today that Dare updated the RSS Bandit roadmap and the version (code named Nightcrawler) after the next version may include a “Thumbs Up/Thumbs Down” rating system, perhaps intergrated with AmphetaRate. This would certainly help solve the “Chicken Egg” problem.

In the meantime, I am releasing my plug-in with no warranties. Just copy the AmphetaRatePlugin.dll to the “plugins” subfolder of the RSS Bandit installation (on my computer that’s at “C:\Program Files\RssBandit\plugins”). The VS.NET 2003 solution can be downloaded here.

Note that although this plug-in implements the IBlogExtension interface, the configuration form implements a feature specific to RSS Bandit. When you configure this plug-in, I wanted to provide an easy manner to subscribe to a user’s recommendation feed. So I added a LinkLabel that when clicked does just that.

However, I had to cheat a bit to do that. Since the IBlogExtension interface doesn’t define methods you may want to call on the calling application, I used Reflection to call a method to bring up a pre-populated “New Feeds” dialog. You can see the source for that call below.

private void lnkSubscribeURL_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)

{

    if(IsValidID(this.txtID.Text))

    {

        object banditApp = this.Owner.GetType().InvokeMember(“GuiOwner”, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, this.Owner, null);

        if(banditApp != null)

        {

            bool result = (bool)banditApp.GetType().InvokeMember(“CmdNewFeed”, BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, banditApp, new object[] {null, this.lnkSubscribeURL.Text, “Personalized AmphetaRate Feed”});

        }

    }

}

At some point, it’s possible this will become a fully supported feature of RSS Bandit. For now you’re stuck with this hack. If anyone’s interested, I’d love to discuss creating a new plug-in standard that’s a little more full featured than IBlogExtension. It works great for simple plug-ins, but doesn’t provide much support for a plug-in to interact with the application. I can think of several operations every aggregator pretty much supports that a plug-in might make use of such as “Subscribe To Feed”, “Mark Item As Read”, etc…

[Listening to: In da Club - 50 Cent - Get Rich or Die Tryin’ (3:13)]