30 October 2008

Application Manifests

I was bitten by an interesting problem with our service today.

When I ran the service on a clean XP SP3 system, I got

The system cannot execute the specified program.

Googling this phrase, it implied we had a missing dependency (DLL), so I ran Dependency Walker but found no missing dependencies.

However, Dependency Walker did find an error, giving me another set of phrases to Google:

Error: The Side-by-Side configuration information for "foo.exe" contains errors. This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem (14001).
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
"Side-by-Side configuration information" is the clue that this is actually a problem with the application manifest. Now we're getting somewhere...

As it turns out, the Visual Studio 2005 project was configured to have the linker generate the application manifest, but for some reason (I haven't root caused it yet), the manifest being generated is wrong: it specifies a dependency on the VC8 runtime, but the service is actually statically linked to the runtime to minimize dependencies.

So, the reason we're seeing this vague error when we run the service is because the application manifest is horked. When I rebuilt the service without the application manifest, the problem "went away."

The next step is to take a look at the manifest and see what it ways.

You'd think looking at an application manifest would be simple: it isn't.

Fortunately, the indispensable Kenny Kerr has written a tool which will display the application manifest: Manifest View.

24 October 2008

Compare and contrast

Sarah Palin says clothing budget row is sexist

versus



Picture by Callie Shell, from an excellent Digital Journalist piece here.

11 October 2008

Why I'm voting for Barack Obama

While I lean so far to the left on most things that I'd be more at home in someplace like Boulder or Berkeley (perhaps), I can't think of any of the Republican candidates who were noteworthy.

Rudy Giuliani: noun verb 9/11. He's an idiot, too, showing poor judgment with Kerik, his affairs, etc.

Mike Huckabee: very personable, so long as you overlook his fundamentalism and the corruption when he was governor of Arkansas. Sorry, I have no tolerance for any religious fundamentalists: Christian, Muslim, Jewish, etc.

Mitt Romney: the smartest of the bunch, and certainly he has some business credibility, but he was very quick to change his views to match what people want (and eerily reminiscent of a Stepford husband).

Fred Thompson: please. An actor? Did we learn nothing from the disaster that was Reagan, worst president until W?

On the Democratic side, I liked Kucinich (a lot) for saying the things that needed to be said, but he was nowhere near viable.

I couldn't support Hillary Clinton because she voted for the invasion and occupation of Iraq (as did Biden). That, and I don't want another ruling family.

I like Chris Dodd a lot - smart guy, good record - but his relationship with the insurance companies was a little uncomfortable.

I like Bill Richardson for a number of reasons - record on foreign policy, record at the Department of Energy, he's governor of my favorite state, he isn't another white guy, etc. - and I was really pulling for him.

I didn't care for Barack Obama at first: his lack of experience annoyed me immensely, and I couldn't understand why people were talking about him. Just like with John Edwards, he came from nowhere to national prominence without actually doing something noteworthy, and I'm sorry, but I still believe you have to pay your dues, get your scars, earn your experience.

However, his choice of Biden addresses most of my concerns about experience (most), and Barry has earned my respect, which is no mean feat.

Look, he's been campaigning for almost two years now, he's been all over the country, he's talked to thousands of people, and he's managed to stay civil, focused, and commanding. Unlike the bitter old white guy running against him.

Barack Obama's campaign is and was much better run (ethically, financially, etc.). Both McCain and Clinton had poorly run campaigns during the primaries, and it doesn't speak well of their organizational abilities.

Barack Obama is smarter, more even-tempered, and more ethical than John McCain. No contest here.

Barack Obama did a much better job at picking his Vice President. Much, much better. I have always liked and respected Biden (apart from the Iraq vote).

Finally, Barack Obama is younger and healthier than John McCain, and the thought of Sarah Palin being anywhere near the oval office scares the hell out of me.

It should scare the hell out of everyone.

Look, we have some serious, serious problems:
  • an impending worldwide recession, possibly even a depression
  • the end of cheap oil, in a culture built entirely on cheap oil and with no viable alternatives in sight
  • global warming, massive habitat destruction, and an increasing extinction rate
  • the impending death of the seas from rising CO2 and increasing ocean acidification
  • religious fundamentalists, here and abroad
This is some terrifying stuff, and ignoring it, jumping in the SUV, and going down to the mall to load up on Cheetos and DVDs isn't going to change it.

I'm looking for someone who speaks to our better natures, who can inspire us to work together to make the world a better place, to lead us into the 21st century and away from fear, poverty, war, and ignorance.

John McCain is not that person.

Barack Obama is.

So get out there and vote. It really is likely to be the most important election of your life.

03 October 2008

Using devcon to update a driver

If you work with drivers, it quickly becomes a PITA updating them, although I've gotten quite fast at doing this on XP, thanks to muscle memory.

(Vista doesn't change the focus properly in the Device Manager wizard, by the way, so my muscle memory doesn't work on Vista.)

Anyway, it turns out there's a tool available from Microsoft called devcon: it lets you do pretty much everything from the command line that Device Manager does, and then some.

For example, here I'm using it to update a driver:











By the way, the grep I'm using is from UnxUtils.

02 October 2008

Excess commenting considered harmful

With apologies to Dijkstra.

I'm a big fan of comments, provided they're in the right place and convey the correct information.

While the near-total lack of comments in my current codebase irritates me, I also come across stuff like this in some of our common code which is utterly pointless:

//----------------------------------------------
// File: spizzbar.cpp
// Author: Earnest Programmer
// Created: 8/05/2008
// Purpose: Implements an API that will allow...
//----------------------------------------------
// Changed: never
//----------------------------------------------


Let's start with the lines of dashes which separate the comment block into regions:

//----------------------------------------------

I'll admit to still occasionally doing such things, and I'd argue in the case where you have a small set of headers (2, in the case of our current SDK) and the headers are likely to be the documentation users of the SDK are most likely to see, you can get away with such cruft, but 99.9% of the time, it's pointless (and I really need to stop).


Next, we have a line which tells us the name of the file:

// File: spizzbar.cpp

Umm, if we're reading the code, it's already in a file and it already has a file name and it came from version control, which can tell us all the different names this file has ever had, so this is also pointless.


Next, we have a line which tells us the name of the original author of the file:

// Author: Earnest Programmer

Aw, your mom sure must be proud. However, this information is also in the version control history, so why are you cluttering up the code with it?


Next are a couple of lines which tell us when the file was created and last modified:

// Created: 8/05/2008
...

// Changed: never

You can guess where this is going, so repeat after me: "this information is also in the version control history, so why are you cluttering up the code with it?" Nicely done, thanks.


Finally, we come to some lines which purport to add value:

// Purpose: Implements an API that will allow...

So let's see:
  • it's a .cpp file, so I'm pretty sure it's implementing something.
  • the API is in the matching header (presumably spizzbar.h), so the purpose of the API should already be documented there

In conclusion, there's no value here: the entire comment block is useless.

"So what's the big deal?", you may ask.

Fair enough: let's go through this.

Comments are no different than code: they have to be maintained, and useless comments are like dead code. Linkers usually strip dead code, but programmers spend most of their time reading code, so we're optimizing for that scenario.

Also, the DRY principle says you want to abhor duplication, so if you document a function in the header, you don't need to copy the documentation to the implementation. Otherwise, you'll have to maintain comments in both locations.

Finally, like every line of code, you should look at every comment and ask yourself: If I ripped out this comment and I or someone else came back in six months to look at this code, could we still understand the code? If the answer is yes, strip the comment.

I believe part of our focus as software developers should be on writing as little code as possible - most of the cost of software development is maintenance, and the more you have to maintain, the more it costs - and this extends to comments.

As the phrase misattributed to Einstein goes:
Everything should be made as simple as possible, but no simpler.

29 September 2008

Phoning it in

Nice juxtaposition here:
“Some people have criticized my decision to put my country first, but I will never, ever be a president who sits on the sidelines when this country faces a crisis,’’ said Mr. McCain. And Mr. McCain, who spent this weekend in Washington working the phones, but did not actually return to Capitol Hill , said: “I know that many of you have noticed, but it’s not my style to simply ‘phone it in.’ ”
Priceless.

Why are we even having an election? It's not like there's a choice.

Roads to Madness

Yep, another Queensrÿche song title.

So now I'm running the scrum planning meeting, and the first point of contention - after me internally going "WTF?!" and trying not to show how pissed I was - was whether we really need to have the product manager at the meeting.

Yeah, let's leave the stakeholder out: that worked so well in the past.

27 September 2008

Last Time in Paris

I think I'll continue my new trend of song titles for post titles, this time a single from Queensrÿche.

I just read a great post on localization at the always-excellent Progressive Development blog with some good advice and a very nifty tip I hadn't come across before: use a pseudolocalized build for testing so you can tell
  • which strings are not still in resources and localized
  • which strings are clipped
This last item is incredibly useful. Thanks again, James (aka Maven).

25 September 2008

Working Man

So now I'm using Rush song titles for my posts: interesting...

Work has become very, um, challenging.

The first challenge has been the resignation of my boss, the director of software development and the person most directly responsible for me taking the job. After two years of struggling to get the software department aligned with a product development process that can best be described as chaotic, after telling senior management time and again that the demands placed on the software organization exceeded our capacity by almost 200%, even with the most optimistic estimates, I guess he got tired of pushing the rock up the hill.

With his departure almost three weeks ago now, I've been drafted to assist my boss's boss, the VP of product development, as we first try to figure out where we are with all the products - all 67 of them.

Seriously. 67 products.

You have to page down three times to get to the bottom of our CruiseControl page, and that's just for the products being actively maintained. It's insane.

We then have to figure out how to take steps to continue product development while also going back and fixing all the shortcuts and bandaids and just plain screwups we made getting the products out the door as quickly as possible. This week, that involved 4 solid days of meetings - 9:00 AM to 6:00 PM - with test-driven requirements, planning poker, etc. Grueling, especially since I had to lead all the meetings and I was the one standing at the board writing down all the use cases and leading everyone through this. Ugh.

I've also been going to way too many meetings with senior management, including some with the CEO. I now believe all the stories I've heard about people leaving meetings with the CEO's spittle on their face (from him screaming at them). The CEO hasn't screamed at me (yet), but he definitely has anger management issues. I want to get back to where I don't interact with him or any of the other senior staff as quickly as possible, but that may be a while: we have yet to interview anyone for VP of software engineering.

On the positive side, we finally got some C++test licenses, and it's a very interesting tool (not cheap, though). More on C++test later...

So, at this point, I'm hating on this job. I've got a couple of things lined up, including a company in Vero Beach which looks like a great fit if they pay enough and if they'll go for a couple of days a week of telecommuting. And yes, I do get work done when I'm sitting out by the pool with the laptop, thank you very much!

I'm also looking longingly at some jobs out in Reno (gambling systems) and in Grass Valley, CA (video, much better), but that's mainly to keep me sane. We just moved into a big house in Rockledge with an awesome pool, so Barbara and the kids will probably miss me if those turn out to be viable options, but still... Grass Valley is only a couple of hours from San Francisco, and Reno is an extra hour. Intriguing, and I've had this itch to go west for about 5 years now, and it keeps getting stronger.

Anyway, this is getting long, and I need to get home. I'd like to close with a shout out to my friend who cannot be named, and I hope this post gets him the review he's been waiting for. With that raise he's sure to get, he can probably afford to upgrade his monthly cable to HD and maybe have a little left over to buy some fancy treats for the dog.

I kid, I kid...

Breaking the Silence

References to Queensrÿche songs aside, it's been a while since my last post.

I was in the middle of composing a post, in fact, when I got the news about Angie, and we're all still dealing with the loss of someone who was - in every real sense of the term - a member of our family.

Three months later, it's still hard to accept that she's gone, but I'm very grateful for the time we did manage to spend together, and I'm especially glad she was able to see Nate grow up into a truly wonderful - although sometimes frustrating! - young man. I'm glad that she was also able to know Jen and Julianne and all the other members of this interesting extended family of ours, and we all miss her dearly.

One good thing, if one can say that, to come of all this is that we reconnected with Angie's mom Judy and were also finally able to meet her good friends Kyle and Kelly and meet other friends and family at the service. It was difficult afterwards being in this great little house she was living in at the time of her death, seeing all these traces of her, even catching scents which triggered memories, but although her life ended far too soon, she definitely was loved and will be for as long as we all remember her.

Life moves on, though, with no regard to whether you want it to, so don't take it for granted.

Angie, we love you and we miss you.

05 June 2008

Snowflake

Original image from http://www.focusmag.gr/id/files/2831/snow-leopard.jpg

So the current rumor is that Mac OS X 10.6 - "Snow Leopard" - will be announced at WWDC in Monday's "Stevenote" and ship at the beginning of 2009.

Given that I've started on Snowflake - interesting name alignment, considering I thought of it the day before I heard about 10.6 - it would seem I've got six months to wrap up this foray into The Life.

I have less than 1,068 days and a 3-year-old G4 PowerBook, so it seems I have my work cut out for me...

04 June 2008

Strengths and weaknesses

Good article in the NY Times on a new creationist tactic. The opening line is great (emphasis mine):

Opponents of teaching evolution, in a natural selection of sorts, have gradually shed those strategies that have not survived the courts.

Heh.

Creationists are really after a unified belief system - "God and/or the Bible explains everything" - kinda like science has (somewhat tongue-in-cheek) the goal of a Theory of Everything.

The difference, of course, is that science is always willing to throw out the current explanation and replace it with a better one provided the new theory stands up to experimental verification. There might be some resistance at first - scientists are people, after all, with egos and prejudices fully intact - but facts will prevail when the dust settles.

If you want to believe God put everything in place 6,500 years ago and pressed the Start button, that's all well and good, but what can you do to prove (i.e, test) it?

You can't, and the unified belief system sure as hell doesn't explain something like bacteria evolving to become drug-resistant, does it?

Repairing the Damage, Before Roe

Good essay in the NY Times today on that least controversial of topics: abortion. The last two paragraphs make their point:

It is important to remember that Roe v. Wade did not mean that abortions could be performed. They have always been done, dating from ancient Greek days.

What Roe said was that ending a pregnancy could be carried out by medical personnel, in a medically accepted setting, thus conferring on women, finally, the full rights of first-class citizens — and freeing their doctors to treat them as such.


I'll add that given my gender, I believe I'm entitled to my opinions on the subject but without much ethical ground to impose them.

'Nuff said.

27 May 2008

A couple of observations

Whatever your politics, I offer a couple of observations for consideration:

John McCain's limited, highly controlled access to his medical records is probably a good indicator of how open his administration would be. Ditto for releasing tax returns months after Clinton and Obama, the latter being first (and least affluent of the three).

Barack Obama's organized and disciplined campaign is probably a good indicator of how organized and disciplined his administration would be. In the same vein, Hillary Clinton's campaign reflects poorly on her administrative skills.

Okay, so we get some things right...



More info here:

OMG!! Parachute!!!! Photo!!!!!!

Too frackin' cool...

13 May 2008

Ha!

Childish superstition: Einstein's letter makes view of religion relatively clear

No more being subjected to that "Science without religion is lame, religion without science is blind." quote. 'Nuff said.

12 May 2008

350

350. Pass it on. More here and here.

Been takin' a break...

Now that the crises have mostly died down and we're no longer trying to get everything duct-taped together enough to make it through wide-area testing (seriously), I've been on a "less computer time" kick, hence the gap since my last post.

I've even cut my RSS feeds down to 28. I had been as high as 200+, and yes, I had a problem keeping up with all that. That's the problem with drinking from the firehose.

Anyway, the technical feeds I'm still subscribed to include the usual suspects -
- but one I added recently is Avery Lee's VirtualBlog. Having been away from video for a couple of years now, I'd forgotten how interesting it is, and also how damn smart Avery Lee is. He reminds of the CTO for my employer in Tampa, except that fellow was even smarter. Avery's posts also remind me I still have a hell of a lot to learn about system programming, which is effectively where I live these days.

21 April 2008

Imagine...

...if instead of invading, occupying, and truly screwing up a country half-way around the world - a country which posed no significant threat to either this country or its "allies in the region" (i.e., Israel) - we invested some of that energy in our own backyard, say, Haiti or Honduras.

Shameful.

Zapffe

Came across this on Steve Dekorte's blog. Interesting philosophical perspective (from the 'pedia):

