Telecommuting Experiment Concluded

Grid 960: Zapisi 5

Three months ago, folks, I began “The Telecommuting Experiment” with what I now know as a small “start-up” based in the Pacific Northwest. This little ditty has come to a conclusion and I have learned loads of new things about building Web sites. My job now is to ramble though all of these things as best I can, using a few links along the way:

CSS Stuff

My biggest of the spoils taken from this intense Web-building experience is revisiting grid-system theory and frameworking—in short, I was exposed to the 960 grid system. This system is far more mature, modern and elegant than my Biggest Box stuff.

A little less embarrassing than my previous ignorance of the 960 grid system is not knowing about Flash of Unstyled Content (FOUC)—very hip jargon. I got FOUC for free with jQuery UI widgets. In “How to prevent a FOUC but still gracefully degrade the jQuery UI tabs,” Timothée Carry-Caignon writes, “They are pretty useful actually, but I always hated that FOUC they produce. For one split second, you’ll see all your tabs content, then they’ll be neatly re-arranged in tabs.”

In “Styling select, optgroup and options with CSS,” Chris Hope says, “As per my conclusion at the end of the post, it’s probably better to leave styling of select boxes, optgroup and options alone and just leave them as the defaults because cross browser styling is so inconsistent it’s not worth the bother.” I agree with this but I often forget about this—so writing this down (finally) might help me.

Eric A. and Kathryn S. Meyer have CSS Reset. I can appreciate this but do not find it necessary. But remember this coming from the guy that had no idea about the 960 grid system.

“Pure” JavaScript Stuff

The number one “pure” JavaScript takeaway for my 2011 is Underscore.js—whenever there is the desire to some LINQ-like things in JavaScript this is the place to be. The _.sortBy method described in the docs had me at hello.

I do risk being perceived as “negative” instead of accurate when I must mention that there is thing I’m calling JavaScript bloat. My use of the term comes not from seeing file payloads over the wire. What gets me is the sense that the web browser is working very, very hard to crunch though the script code in memory. Because I know what I can do in Silverlight (and Flash/Flex) I am not biased toward trying to get HTML/JavaScript to do “everything” such that the bloat gets out of control—these bloated stacks may be working just fine on a developer’s gaming PC but taking the client-side code to more economical devices (in terms of cost, power consumption and thermal waste) shows how things fall apart.

jQuery Plugins

This article, “Looking for a JQuery plug-in similar to [Accordion], but that allows multiple sections open at once,” underscores the

The jQuery Time Entry plugin seems to work without any surprises.

Eric Hynds has this jQuery UI Multiple Select Widget that impressed me in the field. I’m feeling like it can be alternative to tree views—speaking of which jsTree worked without unexpected inconveniences.

jQuery Plugins: Hiding/Showing Certain Super “Rich” Widgets, an Unexpected Inconvenience

Super rich widgets/plugins like SlickGrid and CKEditor have super-inconvenient unexpected behaviors when attempts are made to wrap them in containers that hide and show (like sticking a grid inside of an accordion panel). It was difficult to accept that I had to call some kind of refresh method (in the case of SlickGrid) or destroy these visuals and rebuild them (in the case of CKEditor—it has a “destroy” method). But I had to accept this for last three months.

Visual Studio 2010, an Early 2010 Version of CodeRush and VS Extensions

Visual Studio 2010 Weirdness

I have this picture that I showed to Seth Juarez of DevExpress. He’d never seen anything like it. I was getting this annoyance every few minutes followed by the error message, “Visual Studio has encountered an exception…” This was really getting in the way over the last few months. I have uninstalled CodeRush and have not seen the error since. I am still not convinced that CodeRush is culprit… it could be other Visual Extensions (as the error message denotes) but the extensions one would suspect are all written by Microsoft and are quite popular (like PowerCommands for Visual Studio 2010 and Productivity Power Tools).

Visual Studio 2010 Weirdness

Mercurial and Bugs

In “The IT Workplace: Doing it Basil Style,” I wrote about the excruciating experience of having my code overwritten—especially when working by the hour with a bunch of miserly cretins. What I have experienced with Mercurial over the last three months effectively takes that pain away… I was using Mercurial with Kiln from the Joel Spolsky camp. Mercurial allows developers to have local repositories—so this whole overwriting thing can happen on the communal server but, locally, there should be a changeset to run hg merge (see “How to fix multiple heads?”).

