July 2010 Archives

Platform Evolution vs. Platform Design

About three years ago, I wrote a blog post titled “Why I hate developing for Microsoft Platforms”. At the time, I focused primarily on difficulties with MSDN, particularly as it relates to older technologies. I complained about what I perceived to be syntactic oddities in VBScript, and trotted out some of my long-time complaints with Windows GUI Programming.

Fast forward 3 years, and the GUI programming complaint has diminished, somewhat. Windows Presentation Foundation and Silverlight both use more declarative methods of creating UI via an XML-analogue, and support solid, run-time skinning. They’re a great step forward for UI design on Windows.

The other issues? Well, I still have gripes about those.

But then, I was reading 97 Things Every Software Architect Should Know on my new Nook (of which an in depth review will be forthcoming in a couple of weeks. Initial impression is mostly positive), and the second chapter, by Neal Ford, entitled “Simplify Essential Complexity; Diminish Accidental Complexity” contained the following passage that really spoke to me.

Prefer frameworks derived from working code rather than ones cast down from ivory towers…Cast a wary eye on vendor-driven solutions. They may not be inherently bad, but vendors often push accidental complexity.

Ultimately, this is the problem that I’ve always had working with Microsoft Technology, particularly recently. Microsoft works really hard to solve problems that aren’t theirs. Workflow Foundation is a perfect example. Launched with .NET 3.5, it sounded like a great solution to a problem we were having at work. However, we quickly ran into problems. The tools began to crawl on complex workflows, and they were pretty much necessary to define the workflow. Creating a workflow from code certainly appeared prohibitive.

Then there was the upgrade path. Workflow instances, by default, could be modified in real time, but you could only load a workflow instance into a complied version of a class that hadn’t changed. There was no clean way to upgrade, in place, a running workflow instance to a new version. And it is very difficult to build a new instance of a workflow, even if you don’t store any important data in the instance.

Building workflows is complicated, and working with them for anything other than relatively simple and short tasks in WF 3.0 is a bit painful.

I think Microsoft agreed, since they pretty much entirely replaced it in WF 4.0. They even moved the code to a new namespace. I had the opportunity to meet Glenn Block at Portland Code Camp, a Microsoftie who worked on the Microsoft Extensibility Framework (which sounds pretty awesome, but then, Microsoft is actively using it) and is now working on Microsoft’s REST team. He admitted that Microsoft does occasionally create APIs, based on customer feedback, yes, but not enough customer feedback.

Ultimately, I think it comes from the fact that they are creating solutions for other people’s problems, not their own. I see this in ASP.NET MVC fairly often as well. Creating a Form, where you want to declare a custom ID? The FormExtensions.BeginForm extension method for the HtmlHelper goes from requiring 0 or 2 (depending on the action you’re form calls) arguments to at least four. But then, it’s really common in the MVC APIs to take route values either as anonymous objects or RouteValueDictionaries. The API would be a lot simpler if it only took RouteValueDictionaries, because then plain anonymous objects could be reserved for the Html Attributes you want to add. Or a Dictionary type could be created for the Html Attributes. It’s a bit of type-glut, perhaps, but the API (and specifically the number of required parameters) can go down quite a bit.

I think ultimately, this is why I tend to prefer Open Source APIs (like GTK+, Django or YUI). For most, functions generally aren’t added until a need is demonstrated, and with speedy release cycles, this functionality can be made available pretty quickly once it’s been identified (and contributed). But even if you can demonstrate your own need, it generally requires more demonstration to make it available as a core feature.

It takes solid design to produce the core of a good API. That nugget on which everything else is built. Beyond that core, it seems easiest to slowly evolve the rest of the API based on real needs. And the only way to really judge those needs are to be building something real with them. ASP.NET MVC has improved dramatically into 2.0 (and now 3.0), based on feedback that team’s been receiving since the original CTPs, well before the release of 1.0.

I guess it seems the best way to approach API design may well resemble my feelings on law. The moment someone says there ought to be an API call for X, they may well be wrong.

DotNet OpenAuth

