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

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.


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

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 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…

comments suggest edit

In the comments section of the post about the geekiest protest sign, Clara points out that 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.

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!

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

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

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

comments suggest edit

I thought that would get your attention. I recently realized that my old blog on blogspot is still up and running. When I was working at a large ethnic television network (that will remain unnamed), I received the following internal email:

Due to performance issues with one of the email filters, I have been forced turn all but the most essential portions off. As a result of this change, there may be an increase in the amount of pornographic email that reaches you.

I suppose there will be a correlated drop in productivity.

comments suggest edit

[Via Boing Boing]

Cory Doctorow: Casio’s Exilim cameras are the best digital cameras I’ve ever used, period. Great form-factor, great size, great – fantastic – UI, and great-looking piccies. Now Casio has announced a new whisker-thin credit-card-sized three megapixel Exilim with an optical zoom built in. I’m using the non-zooming 3MP and I’ve nearly beaten it to death (the Exilim is the first camera I’ve used that’s small enough for me to carry 24/7): now I know what my next camera will be. Link (Thanks, Fred!) \

code, tech comments suggest edit

Now I’ve never been a consultant myself, but I have friends who have been consultants. Namely Kyle. What do you think of these rules?

[Via DonXML Demsak’s Grok This]

  1. You work for the client, not the consulting firm.  No matter who cuts the payroll check, the client is the one paying for your services.  Do the right thing for the client, not the consulting firm (or anyone else).
  2. Your network of consultants is your most important asset.
  3. Consultants should keep a blacklist of firms and other consultants that should be avoided, and why.  Share this list with your network of consultants but not to the general public.
  4. Do not make negative comments about another consultant within ear shot of an employee of a client, and especially around the sales and marketing people of a consulting firm.  Negative comments are fine between consultants, but, keep it “in the family”.  But, never break rule # 1.  When dealing with non-consultants, do like your mom always told you, “if you don’t have anything nice to say about someone, don’t say anything at all”.
  5. When your consulting firm takes you out to lunch, remember, you are really the one buying lunch.  It is coming out of the consulting firm’s cut out of your rate, so just pretend you are picking up the check.  Would you really want to pay to have lunch with this person?  The same thing holds true for all events and gifts you may get from the consulting firm.
  6. Avoid give consulting firms information on possible leads without first getting everything in writing (especially your commission).  And even then, the contract usually isn’t worth the paper it is written on.  Don’t expect to get any money for info on leads, so be careful who you give them out to.
  7. When referring another consultant to a consulting firm, expect a finder’s fee.  $2 per hour is the minimum that they should offer.  Flat fees typically benefit the consulting firm not you, so try to avoid them.  Remember, your finder’s fee is coming out of the consultant’s pocket.  So if the consultant is part of your network, you should waive the fee.  Your network keeps you employed.
  8. If you didn’t negotiate your rate starting at the consulting firms billing rate to the client don’t try to find out what it is, unless you are prepared for the consequences.   That knowledge will usually just make you disgruntled.
  9. Never tell the client what the consulting firm is paying you.  If they need to know, it is up to the firm to disclose that info (see rules #1 and #8).
  10. Avoid professional days.  You don’t bill for hours you don’t work, so you shouldn’t work for hours that you don’t bill.  A good project plan, with a budget to match it, is a must.  Unless of course, if you created the project plan, then you should live with the mess that you created.

[Listening to: Groove Salad - - (0:00)]

comments suggest edit

When I started blogging, I was a category ascetic. I figured I should keep categories to a minimum across very strict dividing lines. I was going for a Zen approach. The thought process I had is that each category should be a worthwhile feed to subscribe. So that if you’re one of my friends who doesn’t know .NET from a fishing net, you could subscribe to my Day To Day feed.

But that doesn’t exactly work as I don’t cross-post often. Today I realized, I needed to break the ascetism and become a “Category Hedonist”. I was trying to find every post I’ve written about category spam. I realized the only tool I had for finding those posts was Google. No longer. I’ve added several categories, and hope to add more in the hopes of categorizing (hey how about that? Categories are for categorization) my posts. It’s useful for me, and hopefully for some of you.