comments edit

The Yes Man

This video answers the question, “Just who is on the the other side of the call?”

It’s abso-freakin-hilarious! Watch the whole thing.

DISCLAIMER: Some foul language, so keep the speakers low at work.

[Listening to: Manga - Timo Maas - Loud (6:24)]

comments edit

I’ve noticed a bit of talk lately about poor management such as this piece from Dare and this one from Mini-Microsoft.

While they focus on poor management at Microsoft, Microsoft does not have a monopoly on poor management. Indeed, it is rampant in the industry.

In general, I see one two main afflictions that affects corporate thinking in America. It is from these two items that all other problems seem to sprout from.

  • Placing short-sighted goals above all strategic and long-term planning.
  • Making decisions based on hopes rather than analysis and objective data.

A typical scenario might look like this. A company is starting a software project and ask their tech team (or consultants), “Hey, how long will it take to build this?” A reasonable question, but surprisingly difficult to answer because as we know, business types often don’t really know what they want.

After spending some time gathering requirements, the whole time being pressured by the business team, the tech team delivers a rushed estimate. Unfortunately for the tech team, the business types have already promised delivery of the product in half the time of the estimate.

So what happens now? Perhaps the company offers some token incentive and a pep talk about pulling together and taking one for the team by entering crunch mode from the start. Maybe they’ll even hire a few more developers attempting to prove that nine women can indeed have a baby in one month.

Perhaps the tech team understands the principle of the project triangle.

There are three goals of every project: Good, Fast, Cheap. You can pick two.

But try telling that to management. You ask them if they will prioritize features, and they come back with a list where every feature is priority #1.

At this point, the company is managing by hopes and fairy tales. They hoped the time they promised was reasonable. They hope the tech team can complete the project done in time. The tech team wants to put in place a longer design and planning phase, but management want them to get coding because they hope there won’t be any coding problems. The management team does’t keep a list of risks because they hope nothing bad will happen.

Invariably, by putting these shortsighted goals above the long term success of the project, they manage to make the project progress even slower than had they allocated the correct amount of time. Certainly it is possible they will get a deliverable on time. But a deliverable that is very much a house of cards.

To see the epidemic nature of this scenario, you only need to read the paper. The recent classic example is the Virtual Case File project. After more than three years and $170 million spent, the entire project was scrapped. That is $170 million in taxpayer money down the drain because of complete ineptitude, poor management by both the client (the FBI) and their vendor.

We can probably create a hughe catalog of business failures due to short sightedness and management through hopes.

UPDATE: Jon Galloway turned me on to Johanna Rothman’s blog. She has a great example of how managers can be “penny-wise and pound-foolish”. Just another example of being short-sighted.

[Listening to: Circuit Breaker - Röyksopp - The Understanding (5:25)]

comments edit

\ sherriffs.jpg \ Originally uploaded by soymlk. It’s pics like these that really capture the spirit of Burning Man. I love the juxtaposition of cultures in this particular photo. It displays the extent to which the Burning Man organizers work with the local communities and law enforcement to ensure a peaceful and cooperative environment. \

comments edit

Hey you! Yeah I’m talking to you. The one there who has been staring at the screen for several hours straight. Do NOT forget to blink often.

Studies show that staring at a computer monitor causes people to decrease their blink rate. Not only that, but those who stare at a CRT monitor develop a layer of dust on their eyeballs (not sure how much this occurs on LCD monitors). Notice how your screen is always dusty? Think about that grime on your pupils. So definitely blink often.

Also, staring at a single object directly in front of you for a long uninterrupted period of time can cause eye strain. Your eyes need to be worked out. So make sure you take a break to focus on something far away periodically. Seriously. Just stare at something far away. I don’t care if it’s the bum of Sheila (or Stan) in marketing, just do it. Tell them you’re not staring, just working out your eyes and preventing eye strain.

This has been a public service announcement from your friends at Haacked.com. Pass it on.

comments edit

When it was released, I was quite critical of Community Server. I felt it was a rush job and shouldn’t have even been graced with a “beta” next to its name. That, along with other reasons, spurred me to start the Subtext project.

Today I took a quick look at the early bits for Community Server 1.2 that Jayson Knight put up, and I have to admit that I am impressed with the direction they are heading.

Obviously this is pre-beta software and I did run into some bugs (friendly error page though). But what I noticed is they are paying much more attention to the admin interface and usability. One of the big problems with .TEXT in the past is that editing an old post was a big pain because you had to find the post in the admin interface.

In Subtext, I solved that in a manner similar to DotNetNuke. If you are logged in and viewing your own blog, you see a pencil icon next to a blog post. Click on it and you are taken to the admin section where you can edit your blog.