I’ve been doing some work on improving the codebase used by Portland Code Camp for use in our coming Palouse Code Camp. One of my first projects, has been replacing the standard ASP.NET FormsAuthentication that was being used with OpenID, since I’m a firm believer that we don’t need to store usernames and passwords. OpenID may not be perfect, but pretty much everyone has one, and it’s usability story is improving.

As part of this, I started looking for an OAuth implementation for .NET (the Code Camp site is in ASP.NET MVC2), and quickly found the Open Source implementation used on StackOverflow.

In all, it has a clean API, good examples, and within an hour or so, I was doing very basic authentication with OpenID.

There is, however, one problem. They don’t provide even a base implementation of a Membership Provider, Profile Providers or Role Providers, and the existing code uses these. So, I’m left implementing my own. The code I’m working on is open source, it’s on bitbucket, so I will eventually have a working implementation, but it was still disappointing that it wasn’t available.

Still, DotNetOpenAuth is a solid project, it works well, and has great examples. If you need authentication on a .NET project, I’d definitely suggest looking at it.

Don't Forget Your Safety Checks!

Catherine and I just got back home a bit ago after receiving a painful reminder of why we’re supposed to do walk around safety checks before going anywhere in your vehicle. While we were preparing cat food, we decided to take a break halfway through to go get something to eat for ourselves. On the drive to the restaurant, I heard some weird metal sounds from the car, but I thought they might be something in the engine, which we’ve known was causing us some trouble.

We got to the restaurant fine, but we got less than a quarter mile away before suddenly the car started making terrible sounds and shaking badly. As soon as I began pulling into a nearby parking lot, the driver’s side, back corner of the truck fell to the ground and I had to drag it into the spot, and watch as the tire rolled down the street a little ways, stopping traffic as it went. Awesome.

After getting pulled in, I immediately went to retrieve the tire, eliciting some ‘funny’ comments from the barely-out-of-high school kids on the road, but not any actual help. The truck had a jack, of course, but the jack was designed for replacing a flat tire, not a missing one, and there was no way to get it under the axle to jack up the vehicle. Luckily, I do own a 2-ton floor jack. Of course, it was across town. Catherine made some calls and we were able to get a friend to come down and drive me to get the jack. Which then wasn’t tall enough. So we found someone with a taller jack, and proceed to do the ‘jack shuffle’ to get the new jack into the proper jack point so we could reattach the tire.

Of course, we’re missing a full set of lugs nuts, so we had to scavenge a few from the other tires so we could at least reattach the fallen wheel, and drive home. Between a few trips back to the car, it took at least an hour and a half to take care of this, and I still need to go to the local auto parts store to get a set of lug nuts to replace the missing ones.

The kicker? Catherine had had this wheel off the truck a couple months back, when she was doing break work with a friend while I was feverish. Apparently, they had failed to get the nuts back on correctly, though it wasn’t a huge problem given how long it took to materialize as a big problem. However, I can’t blame her. On the drive to the restaurant, I’d noticed some oddities in the handling and a couple of odd noises that should have prompted me to do the walk around that I know I was told in Driver’s Ed I should always do. And even if I hadn’t had those warning signs, if I’d made that habit in the first place, I probably could have avoided this problem, and the damage to the body that came with it.

Latent Sexism in Technology

Recently, Google posted a new video and blog post entitled “Grandmother’s Guide to Video Chat”. They’ve even included printable instructions. Aside from the 1950s reminiscent visuals of a little old lady, and the word ‘grandma’ in a few places, it’s just a pretty good description of setting up Google Voice & Video Chat. Now, I’ve never bothered with the software since it doesn’t have a Linux version, but easy video conferencing is important for a lot of people. Since my wife and I will likely be moving away from our parents in the next few years, before we have any children, I suspect that once we do have kids, we’ll be on video chat of some kind pretty regularly.

