0 comments suggest edit

If you installed SP1 for the .NET framework, you may notice that certain feeds are broken and return an HTTP Protocol Error. Dare looked into this and posted an explanation and workaround to the problem.

Apparently a lot of web servers out there are a bit loose with the HTTP specification while SP1 tightens compliance. So c’mon people, stick the chest out, shoulders back, stand up straight, and stick closely to the spec.

0 comments suggest edit

Whoa! I saw this on Wired News. If anyone is in danger, it’s me. I love getting right up to the subwoofers and feel the wind generated (of course wearing my etymotic earplugs).

Doctors report several cases of collapsed lungs apparently caused by loud music. They theorize that lungs may start to vibrate in the same frequency as the booming bass, which could cause a small rupture.

[Via Wired News]

[Listening to: Beat Blender - - (0:00)]

0 comments suggest edit

I think Chris Anderson is totally wrong here. I am currently the smartest person in the room. I don’t CARE if I’m also the dumbest person in the room. He’s still wrong. ;)

(while talking to another senior person at Microsoft)

ChrisAn: “Have you driven a feature from scratch?”

Other: “Uhm, yes. I’ve worked on various platforms for the past 30 years, worked on the first release of DOS for Arabic and Windows for the Middle East”.

ChrisAn: “I’ll take that as a yes”

Remember to self, you are never the smartest person in the room… ever.

[Via simplegeek]

0 comments suggest edit

Wired printed an article recently (I wish I could remember the title) that discussed the network structure of relationships and fame. For example, imagine individuals as nodes in a big graph. Join the nodes by drawing directional vertices that indicate whether a person knows of another person. An arrow drawn from Bob to Alice indicates Bob knows Alice. The fact that there’s no arrow from Alice to Bob indicates Bob’s a total loser (or stalker).

In this graph, the average person’s node will have a roughly balanced number of arrows pointing in as arrows pointing out. That makes sense because in general, you’ll know around the same number of people that know you unless you’re a total loner. But for the truly famous, say for example Bill Gates, the arrows pointing in hugely outnumber the arrows out, which explains the hoard of people asking him for money. The effect of this is that there’s no way for Bill to have personal communications with everyone who knows of him. There’s literally not enough time (not to mention incentive).

The article goes on to discuss how this relates to websites and blogs. For the relative unknown majority out there with blogs (such as this one), the number of arrows pointing in is quite small. Yep. Most likely, your blog is downright obscure. However, there is one advantage. Having a small readership allows one to actually participate in the small number of inane conversations that spark from time to time in the comments section of a post. The fact I even have a comments section is often indicative of the small audience I serve.

However, once you turn it up a notch in audience size, things change. For instance, you’ll probably never get feedback from someone at the truly collosal sites such as CNN.com. Even sites that are somewhere in the middle such as Boing Boing and Slashdot have such a large audience that two-way communication is pretty non-existent.

To give you an idea of the mindshare these sites have, consider the following stats. A micro-node blog like mine gets around 40 web views and 150 aggregator views per post on average. That’s pretty darn insignificant, but at least I can be pretty sure that those aren’t all accounted for by my wife. Non-family members actually read this. “Hi y’all. Welcome! I come in peace!” Now suppose a site like BoingBoing decides to link to a post on this humble site like they did last week. Such an action leads to 18,365 web views (and counting) with 216 aggregator views. Keep in mind that this represents a small subsection of the entire Boing Boing readership who took the time to actually follow a link to some nobody’s blog. Talk about alot of arrows pointing in.

0 comments suggest edit

Recently I blabbed on and on about how to create a sane build process. One question I’ve heard in the past is what’s the point of a setting up a big formal build process when you have a very small project, perhaps with a team of one or two?

Well, I’d have to say there is no point to a BIG FORMAL build process for a small project. Rather, the build process should match the size and needs of your project and team. However, I will say this. Start early, because before you know it, your project and team will get big and you’ll be glad you have a build process in place. In the early stages, a simple NAnt (or MSBuild) script will suffice. Over time, that script will grow and grow. That’s exactly what I’m starting off with for Rss Bandit.

