We now know what’s been wrong with me the past 10 years and worse in the past 5 years and just about unbearable in the past 2 years. I have Dr. Ritchie Shoemaker’s Biotoxin Illness. No question about it. Unfortunately, the first step in treating this miserable disease is to find a home (and workplace) that’s low in toxic molds. The workplace is easy because I can work from home, but so far finding a living space that’s below 2 on the ERMI (EPA Relative Moldiness Index) scale is next to impossible in Seattle and Albuquerque (it’s clearly not about climate). Older buildings are too toxic from disrepair, crawlspaces, basements and rugs. Newer buildings are built so tight that they don’t ventilate. I have measured brand new construction at greater than ERMI 7 on more than one occasion. This is some seriously bad construction created by people who could not care less about indoor air quality! Out of the dozen or so tests I’ve run, only one has passed so far and it now appears to have a water intrusion problem that was identified during inspection.
Is there a city in the world that builds for high indoor air quality? I need solidly engineered, low-humidity, high ventilation modern construction. I’m a great software engineer and fully ready to move if there is such a place… willing to learn Dutch or German!
What is the coolest startup out there? The most interesting company with the best mission?
Check it out! And vote for it if you like it. With some luck maybe Quirky will pick my invention and we can all have ouchless pushpins in the future!
“Fado” on Google Code
Jason stopped by this afternoon and we chatted about his open source project, “Fado.” It takes SQL as input and generates all the prepared statement and result set accessor classes that you might write by hand. It’s a very interesting approach for many database use cases and merits further investigation and development. If Fado could be used in conjunction with something that bound data from these generated result set accessors to some generated Java POJO base classes, it would pretty much replace Hibernate or similar technologies as far as I’m concerned. Certainly I like the idea of starting with the SQL.
I’ve created a series of very short screencasts that illustrate how I think about refactoring a very basic code example. If people find this interesting, I could create some more screen casts where I refactor other pieces of code.
Should it be saved?
I recently got an object lesson (pun intended) in when to start over on something. When a deadline rears its ugly head, that’s usually the best time in the project to “slow down to hurry up.” The more pressured and frazzled you get, the more mistakes you make. The more you keep thinking “just this one last fix (and this slightly wonky design will work).” Easier said than done.
The past two weeks of my work life have been invested in debugging something that was “99% done” pretty much the whole time. But after this huge waste of time, this area of the product was ultimately redesigned and rewritten in two days and now has no significant bugs. This kind of “we’re almost there” failure mode reminds me of mistakes people make in the stock market trying to “wait out” bad investments. Just because the stock you bought is going down, doesn’t mean you shouldn’t sell it.
In this particular “bad investment,” the trouble was that the underlying model was wrong. And the reason it was wrong was because our original conception of the problem was wrong. And the reason that was wrong was that we rushed at the start of the project to start coding when we didn’t really have the requirements down as fully as we thought we did. Under deadline pressure, who wants to go back and re-examine the foundations of your model when it’s almost working? Sound familiar?
Our particular issue stemmed from thinking that certain concepts were related when they weren’t related enough. This can be a really tricky thing in OO programming because it can initially look like like B extends A and C extends A is a good model, simply because B and C have some things in common. But in some cases this can be a trap where you slowly discover that they aren’t really the same concept. And unfortunately, in the meantime, you’ve wrecked a good chunk of your codebase (well, at least polluted it with a lot of unnecessary code).
I’m curious if any readers out there have ideas about how to identify when code should be saved and “remodeled” and when it should be leveled and rebuilt from the ground up. How do you know when to “cut and run?”
I’m also curious if people have interesting ideas about how to identify inheritance schemes that have run amok. Do you also find that too much adherence to DRY sometimes leads to unnecessary or unwise inheritance?
Since Steve Jobs recently trashed my iWeb site from beyond the grave, I have been forced to migrate at least the bones of my old site to WordPress. Let’s hope my new WordPress overlords are kinder.
I recently was struck by an idea while debugging. Why can’t I click in the code margin while debugging in Eclipse and add a “print point?” A print point would be kinda like a break point that doesn’t break. Instead it prints. You simply specify an expression that evaluates to a string which then gets printed on the Eclipse console each time the print point is reached as the program executes under the debugger.
Sounds like a great idea, right?
Wrong. This idea is apparently not open to immediate discussion in the Eclipse culture. The quick response from the Eclipse group was round rejection of the whole idea:
“This has been asked for many times before. You can easily do this now by adding a condition to the breakpoint that outputs text and returns false so it does not suspend execution.”
Although this is quite cool and a good thing to know (if you can remember how it works), I don’t really see this as the feature I requested at all. While it produces the same result, it does not have the same usability. In fact, if it’s so “easy” to do this in terms of the user experience, why has this “been asked for many times before?”
And although it also leaves Eclipse worse off than it might otherwise be, maybe we can all learn a little something from this:
Just because your DESIGN can do something doesn’t mean that your USERS can.
I leave you with a great TED talk from Timothy Prestero on the subject of design. While it’s not specifically about software design, everything he says applies at least doubly to software designers because we seem to be so much poorer at understanding the context that our designs will exist within than the average group of designers.