Microsoft’s Pitching, Anybody Want to Play Catcher?

And here’s the windup.

Or to use the usual metaphor, so begins the Microsoftian Embrace of AJAX, a technology that makes rich cross-platform, cross-browser applications possible–like Google’s Gmail. Pucker your cheeks, because I think nobody at this point doubts that their nifty little toolkit will come with some rather stiff extensions aimed at “filling a hole” and injecting Windows IE-only solutions.

And a thousand clueless noobs will start designing a whole new set of IE-only interfaces because they’re not smart enough to do otherwise.

But it’s not an abuse of a monopoly, oh, no.

Good, Cheap, Fast–pick ONE

The usual adage among self-styled technical project management gurus is, “Good, Cheap, Fast — pick two.” This means that you can have something built well and quickly, but it won’t be cheap. Or you can have it cheap and fast, but it won’t be good. Or you can have it good and cheap, but it won’t be fast.

I’m here to say they still have it wrong. In reality–and this is the bane of all project estimations I have ever seen or heard about–you can only have ONE of those factors when you’re talking about software.

Say you want something done quickly and well. No problem, just expand the budget, right? It won’t be Cheap, but we still have Fast and Good, right? The people who say that never read The Mythical Man-Month. You can throw more programmers at a problem, but you quickly go from diminishing returns to negative returns. That’s right. More programmers can decrease quality and speed. The problem is information. If you have a process that can handle adding in more programmers, it will be by definition deliberate and slow, because the extra processes to accommodate getting information shared and collaboration managed among more people take more time. If they don’t take time, you’ll have less coordination and, hence, more bugs. That means less quality.

Say you want it cheap and good, but you can wait. Really? What are you waiting for? The Spirit to move you? Quality takes time and planning. At some point, someone has to pay for this time. So if you slow down and do it right, you aren’t necessarily saving money. It doesn’t matter if you’re building it in-house versus purchasing pre-built components (which usually have their own integration overhead), any time you deploy someone on a given task and not something else, that’s a cost. An opportunity cost, but a cost nonetheless. Being cheap necessarily means limiting the time spent on it.

This isn’t to say there aren’t things you can do to reduce costs, increase quality, or speed development. But it’s not a simple tradeoff of one against the other two that can be applied on a given project. Usually such improvements actually come across projects. Experience increases quality, reduces cost, and speeds things up. But experience can’t be ratcheted up on a project manager’s whim–because if nothing else, it’s usually the project manager’s experience that plays into the whole equation.

There are certain cases where you can buy a prebuilt component and save yourself time while increasing quality. There are certain cases where a little more non-overtime time will be cheaper while increasing quality. And, of course, you can sometimes drop features to get something out the door faster and keep quality on the remaining components (which is the same as increasing cost, since the remaining components cost more to build). But if you aren’t in these situations, the canard of process gurus will come back to bite you.

Note that the one thing I never mention is altering the quality (Good) part of the equation. You can absolutely trade off quality for cheaper and faster products–at least in the short run. In the long run, your clients will demand the quality anyway, or go to other vendors who have said quality, and you’ll have to improve the quality of your offerings to stay in business. Witness Microsoft’s recent work on security and stability over new features. Even though they offer their browser for free, their lunch is beginning to show red panda-shaped bite marks.

So just remember–the next time you intone that you can simply adjust the budget to get yourself the same quality in less time, prepare yourself for failure.

Is It Possible to Unsubscribe from Democracy for America’s List?

I have been trying almost a year to get off the Democracy for America spam list. I call it spam, as only the fact that Democracy for America is not a corporation prevents Tom Hughes from being thrown in federal prison for his tactics.

To date, I have tried:

  1. Using the unsubscribe form linked to in the e-mails, multiple times.
  2. Replying to the e-mail.
  3. Using the general contact form on the Web site.
  4. Calling the hucksters on the phone and politely demanding to be taken off. An exploited member of the underclass working for slave wages assured me I’d be taken off. This was weeks ago. Update: They are no longer exploiting wage-slaves, as they have stopped answering their phones–the hallmark of a transparent, democractic, and open organization. You now must know an extension or a name to contact anyone there. I may have to try Tom Hughes.

At the moment Tom Hughes is criticizing Tom DeLay–for ethics violations. Tom (Hughes), how ethical is it to fake an unsubscribe form? This puts you in the ethical companionship of pyramid-schemers, fake penis-enlargement pill-pushers, misogynistic porn peddlers, and Nigerian scammers.

Tom Hughes, consider cleaning up your own house before you criticize anybody else.

Now there’s something I haven’t tried–maybe this is a way to solicit a bribe a la his brother-in-ethics, Tom DeLay.

As a guy who writes Web applications like this for a living, I can tell you–it is not hard after NINE MONTHS to find and fix a problem with an application that takes an e-mail, matches it in the database, and removes it. It’s a trivial problem, even if you want to put in fancy features, like preventing someone from unsubscribing masses of e-mails maliciously or finding close matches of e-mails provided you. IT IS NOT HARD, so I can only conclude that Democracy for America is beyond incompetent and is now actively fraudulent.