At this point, the script simply gets the latest version of the source code from CVS into a clean directory, compiles the code, and generates a compiled help file (.chm) using NDoc.

I plan to add a task to run unit tests, perform an FxCop analysis, and increment version numbers. However, I need to discuss version numbering with Torsten and Dare first. Eventually, I hope to add CruiseControl.NET integration. The purpose of this is to gain some experience with CCNET since I can’t yet use it at work.

Please Help!\ So this is all great and dandy, but the build file doesn’t work. I’m not terribly familiar with CVS, so if anybody can help me get this working, I’ll check it in to the CVS repository for RSS Bandit.


0 comments suggest edit

Restroom (A funny story I heard from somwhere. Supposedly its a true story.)

I was barely sitting down when I heard a voice from the other stall saying: “Hi, how are you?”

I’m not the type to start a conversation in the men’s restrooms at a rest stop but, I don’t know what got into me, so I answered, somewhat embarrassed, “Doin Just Fine!”

And the other guy says: “So what are you up to?”

What kind of question is that? At that point, I’m thinking this is too bizarre so I say: “Uhhh I’m like you, just traveling east!”

At this point I am just trying to get out as fast as I can when I hear another question.

Can I come over to your place after while?

Ok, this question is just wacky but I figured I could just be polite and end the conversation.

I tell him, “Well, I have company over so today is a bad day for me!”

Then I hear the guy say nervously…

“LISTEN, I’ll have to call you back. There’s an idiot in the other stall who keeps answering all my questions!”

personal 0 comments suggest edit

Italian GreyhoundSo after much deliberation and research, we’ve decided that we’re going to provide a home for a dog. In particular, we hope to adopt an Italian Greyhound from a rescue center. A rescue center is basically a foster home for dogs rescued from the dog pound. A rescue typically specializes in finding homes for a specific breed. For example, there is a Labrador Rescue, a Poodle Rescue, etc…

While paging through pictures and bios of dogs in need of a home, my wife grew really sad and wanted to rescue all of them. But we have a small Condo and can only really provide a good home to one dog.

If you’re looking to adopt a pet, try checking out your local animal shelter. For those of you in Los Angeles, check out the LA County Animal Care & Control. Oh, and as Bob Barker always says, “have your pets spayed or neutered”.

humor 0 comments suggest edit

Kyle sent me this classic photo from a friend of his, Brad Kagawa, who was at the RNC protest in New York. Brad scrambled across the march to take a picture of the geekiest protest sign he’s ever seen.

\ Will the W3C support this addition to HTML?

Whoever this person is with the sign, I <SALUTE/> you.

Thanks to Brad and Kyle for sending me this.

UPDATE: BoingBoing.net has a great entry about the mixture of tech, art and protest at the RNC. What makes the blog entry really great is that it includes a link to this post. ;)

UPDATE #2: And what makes this post great are the ensuing comments about HTML correctness that inevitably follow when geeks get political. My I think I’ll start posting everything as HTML.

UPDATE #3: So we may have identified the mysterious sign holder. Her name is Shalott. Of course, I have no way of confirming, but like Mulder, I believe! She got the idea from her friend Tzikeh who saw it online on a t-shirt.

0 comments suggest edit

I have a few GMail invites to give away. If you don’t mind having a profit driven corporation scanning the contents of your emails in order to target you with ads, then post a funny comment with your email address. Or just post a bland comment. I don’t really care.

In return, you’ll get a free web-based email account with 1000 MB of storage and the power of the Google search engine for searching your emails.

Sorry. I’m all out.

personal 0 comments suggest edit

So today, loads of clean people will be driving through the small town of Gerlach into the temporary city of Black Rock City. Trust me, they won’t stay clean for long, and will definitely bring home a souvenir of a nice coating of Playa dust over everything.

