The Best Programmers

by Administrator 26. July 2005 19:26

All yuor best programmers are belong to teh Joel...

... or at least he'd like to think so. Joel is once again talking about the subject of who he hires and why and how.  When reading this article I couldn't help but feel like he took a lot of his ideas from Phil Greenspun of ArsDigita fame.  I really hate it when someone jumps up into the pulpit and preaches without letting you know that they didn't write the gospel.  Oh, but wait, here is an article where he mentions the impact Phil's ideas and practices had on him early on; sorry for judging too soon.  I very much agree with most of his points:

  • If you are doing business apps, you don't need the bestest programmers but you do need some higher level folks to keep the masses in line
  • If you want to do cool reasearch and be a creative scientist, chances are you'd be happier if you stopped writing stored procedures and ASP tags and went to work for a software product company.
  • Companies both large and small with an honest personal voice, all other things being equal, will often enjoy success

Is FogCreek making money because of Joel's Blog or the quality of their software, or both?  I don't know, but I do know I have at times been on either side of the "Polished Public Image" fence.  I keep my personal stuff seperate from this site just in case my political views or other personal quirks might make someone skip me over next time they are looking for people.  It also helps if your business clients do not view you as having the "Hacker Mentality"; you have to know that the business is going to (or should) drive tech choices even in the most enlightened work environment. If you are jumping up and down because you can't just write all your company's systems in PERL on LINUX and wear your mohawk to work and name your servers things like "" then people may not take you as seriously.  No matter how progressive you are and how well that helps you crank out great products  your clients have to take your seriously.  On the flip side, whenever I read a web site talking about how great a companys products/services will "Maximize shareholder value by minimizing risk and providing the greatest return on investment in the shortest amount of time", I wonder if I'm the only one who saw that on every single company's web site and wonder why this place is different from the shop next door.  With everyone making the same claims the personal voice does help you stick out a little bit.  Otherwise, people would just go through the "Maximize shareholder value by minimizing risk and providing the greatest return on investment in the shortest amount of time" checklist in your marketing materials, and then buy from whatever sales guy took them to the best clubs and golf courses.  Oh, wait...





Support MS Research

by Administrator 25. July 2005 19:17

That's multiple sclerosis, not Micro-Soft.

My friend Jason in Whitewater is riding 241 kilometers on his bike for charity and you can sponsor him at this URL

The $$ goes to multiple sclerosis research.  I'd much rather support things I care about this way than have uncle sam raise my taxes and decide for me what causes I should contribute to.



by Administrator 22. July 2005 15:21

Main Entry: vis·ta
Pronunciation: 'vis-t&
Function: noun
Etymology: Italian, sight, from visto, past participle of vedere to see, from Latin vidEre -- more at WIT
1 : a distant view through or along an avenue or opening : PROSPECT
2 : an extensive mental view (as over a stretch of time or a series of events)

Sorry, I think its a lame name.  I think WindowsExtreme or Windows++  would have been better choices, but I am a technical guy, not a marketer.


Auto updater

by Administrator 20. July 2005 21:22

So, I hear there are a lot of programs out there that check for newer versions when you run them.  As an end user I find this feature annoying more often than not: how many Windows Media updates are there per week anyway?  As a writer of software it is very nice to have an update feature built into anything you wish to distribute to more than 2 people.  There is a nice Updater Application Block, extensible and easy, and I think there are some partial ports to the compact framework or MSDN CAB-downloader examples out there.  From what I've seen these either don't suit my needs or would require some serious shoe-horning to make them fit my needs.  One of my favorite clients, with their non-Microsoft backend systems now needs Updater functionality, so I set out to design something flexible.

  • There is a custom sync process that runs while the system is connected, so I want to query a backend system for what updates might be available for the unit
  • I want to be able to download CAB files containing new versions of the main system (of course)
  • Download arbitrary files for that matter
  • I want to be able to Execute these CABs, and any other arbitrary shell executable
  • I want to be able to modify the local databases, they are huge so just rebuilding is not an option
  • I want to be able to have the unit upload arbitrary files

The reasons for these should be apparent but I'll explain anyway.  Suppose you have a change you need to make to a system that 100 people in the field are using:

  1. A new user enterable field is added to a table
  2. New software is needed to collect this data
  3. You need to alter the local data sources to contain this field

Based on this idea and others, I came up with a list of "Action types" I might want to do during an update.  I query the server for a list of updates passing things like the serial number of the device, and the server returns a list of these Actions sorted by order of execution.  Each action has its own attributes and method of execution so the updater program can kill the main application and polymorphicly go about doing what it needs to do with things like DownloadAction, SqlAction, ShellExAction, UploadAction.

Obviously there is some work to be done on the server, essentially this will be a webservice that returns a message with the ordered set of Actions in it.  This is more work than a file-based solution but also gives us the flexibility of being able to configure different updates for different devices.  You probably don't want too many different versions of your software running, but the actions can be used to assist technically challenged users with deleting temp files, distribute customer-specific content, delete troublesome SqlCE data, etc.  Due to various other aspects of our software its easy to set up a nag feature where the user can choose to skip the update a certain # of times and other useful stuff.  The upload actions can be either FTP or HTTP PUT.

Since I mentioned it, I'll have to post about custom data synchronization processes in the future as well, since I think I've got a pretty good one and as one respected member of the Compact Framework newsgroups says "It is not trivial to go that route".  Sometimes Merge Replication just makes you want to shove salt-covered icepicks through your intestines though, and I think a lot of people would use a custom sync processes if there was a proven one out there.



