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.

comments edit

Certainly there’s been a bit of a bad reaction regarding the name changes of Indigo to WCF and Avalon to WPF.

What were once creative names have been exchanged for rather droll ones. Much like expecting to go to amusement park but ending up in a business park. However, creative names can have their downsides.

I recently started reading a book to get more in-depth knowledge of a version control system I am using on a project. In these times of heightened tensions and when the President tells us to be ever vigilant, the stares I get while reading my copy of Practical Subversion can be a bit unnerving. I can just hear the thoughts going on in an observer’s head.

Well at least he’s not reading Radical Subversion.

comments edit

In 1582, the Julian calendar was really starting to show its age. A bunch of brains got together and came up with the Gregorian calendar, which was received by the general population with a big middle finger in the air. Many saw it as an attempt by greedy landlords to cheat tenants out of a week of rent.

That’s when Pope Gregory XIII got involved and flexed his Papal muscle. He decreed that the day after October 4, 1582 would be October 15, 1582, thus inventing time travel. I personally have tried this move to gain early access to my retirement money without penalties, but to no avail.

The Gregorian calendar ended up shoved the Julain calendar aside and has been in place ever since. In truth, the Gregorian calendar is merely a modification of the Julian calendar in which years divisible by 100, but not divisible by 400 do not have leap years.

But enough history, after 423 years, Josh Baltzell has recognized that the Gregorian calendar is in need of an overhaul. He proposes refactoring the months so that each month is only 28 days. This would require adding an extra month. Personally, I am in favor of any proposal that will add another picture to my Code Listings of the Month centerfold calendar.

Check out his proposal and let him know what you think.

comments edit

Picked up our airline tickets to Spain today. We’ll be visiting in November, landing in Madrid, travelling through Andalucia and ending up in Barcelona. The main thing I want to visit in Madrid is the area where I used to live called Torrejon de Ardoz.

On the way there, we have a five hour stop over in Philadelphia. Apart from eating some cheesesteaks, anybody know what there is to do in Philly?

comments edit

UPDATE: Looks like I was sleeping during my class on 70s funk. It was Albert Hammond who wrote It Never Rains In Southern California, not Kool and the Gang. Thanks Jeff.

Raining in Los
angeles It’s really a funny site to see how Angelenos freak out when it rains here.

Contrary to the axioms of Kool and the GangAlbert Hammond, it does rain here in Southern California. Of course it is so infrequent that people talk of the last time it rained as if describing the fish that got away.

Why, the last rain made the Noah episode look like spit in the desert.

In any case, the sound of rain on the rooftop and thunder in the distance makes it very hard to get out of bed for me. But out of bed I am as I have plenty of work to do.

comments edit

You’ve no doubt heard me rant against premature optimization in the past, but Eric Gunnerson points out another “Premature” action to be avoided, “Premature Generalization”.

His discussion centers around a very specific question of whether to use private properties to access private fields, or just allow access to the field. Note this discussion pertains to fields that are not publicly accessible via property nor direct access.

The place you’ll often see premature generalization is when inexperienced developers start applying Design Patterns everywhere. If you need to instantiate a factory, implement an adapter class and use a bridge to the toilet just to take a dump, then you probably live with a developer with a premature generalization problem.

Like optimization, generalization is good when it is applied judiciously in the right places. With optimization, one should measure measure measure before applying optimizations. With generalization, I typically suggest that a developer must feel the pain first before generalizing. That simply means that the lack of generalization is starting to cause more work than it saves. In my experience, this often boils down to the rule of threes. If you have to implement something a third time, refactor it.

For example, suppose you have an import tool for some system and as far as you know, you’ll only have to support one import client. By all means write an importer specific to that client. Now your boss tells you to implement an importer for another client. Write that one specific to that client. Once again your boss tells you to implement an importer for yet another client. At this point a pattern has been established. Your boss is a liar and you’ll probably need to implement importers for many clients. Now is the time to refactor the code and generalize the concept of importers. Maybe create a plug-in model or an Import Provider.

[Listening to: Cass & Slide / Perception - Sasha - Sasha: Global Underground: Ibiza [2 of 2] (9:27)]

comments edit