Maybe I should take up a collection to put up some billboards in Vermont.

Tom Hughes, you owe me and the public an apology.

Update, continued. It seems that organizations with the initials DFA have a history of spamming and not being open and honest about their setup or whom is to blame for the practices they use. So this behavior is fairly typical.

And slimy.

Safari 1.3 — Wow

Dave Hyatt drops a bombshell and reveals that, unlike the claims of certain Windows writers, service packs are actually a closer analog to the update releases of OS X (such as the just-released 10.3.8 to 10.3.9 update). Though nearly unmentioned in the official release notes, Safari is getting a major update with standards-compliance, rendering speed, JavaScript, and compatibility upgrades.

He also gives a hint of some of the technologies and performance improvements that we can expect on April 29 with the release of OS X 10.4 “Tiger”. I have a dual-processor machine, so I should benefit. But the big news is, they released the same version of the rendering engine to the older OS so that HTML authors like me have an easier time supporting Safari. That’s a big deal, and something that Redmond Just Doesn’t Get.™

If you create HTML and CSS, be sure to check out Dave’s post. You’ll like what you see.

As far as his continued work on WaSP’s Acid Test 2, Dave continues his posts, including some questions about the validity and importance of certain tests. Read the archives.

Consider Microsoft’s Face Smacked with an Acidic Glove

I triple-dog-dare the IE team to do this:

The Web standards project has released the Acid2 test for Web browsers. It is a pretty crafty HTML+CSS test designed to ensure that browsers are properly implementing support for those standards.

Every browser fails it spectacularly. 🙂

I started work today on making Safari pass the test, and I thought I’d blog my progress as I fix bugs in the test.

Dave Hyatt describes his initial progress in this post, and then gives screenshots of his progress in here and at last we can see the robot (or whatever) smile here.

Note: Dave has in no way challenged Microsoft, Opera has. But what I think is great about what Dave is doing is that he’s being completely open about it and showing you progress. And remember, this is from a (mostly) closed-source company. The difference? Apple use an open-source rendering library and contribute their changes back to the community.

If MS believe that other issues are more important than rendering, they could simply open-source their rendering engine and let other people do the standards-compliance work for them while they bolt on other technologies elsewhere. But while Microsoft may pay oodles for technical innovation, they seem to lack the managerial innovation to make any use of what they get.

As a guy who has to craft a lot of HTML and CSS, and particularly needs to be able to put out structural HTML free of presentation so the content can be adapted for as many presentations as possible when building new features into our CMS, I welcome any competition to actually advance browsers.

CSS is problematic and unweildy for individual authors–it was clearly designed first as a theoretical specification and then applied to the real world (edit: rather than evolving through a more iterative process with a focus on solving everyday authoring problems)–but it’s the only game in town and beats doing nothing. The main thing I look for is consistency. I really want to be able to write some code to spec and then forget about it. You’ve never been able to do that, and I’m sure for edge cases you never will, but it would be nice to do simple pages without having to think about how Browser X will render a float.

Maybe a little playground competition will get us closer.

Simplication in Action

Simplicate (SIM-pli-kat), v.
To make more complex by attempting to simplify.

So can you read this mess?