Zapffe's theory is that humans are born with an overdeveloped skill (understanding, self-knowledge) which does not fit into nature's design. The human craving for justification on matters such as life and death cannot be satisfied, hence humanity has a need that nature cannot provide satisfaction for. The tragedy, following this theory, is that humans spend all their time trying not to be human.

Here's my sardonic (some may say cynical) take on his "four principal defense mechanisms":
  • Isolation: work ethic, keep busy so you don't have to think about things too much
  • Anchoring: religion
  • Distraction: TV, web, reading blogs...
  • Sublimation: philosophy, science

20 April 2008

Robert Reich endorses Barack Obama

Robert Reich, labor secretary in Bill Clinton's administration, endorses Obama for President.  This is so good I have to post it in its entirety:

The formal act of endorsing a candidate is generally (and properly) limited to editorial pages and elected officials whose constituents might be influenced by their choice. The rest of us shouldn't assume anyone cares. My avoidance of offering a formal endorsement until now has also been affected by the pull of old friendships and my reluctance as a teacher and commentator to be openly partisan. But my conscience won't let me be silent any longer.

I believe that Barack Obama should be elected President of the United States.

Although Hillary Clinton has offered solid and sensible policy proposals, Obama's strike me as even more so. His plans for reforming Social Security and health care have a better chance of succeeding. His approaches to the housing crisis and the failures of our financial markets are sounder than hers. His ideas for improving our public schools and confronting the problems of poverty and inequality are more coherent and compelling. He has put forward the more enlightened foreign policy and the more thoughtful plan for controlling global warming.