It wouldn’t be fair to point out the mistakes of other developers being lazy without pointing out that I have been very guilty of this myself. The point of the post is not to trash another person’s coding habits, but to present an ideal to work towards. Sometimes, intellectual “laziness” is absolutely necessary as in the example presented in the comments of that post.

When I started off as an ASP developer (remember VBScript?) I needed to store name value pairs within a cookie. So I started off storing a string like so in the cookie.

Response.Cookies("ChocolateChip") = "name1=value1,name2=value2,..."

But I ran into an issue that some of the values contained commas, so I chose a delimiter I was sure would never be in the content…

Response.Cookies("ChocolateChip") = "name1=value1*&*name2=value2*&*..."

And proceeded to write a butt load of string parsing code to insert and extract values from the string, making sure not to insert duplicate names, etc…

Of course later, I got around to reading more about Cookies in ASP.NET and I discovered that you can create cookies with keys. So the ugly code above became…

Response.Cookies("ChocolateChip")("name1") = "value1" Response.Cookies("ChocolateChip")("name2") = "value2" '...

Had I spent a few extra minutes up front reading about cookies rather than programming by intellisense, I would have saved myself a lot of time. In the end I ripped out my code and used the built in mechanism.

<blatantLie>To my defense, I was only five at the time and I had been hit by a bat earlier that day so I was seeing double.</blatantLie>

comments edit

Lazy A while ago, Jeff Atwood wrote about the merits of laziness for successful software developers. Lest this become the mantra of sub-performing developers everywhere, I wanted to follow up with a clarification.

It’s fine to be lazy as he describes in the article, just don’t be intellectually lazy. What do I mean by this? First and foremost, when you are writing code, make sure you really understand what the code is doing. The classic illustration of mental laziness is encountering an off-by-one error.

When encountering the error, the lazy developer would simply append a “

  • 1” to the end of the stament, re-run the code, and if it seemed to work, move on. Or they might change a “< x” to “<= x” For simple cases, this may be the correct solution, but the problem arises when the developer doesn’t take the time to evaluate why the error was made in the first place. Sometimes, the simple fix only works for a narrow range of inputs and masks a larger error.

This solution is merely one example of a whole class of anti-solutions I call “Try It and See” solutions. The developer simply moves code around a bit and crosses his fingers to see if it works.

Off-by-one errors are only the tip of the iceberg. This class of anti-solutions often come up when when a developer is using a framework such as ASP.NET in which he is unfamiliar.

On a recent project, I noticed one of the developers had put nearly all of the page logic within the PreRender override. I asked the developer why he put it there, since the proper place would have been in OnLoad. He replied that OnLoad was too early to run that code because the controls didn’t have their settings from the inline control declaration within the aspx file.

Hmm, I’m pretty sure they would be there by then I told him, and he said in his experience, they are not. So I emailed him the order of events within the ASP.NET page lifecycle and pointed out that the method AddParsedSubObject happens after the constructor and way before OnLoad is called.

I believe that he did encounter a weird problem a long time ago with control declarations not filtering through, but rather than dig into the problem and really understand what was going on, he simply moved the code to PreRender, saw that it worked now, and cleared his hands of the problem.

I can understand that on a rush project, there’s a temptation to simply try things till they work and then move on, but you will save more time in the long run if you take a break and dig into the problem to get a real clear understanding of what is happening.

Likewise, spend time getting up to speed on the framework you are using. For example, ASP.NET has a usable form validation framework. Learn it. Use it. There’s no point in wasting time writing your own framework for validation unless you know the ASP.NET validation framework inside and out and really need to work around its limitations. And if you are going to write your own, consider buying a package first such as Peter Blum’s validation package.

So once again, be lazy, but not mentally lazy. Write unit tests up front where they make sense. Learn the framework you are using. Understand the code you are writing or debugging. And in the long run, you’ll be making your life (and your coworkers lives) easier. Perhaps that’s the true laziness.

comments edit

dsc00687 I am back from our first Board of Director’s meeting in San Francisco. The sheer amount of legal formality required in conducting business as a corporation is really quite interesting. They aren’t kidding when they say it will increase the amount of paperwork you deal with.

Just as an example, my business partner Micah needed to open a business bank account a few days after incorporating. He approaches the teller and she informs him that she needs to see the minutes to a company meeting.

