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

comments edit

Ali GApparently, Andy Rooney has no patience for faux british rappers. If you’ve never seen the Ali G show, it’s worth a watch. One of the funniest episodes I’ve seen was when he was visiting a K-9 police unit and asked the trainer in his “urban” style,\ “Has yous eva thinks to use dogs instead of canines?”\ To which the officer replied, canines are dogs. Ali G then asks, \ “Ok, has you’s eva thinks to use dolphins? I Heahs they’s smarter than dogs.”

Ali G once asked a former CIA director, \ “Is yous worried dat da terrorists goin ta attack the White House with trains?”\ The former director responded, \ “No, there are no tracks leading to the White House.”\ \ “Perhaps theys building dem at night.”

Boo-Ya Kashaa! Respek!

Thanks to DK for the scoop.

comments edit

How’s this for an idea? An alarm clock that only allows setting the alarm for the morning. No PM times allowed. I mean if you can’t wake up by noon on your own, what’s wrong with you?!

If you really need to set the alarm for a PM time, the clock can provide a special button to press while setting the alarm. But that button needs to be guarded by barbed wire and ill-tempered sharks with lasers on their heads. This is necessary to keep a groggy fool from accidentally holding the button down when he’s only had 4 hours of sleep.

I missed basketball this morning because my clock was set for 6:30 PM.

comments edit

One thing I liked about CodeRush is that it came with several property expansion templates. However, ReSharper comes with a powerful template expansion editor for creating your own templates similar to what Whidbey has. I took it upon myself to create one for ReSharper. I hope you find it useful. There’s also a slight bug with this template in ReSharper that I will report to them (via this blog entry) and hope they fix.

To add this template, go to the ReSharper menu and click Options. Select the Live Templates node and click New. A window for creating a Live Template will appear. Fill it out as below.

Property Expansion Template \ Figure 1: Live Template Editor.

Now, to use the template, type the letters “prop” (sans quotes) and hit the TAB key. This should expand to the following:

Specifying \ Figure 2: Specifying the property type.

Don’t let all the red squigglies worry you. As you can see in the figure above, the word TYPE is highlighted by a red box. Type in the type of the property and hit tab. This will then take you to the second argument of the template, the name for the private member. In the figure below, I chose string as the type.

Specifying the private member name \ Figure 3: Specifying the private property member name.

At this point, you can type in the name of the private member that will hold the value of your property. Since I like to preface my private members with an underscore, you’ll notice that the underscore is part of the template and is not typed in as part of the PRIVATEMEMBER argument.

As you are typing, you’ll notice that public property name matches whatever you type for the private member, but with the first character capitalized as in Figure 4.

It's working. \ Figure 5 Look ma, I can name a property!

Bug Alert! at this point, do not hit the TAB key. Even though we’ve set that the PROPERTYNAME is not editable, when you hit TAB after typing in the private member name, the cursor is taken to the end of the property expansion, but the PROPERTYNAME is removed. See figure 5. Instead, you’re going to have to hit the down arrow a few times.

Property Expansion Lost The Name \ Figure 5 Where’s my property name!?

Conclusion\ Hopefully they fix this in the next version, or provide a workaround or guideline for how a template like this should be built. I also wish there was an easy way for me to export a template so that I can share them easily. In any case, you can probably see all sorts of potential for these live templates. It’s great for company specific boilerplate. If you have a greate template, post it in my comments section and I’ll try to compile them.

comments edit

I received an email from Ofoto with the subject line “Your Ofoto images will be deleted on September 30, 2004”. Yeah, that got my attention. According to the email, your account expires if you don’t make a purchase every 12 months. At first, I assumed this was some sort of Phishing attack trying to get me to click on their bogus links. (NEVER click!). But I wrote customer service and sure enough, this was a legitimate email. They will delete my photos and pointed to the Terms Of Service (quoted at the bottom).

Fair enough, I can respect that the company wants to monetize its users. It’s a nice service and they have every right to enforce such a policy. But it makes me wonder if this is a sound business practice or if it is a short sighted policy. For me, it just means that I’ll move my photos to

Up until right now, I was a fairly active user of Ofoto and often shared my album with others (those who did and didn’t have ofoto accounts. It was viral marketing.). And I have made purchases in the past. In fact, my first gift to my wife (just after we first met) was from Ofoto. Given that, I wonder if the cost of storage of my photos is greater than the potential revenue loss of losing me as a user.

If they kept my photos, there’s a greater chance I might make a purchase again than if they delete my photos. In that case, I’ll certainly never make a purchase. And, I won’t be spreading word of their site. Apparently Ofoto feels they can’t make any money off of me. That’s fine, it’s business. See ya Ofoto.

Here’s their storage policy if you use Ofoto.