So, why do I bring it up? At first I just found it interesting that Google decided to go the Grandma route. It reminded me that we almost always talk about people who are uncomfortable with technology by talking our mothers and grandmothers. In the Linux world for years we’ve talked about the ‘Mom Test’, to determine when the OS was available for non-geek consumption. People on Planet Ubuntu still talk about the Mom Test on a regular basis. This prompted me to ask, why do we only ever talk about out mothers when it comes to problems with technology?

I got the following response on Twitter:

@foxxtrot Because people want to take care of their mothers, so it is more frustrating when their mom can’t use technology?

It’s probably a reasonably valid point, but I know I spend a hell of a lot more time explaining things how things on the computer work to my father than my mother.

What I find most interesting, is that the technology industry has been working to promote women on technology via Ada Lovelace Day, the setting up of Ubuntu Women, and competitions to bring attention to women using Linux. Point being, that we recognize the stigma against women in our discipline, but I think the fact that we talk about the ‘Mom Test’ for technology, or Google’s new ‘Grandmother’ guide, suggests a latent sexism that still hasn’t left the industry.

Perhaps I’m reading too much into Google’s campaign. I’m positive that they intended the campaign as nothing more than a humorous set of instructions for setting up your computer for video chat. It may not have been any better if it was “Grandfather’s Guide”. Any generalization is going to be at least partially insulting to someone, and all I’m really trying to suggest is that we need to be fully cognizant of the implications of such generalizations, and in computing, the generalization that women aren’t good with (or interested in) computers is a problematic one. I don’t have statistics handy at this moment about the gender distribution in computer science programs, or similar disciplines. I do know that even five years ago, as I was finishing up my Undergrad, it was still very low. I suspect the trend is up, but if we really want to be vigilant about making that distribution more even, it’s important we’re careful about this particular generalization year round.

Carl Sagan's "Cosmos"

Recently, I was gifted a copy of Cosmos by Carl Sagan, notable astronomer, but primarily science advocate. Unfortunately, Sagan died in 1996, at the age of 62. However, he was also a prolific writer, along with his third wife Ann Druyan. Hey, he was a great advocate for science. Apparently, not such a great husband.

Cosmos was originally written in 1980, and was also adapted into a PBS series, that I don’t know that I’ve ever seen. And, of course, that has since been adapted by the Symphony of Science, though I’ve talked about that (and Sagan) before. Being three decades old now, it is, perhaps, a bit out of date. However, it’s primarily a book about the history of science, the first half or so of the book talking deeply about pre-20th century scientific method.

Even less than it’s a history book, it serves as a road map to the scientific method, and where the scientific method came from. Plus, Sagan speaks eloquently about science in a way that is accessible, but not insulting. I don’t know if his discussion about the origin of life and the evolution of species will convince a Creationist, but then, I’ve listened to their pseudo-scientific bullshit before, and saw how convinced the students who were obviously predisposed to his message seemed to be. But that’s just pessimism, I think the discussion Sagan presents should, at the very least make anyone think critically of the issue, and I think it makes a clear and beautiful argument.

It goes beyond a basic introduction to life science, physics (including basic relativity), and astronomy. The history section discusses the Ionians, and the Library of Alexandria, two historic places which were epicenters of learning, both of whom were destroyed, usually by societies that were threatened by Science. There is discussion about Pythagoras, and how his followers discovered Irrational numbers, and then buried the discovery because irrational numbers didn’t fit into their world view. And these people were serious mathematicians.

The last part of the book features Sagan talking about the Search for Extraterrestrial Intelligence (SETI), which he help begin, as well as how our own attempts (and whether or not we should be making them) to contact alien life will be like. He discusses our future of exploration of our own solar system and beyond. And he does so in a completely pragmatic way, assuming that we won’t find a way to break the speed of light, that the people we send to the stars will return to meet our children’s children.

But it’s also tinged with fears that I suspect were common in people of Sagan’s generation. That we were on the verge of nuclear annihilation, that at any time the US or the Soviet Union might initiate the end of humanity (though he did believe, and probably rightly so, that while we could, and might, fuck up the Earth enough to destroy us, the Earth would probably recover. Eventually).