Not one to be carrying the minutes to all his meetings in his wallet, Micah was in a bit of a bind. However, one of the bank employees had the proper form to fill out for the minutes to a meeting. However, by law, there has to be a minimum of ten days and maximum of thirty days notice to the shareholders of a company before a shareholder meeting may commence.

So you can see the conundrum here as in this situation, Micah had only given himself about five minutes notice, well under the required ten days. Fortunately, there is a waiver form a shareholder can fill out to state that he or she did not receive the ten days notice, but that it is just fine with the shareholder. So as the sole shareholder, Micah had a quick meeting, filled out the minutes, filled out the waiver, and got the damn bank account open.

comments edit

Mathematicians and Computer Scientists know that the Donald that has had real impact in our world is Donald Knuth, not Mr. Trump. He is a giant in the industry and very well respected.

He’s also tireless and persistent. Consider this, he has been working on his seminal work, The Art of Computer Programming for 43 years and he figures he has 20 more years of work left. Volume 2 of the work, Seminumerical Algorithms, formed much of the backbone for my college thesis on pseudorandom number generation.

So it is with great amusement that I read his letter to the w3c flaming them for depracating certain html elements and attributes. Good find Dare!

comments edit

dsc00694 Akumi and I decided to turn the business trip into a short weekend getaway. After the meeting, we all went out to Espetus, a brazilian churrasco place. Each table had a simple dial. Turn it to green and the waiters with the sticks keep coming to your table offering slices of sweet glorious meat. Turn it to red to put a temporary end to the gluttony. Needless to say, it took an extreme amount of willpower to turn that dial to red once we set it to green.

The next morning, Akumi and I ate at a fantastic Dim Sum place, the name escapes me right now but we have the card somewhere.

Once again gorging ourselves, we were pleased to have a bill with a grand total of just some pocket change over twenty bucks. What a deal!

We then met up with an old friend of Akumi’s and the friend’s wife. The friend is a product designer and works for the very well regarded IDEO. His wife works at a marketing agency and is responsible for the Banana Republic account. They are what are known as “creative types”.

After a great time with them, we checked out some stores, I played with the PSP at the Sony Metreon, then we headed over to Oakland to catch a plane back. Now I’m up way too late for my own good hacking away at this blog. Good night.

comments edit

Just got back from the PDC Underground at the Westin Bonaventure which had its fair share of great and not so great grok talks. I went with Micah and Jon and met a few people I’ve only been acquainted with via subscribing to their blogs.

One is Jeff Key who is a heck of a funny guy. Also met Stuart Celarier who had a long day overseeing the BOFs and didn’t arrive at the Westin till past midnight.

Also making a quick appearance was Don Box sporting a shirt with “WTF?”. I thought he was pimping The Daily WTF but he informed me that it stood for Windows Transaction Framework. WTF?

Of course I ran into the ever friendly and communal Adam Kinney.

comments edit

Walt provides this interesting look at how blogs have some influence within the Senate confirmation hearings for Judge Roberts.

One of the Senators, who had read the blog (or more likely, whose staff had read the blog) asked Judge Roberts which type of umpire he would be…

More interesting than the substance of this exchange is that blogs are actually influencing the Senate confirmation hearings for one of the most important positions in our government!

Now I just need to get these Senators to read my blog so they can ask the really pertinent questions such as:

  • Are you an “in-y” or an “outy”?
  • Boxers or Briefs?
  • Tastes Great or Less Filling?
  • Mac, Windows or Linux?
  • Will you be the first Supreme Court Justice in history to have a blog? (editor note: Yeah, right.)
  • Value Type or Reference Type? And if Reference Type, in which circumstances would you implement IDisposable and in which cases would you choose to implement a finalizer? Please frame your answer by considering how the power of Eminent Domain figures or doesn’t figure into this discussion.

The public wants to know!

[Listening to: Porcelain - Moby - Play (4:01)]

comments edit

Well I’ve kept this relatively quiet long enough, but since Jon Galloway spilled the beans, I might as well mention it. I am no longer an independent consultant.

Yep, I am rejoining the corporate rat race as an employee complete with W2…but with a twist. I have accepted a position as Chief Technology Officer of VelocIT (pronounced the same as “Velocity”). The twist is that I am also a co-founder and part owner of VelocIT, so it makes the idea of being an employee again much more palatable. ;)