He also presents the best chance of creating a new politics in which citizens become active participants rather than cynical spectators. He has energized many who had given up on politics. He has engaged young people to an extent not seen in decades. He has spoken about the most difficult problems our society faces, such as race, without spinning or simplifying. He has rightly identified the armies of lawyers and lobbyists that have commandeered our democracy, and pointed the way toward taking it back.

Finally, he offers the best hope of transcending the boundaries of class, race, and nationality that have divided us. His life history exemplifies this, as do his writings and his record of public service. For these same reasons, he offers the best possibility of restoring America's moral authority in the world.

I couldn't have said it better.  His blog, by the way, is well worth reading.

19 April 2008

It's all about character, kids

From Cogitamus (via Nobody Knows Anything):


Do you think if Barack Obama had left his seriously ill wife after having had multiple affairs, had been a member of the "Keating Five," had had a relationship with a much younger lobbyist that his staff felt the need to try and block, had intervened on behalf of the client of said young lobbyist with a federal agency, had denounced then embraced Jerry Falwell, had denounced then embraced the Bush tax cuts, had confused Shiite with Sunni, had confused Al Qaeda in Iraq with the Mahdi Army, had actively sought the endorsement and appeared on stage with a man who denounced the Catholic Church as a whore, and stated that he knew next to nothing about economics -- do you think it's possible that Obama would have been treated differently by the media than John McCain has been? Possible?