||{B,t,w=4,s=padding:10px} !SyntaxCMS Engineering ||{B,t,w=4,s=padding:10px}Sandy Smith||{s=padding:10px}Establish SyntaxCMS RoadMap||{c,s=padding:10px}W,C||{c,s=padding:10px}O||{c,s=padding:10px}O||{c,s=padding:10px}O||
||{s=padding:10px}Aggregate and centralize features wish list, and procedures for all staff to contribute||{c,s=padding:10px}W,C||{c,s=padding:10px}O||{c,s=padding:10px}O||{c,s=padding:10px}O||
||{s=padding:10px}User Documentation||{c,s=padding:10px}B||{c,s=padding:10px}C v1||{c,s=padding:10px}C v2||{c,s=padding:10px}C v3||
||{Rs=border-bottom:1px solid #000,s=padding:10px} Re-usable templates, Administrative ability to select template to use for a specific section ||{c}C||||||||

Neither can I. Supposedly that’s table code, but it’s in Wiki-language. Now, it’s funny, because it implements things that are already in HTML, but because the Wiki-authors were too scared to try to filter out cross-site-scripting attacks, they came up with this simplified markup language. However, their users wanted to do everything you can with HTML. So what do we get? This horrible, unreadable piece of crap that is far worse for the user than just using a frickin’ table like I intended.

Mind you, I have years of experience, but it took quite a bit of hunting to figure out why adding a row didn’t work correctly–an hour, in fact. Maybe I was having a blond moment, but there are real, live idiots who run Internet Explorer with no virus protection and have their geek friends come over to install Office who will be using this application. So in an effort to simplify things, the Wiki-authors made it more complex.

And, of course, they made it so any creep who wants can come along and automatically replace the content with German porn.

So basically, Wikis are only useful in intranets anyway (which eliminates the worry about cross-site scripting attacks, unless you have hired a bunch of porn spammers, in which case, you should be fired), and only then if you use the absolute, most basic features, or find one that allows HTML.

For jebus’s sake, don’t try to mix the two.

The Pain of Types in PHP

The only way to check an uncast scalar variable in PHP for being truly non-empty (i.e., not being null or an empty string (''), but allowing any valid boolean, integer, float, string, or decimal, is:

'' !== $x && null !== $x

A caveat to this is you’ll have to detect arrays separately, because a garbage array could be array(), array(''), array(null), or even array('', ''). At some level you just have to accept that as long as you document what a method or function expects, whoever uses it will have to check that stuff themselves or expect garbage results.

In a strongly typed language, all this would be detected at compile time, but then again your development time would be longer and you couldn’t grab just any newbie off the street and throw them at it.

Unfortunately, newbies off the street generate garbage, so I end up either wanting an expensive (in terms of processing time) function that checks if anything I get is either a non-empty scalar or a non empty array of non-empty scalars (or arrays that meet the same criteria). Simpler just to have strong types that will produce a nice, ugly error if your function expects an integer and you pass it a string.

Poland Staves Off the Hordes From Europe…Again

Well, looks like Poland has (temporarily, at least) saved Western civilization by stopping the EU software patent directive. The first time was more than 500 years ago at the Battle of Vienna, when the King of Poland defeated the forces of Islam, ironically (given the current geopolitical climate). We could all be enslaving our women and speaking Arabic right now if it weren’t for Poland. Now, if they can permanently defeat the software patent process and export that idea to the New World…

You can thank Poland here.

This Post Is Annoying

For similar reasons to this post, this post is annoying. And, to make sure my example is all cool and deconstructionist, this very post you’re reading would annoy me were I reading it and not writing it.

Why?

Because I don’t tell you much about what I’m linking to or why it’s interesting enough that you should read it. If you’re going to have a post that merely points out other people’s material on the Web rather than using it as a springboard for your own thoughts or writing your own piece from whole cloth, you should function as a mediating shopper and let me know why I, as a busy reader, should bother to visit the pages to which you link.

There’s nobody I trust well enough to visit every link they give me just on their say so, particularly on a busy day. I don’t want to waste time trying to figure out what a post is talking about–either yours or the one you’re linking to.

Some don’t require much description, and some would be spoiled by too much description: for example, funny links like the a site about the new map of the US.

But in general, tell me what it’s about, something of what it says, and what’s interesting about it and why I should read further.

Help Stop Software Patents

No Software Patents

As someone who writes software for a living, I can tell you that the concept of patents on software needs a serious revision at a minimum and may be completely useless for the purposes the Founders of the USA intended, quite early in the Constitution: Article 1, Section 8–“To promote the Progress of Science and useful Arts, by securing for limited Times to Authors and Inventors the exclusive Right to their respective Writings and Discoveries”.

The key bit for software patents is the rationale: “To promote the Progress of Science and useful Arts,” which provided a test for such laws: do they, in fact, help progress? I’m prepared to even accept that non-obvious fundamental algorithms might be patentable, such as the infamous LZW patent.

The problem is that more and more patents look like Amazon.com’s even-more-infamous one-click patent, in which the ability to remember who you are on a Web site and click a single button to order and ship to the address on record was considered non-obvious and something that needed to be protected for 17 years.

Bullshit. Given those requirements, which aren’t exactly genius-level, I could come up with half-a-dozen ways to implement it, all of which would infringe on Amazon.com’s patent–and I’m not going to shatter records with my programming ability any time soon. Fortunately it’s not actually that bad–most people aren’t stupid enough to let strangers who come to the computer behind them commit them to buying anything.

Nonetheless, if you combine the two: the obviousness of the Amazon.com patent with the unenforced-until-the-last-hour nature of the LZW patent, you create a dangerous situation. Say I create a nifty feature for our content management platform that happens to infringe on a patent for, say, making widgets turn green when you click a form button. It’s pretty trivial behavior. Now say there’s some law firm collecting patents out there who are waiting until years into the patent to make sure that as many people as possible are infringing before they announce that anyone using it will have to not pay to continue to use the feature but will also have to pay them back royalties. Microsoft can fight this, as they have deep pockets (and, if the company threatening them actually makes stuff, they can counter-threaten with their own patent horde).

But what about small companies who do most of the innovation in software? We don’t have that choice. Not only will we not be able to fight it, but we don’t have patents of our own (not worth it, and we give our code away anyway, being paid instead for implementation and customization). And if it’s a law firm that has no products, our having patents would be no defense: they don’t make anything so they can’t be infringing.

That has a distinct chilling effect on innovation, and harms the progress of science and useful arts. Remember, lawyers don’t actually make anything, and the service they provide is always a cost.

Until this is all cleared up, it’s best that software patents be eliminated altogether. This is still possible in Europe, and if Europe stops them it will put pressure on the US to reform their ways. So I urge you to support this organization and link to it if you have a blog or Web site:

No Software Patents

You can read from better programmers than I why this is a very bad and dangerous idea, from the perspective of your standard of living. Even if you don’t use computers directly, the people you buy from or interact with do.