I do think that people should read this book. It’s a solid description of the scientific method, where it came from, how it’s practiced, and even a bit of it’s abuse over the years. It’s a good discussion about how communication with other species is likely to happen realistically. By focusing mostly on historical context, and not assuming the future will have a breakthrough in physics that evidence doesn’t really support yet, the book is nearly as relevant today, as it was thirty years ago. And I think that it provides everyone with all the information they should require to understand science, and how the study of science is done and how it shapes our perception of reality. Given how poorly so many people understand science today, that certainly wouldn’t hurt.

The Future of Journalism

1 Comment

There is a lot of discussion about Journalism these days. Do Bloggers count? How important is it to be linked to a traditional newspaper or television news outlet? I’ve come to the decision that people who ask those questions generally don’t make a distinction between reporters and journalists.

Accoring to the wiktionary, a reporter is the same as a journalist, and while this may be correct in the traditional (and modern) uses of the terms, I believe a distinction must be made. I think a Journalist, is the person who is actually out in the field, researching, experiencing, and investigating the story, while a reporter is little more than a talking head, presenting the journalistic work done by others. Think Brian Williams today, as Anchor of NBC Nightly News, Williams, who I find to seem very intelligent, does very little of the actual investigation himself. Like in most jobs, it seems that eventually you work your way up into positions that require less travel and more management of the people doing the more direct work. I’m not saying that Management doesn’t work at all, just that the responsibilities tend to be different and less focused on the work of the people in the trenches.

As for those others questions, like the one about Bloggers, there are absolutely some bloggers who are journalists. Me…I’m more of a pundit. Espcially when I write posts like this.

As for where I think Journalism is going? I think most of the major, most popular, news sources are pretty light these days. First off, there are several layers to our news system. The Associated Press is the source for an enormous number of stories reprinted or rehashed nationwide. If there is anything wrong with that, it’s not with the AP (aside from individual bias from their writers), it’s with the fact that the local news outlets can (and do) pick and choose what they present, and a lot of stories, that the AP might be reporting on, are nearly impossible to get, since the AP has no business model that supports giving access to their feeds to the general public.

But there is a perspective that many journalists, or at least many American journalists, are flat ignoring really important stories. I’ve heard many people say that if you want to know what’s really going on in US politics, watch the BBC News. But there are tons of other stories that aren’t being told there. That, I believe, is where some bloggers are able to fill the niche on a more local level, covering their municipality or beyond. Even further than that, there are stories that most journalists just aren’t interested in covering, particularly in any sort of in depth way.

The Internet, and much more largely the available of relatively inexpensive high-quality recording equipment, is changing that quickly. Sure, a lot of the video content is not very intriguing, but Current has built a large portion of it’s programming out of Viewer-Created Content (VC2), and some of the stories that come out of that, are really interesting, that approach stories from interesting perspectives, but it’s not necessarily the in-depth reporting we want out of journalists.

Enter another Current program, Vanguard. The Vanguard team, does a really good job of presenting a story with an even tone. I won’t say that they’re completely without bias. Certainly, the correspondents have their own opinions, and they show sometimes. And some stories, it’s impossible to not feel opposed to one side of an issue.

But then there are stories like this week’s episode, “American Jihadi”, about a kid from Alabama, who is now fighting a Jihad in Somalia against the Ethiopians. The correspondent, Christof Putzel, does an amazing job of telling the story without condeming or endorsing the work of the subject of the story. It’s an amazingly told story, and by far the best episode of Vanguard in a season that has had some excellent episodes.

I have become a firm believer, that smaller news organizations like this, who have no mandate other than to find interesting stories and report on them, honestly and truthfully, will change the way journalism is done. I had no idea that the US backed Ethiopia’s invasion of Somalia, though I’m not surprised at all. The level of the conflict in Africa is simply not covered on the news outlets that I have more direct access to (or at least traditionally). Some people may watch the episode above, and walk away with more negative attitudes toward Islam, but the fact that the main person telling the story was the best friend of the jihadi, a muslim himself, and someone who doesn’t want or have that life, lends an enormous sympathetic level to the story.