And -- this is fun to contemplate -- if Michelle Obama had been an adulteress, drug addict thief with a penchant for plagiarism -- do you think that she would be subject to slightly different treatment from the media than Cindypills McCain has been? Anyone?

Indeed, one wonders. Good thing I'm not a Busch drinker...

Adventures in 64-bit Windows

I stumbled across this recently, and the lesson here (as it is frequently) is don't make assumptions.

Back in the day (16-bit Windows 3.x era), all the Windows system files (KERNEL.DLL, GDI.DLL, and USER.DLL) were in the System folder.

As Windows slowly made the transition to 32-bit with things like Win32s, the System32 folder appeared as the place where all the 32-bit files lived.

Continuing through Windows 95, NT 3.1, 98, 98 SE, NT 3.5, NT 3.51, Me, and XP, this behavior was maintained, up until the present day with the train wreck known as Vista.

Despite having done some work on 64-bit systems, I never paid much attention to the details of the file structure, which is probably good, because it's crossed the line from crufty to absurd.

When you're spelunking through the Windows tree on an XP x64 or Vista x64 system, you'll see folders called System32 and SysWOW64.

The assumption you're likely to make is that System32 contains 32-bit code and SysWOW64 contains 64-bit code. Seems reasonable, right?

Well, the truth is exactly opposite.