Yes, speaking of Joel on Software, I did use FogBugz over the last quarter but I can’t really say much more about it—apart from having no complaints about user experience. With FogBugz and Team Foundation Server (before), I am already used to writing comments about resolving a bug—but what’s new for me now is writing down the analysis process—describing what I call the bug situation. I find these advantages:

  • These writings about the bug situation can turn into email messages for another programmer better positioned to resolve the bug and can use your writing as instructions to get the job done, very, very fast (and look very impressive to penny pinchers wearing rose-colored glasses). This happened to me twice just over the last few days—and I’m willing to do this again (I don’t care about making other programmer’s look “good” in the eyes of unobservant managerial types in a healthy job market).
  • It helps me to actually learn about someone else’s code instead of looking like I have learned about the code—I don’t look like that.
  • It helps me to actually manage the complexity of an application instead of being intimidated by the complexity of an application.
  • It helps me to remember the particular viewing angle into the tiers. I often rebel against a design that I assume is too complex and I have difficulty remembering what I’m looking at…
  • In most “fast paced” environments you have no idea which bug will take five minutes and which will take three days (this is actually a sign of managerial/architectural problems or a sign of “rock star” programmers hiding their faults from managers that trust them—or both). By journaling through the bugs you can get a better idea about which ones will be “easy” and then the others…
  • It helps me deal with what I consider one of the worst kinds of bugs: bugs that are actually requests for missing features. What can be quite evil is when these “bugs” are “sincerely” regarded as trivial issues when these are actually serious, full-blown development tasks. What this can mean is that the “rock star” programmer of the IT shop is not really doing their job and is marking tasks as complete when they are not. This makes the “rock star” appear timely, on schedule when they are really passing the buck among penny pinchers.

Formally writing down the bug analysis should be considered a part of the analyst part of the job title Programmer/Analyst, which I have held for many, many years. I have no guilt, hate or deformed respect for any penny-pinching barbarians out there that are quick to assume that you are trying to overcharge them for spending an hour (or more) analyzing a bug. These cheap folks can’t have it both ways: a bug quickly marked resolved and a resolution carefully done that does not cause regression (or a new bug).

One interesting thing about FogBugz is the concept of Evidence-Based Scheduling (EBS): “EBS doesn’t give you a single ship date. Instead, it produces a probability distribution curve. That means that for any given date, it tells you what the probability is that you will ship by that date.” EBS is quite different from GBS—Greed-Based Scheduling.

The Telecommuting Experience

I can find another job. But I am not likely to find another telecommuting job. This job allowed me to take my seven-year-old daughter to school personally every day. In spite of the huge technical benefits, this time spent with my daughter was the greatest reward of the experiment.

It is very likely that I will return to fossil-fuel commuting.

Related Links

What’s most busy about the IT consulting business…

The highest demand skill in the IT consulting business is never asked for explicitly by clients and has nothing to with technology. The highest demand skill in the IT consulting business is the ability to undo the mess your client got himself into—and I deliberately use him because this is really a guy thing. We have all heard tales about guys that refuse to ask directions when driving completely lost. Now imagine trying to be a “team player” with a guy that is in your opinion lost—and you know that your opinion has little effect on the situation even though you have been hired as a “consultant.” This has been the running theme for most of my career—only in recent years has my work with clients made a turn for the better.

An excellent mental health exercise for an IT consultant is to examine the word professional—instead of just blurting it out. Inside this word is profess—what this means to me is that a professional has the ability to “claim openly” or publically. The ideal engine driving one to make such “open” claims is fueled by accurate, researched information. In the IT business, accurate information comes from the tool makers like Microsoft, Oracle (Sun), or the auspices of an Open Source project—maybe a University. When your client fails to recognize the existence of this third-party research while at the same time using said third party’s tools then in my opinion you are up shit creek—a creek probably polluted by the company that hired you…

Here are some things that can happen while you are up shit creek:

  • The definition of “professional” changes into the ability to put lipstick on a pig in an elegant, quiet, polite manner. Pay that mortgage and shut the f’ up.
  • Your client is effectively in conflict with their tool makers. This means you are fighting on about three fronts: battling the actual business “challenge”; battling the tool maker; and battling legacy issues associated with the new “challenge.”
  • Your client may wonder why you are unable to perform “professionally” under these circumstances instead of actually looking at the real problem. It’s a childish, fascist impulse that is almost impossible to resist.

FOWA 08 - Password Anti Pattern

In the same manner Warren Buffet would refuse to invest in company he does not “understand,” you have the human right to invest your energy in other companies, organizations and other parties that appear to actually have a professional technology plan. In the same manner that business planners are expected to summarize their strategy with a single coherent sentence, your clients should have provided you with enough information to profess their technology plan with a single coherent sentence. Sometimes we may confess instead of profess (listen to “this developers life 1.1.1: scars”)…