Another Project

by Administrator 18. July 2005 14:52

Well, this is what, four non-code posts in a row?  I'm slipping.

I spent some time going over some client work this weekend and it seems that I am catching up.  It seems that I might be getting close to the Period of Rest I've been looking for, this is less satisfying that it would be if my new home was anywhere near completion.  I still have a couple of bigger things that I could work on but these hold the danger of me getting too far ahead of client requirements, the old "Go ahead and work on it but I won't have time to tell you if its right" hurry-up-and-wait.  In light of this, I turned back to something that had been shelved for a while: something I call Project Cesium.  I have alluded to Cesium a couple of times on this blog and to friends, hinting that this may be a press-release-worthy item at some point.  I started working on a re design and some code Saturday afternoon.  Stay tuned for an early 2006 release of something that will hopefully be a big deal.


Be Progressive

by Administrator 15. July 2005 17:54

Like a lot of people, I tend to define goals for a year at the beginning of each year.  Many of them are typical: get in shape, pay off debt, etc.  Once I went a whole year without consuming alcohol.  Since you're curious, this year's item (I assume you are curious or you would stop reading) was to make a great deal of $$ so that next year I can relax more.  At any rate, I'm adding one UberGoal™ right in the middle of the year.  Yes, I know its not a best practice to change the deliverables in the middle of a project but management says this is important.

My goal is to Be Progressive.  There are a lot of ways that we should just Do The Right Thing that we don't, some of them vitally important to our position in the world and our continued prosperity as a species.  I have some specific things in mind:

  1. Use the metric system as much as humanly possible.  The current NASA fiasco reminds me of just how silly it is that we are not using the metric system.  Being an obnoxious elitist, imagine the fun I'll have telling people how many Kilometers it is to my house, how many liters of beer I drank at the Nerd Dinner, or how good the 700 gram steaks I ate were, or how many kilowatts of power and newton-meters of torque my WRX has.  This will be kilograms of fun!
    1. Action Item: SmartPhone program with conversion rates for everything.
    2. Action Item: Refactor common sayings such as "Kilograms of fun", "A kilogram of cure is worth a gram of prevention", "Go the extra kilometer", "A journey of a thousand kilometers is begun with a single step", "This weighs a Metric Ton", "I'll bet you can't drink 1.83 liters of milk in under an hour", "The whole 8.73 meters", "Give them a centimeter, they take a decimeter"
  2. I cannot type as fast as I used to, due to the Carpal Tunnel/tendonitis brought on by me working way too much.  Contemplating this, I recalled the bit of trivia that the Qwerty keyboard layout was specifically designed to make typing as slow and uncomfortable as possible back in the Golden Age of Typewriters.  Considering the amount of work that is done on PCs these days, my bean counters estimate that this costs us approximately Eleventy-gazillion (0xff∞E^eleventy) in productivity losses each year, mostly in email and MSN messenger related time loss and overly verbose VB.NET code.
    1. Action Item: Obtain, learn, and evangelize an alternate keyboard
  3. Look into renewable energy as much as one man can.  Am I the only person who can see the upward curve in gas price is going to have us paying over $1.20 per liter as soon as next year?  This does not mean I'm buying a hybrid car: I hate to be the one to say that hybrid cars are a joke.  The amount of energy a hybrid car will save you in gas over its lifetime is not as much energy as it took to create the battery in the first place.  How did the power plant make the energy to make your battery in your hybrid car?  Why, burning fossil fuels of course.  On top of that, due to the principles of Entropy, a lot of energy is being wasted in this transformation as well.  That's right, Hybrid Vehicles are driving gas prices up.
    1. Action Item: Laugh at people who drive hybrid cars
    2. Action Item: Look into solar panels on my house, assuming they do not suffer the same drawback as hybrid cars.

That's enough for one year.


.mobi domains

by Administrator 12. July 2005 15:14

So we are going to have ".mobi" domains soon, the idea being that these are meant for mobile devices.  One one hand, I'm all about mobile.  On another, sounds like a way for registrars to make more money.  On another hand, is it so hard to detect the user agent on your server and direct them to a mobile version of your site?  Haven't we had tools to do this for a while?

Next up, ".moz" sites for the anti-IE "look at our CSS implementation" crowd...


Still Alive

by Administrator 11. July 2005 15:21

Two weeks without an update seems like a very long time.  I assure you I am still alive.  As I have indicated in the past I am building a new home, and we have been in the process of selling the existing home and moving into an apartment while the new home is built.  About the only non-essential activity I have done in the past two weeks is convert my personal site over to DotNetNuke 3.  Overall I'm pretty happy with DNN but I do have a couple of minor issues.  For each module, there seems to be 8 different Settings links such as "Configuration", "Settings", "Manage".  I installed the forum/blog with no issue but "Gallery" blows up, to be fair these are listed as Beta.  Maybe my photos will just be an iframe containing Flickr anyway.

Until at least this week Friday (7/15/2005) I have to continue to focus only on essential activities.  Explosions, crypto, CompactFramework 2, and other promised goodies have to wait.


About the author

Damon Payne is a Microsoft MVP specializing in Smart Client solution architecture. 

INETA Community Speakers Program

Month List

Page List

flickr photostream