System32 holds 64-bit code, and SysWOW64 holds 32-bit code. Crazy, right?

On OS X, I'm not on Leopard yet (I'm not even on an Intel machine yet!), so I don't know what weirdness one encounters there with 64-bit Cocoa. I think it's a safe bet, though, that it won't be as unbelievably stupid as SysWOW64.

17 April 2008

Glenn Greenwald

Glenn Greenwald is a recent addition to my ridiculously large set of Google Reader feed subscriptions (182 at present).

Since a couple of family members are journalists, I find his commentary especially interesting and relevant.  For instance, here's his take on last night's debate:

My favorite (unintentionally revealing) media commentary about the debate is from The Washington Post's Anne Kornblut and Dan Balz, who devoted paragraph after paragraph to describing the substance-free "issues" that consumed most of the debate -- Obama's "remarks about small-town values, questions about his patriotism and the incendiary sermons of his former pastor . . . gaffes, missteps and past statements" -- and, at the end of the article, they added:

The debate also touched on Iraq, Iran, the Middle East, taxes, the economy, guns and affirmative action.

It's just not possible to express the wretched state of our establishment press better than that sentence does.

Indeed.  Back to you, Katie...

Today's amusement

So, like many technical people, I like playing with the latest and greatest.

I installed Visual Studio 2008 on my crappy HP notebook (dimmest screen ever) and built some of the Employer's code, 140 KLOC of lovely C and not-so-lovely C++.

One thing I've managed to do with this stuff is get it all building at warning level 4; still a few warnings, but there are limits to what I can do to compensate for the failings of others...