From my experience, the leading reason why clients get themselves into a mess (they have tacitly asked you to get them out of) is because they have ignored/defied their tool maker. Your client and you are swimming a soup that the tool maker never told you to cook. It has taken me way, way too long along the timeline of my career to actually get proactive and begin to look for patterns (actually anti-patterns perhaps) of such ignorance and defiance. I confess that I tend to concentrate on researching my tool maker (Microsoft) instead of researching “bad” (but cash rich) clients. I am unable to even recall a book about this subject—especially in the Microsoft world. I have no pipeline in place to collect such information. My attitude has been one of aggressive divestment a la Warren Buffet—which should strongly suggest that I have no mortgage to pay. Oh, when will I grow up?

Here are some Microsoft-centric 30,000-foot anti-patterns I can barely recall:

  • Using Microsoft Access (*.MDB) as a LAN-based DBMS for dozens of users, when it was designed for one user on one desktop (c. 1996).
  • Using Microsoft Access as a database for a web site (early 2000s).
  • Running ASP sites with global DLLs that get locked by the Web server process (early 2000s).
  • Using Microsoft Office effectively as a frontend (without SharePoint) while using Java-based server technology as a backend (UCLA MCCS, early 2000s to present).
  • Using Microsoft FrontPage for anything (all eternity).
  • Using Windows Forms 1.0 for anything (all eternity).
  • Using ASP.NET Web Forms and Server Controls with a view to being standards-compliant and cross-browser compatible (early 2000s to 2010, yes 2010).
  • Using JavaScript according to the Microsoft-tooled vision of Jscript (early 2000s to 2009, with jQuery).
  • Using more than a handful of ASMX Web Services per ASP.NET project (for all time: use WCF).
  • Attempting to customize SharePoint (for the lifetime of the product to the present …perhaps).

One of the mature things I have accomplished recently is consciously accepting that my tool vendor, Microsoft, was not exactly fostering a culture of tool-maker compliance for many years. Microsoft has profited to the tune of billions with the rollicking banjo music of wild-west mentality… The earliest technology evangelists from Microsoft that I can recall are: Alison Balter (1994), Paul D. Sherriff (1991), and Don Box (turn of the century)—none of these folks left me with professional theories that I can recall (apart from Relational Theory and this little thing called “OOP”). Now we have the Scott Guthrie generation at Microsoft, trying to introduce a cornucopia of publically-accessible theories to customers with acronyms like MVC and MVVM in the face of massive legacy—Wild-West, COM-based legacy written in HTML (using all caps for tag names) and this weird thing called “HTC”…

Microsoft has two massive product spaces: Dynamics CRM and SharePoint. As of this writing, deep into the 21st century, none of these products reflect the new Scott-Guthrie-style professionalism that should make serious investors happy. Microsoft itself has a Wild-West legacy load that it is digging itself out of… because old cash cows can’t be abandoned for greener pastures…

Related Links

Finally Talking about Windows Media Player

About Face

Let’s not get it wrong: Windows Media Player (WMP) is better than iTunes, VLC, Winamp and this thing called Media Jukebox. The main advantage WMP has over almost everything else is it’s recognition of the file system. I am flippantly certain that the Zune desktop team purposely ignored seriously supporting the Windows file system because their model customer does not understand the file system.

Alan Cooper the “Father of Visual Basic,” made it clear to me in the first edition of About Face: The Essentials of Interaction Design that the concept of the file system was never meant to be understood by the general public. So the Zune team, writing software for multiple platforms has bypassed it entirely, preparing for the “future.” I can’t do that. I made the “mistake” of using the file system to categorize my music collection—the folders my music use have semantic meaning. Because Windows 7 uses the concept of the Library—and WMP fully exploits this—my folders have meaning.

One of the most frustrating things about Windows Media Player is its deliberate lack of rich support for album art. In 2007, Dale Preston writes:

To be honest, what I believe is going on here is that the Windows Media Player product team has sold out their customers in the interest of better relationships with the content providers and have limited us to low quality artwork in an attempt to protect copyrights of the music producers. Of course they totally ignore the fact that if I own a CD, I am well within my rights to create an image of my CD and display or use it as I please. Let alone the fact that, for all they know, my custom artwork could be totally custom art that is my own intellectual property and yet they destroy it without any warning, without creating any backup, and without ever giving me the choice to opt out.

So when I write my list of what I dislike about WMP, I am aware that many of these gripes are popular and quite legitimate—but Microsoft’s need to please entertainment corporations with documented historical ties to the mob tells me that these issues are not simply technical problems to overcome. Many of these “problems” are actually artifacts of a political view of “the consumer”:

These problems with Windows Media Player have existed for years—this is telling me that the product is ‘kind of’ abandoned.

IronRuby is not “dead”—just very, very tiny…

