comments edit

We went snowboarding this morning after finally getting in and to bed at around 3 AM last night. At the top of the quad, it was -1 degrees Fahrenheit. This is the coldest weather my wife has ever snowboarded in. She’s such a trooper. We won’t be going outside the rest of this vacation. ;)

comments edit

As with many blogs right now, my blog has been graced by the quiet sounds of tumbleweeds rolling by due to a long period of lack of use. The primary reason for my absence is an end of year push to get several projects completed before I head off to vacation.

For my day job, I’ve been working on exposing our platform to cell phones. I’ve built a series of ASP.NET controls that render a proprietary markup for a browser like app that will run on the phones.

On the side, I’ve been writing a Windows service (not as hyped as Web Services these days) to obtain market data via a socket server API. What I like about this project is that the API provided an XSD so I was able to generate objects to represent all the messages (Requests and Responses) and used XML Serialization to send the messages over the socket.

Also on the side, I’ve worked on an app to post data from a SQL database over to a perl script via XML over HTTP.

Finally, I updated the unit tests for RSS Bandit not to require Cassini.dll to be registered in the GAC. They are now truly self contained. At the same time I also checked in my changes to the Shortcut management. Torsten discovered some improvements I should make which I hope to get to in the new year.

In any case, Akumi and I are flying to Alaska tonight to stay with my family. It’ll be a balmy -2 degrees when we arrive, so wish us well.

comments edit

‘Tis the time of year to find a new job for many. Among many pieces of advice I could give you, I leave you with this one. When you go to an interview, please please please bring several copies of your resume. For your own sake!

Out of every technical interview I’ve conducted this year, not one person brought a copy of their resume.

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).


[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.