Anyway, one of the C/C++ warnings which has been strongly encouraged by Microsoft in Visual Studio 2005 - to the point of it being on by default when you create a new project - is the portability warning about code which may not make the transition to 64 bits so cleanly.

This makes sense, since 64-bit OSes are no longer red-headed stepchildren and are quickly becoming mainstream. Also, most desktop and server CPUs are now 64-bit, and there will probably come a day soon when all consumer CPUs will be 64-bit.

So imagine my surprise when I see this:

VS 2008 build results

Yep, that's right: something Microsoft went to great pains to get people to adopt is now deprecated.

Frigtards, as FSJ would say.


UPDATE: despite MSDN being utterly useless to explain this, a Microsoft blog post comment (not the post, but a comment on the post) explains the deprecation in sufficient detail.

16 April 2008

APOD

Astronomy Picture of the Day is almost always good, but today's and yesterday's posts are unusually spectacular.

09 April 2008

A life of honor

LA Times - A life of honor, one day at a time

This story resonated with me. Here's someone who managed to turn himself around without religion (a crutch for many, and for some, an addiction).

Instead, he thinks about what he's doing (and done), and he's honest with himself.

Sometimes, all it takes is someone saying "It stops with me."

07 April 2008

Best line of the day

A coworker on his driver failing in code it wasn't supposed to contain:
Since this can't happen, it is best from a mental health standpoint to ignore it.

Aargh!

So, after weeks of trying to get the Employer to purchase a Visual Assist X license for me - I can't function without refactoring support in an editor any more, Visual Studio 2005 doesn't implement refactoring for C++, and Visual Assist X adds this and so much more - I finally got a license code this morning... registered to the email address of the CEO's personal assistant.

You can call me Sheryl now.

Two "takeaways" for this:
  • be careful what you wish for
  • if you want things done right, do them yourself
Update: after contacting support at Whole Tomato, they were able to generate a new license key. Like I told them, I'm now a happier customer.

This is one of the things the former Employer got right, by the way. Jack understands the importance of customer service, even if some of the customers - John *cough* Chewter comes to mind - are quite obviously daft.

01 April 2008

Best line of the day

On encountering Ruby for the first time:

My sense is that Ruby is not a distinctive language in itself so much as a mostly good mix of other languages. I say “mostly” because I’m not sold on the syntax. It reminds me too much of Perl. It’s like they created a great new flavor of ice cream and then mixed in glass and razor blades.

31 March 2008

Best line of the day

From Kickingbear Blog:

Humans are damn good at picking out important visual information rapidly. We’re good at it because otherwise 6,000 years ago we’d all have been eaten by Dinosaurs.

20 March 2008

User-Mode Crash Dumps in Vista

One of the good things coming in Vista SP1:

Collecting User-Mode Crash Dumps

Yeah, I thought it was, um, interesting how you couldn't do that before.

I came across this via the very interesting Crash Dump Analysis blog.

Since my days (and nights (and weekends)) are spent trying to get some measure of stability in heavily multithreaded Windows service written in C++ by people who really weren't as good at C++ as they thought they were, I spend waaaaay more time than I should looking at trace logs and sitting in WinDbg trying to get a machine to fail so I can figure out which of the 9 billion threads it crashed in. That's assuming I don't have deadlocks, or even worse, livelocks.

But I digress... Dmitry Vostokov's blog is interesting, and I'll have to check out his books.

19 March 2008

Melodyne Direct Note Access

Very cool technology which lets you deconstruct recordings into constituent notes, each with its own pitch and envelope. It probably works best on music with discrete notes, as opposed to, say, voice, violin, etc. Still, compared to dicing and slicing in ProTools, this is probably an interesting alternative.

17 March 2008

Big Dog

This is pretty damn cool:


A Real Freak Out

Jim Kunstler's latest polemic: A Real Freak Out

He needs a good editor, but there are some interesting perspectives here:

The object of the game is to prevent the "assets" of Bear Stearns from going to the auction block, on which they would be discovered to be nearly worthless, which would instantly render all similar assets held by the other big banks to be similarly worthless, and would result in a universal margin call that would pretty much unwind the hallucinated "wealth" acquired the past ten years.

Contrast that with the sage pronouncement from President Mission Accomplished that "In the long run, our economy is going to be fine."

Thanks, Shrub: I feel better already...

Update: Krugman sorta backs up Kunstler on this, although Krugman is less willing to contemplate the failure of the system.

16 March 2008

Advantages of coming into work on a Sunday