They are there to begin a week long festival known as Burning Man. This year’s theme is “Vault Of Heaven”. I believe my friends Ed and Michael (not Krimm) are going to be out there getting into all sorts of trouble.

I hope you all have a good time out there and be safe. Especially watch out for the sharks!

The author auditions for Jaws 5. (Notice the temple in the distance to
the right)\ The Black Rock legal team approaches…

0 comments suggest edit

In the comments section of the post about the geekiest protest sign, Clara points out that tshirthell.com sells a t-shirt with the end Bush tag (seen below).

End Bush T-Shirt

Tell them Haacked sent ya (not that I know those people).

As to the question whether this is XHTML, HTML, XML, SGML compliant? Who really gives a flying fuck? I mean c’mon people, get a freakin’ life! The real question is why choose a serif font over a sans-serif? ;)

For you real geeks: 0x3c 0x2F 0x62 0x75 0x73 0x68 0x3E

UPDATE: Oh, and this shirt is an XHTML compliant end tag (unlike the protest sign) assuming it is preceded by a start tag. According to Section 4.2 of the W3C recommendation, Element and attribute names must all be in lowercase.

0 comments suggest edit

We just got back from their wedding reception in San Francisco and we had a great time. I can see that you two will be very happy and I was honored to take part in the reception. Also, many thanks for the iPod, an overly generous gift, but one I will make good use of. I now finally have an iPod. Wohoo!

0 comments suggest edit

RoosterThis farmer has about 500 hens, but no rooster, and he wants chicks. So, he goes down the road to the next farmer and asks if he has a rooster that he would sell. The other farmer says, “Yep, I’ve got this great rooster, named Kenny. He’ll service every chicken you got, no problem.”

Well, Kenny the rooster costs $3,000, a lot of money, but the farmer decides he’d be worth it. So, he buys Kenny. The farmer takes Kenny home and sets him down in the barnyard, but first he gave the rooster a pep talk. “I want you to pace yourself now. You’ve got a lot of chickens to service here, and you cost me a lot of money. Consequently, I’ll need you to do a good job.! So, take your time and have some fun,” the farmer said, with a chuckle.!

Kenny seems to understand, so the farmer points toward the hen house and Kenny takes off like a shot. WHAM! Kenny nails every hen in the hen house - three or four times, and the farmer is really shocked.

After that, the farmer hears a commotion in the duck pen and, sure enough, Kenny is in there. Later, the farmer sees Kenny after a flock of geese down by the lake. Once again - WHAM! He gets all the geese. By sunset he sees Kenny out in the fields chasing quail and pheasants.

The farmer is distraught and worried that his expensive rooster won’t even last 24 hours. Sure enough, the farmer goes to bed and wakes up the next morning to find Kenny on his back out in the middle of the yard, mouth open, tongue hanging out and both feet sticking straight up in the air. Buzzards are circling overhead.

The farmer, saddened by the loss of such a colorful and expensive animal, shakes his head and says, “Oh, Kenny, I told you to pace yourself. I tried to get you to slow down, now look what you’ve done to yourself.”

Kenny opens one eye, nods toward the buzzards circling in the sky and says, “Shhhh .. they’re getting closer.”

0 comments suggest edit

I’m in the unlucky position that CruiseControl.NET doesn’t support the source control provider (Seapine Surround SCM) we use here at work. Briefly looking at the source code for CCNET, I noticed that I could create support for Surround SCM by implementing the ISourceControl interface via inheriting the ProcessSourceControl.cs class. However, before I go down that road, does anyone know if I can add a custome source control provider as a plug-in?

For example, if you want to use a build tool other than NAnt or Devenv.exe, you can create a builder plug-in by following these instructions. Will that work for creating a custom source control plugin? (Of course I’d be replacing IBuilder with ISourceControl or ProcessSourceControl.cs).