Community Server 1.2 improves on this approach with a mighty jump forward. When you are logged in as an admin, and viewing your blog, moving the mouse cursor over the post highlights the entire post. Clicking on the post then brings up a web-based modal dialog to edit the post. Very slick and very easy to use.

If Telligent can improve on the installation story over the sticky mess from past versions, they will have a very compelling blog platform on their hands. Big ups to them for improving the usability and focusing on nailing down some key problems.

So does this mean that I am going to stop working on Subtext? Hardly, as I think there’s still room for a open source hobbyist blog engine. But I have to admit, the thought did occur to me to migrate my blog to CS 1.2 when it is released. Not having time to work on Subtext has left it languishing. But I will resist that temptation and focus on dogfooding Subtext.

comments edit

Man this would have saved me from tearing out a lot of hair in the past. An excerpt from the announcement:

We spent 20 minutes writing this entry, and then the browser crashed. Good thing there’s auto-save. It saves. Automatically.

comments edit

The Shining Since when was The Shining a feel good movie? Since somebody creatively edited footage to make this promo.

After watching this, consider whether you’re really getting the “reality” in Reality shows. If they want Omarosa to be a bitch, oh yes, she’ll be a BITCH. If they want someone to be a hero, they can make it happen.

Behold the power of film editors!

comments edit

My wife can be a real bookworm at times. She took Twiggy to the local Starbucks in the downtown area of Culver City to have a drink and read her Spanish book outside in the beautiful weather. As she studied, she could overhear two guys behind her loudly engaged in annoying guy talk about some hot coworker of theirs and how some other guy got to her first.

Twiggy walks over to the guys and one of them asks if she’s a whippet. Quickly glancing over, she answers , “No, she’s an Italian Greyhound” and returns to her book. The other guy continues to pet Twiggy and remarks, “Wow, she’s beautiful.”

After a bit, the two fellas leave, giving Akumi some peace and quiet, but not before she overheard two other guys sitting together remark to each other, “Hey, that was Ashton Kutcher.” So in her annoyance at being disturbed, my wife didn’t notice Ashton petting Twiggy.

After hearing the story, I joked with my wife that we missed our opportunity to get Twiggy a job in the movies. We always quip that we want her to start earning her keep, since the rest of the family works.

So Ashton, if you happen to find this blog during a vanity Google search, Twiggy is available for your next movie and/or television show. Just have your people call hers and we can supply face shots.

comments edit

Saw this on the Snopes site about a Coke ad that Coca Cola released and then had to recall because of a hidden risqué image. Pretty damn funny. It just shows that companies shouldn’t skimp on QA.

Here’s a small version of the ad. See if you can find the offending image. Then click on the image to see the closeup.

Dirty Coke
Ad

comments edit

Just to put housing prices in Los Angeles in perspective, we bought our small 1000 sq foot town house condo a year and a half ago. I just found out this week that our neighbors sold their comparable unit for 30% more than we paid for ours. It boggles my mind.

Of course, the urge is to cash in on the place, but then what? We love it in Los Angeles so we’re not ready to leave to cheaper pastures. Even with the equity we have, we still wouldn’t be able to afford a nicer place than we have unless we move out to the boondocks. Not to mention that rent on a unit like ours is more than we are paying in monthly mortgage fees. Instead, we plan to continue riding the housing wave and hope that if the bubble bursts (which I hope it doesn’t), it won’t burst 30%.

comments edit

Ian Griffiths takes an in-depth look at C# 3.0 Extension methods and the potential problems with it. Of particular note is his philosophy, which directly follows from the idea that code should be written for humans, which he summarizes whe he say…

I’m a big fan of code that does what it looks like it does.

Amen brother!

As an example, he highlights the ToUpper method on a System.String instance, which often misleads new developers. He would prefer the more honest and less misleading static method on the String class that would be called like so:

String.ToUpper(input);

I agree wholeheartedly that ToUpper (which sort of follows the Java convention I guess) is misnamed, but (and this really is a minor niggle) I probably would prefer that it still be an instance method, but renamed GetUpperCase. I think that would do a good enough job of being honest and being discoverable.

In any case, if you’re interested in C# 3.0, be sure to read Ian’s take on extension methods.

comments edit

I just heard thunder. I don’t think the weather here in Los Angeles got the memo, but we already had a thunderstorm. To the thunder clounds, go away and come back later when the yearly quota has’t been filled.

comments edit

Found this post in the trackbacks section of my post on Mental Laziness. It’s a classic example of where management pressure often leads to mental laziness.

In this scenario (go read it, it’s short), the ViewState of a system they were working on was extremely large and causing problems for the client. The quick solution was to perhaps use some sort of Http Compression or ViewState compression.

But the author of the post, David, suggests to his coworker that they should dig into why the ViewState is so large as the ideal course of action.