Other than an increase in the likelihood that you'll finally put up that poster saying "Lack of planning on your part does not constitute an emergency on my part", there actually are some advantages of coming into the office on a Sunday:
  • traffic is lighter
  • more parking spots are available
  • the chance of wasting time in a meeting approaches zero
  • you acquire a slight feeling of superiority over those who aren't in the office with you (making a virtue out of necessity, in other words)
  • you have more time to think about updating your résumé

11 March 2008

Gone, Without A Trace

Ouch.

Two for one

Combining two of my favorite topics - technology and security theater (aka TSA) - we get this little gem.  Enjoy.

10 March 2008

You might be extremely frustrated with your job if...

  • tasks and priorities are reviewed and reassigned daily (people are treated like interchangeable cogs, in other words)
  • you've been told you're the lead but you find out your boss has assigned a major task involving design to someone on your team without bothering to tell you
  • you have multiple releases of the same product to different customers with different functionality each week
  • you're so awash in fixes and changes and hacks you have to ask the marketing guy "What exactly is it we were supposed to have fixed in this release?"

07 March 2008

Waterfalls not considered harmful


With apologies to the late, great Edsger Dijkstra. Image from Wikimedia Commons.


Agile methodologies are all the rage these days, with good reason: they work better in the chaos which characterizes most software development shops.

The classic waterfall model of software development is pilloried as an example of how not to do things, but if you think about it, you'll realize that Agile's key insight is to do small iterations, each of them a waterfall.

Heh. Chew on that a bit, and let's discuss...

You still need requirements, although with Agile, you call them user stories or use cases.

You still need design, although now you can sometimes back into it by doing test-driven development. Sometimes, and only on a small scale. I'd argue that you still need the big picture to do design correctly, and the bigger the picture, the more design you need. Design is a topic for another post, so I'll stop here.

You still need to implement - write code, breathe life into the design, etc. - although with TDD, this is a fortunate side-effect of the process.

You still need to verify the code, but with unit testing frameworks, that's much easier. If you're doing TDD, well, you're already done!

Finally, you still need to maintain code, and this is one place where I think Agile gets it very wrong with their emphasis on face-to-face communication over documentation*, because maintenance without documentation is a nightmare. The Agile folks must write a bunch of throwaway systems... but I digress.

Anyway, I think the point of this post is that new things are often just a way of looking at or using an old thing differently.

* While I'd be the first to admit that technical people frequently send email when they should use the phone or just get up and walk over to someone to talk with them, one thing you have with written communication like email is a searchable record of what was discussed and what (if anything) was decided.

06 March 2008

iPhone SDK


Photo shamelessly stolen from the Omni Mouth blog.

Like I need another reason to get an iPhone...

All the goodness of Cocoa and Objective-C: nice.

Of course, I'll need to move to Xcode 3, which means I need to upgrade (finally!) to Leopard, which means now I have yet another reason to get a 17" MacBook Pro.

Heh.

05 March 2008

Our government at work

A Wave of the Watch List, and Speech Disappears

Lovely. The ignorance and stupidity just gets deeper. I'm sure the idiot who made the decision to shut down the domains had a flag pin on his lapel, so that makes everything okay, right?

Is it 2009 yet?

New words for today

Siooma (rather crude, found via FSJ)

Rickrolling (thanks to John Moltz)

Oh, and if you like lolcats and the Mac, check out Daring Furball, a most excellent reworking of the always interesting Daring Fireball.

I can has Mac indeed...

04 March 2008

Domestic terrorism?

While I understand the loathing which led ELF to torch some 4,000+ square foot "green" homes in Seattle, I don't agree with their actions.

However, are they really terrorists? Vandals, yes. Criminals, absolutely, and I believe in the rule of law.

However, terrorists they're not, and calling them terrorists smacks of fascism.

03 March 2008

The Richard Test

The Joel Test is now 7.5 years old (!) and while it's a good first start, I've decided to fork my own version to suit my own preferences. This test is to be used once you've done some research on the company and found out as much as possible about the position. You should be able to ask many of these questions during the phone screen, and you should also let everyone involved know that you'll be asking more than a few questions.

Some notes about prescreening a position
If the job position is vague or contradictory, be wary: they make things up on the fly, and if you're okay with that, this test is definitely not for you. Have fun in Hacks and Deathmarches 101, though. It's right down the hall, inside the room with all the pizza boxes outside...

If the company has a lot of openings relative to the number of employees, be wary: they either have a problem keeping people or they're growing too fast.

If they're looking for junior developers and don't mention mentoring, be wary: they're cheap. There's nothing wrong with being thrifty, but cheap means they think they can get more for less. You don't want to work for a cheap company.