Our storage policy is as follows: \ \ When a new Ofoto member first uploads photos, they get 12 months of free unlimited storage, beginning on the date of that first upload. \ \ When a member makes any Ofoto purchase, their free storage automatically extends for 12 months, beginning on the date of that purchase. \ \ If a member purchases from another member’s photos, both people get 12 months of free storage, beginning on the date of that purchase. \ \ If 12 months pass without a purchase, the free storage expires and the stored photos will be removed from Ofoto. \ \ To view our complete Terms of Service, please click the following link: \ \ Please note that any purchase will extend your storage: That means a single Kodak print, an Ofoto Archive CD, or any of the goodies in the Ofoto Store will keep you in free storage for another 12 months, on a rolling basis. \ \ If you have any further questions or concerns regarding your Ofoto account or the Ofoto service, please let us know.

comments edit

Ok, I tried CodeRush (an excellent product) and now I’m back to ReSharper. Valentin Kipiatkov, the Chief Scientist at JetBrains pointed out that there are several options that can fix some of my concerns and make it usable for me. The first concern was the intellisense delay.

The pause is intentional because you not necessarily want to use the intellisense after typing the dot. So it appears after a small delay (unless you continue to type). To change this, go to ReSharper | Options Code Completion and find “Delay:” field at the very bottom of the page. Change it’s value to 0.

I’d recommend that 0 or 100 would be the default. But the fact that it is configurable is good enough for me. Another concern I had was that their intellisense listed all overloads when I just want a method list (like in VS.NET).

This is actually configured by an option but a weird point is that the default setting is exactly as you want (and as it is in VS), maybe you changed it occasinally? To configure that, go to ReSharper > Options > Code completion and uncheck “Show signatures” checkbox.

Excellent! Much better! Finally there’s the pet peeve I mentioned earlier. Valentin points out an option that partially helps the situation:

auto-insertion of parens and braces can be configured by options in “Editor” page, “Auto-insertion” group box. As for your suggestion about braces, we’ll think about it.

Awesome! I appreciate the excellent support, and I’m just a trial user. This is the kind of excellent customer support that will take this product far. I’m ready to recommend purchasing this for the development team at work. If you haven’t tried it out, really give it a try. The refactoring and code formatting alone are worth the money. But it goes a lot further than that.

There are three big factors in this decision. The first is the refactoring support in ReSharper. That is very important to me. Secondly, the fact that there is excellent customer support. It’s good to know that if there’s an issue with the product, I’ll get to hear from a human in a decent amount of time. Lastly, I have to admit that the price is a big factor as I plan to buy a license at home of whichever tool we use at work. ReSharper is more affordable than CodeRush, yet provides just as much a productivity boost and more code cleanliness boost (via refactoring support) overall in my opinion.

personal, blogging comments edit

I’m hooked! To both reading blogs (via RSS feeds) as well as writing one. I’m addicted to poking my nose in the comments sections of other people’s blogs. Maybe even where my nose doesn’t belong. Almost certainly where it doesn’t belong.

For some odd reason, I love spouting my opinion. I’ll just give it out for free. You didn’t ask for it? Well here it is anyways. It’s not that I think I know more than you. Heck, most of the time, I don’t even know if my opinion is right or wrong or even well informed. But I’ll probably give it to you anyways. Perhaps I should think before I speak. But that’s so in the past. I hope you don’t mind. I really do like you all. Perhaps I just like hearing (or reading) myself talk.

I also like trying to be humorous. Now there’s an area where I’m even more likely to fall on my ass. But you can’t fault me for trying can you? You can? Well that’s never stopped me before. My wife has learned that I have a very low embarassment quotient. I continually make a fool of myself, but am never embarassed by what I do.

The simple fact is that I like belonging to a community, any community. As long as there’s give and take. I write something in my blog or on someone else’s and someone responds. That feels good! Sounds like an old fashioned conversation you say? Well yes and no. As a conversationalist, I don’t have the resources available to me as a blogger. For example, I have a terrible memory. In conversation I’ll say,

“Yeah, uh-huh. Umm that’s like, a really, like, good point dude. That, like, sorta reminds me of a great quote by that old dead guy… ummm Spinzer? Something about new ideas and ceasing.”

But on a blog, I’m more apt to say,

Jolly good point chap, and a point well taken if I may say so. It reminds me of good old professor Chadwick at Cambridge who was fond of puffing on his oaken pipe and would read to us his favorite quote from the esteemed philosopher, Spinoza. If memory serves me correct, the quote was, “Be not astonished at new ideas; for it is well known to you that a thing does not therefore cease to be true because it is not accepted by many.”

It’s all about “Information At Your Fingertips” brought to us by Google.

Now back to the typical technical mumbo-jumbo.