In this situation, with management breathing down your neck, it is prudent to spend some time digging into the root cause of an issue. Often, you’ll end up finding an obvious mistake and dramatically improve the application. But at the same time, you want to be careful not to spend too much time banging your head against a problem when you have a workable (albeit band-aid) solution in your hand.

In their situation, it makes sense to set a time limit to investigate the root cause. Perhaps the root cause is that the pages are just plain big due to requirements, and there is no “mistake” to correct. In that situation, the right solution IS ViewState compression. The extra investigation time bought you that assurance.

Suppose they couldn’t find the solution in that time span. At this point, there is nothing wrong with just putting the compression solution in place without having determined the root cause. However, doing so will incur a Design Debt, and that has to be considered when making the decision.

In the book Refactoring to Patterns, Joshua Kerievsky talks about the concept of Design Debt. Design Debt is the state your code is put in when you write crank out code without regard to its design just to meet a deadline. There are situations when this is necessary. Sometimes you just have to bite the bullet and weigh business needs against design purity and just spew code.

As an illustration of design debt, consider building a house of cards three stories tall. You set up the foundation for three stories, you start to build it, but halfway through, your boss comes in and tells you to build it seven stories tall, and get it done ASAP.

Sure, you can do it without redoing the foundation, but to add even more stories later, you’re going to have to revisit the foundation or the whole thing will come tumbling down. Or at least, it’ll be very slow to build that next floor.

Software is much like this. If you are rushing code to meet a deadline, you will go into design debt and that debt has to be paid off, otherwise future development will often slow dramatically and be much more error prone. The obvious problem is how do you sell this argument to your boss? From the business people’s perspective, you’ve delivered working software with X number of features in a short period of time. Why can’t you deliver the next X number of features in the same period of time?

Ah. Therein lies the rub! The business people don’t understand software, and by meeting their insane deadline, you’ve created the impression that…well…that is a normal project pace.

This is where Kerievsky believes the Design Debt metaphor may be of assistance. By phrasing it into financial terms the business folk can understand, the hope is they’ll trust you and provide time to pay off the debt. It’s a simple formula, If you go into debt. The debt must be paid.

Sure, I can meet this insane deadline. But we will go into debt, and it will have to be paid before we add any more features.

Try to make that an expectation up front if you can. It won’t always work, but if it never works, consider moving to a less dysfunctional work environment.

[Listening to: Suite No. 6 In D Major, Gavotte I - II - Yo-Yo Ma - The Cello Suites - Inspired By Bach CD2 (3:42)]

code comments edit

Found this post in RossCode which mentions a blog post that discusses how to bind enumerations to drop downs, something I’ve done quite often.

RossCode has an issue with using this approach personally because typically, the display text of a drop down should have spaces between words, which is not allowed in an enum value. For example…

public enum UglinessFactor {
    ButtUgly,
    Fugly,
    NotSoBad,
}

In the preceding enumeration, you’d probably want the dropdown to display “Butt Ugly” and not “ButtUgly”.

Well if you follow standard .NET naming conventions and Pascal Case your enum values, the following method SplitUpperCaseToString may be of service. It depends on another method SplitUpperCase which will split a camel or pascal cased word into an array of component words.

As a refresher, a Pascal Cased string is one in which the first letter of each word is capitalized. For example, ThisIsPascalCased. By contrast, a Camel Cased string is one in which the first letter of the string is lowercase, but the first letter of each successive word is upper cased. For example, thisIsCamelCased.

public static string SplitUpperCaseToString(this string source) {
  return string.Join(" ", SplitUpperCase(source));
}
 
public static string[] SplitUpperCase(this string source) {
  if (source == null) {
    return new string[] {}; //Return empty array.
  }
  if (source.Length == 0) {
    return new string[] {""};
  }
 
  StringCollection words = new StringCollection();
  int wordStartIndex = 0;
 
  char[] letters = source.ToCharArray();  char previousChar = char.MinValue;
  // Skip the first letter. we don't care what case it is.
  for (int i = 1; i < letters.Length; i++) {
    if (char.IsUpper(letters[i]) && !char.IsWhiteSpace(previousChar)) {
      //Grab everything before the current character.
      words.Add(new String(letters, wordStartIndex, i - wordStartIndex));
      wordStartIndex = i;
    }    previousChar = letters[i]; 
  }

  //We need to have the last word.
  words.Add(new String(letters, wordStartIndex,     letters.Length - wordStartIndex)); 
 
  string[] wordArray = new string[words.Count];
  words.CopyTo(wordArray, 0);
  return wordArray;
}

Try it out and let me know if it was useful for you.

UPDATE (8/3/2010):Fixed a bug so that this doesn’t affect strings that already have spaces in them.

comments edit