If they talk too much about how everyone socializes after work, be wary: they're a cult.

If the company is a software company and the person running the company has never written code for a living, be wary: while I've seen this work okay (as in my last job), it means that software people will be second-class citizens and management will never really understand schedules. Conversely, most technical people are not suited for management, so like everything, there are tradeoffs. A good software development manager can insulate you from much of the nonsense, but they're rare.

A corollary: if the software development manager has never written code for a living, look elsewhere. While they might have a rudimentary ability to cut code, they don't really understand the issues.

And now, on to the test.

The Richard Test

1. How do you manage version control?

Good answers are git, subversion, Perforce, ClearCase, etc.

Best answers include some mention of configuration management.

Bad answers are SourceSafe, CVS, and "What's version control?"


2. How do you build your products?

Good answers are CruiseControl, CruiseControl.NET, etc.

Best answers include a fully automated system for pushing builds to a repository, website, etc.

Bad answers are "We tell Jeb over there to send the build off his machine."


3. How do you manage issues and defects?

Good answers are FogBugz, JIRA, TestTrack, etc.

Better answers include some mention of a process which includes automated testing (when possible) for each fix. Give them a gold star if they have a way for customers to report bugs directly into the issue tracking system.

Bad answers are Excel, Post-Its, emails in a folder, etc.


4. How do you manage requirements?

Good answers include some discussion of features and some discussion of ranking them.

Better answers include some mention of traceability matrices, Steve McConnell's book, etc.

Bad answers are "We have the marketing people write them, and we just implement them."


5. How do you manage schedules?

Good answers are mentions of Agile practices, so long as they don't mention XP. Look up how successful the big project all the XP guys like to talk about really turned out to be. For that matter, if having two programmers "pair code" is good, why not have 3 or 4? Heck, have the whole team pass around a wireless keyboard in front of a projector and see how much code you get written. There's a reason John Carmack is one of my heroes...

Better answers include evidence-based scheduling (hey, I'm still a huge fan of Joel, even if I have the hubris to update his test).

Bad answers are "We try to figure out what we can deliver to the customer without having them sue us." I've heard this at one of my jobs. Seriously.


6. What best practices for software development do you encourage?

What I'm looking for here is some discussion of coding and design standards, test-driven development, design reviews, code coverage, etc.

Better answers include some mention of Code Complete or similar books.

Bad answers are "What do you mean by best practices?"


7. Describe your software development process.

This is a bit of a setup. What you're really looking for is whether they have enough of a process to describe it coherently without sounding like they're just thinking about it for the first time.

Better answers should mention that the process exists in some printable form.

Bad answers are at both ends of the bell curve: either they have no process and make everything up on the fly, or they have too much process and you have to fill out a form to make a change to the code. We're looking for a happy medium here.

Lots - and I mean LOTS - of companies are still at the left end of the bell curve, unfortunately.


8. What development tools would I get when I start?

Good answers are a new machine with the standard Microsoft development stack.

Better answers add a second machine, dual monitors, an MSDN subscription, and - depending on the specifics of your work - some additional tools like Visual Assist X, TOAD, etc.

Bad answers are a crufty old laptop that a couple of other people have used. Again, this is what I got on the first day at one of my jobs.


9. What are your offices like?

Good answers are individual offices with doors. Note that I said individual office.

Better answers are decent seating (Herman Miller, for example) and good desks with lots of work area and storage.

Bad answers are cubicles or shared offices. If they mention bullpens or team rooms, run AWAY!


10. What do you do to support professional development?

Good answers include reimbursing for books and tuition.

Better answers include sending employees to one conference or training session per year, or maybe letting them spend one week each year working on a pet project (learning Ruby on Rails or Python, for example: something technical).

Bad answers include asking "What do you mean by professional development?"


Extra credit
Some other things to ask about:
  • telecommuting
  • flex time
  • core hours
  • geographic location of the team (outsourcing is another sign that the company is cheap).

10 January 2008

Wired article on the history of the iPhone

The Untold Story: How the iPhone Blew Up the Wireless Industry

With 3G, GPS, and an SDK, it's gonna be a hell of a useful tool.

Oh, and I shall have to add "orifice" to my vocabulary. ;-)

04 January 2008

A compelling reason to contemplate moving...

... to, say, Canada or New Zealand or Europe can be found in the last paragraph of this article:

Academy defends the teaching of evolution - Los Angeles Times


If nothing else, moving out of Jesusland would be a good start.