I was hoping to save the announcement till we had a real website, but that could take a long time with the sheer amount of work we have already. So until then, I’ll just make my blog the unofficial de facto VelocIT website.

This has been a dream of mine for a long time now. It’s a chance to conduct a grand experiment in how my business partner Micah and I think a company should be run. For example, I am a big fan of transparency and open book accounting. I just don’t see how restricting the information your employees have access to helps them perform better.

I am also a big fan of the ideas in Growing a Business by Paul Hawken.

If you haven’t read it, I highly recommend it. One of his main points is that simply following a standard generic business model does nothing to distinguish a business from the hundreds of other carbon copies. Instead, a good business should reflect the values and personality of its founders. It should be as individual as you are. Think Ben & Jerrys and you start to get the picture.

He also talks a lot about trusting your employees. For a long time I have seen many companies make the mistake of not trusting and empowering their employees to make decisions. Now I have a chance to really put my money where my mouth is and attempt to push responsibility and trust down and see what happens. Obviously this requires that we make a great effort to hire people deserving of trust and capable of handling responsibility.

We have already identified one of those people in Jon Galloway who will be working with us as a contractor and who we hope to eventually hire on as an employee. I’ve read his blog for a while and he is obviously a top-notch developer and a pretty decent fella as well.

VelocIT is at its core, a consulting shop, but we are focusing on being Solution Architects. When I described VelocIT to my former CEO (and current client), he remarked, “Oh. So you’re like a portable CTO.” That hit it right on the mark. Although we can handle any point in the technology project lifecycle, our strong point is partnering as a portable CTO. As such, we constantly seek the most cost effective solution for our clients. Custom software development will usually be the option of last resort, and usually only to tie together and integrate various systems. If custom development is needed, well you found the right people.

If you’ve read my blog for a while, you’ll know that I am a big fan of open source software. I am a firm believer that there are viable business models with open source software. Just take a look at chapter 1 of this pdf book, Open Source Development with CVS to get some ideas.

In the short term, my involvement with such OS projects as RSS Bandit and Subtext will suffer a bit (But don’t worry Dare and Torsten, I’ll get that Help thing done soon). But in the long term since we plan to leverage open source software such as Subtext, DotNetNuke, Blue Whale CRM, etc… in projects where they provide the most value to our clients, I foresee making more contributions to them in the future. We just need to staff up and free me up to remain more high level than the day to day coding I am doing now. Don’t get me wrong, I love writing code, but I prefer writing open source code.

So in the meanwhile, wish us luck and send me an email if you need our services haacked at gmail dot com.

comments edit

Perhaps I have a skewed view of reality, but I get the impression that software geeks are leading the charge into building the next generation of social software. Does it strike anyone else as odd that nerds are the ones defining the technologies and interfaces for people to become social? Is this some sort of Revenge of the Nerds we plan to inflict on the “cool” social butterflies who spurned us in our youth?

Maybe they are not so visible, but I would expect to see the technology leaders pushing the social software revolution to publicize their top notch sociologists alongside their technologists. Hey, we love your tech-guy’s fantastical AJAX framework, but is it really fostering social networking and community growth? How are you measuring that? Where is your Chief Sociologist Architect?

comments edit

UPDATE:Well it turns out that half of WebHost4Life’s servers didn’t have enough backup juice to stay up. Guess which half my blog was hosted on? Yep! But it is back up now (which is obvious otherwise you wouldn’t be reading this).

Umm… sorry folks. I may have tripped on the power cord leading into Los Angeles. I plugged it back in quickly. My power was only out for around a minute, but others have been down much longer.

Yahoo news has the more detailed story.

comments edit

I distinctly remember sending a memo to my body years ago that illness is no longer permitted. But here I am with a persistent cough and lack of energy. I think I’ll have to let my body go and hire a new one.

comments edit

I learned through Mr. Wagner that my former employer just announced the first ever million dollar skill game tournament.

To win the tournament one must be the best all-around at their three most popular games, Solitaire, Zuma and Bejeweled 2. These games are among the most popular “casual” games around. Casual gaming is the term used for games that do not target the hard-core gaming audience such as Half-Life and Quake. The typical casual gamer is a thirty year-old mother in the midwest.