Perhaps it’s a rather innocuous practice, but after seeing one too many I am compelled to rant a bit, if only to be a total jerk. What do I speak of? I was going through the blogs in my blog reader the other day and I started noticing the predilection for geek blogs to have “cute” titles and/or subtitles with code snippets. I know we’re geeks, but must we be THAT geeky? It’s become so trendy that I must start the backlash now.

Since I know he can take some good natured ribbing, let’s start with my friend, Jon Galloway.

Title: JonGalloway.ToString()\ Is the ToString() really necessary? Seriously. Isn’t the title of your blog already a string? Hopefully the compiler optimizes this redundancy away.

Title: {public virtual blog}\ Next we have Ryan Farley’s virtual blog. Does a virtual blog imply that you’re not the one writing it, or that you feel your thoughts aren’t concrete? Perhaps the text we see really isn’t there, but are mere wisps of our imagination?

I’m sorry, but the title of your blog just doesn’t compile. Where is the implementation, the member name, and the getter? Perhaps you meant:

public abstract Blog MyBlog {get;}

Even so, you left yourself open for someone else to override your blog.

Title: protected virtual void jaysonBlog {A conduit to the voices in my head.}\ Another virtual blog, but at least this one is protected. Unfortunately, it doesn’t compiled (yes, I tried). And here I thought you were spreading better practices for C# coding.

Title: `(joe (@ (version "2.0")) ,(mk-blog))\ Subtitle: (define (mk-blog) (lambda () (begin (call/cc brain) (mk-blog)))) Joe Duffy couldn’t simply use a language we can all recognize. Nooooooo, he had to take it to the next level and go all the way to LISP. Does your mom read your blog? And does she worry that you spend too much time with the computer after seeing that title?

Title: Bob Yexley Net\ Subtitle: -- SELECT * FROM [bobs].[brain] WHERE category IN (SELECT title FROM [blog_Categories])\ And lest we leave out you DBAs, here is some SQL code from the subtitle of Bob’s blog. Good going Bob!

So as it is now apparent by now, my lashing out is merely a response to my own feeling of geek inadequacy when faced with true geekdom. In order to join the geek big leagues, I hereby re-title my blog…

.method public hidebysig static string YouHaveBeen() cil managed

{

    .maxstack 1

    .locals init (

    string title)

    L_0000: ldstr “Haacked”

    L_0005: stloc.0

    L_0006: br.s L_0008

    L_0008: ldloc.0

    L_0009: ret

}

I hope I am worthy.

comments edit

Ok, I am looking for some blogging fresh meat, so I thought I’d try my hand at starting a meme. The criteria is purposely vague and very simple. I want you to list ten blogs you’ve really enjoyed reading recently. Especially the underrated, undiscovered, recent finds. They don’t have to be your favorite blogs of all time, just ones that have caught your notice recently.

Here are the official rules…

  • The Blog must have an rss (or ATOM) feed.

Ok, that’s it. Here’s my list in no particular order…

  • Coding Horror\ Jeff Atwood does a great job of telling it like it is. He provides pragmatic insight into software development.
  • Apophenia\ Found danah boyd’s blog via Dare. She provides interesting insight into social networking softaware.
  • BurningBird\ Shelley’s always been a good read, but the pictures of balloons has pushed her way up my list.
  • .NET Undocumented\ I read Wesner Moise because he digs deep into .NET so I don’t have to.
  • ComputerZen\ For you .NET geeks out there, this isn’t really a find as his blog is quite widely read, and for good reason. He’s in this list as a sort of blogtime achievement award for continually putting out good content.
  • JonGalloway.ToString()\ Take my blog, remove most of the crap, and you have Jon Galloway’s blog. Yes, this makes my list despite the code title.
  • Sharp as a Marble\ Robb’s humor is sharp and biting. He can insult twenty generations of your family and have you laughing about it.
  • Dare Obasanjo aka Carnage4Life\ Look up the term Job Security in wikipedia and I wouldn’t be surprised if you found a picture of Dare. Only someone who knows he can get a job anywhere can say what he says about his employer and keep working. Fortunately someone over there recognizes he’s part of the solution, not the problem.
  • Neopoleon.com\ Need I say more? Only Rory can talk about suicidal thoughts and have you laughing about it. Don’t you feel like a schmuck now?
  • IanG on Tap\ Nobody is always right, except maybe for Ian. For a real in-depth insight into C# or IO Completion ports, Ian is the go to guy. This guy knows too much, I fear someone will take him out it.

comments edit

Leave it to Ian to cut through the crap and give a very clear and detailed account of what exactly the new var keyword in C# does.

When reading through blogs, mailing lists, and newsgroups, you can encounter a lot of noise from people who are just looking for something to rant about without actually taking the time to understand what they’re talking about. This can be about the most annoying thing in the world.

So if you caught yourself asking:

What’s wrong with “Object”?

I encourage you to read Ian’s post.