I had to add IronRuby to my Word 2010 custom dictionary in order to write this article without proofing errors. So, clearly the Office Team has not heard of IronRuby. John Lam is IronRuby as far as I’m concerned. But, back in the 11th month of 2009, he writes in “Passing the torch”:

The IronRuby project is still going strong, and is in the capable hands of Jimmy Schementi. It’s heading towards a 1.0 release (0.9.2 today), and Jimmy is going to lay out what that roadmap looks like at RubyConf on Friday.

Then, in the 8th month of 2010, Jimmy Schementi in “…the future of Jimmy and IronRuby” he writes:

…my last day as a Microsoft employee was July 23rd, 2010… Overall, I see a serious lack of commitment to IronRuby, and dynamic language on .NET in general. At the time of my leaving Tomas and myself were the only Microsoft employees working on IronRuby. If this direction for dynamic languages on .NET is a path you do not want Microsoft to take, I strongly suggest you provide feedback to the team’s management directly. Also, Jason Zander runs the Visual Studio team, which IronRuby, IronPython, and the DLR happen to be a part of, and is a big proponent of these dynamic languages efforts, so provide him with your thoughts as well.

So, now, Tomáš Matoušek is IronRuby—but, unlike the salad days of John Lam, no team effort? —is this a solo deal? I’m looking at Tomáš, his Blog, and his mentions of IronRuby are very, very few. Maybe this Karl Seguin guy is right? He says:

I’m not being coy. I really think IronRuby was a bad business move and that they finally did the right thing. I do believe that they need a truly powerful dynamic language, but I think the right business move is to build their own (as much as I wish that wasn’t the case). It was naive of anyone to think otherwise. And I’m not even going to speculate what Microsoft was thinking for all those years—either they were being really dumb, or really deceitful (it really doesn’t matter anymore).


In month 6 of 2010 we have “Herding Code 84: Ex-Microsoft Developer Panel with Mike Moore, Jeff Cohen, and Scott Bellware.” This episode was one of the most scathing, constructively critical view of Microsoft in general and ASP.NET MVC in particular. Time and time again the speakers kept praising Ruby on Rails (and the Ruby language) as the supreme master of ASP.NET MVC. These are pro-Microsoft developers who clearly work with both technologies so I am unable to dismiss these rants as more tech-macho, ding-a-ling waving. I’ve heard and watched hundreds and hundreds of tech podcast episodes and there are only a handful of programs that have taken me by surprise.

So after all of the surprise I’m led to investigate IronRuby—to, maybe, run Ruby on Rails on the .NET Framework. This is probably the first time in my .NET career that I’m motivated to investigate another language with a specific task (I know I should be using F# for something…).

“Ray Ozzie Quit… What Took Him So Long?” and other Google Starred Items

Via Slashdot: “…‘The mainstream press acts surprised that Microsoft’s chief software architect is resigning, but InfoWorld’s Woody Leonhard explains through a review of Ozzie’s efforts at Microsoft how the Redmond giant has consistently ignored and squandered the design savvy that Ozzie has tried to bring to the table. If you ever wondered why Microsoft’s products like Windows and Office are so bloated and underwhelming, while Apple’s are almost always wonderful experiences, this analysis will solve that mystery. And you too will wonder how Ozzie could have lasted so long at a company that doesn’t believe in design.’”

“Apple May Pay $625 Million For Messing with Texas”

Ryan Tate: “The plaintiff was a Yale computer science professor with a company called Mirror Worlds incorporated in New Haven, Connecticut and under a slightly different name in Tyler, Texas, part of a region known for its friendliness to patent claims.”

“Why don’t we kill each other as much as we used to?”

Maggie Koerth-Baker: “Proof of things you already suspected: Human society is not more violent today than in the past. Quite the opposite, in fact. (At least, as measured by statistics based on Western European historical records.) ”

“The Graying of the World”

Via FREAKONOMICS: “It’s true that the world’s population overall will increase by roughly one-third over the next 40 years, from 6.9 to 9.1 billion, according to the U.N. Population Division. But this will be a very different kind of population growth than ever before—driven not by birth rates, which have plummeted around the world, but primarily by an increase in the number of elderly people. Indeed, the global population of children under 5 is expected to fall by 49 million as of midcentury, while the number of people over 60 will grow by 1.2 billion. How did the world grow so gray, so quickly?

“Transparency Is Not Enough”

Dana Boyd: “Data transparency is not enough; danah boyd powerfully argues that the character of data depends on its interpretation and states her case for data literacy. If people are ignorant about how data is generated, selected and interpreted, power accrues to those who can ‘spin’ the data to support their opinions and biases. Using the example of publicly available sex offender data, released under Megan’s Law, boyd shows that understanding the complexity of data is just as important as making it transparent.”