I’d prefer not to compile my update into the main code branch as I don’t want to maintain a variant of CruiseControl.NET. Likewise, I don’t want to write this plug-in if someone else already has one out there. It might be a better use of my time to convince my dept to switch SCM tools. ;)

0 comments suggest edit

Riiight. You know kid, you did nothing wrong, but we’d like you to give back that gold medal anyways. We mistakenly gave it to you and we’d love it if you corrected that mistake for us. While you’re at it, I also had an accident in the bathroom we’d like you to clean up. Thanks, now there’s a good kid.

AP - World gymnastics officials were looking for a way out of the Paul Hamm medal mess. All they did was make more people mad. The president of the International Gymnastics Federation asked Hamm to give up his all-around gold medal as the ultimate show of good will, but the U.S. Olympic Committee told him to take responsibility for the problem and refused even to deliver the request.

[Via Yahoo! News - Most Emailed]

code 0 comments suggest edit

I’m not proud of it (well maybe just a little), but I once created an insane build process once. If Pat (who maintained the build after me) posts in my comments, he’ll tell you about it. Take a stew of a proprietary microcomputer flavor of Fortran written in the 70s by a programmer most assuredly clad in polyester, churn it through a Visual Basic 6.0 preprocessor that spits out Fortran 90 code, all the while correcting memory bound issues, mix it together by compiling it with a custom NAnt fortran compiler task, and voila!, 20 or so compiled Win32 fortran dlls. At this point, the process compiled and sprinkled in some C# code.

I’m not sure that build process will ever run on another machine other than the one it runs on.

To create a sane build process, you need a sane development environment. I’m sure there are many important principles of a sound build process, but I have just one big one to impart for now.

The build must be location independent!

I can’t stress enough how important this principle is. I should be able to walk into your office (assuming you’d let me) and perform the following steps to get a fully working build on my machine.

  • Set up my computer
  • Hook it up to your source control system
  • Set the working folder to any old directory, say J:\IBetThisFolderIsNotOnYourMachine\NorThisOne
  • Get latest on a solution and open it up in VS.NET (or whichever IDE)
  • Compile it

If that doesn’t work because you have hard coded file paths, then FOO on you! But let’s not stop there, I should then be able to run your unit tests (what? You don’t have unit tests? A hex and octal on your code!) and they should all pass on my machine (assuming they pass on any machine).

But wait, I’m not done mucking around your office. Next, I should be able to head to your build server, copy the folder that serves as the root of your build process (or better yet, your CruiseControl.NET root) to any folder on my machine, and run your NAnt (or MSBuild) script, and have the system compile correctly and pass all unit tests.

How do you do it?

At first, it takes a bit of practice to get to this point. For example, there should not be a single hard-coded path in your code, nor in your build scripts. Find every way to get them out of there. Here’s a few tips for tricky situations you may run into.

NUnit/MbUnit configuration file

UPDATE: This section was rewritten due to changes in Visual Studio.NET 2005

In VisualStudio.NET 2005, you can include an App.config file in the root of any class library project. Compiling the project will automatically copy and rename the file appropriately (AssemblyName.dll.config) into the output directory. NUnit and MbUnit will use the settings in this file to run the tests. Make good use of this.

Testing With External Resource Files

Suppose your unit tests rely on some external files for testing (like an xml or html file to parse). If you store these files with the code, you can’t be guaranteed that your unit test will find them when running on a build server (since the directory structure may be quite different). You also don’t want to put these files within bin/debug for the reasons mentioned above.

Instead, follow Patrick Cauldwell’s lead and embed the files as resources. Now, your unit test can just unpack the file it needs into a known relative location when it runs, achieving location independence.


Of course, there are limitations to location independence. You’re allowed a few assumptions. For example, in the scenario above where I stomp into your office and take your source code, you can assume that I’m running on the same platform you are and have a source control client and IDE installed. Try to reduce these assumptions as much as possible, but we have to agree on some basic axioms.

I’m working on a new build process right now, and I hope to make this one a sane one. Maybe I’ll post examples later when I get done. We’ll see.