Wednesday, November 5, 2008

watchtower

As a kid, I always imagined that I would be in my fifties before the nation elected a black president; in this hypothetical scenario, the gender barrier would fall first (in my forties), and in both cases, the candidates would need a conservative or Republican label to balance out the bias that Southern voters would have against them. Yesterday, we put that theory to the test, when the electorate was asked if a left-leaning black man with an Arab name and roots in the Chicago political system was the right man to lead them out of the wilderness and into an era where past political assumptions were no longer valid.

The answer? Yes He Is.

The most exciting thing about this election is that the future is much more malleable than it was before. It's likely that things will not turn out quite as well as Obama and his supporters are hoping, but I think it is undeniable that the probability of change is much greater than it was yesterday. America is not a country of gamblers, but the election of Obama indicates that it knows when to cut its losses and try something new. For McCain supporters (and Palin supporters), there is a positive message to take away from all this: if you care enough to participate in our electoral process, you can make a difference.

At the same time, I have to imagine that the idea of an Obama-type campaign - with its extensive volunteerism and rabid enthusiasm - is actually quite terrifying to politicians of either party who are facing re-election in 2010 or 2012. And that is fantastic.

Congratulations, Barack. A significant portion of my projections for the next two or three decades have just been wiped clean by your unprecendented campaign; this internal view of the country and where it's headed is by no means a blank slate, but it's much more interesting than it was when I was a kid. I can't wait to see what happens next.

Labels: ,

Friday, June 27, 2008

nino

Last fall, this blog openly mocked those who thought that the eventual ruling in DC vs. Heller would be a silver bullet that clarified the nature of the Second Amendment once and for all. I fully expected the justices to punt, passing down a narrowly-scoped decision(s) that resolved the immediate conflict without setting a precedent by which other gun regulations could be interpreted.

Yesterday, Justice Scalia threw my arrogance right back in my face, handing down a decision that did I what I claimed was impossible: it made a solid case for individual gun rights based on a sentence that has more grammatical errors than words. This opinion may end up being the most significant of Scalia's career; he shows no mercy, shooting down each the dissenters' points with an impressive combination of 18th century literature reviews and historical research on the motivations of the laws that preceded the Second Amendment. Whether you like Scalia or not, he makes a hell of an argument. If you haven't read it, you owe it to yourself to at least read the syllabus[1].

This is not to say that the opinion is perfect. It does not include a comprehensive set of instructions for dealing with all of the edge cases surrounding individual gun ownership; it merely states that individuals must be allowed to own guns outside the context of a state organization. The ruling also makes clear that individual acts of self-defense are a constitutional right, but it does not explain why it is permissible to apply heavy regulations to such acts in public but not in private. Scalia himself acknowledges that there is enough fodder among the edge cases to fuel years of lawsuits.

What I find most interesting about this ruling is that the author - an unabashed social conservative who wears his politics on his sleeve - resisted the temptation to strike down state and municipal laws banning certain non-automatic weapons[2]. Most conservatives resist the notion of incorporation, which holds that the Bill of Rights must be applied at a state level because of the Fourteenth Amendment's due process clause; to those that believe in extreme judicial restraint, it is not the duty of the federal government to protect the people from state laws the undercut the Bill of Rights. However, since total incorporation has been in effect for decades now, Scalia could easily have rationalized its application within his opinion, invalidated any state or municipal law banning certain non-automatic weapons, and been a national hero to millions of people.

But he didn't. He stuck to his principles, knowing that his decision would set off a landslide of lawsuits in the lower courts.

I don't think that Scalia is innocent of having injected his personal beliefs into past decisions - he's made many arguments that were really hard to swallow from an alleged small-government conservative - but in this case, he walked away from the opportunity to slam the door on people he considers political opponents. I realize that the other four justices in the majority had input into the decision and would not have signed on if they didn't agree with all of his findings, but Scalia is an imposing personality, and I think he could have strong-armed the others into going along with it. Alternatively, had Justice Kennedy been assigned to write the opinion, and he had tried to apply incorporation, I think the right-wing justices would have been turned off and written a separate majority opinion, resulting in a ruling that favored Heller but did not set judicial precedent (which was my original prediction).

At the very least, we can appreciate this ruling because it means that Democrats will no longer have to reassure midwestern gun-owners of their unwavering gun love by participating in incredibly awkward campaign gimmicks.

[1] Abstract, for the scientists in the audience.

[2] This case is complicated by the fact that D.C. is a municipal oddity: it is a city, but it is run by the federal government. This means that federal law - which is where Scalia's non-incorporative decision will be applied - is the only law that matters. If Dick Heller lived in any other city in America, the findings would probably have been less favorable for him.

Labels: , ,

comeback

One thing I've learned about blogging is that it's impossible to make up for all of your would-be posts after a long period of silence. Getting back into a blog routine is frustrating because you feel the need to share all the significant thoughts you have had during your silence, especially if your silence was the result of major life events. Trying to summarize months of your life in one post is overwhelming and just extends your procrastination, so the best thing to do is to just let all of those would-be posts fall into the bit bucket and move on as if nothing happened. So that's what I'm going to do.

By the way, Bridgid and I hiked across Utah, got married, remodeled our house, and moved across the Triangle to Chapel Hill.

Just so you know.

Labels: ,

Thursday, February 21, 2008

albatross

In my home office I have four cardboard boxes packed tight with books. Ninety-percent of them are related to programming: languages, frameworks, best practices, and so on. Some of them are life-changing tomes (Design and Evolution of C++ and Effective C++, to name a few) while others are glorified API documentation, but all have one thing in common: they have not been opened in over four years. The Internet has made them irrelevant.

I still appreciate physical books - the remaining ten percent of my books are focused on consitutional law and American history, and it would not have been nearly as enjoyable to read them had they been e-books[1]. But the fact that I these extracurricular books are packed away just as tightly as their technology counterparts makes it clear that I have little use for books even when they provide content that isn't available on the Internet; the additional books that I've collected since my last move now sit on top of the boxes and will likely be packed away one weekend when I happen to have an extra cardboard box. Having contemplated this situation for a couple of days, I eventually found enlightenment in an old episode of Seinfeld:
Jerry: So that's it? You're out?

George: Except for one small problem. I left some books in her apartment.

Jerry: So, go get them.

George: Oh, no. No, I can't go back there. Jerry, it's so awkward and, you know, it could be dangerous... sexually. Something could happen, I'd be right back where I started.

Jerry: So forget about the books. Did you read them?

George: Well, yeah.

Jerry: What do you need them for?

George: I don't know. They're books.

Jerry: What is this obsession people have with books? They put them in their houses like they're trophies. What do you need it for after you've read it?
The books that I own were indispensable during my college years. They drenched my insatiable thirst for knowledge and helped me create the kind of software that was being churned out by real programmers, not just the toy projects that we got for homework. Each semester I would buy my textbooks early, read them, and then spend the rest of the semester learning about the things that weren't covered by RPI's curriculum but seemed really exciting, eventually putting those things to work in side projects that I never seemed to finish. This has led to a situation where all of my books are filled with knowledge that could be considered the foundation of my career or tragically antiquated[2]; either way, these books are just trophies that represent my ability to learn the basic skills required of a professional programmer. All of the new and advanced skills that I use in my day job have been gleaned from the countless tutorials and source code repositories scattered across the Internet.

And they're heavy trophies. When I look back on the last three or four moves I've made, the heaviest and most cumbersome thing to move was always my book collection. It's a chronic back problem waiting to happen, and now that I'm approaching my late twenties, I have to consider these things. The only reason I've looked through my books post-graduation was to find and ship two of them to a friend who was unfortunate enough to be working on a project full of old Win32 code.

Is that what my book collection has become? A used book depository for the handful of programmers that I know? It all seems so wasteful[3]. I think the time has come to get rid of my book collection; as anyone who has visited my past apartments will tell you, I've always been kind of a minimalist, and these books are doing more harm than good here in my office. I will try to give them away to college students and other aspiring programmers, but I have a feeling that many of them will go unclaimed, doomed to the recyling bin.

Of course, I don't think it will matter if I toss all of my books and then forget the ins and outs of the Win32 thread API, but it will matter if I can't articulate why I vote the way that I do or learn from past mistakes; for this reason, the lessons of American history will still have a physical presence in my life. So long as they fit in one box.

[1] I'm not saying that e-books are bad or that they will never be popular - they're just not my cup of tea.

[2] It's sad to look back on all of the books that I had to read just to realize that MFC was a disaster.

[3] And heavy - did I mention that?

Labels: , ,

Thursday, February 14, 2008

binding

I've been working on the Zero team for almost a year now, and in that time, Groovy has become my language of choice, both for Zero applications and non-Zero utilities. Groovy is, as Jerry Cuomo put it, "the nicotine patch for Java programmers"; it provides many of the cool features found in Python while freeing me from the tedious boilerplate of Java, all with a gentle learning curve. Like most Java-turned-Groovy users, I started out writing Java-centric code, picking up Groovy's shortcuts and elegance as I grew more experienced and shared code bases with other Groovy users. There are still many features that are not part of my toolbelt, but every day I seem to pick up a new one.

Because I use Groovy both for RESTful resource implementations and utility scripts, I often use Zero's /app/scripts directory to store code that is in any way reusable; this shortens my resource scripts and keeps time spent refactoring to a minimum. The only problem with invoking code in /app/scripts is that you have to do so with generic, reflection-based APIs, like so:
def script = "FooUtils.groovy";
def method = "getFoo";
def params = ["param1", "param2", ...];
def foo = invokeMethod(script, method, params);
To make it so the code in /app/scripts is in scope for your other Groovy code, you need to create a binding. Making a Groovy binding for a script isn't hard, it's just kind of tedious: you write a Java class that maps all standalone function names to reflection-based invocations on the Java class, and then use Groovy's script engine API to call the target function. You must also update your configuration file to register your Java class as a Groovy binding. The whole process is outlined in Zero's documentation as well as every developerWorks article I've written in the last six months. If you follow the instructions prescribed by the Zero team, the block of code shown above will become much more readable:
def foo = getFoo("param1", "param2", ...);
It's not often that I put code in /app/scripts that isn't meant to be shared with the rest of my application, so after I while I started poking around zero.core to see if there was a way to enable bindings automatically, with no Java code or config stanzas. The short answer is that, yes, it would be possible, but we would take a performance hit because of some additional reflection; I have not bothered to implement this solution, so I cannot say how severe this performance hit would be. I didn't want to go through a lot of trouble only to find out that my solution was slow as molasses, so instead I wrote a Groovy script to generate the binding classes and config stanzas for me.

The script is named binding.groovy, and you can download it here. You can look at a sample console session below:
$ ls
.
..
binding.groovy
my.zero.app
$ groovy binding my.zero.app
$ zero build
$ zero run
The script generates classes and configuration without touching any of your existing files. The zero build step compiles the Java classes so that they will be on the classpath at run time (zero run). You can find more details on usage, behavior, and licensing in the header comments.

Working on this tool gave me the opportunity to make a very useful comparison between Groovy and Java. Last summer I used Java to write RESTdoc, and that tool shares many requirements and behaviors with my latest one: both analyze the structure and code in a Zero application and use that information to generate one or more files using a template. RESTdoc is more complex because it must be usable from the command line, Ant scripts, and a GUI, but many of the algorithms are the same.

Based on my two experiences, I would have to say that using Groovy was far more enjoyable than using Java. But why?

First, I was able to get right to coding, without having to create all of the boilerplate that seems to appear in all of my non-web applications. You know: first write main(), then a non-static run(), then set up the exception handling, then define an exception hierarchy, and so on; then, just as you're starting to write real code, your mind starts to map out the larger pieces of the tool, and you start to think about which of these pieces should be pluggable, and then you start defining interfaces, and soon it's the end of the day and all you've done is create an Architecture.

Tomorrow, you think, I just have to write the code. And it seems like such a logical thought to have.

But it's not.

I wrote RESTdoc in just over two days. This latest tool required four hours. Granted, I was able to reuse many of the ideas I'd had while implementing RESTdoc, but those are just ideas - I couldn't reuse most of the code because it was all so... big. I knew that the code could be much simpler in Groovy, so I rewrote it. Quickly. The Groovy tool took less time because I was able to focus on actual logic and actual testing, not Java-oriented procedures that catered to my neuroses.

Second, the ability to use closures made my code smaller while also increasing its readability. Most of my closure usage is coupled with methods like each() and collect() (and their derivatives), methods that accept a closure as a parameter and apply it to a collection. I'm sure that some people abuse closures in a way that makes them feel like Java's anonymous classes, but for the most part they seem to function as a way to get things done with less bureaucracy.

The third thing that makes my Groovy development more enjoyable is the fact that lists (java.util.List) and maps (java.util.Map) are built into the language, and I can use them to create utility data structures without defining an inner class with getter and setter methods. You can do this in Java too, but it's frowned upon; it just doesn't feel right to put so much structure around your code and then use bags of goo to store your data. But while that's an appropriate feeling to have in many scenarios, it's a real downer when you're writing a script to generate config files. I love the fact that I can represent part of a parse tree with a set of key-value pairs and not feel guilty about it, and I really love the fact that I can create that set in one line of code:
return [
name: "getFoo",
params: ["param1", "param2"],
hasReturnValue: true
];
Finally, for all of the Java bashing I've done in this post, I have to remind myself that one of the best things about Groovy is the fact that it lets me devolve into traditional Java programming when I really need it. There are some tools for which Java integration is superior, and those tools aren't going to change any time soon. Java is also the original language of the JVM, and it is the best way to expose a language-agnostic API on that platform.

And sometimes, I'm just not ready to do things The Groovy Way. Like all creatures of habit, there are times when I hang on desperately to the past, for no good reason at all. Groovy allows for all of that, and it doesn't mock me when I fail to use it to the best of its abilities. It just runs my script.

He'll come around, it says to itself. Some day.

Labels: , ,

Friday, February 8, 2008

astringency

On Wednesday I posted a little memo to all of my readers who may be hockey fans; it was only two sentences long, but it ended up causing much more grief than anything else I've written for this blog. I'm using this post as a budget therapy session.

First, I should clarify that this grief was completely internal and has nothing to do with the fact that the Hurricanes' best penalty killer is out for the season with a broken leg; in fact, I wrote the post in less than two minutes, and there is no evidence to suggest that any of my readers even read it, let alone cares about its topic. My pain is relate to Blogger's user interface, which I don't use for composing but do use for posting. After copying the text of my memo from a local file to Blogger's glorified <textarea/>, I accidentally hit some combination of keys that caused Blogger to initiate the publishing process and then go back two pages to the "dashboard"; it was all very fast, and not realizing what had happened, I started again by clicking the Create New Post button and re-copying my text.

Once I published, I realized that I had actually created two posts. The first had a permanent URL of /2008/02/rosey.htm and the second was at /2008/02/rosey-06.htm. This enraged me for reasons that I will get to shortly. My initial reaction was to delete both posts, republish my index page, and then create the post a third time. Upon doing this, my post resided at /2008/02/rosey_6595.htm. The exact role of these random numerical suffixes is unknown to people outside of the Blogger team, but I have a hunch: I think this is a case of REST pedantry.

Blogger is treating each new post as a completely new resource and it is ensuring that all new resources have a unique URI; because the tool uses the post title as the last token in the URI, it is tacking on a suffix so that the final URI does not conflict with any other resource. It does this even if the conflict is with a resource that no longer exists so that a client is never tricked into thinking it's dealing with the original resource (i.e., it does not realize the original resource was deleted).

This kind of behavior is similar to what you see in WS-* Land, where resources are identified using an endpoint reference (EPR). Once a WS-resource is destroyed (either implicitly or explicitly via WS-ResourceLifetime), its EPR is invalid forever. This is a pretty harsh requirement, but most implementations are able to satisfy it with the help of UUIDs. Blogger doesn't do anything so obtuse when constructing URIs for blog posts, but the suffixes make me think that there's some kind of logic in the Blogger engine that prevents two posts from ever having equal identifiers, even if their lifetimes do not overlap.

As someone who has had to implement universally unique identifiers with REST and WS-*, I can appreciate the motivation behind them; however, in the case of my blog, which is my own little sanctuary on the Internet, I would prefer to have more control over my URI space, even if it means I am not in 100% compliance with AtomPub or the majority opinion on rest-discuss. Let's face it, I'm doing this more for me than for you; if you want to read overly-zealous opinions about data formats and U.S. laws, there are eleventy scrillion other blogs that can fulfill your needs, but I only have one web site, and the fact that my URI space is completely organized except for one post is going to drive me absolutely insane.

/2008/02/rosey_6596.htm? What is that? It's just so... random. And un-RESTful. It might as well be an EPR.
<EndpointReference 
xmlns="http://www.w3.org/2005/08/addressing">
<Address>
http://codeunleashed.com/2008/02/rosey.htm
</Address>
<ReferenceProperties>
<ResourceId>6595</ResourceId>
</ReferenceProperties>
</EndpointReference>
At first I thought about changing the URI manually, but the index is stored in Blogger's database, so it will just revert back the next time I publish a post. I also considered deleting the post and keeping my feelings about the Hurricanes to myself, but I decided that writing seven paragraphs about five URI characters would be slightly less insane. It's part of my 2008 New Year's resolution to not waste time on small details that don't have an actual impact on future events. As you can see, it's going pretty well.

Labels:

Wednesday, February 6, 2008

rosey

FYI for all of you Carolina Hurricanes fans out there: the 2007-08 season is officially over.

That is all.

Labels: ,

Tuesday, February 5, 2008

super

I will not be participating in today's voting because I live in North Carolina, and our primaries are scheduled for May 6th. Of course, I don't actually get a vote on May 6th, either - my vote has been negated by the people of Iowa, New Hampshire, and South Carolina, as well as the party officials that have punished any state that tried to hold a primary in January. Instead of selecting from the full slate of candidates available at the start of 2008, today's voters have to pick one of four "front-runners"; by the time the polling places open in North Carolina, there will only be one viable candidate in each party, making my vote irrelevant.

It amazes me that both parties have chosen to alienate voters in key swing states like Florida and Michigan in order to preserve a status quo that puts the entire nomination process in the hands of people who think The Old Man of the Mountain was an breathtaking monument. If you're trying to win control over an entire branch of the U.S. government, wouldn't you want to be sure that you're nominating someone who has the broadest appeal? This seems like an air-tight argument in favor of a national primary. Alternatively, we could conclude that the first votes should go to states like California and New York, states that offer a more complete representation of the American electorate. Either change would enhance the presidential election process by ensuring that more voices were heard before the field was winnowed.

Super Tuesday indeed.

Labels: , ,

Friday, February 1, 2008

fail

Apparently, the leaders in our executive and legislative branches have come to agreement with regards to saving the economy: they will courageously tackle our massive deficits, incalculable debt, and dismal growth by giving everyone $600. There are so many things wrong with this plan that I didn't even know where to begin; I had to go outside and throw rocks at the house for an hour until my anger subsided and I could write this post without breaking the keys off my keyboard. Let's look at the facts.

The main goal of the economic stimulus plan is to put cold, hard cash into the hands of normal Americans, who will take their unexpected bounty to the mall so they can buy presents and dine out; proponents say that this increase in consumer activity will boost payrolls, calm Wall Street, and save us from certain recession. The original version of the proposal (drafted by the House and endorsed by the president) would grant a $300 tax rebate to the dirt poor, $600 to taxpayers making less than $75,000 per year, and a few extra bones to people with kids; if you make between $75,000 and $87,000 per year, your rebate would decrease as your income increased, eventually bottoming out at $300. Six-figure breadwinners need not apply.

The Senate modified this proposal by doubling the maximum income levels so that wealthier individuals could get in on the super fantastic rebate action. It is not yet clear which version of the proposal will "win", but it looks fairly certain that all lower and middle class families will be getting a check for $600 just in time for those Memorial Day shopping extravaganzas.

Now, on the surface, this is encouraging: politicians managed to agree on a policy and enact a law in a matter of days, with an immediate result for the American public. Finally, a win for the middle class! Right?

Wrong.

Well, sort of. I'm sure that the extra $600 won't hurt middle class taxpayers, but the good feelings it creates will be short-lived; considering the deep financial hole that we are sitting in as a country, I think it would behoove us to consider the long-term impacts of this plan. This kind of inspection is not nearly as immediate or satisfying as the idea of giving everyone $600, but I am going to do it anyway.

The first thing that's wrong with this plan is that it confuses public sentiment with its original goals. Giving a few C-notes to middle class families on the brink of a recession may brighten their day, but it won't lead to concrete economic growth, which means that it won't really improve their lives. By most accounts, American families are in much the same situation as their government: they are in severe debt and find themselves robbing Peter to pay Paul, all to live the American Dream that is sold to them on TV. This means that the average person will use their $600 in one of three ways:

  1. Payment of credit card debt, overdue bills, or loan principals.

  2. Savings for emergencies, retirement, or education.

  3. Purchase of new clothes, music, or other things they don't need.

The first two options are obviously the more responsible ones for someone who has incurred a lot of debt or has not made a practice of planning for the future. That may sound good from the perspective of someone who wants to help average Americans, but remember: the goal of the plan is to revive economic growth. I will try to explain why I think these things are in conflict without sounding like a heartless bastard, but I can't guarantee anything. Just so you know.

In the first scenario, the person is paying off debt for things that he bought in the past. The debt is still very real to him, but in the eyes of financial analysts and corporate executives, it's ancient history; when John Q. Public bought that new iPod with his credit card last year, the bank that issued the credit card paid his debt to Apple Computer in full, and that payment was recorded and celebrated during the same fiscal quarter. The fact that John is beholden to his lender at an 18.9% APR does nothing to advance the state of the national economy; paying down his debt is a good thing when it comes to his blood pressure, but it's not going to register as new economic activity.

The second scenario is even more optimistic and hopeful than the first, but it will also cause us to miss our target. I sincerely hope that the majority of Americans will save their rebate money, but I also realize that this will be discouraging because money in the (individual's) bank has no impact on our economic growth rate.

Given our history as consumers, and the fact that so many of our citizens came into debt by shopping and over-extending themselves, it is likely that many people will give in and go along with our third scenario. This is exactly what politicians are hoping for, but even this will not "save" us. The Experts concede that even if everyone spends their rebates on shiny new gadgets, the growth that we'll see next quarter will be 1-2%; now, 1-2% of the American economy is an incredibly large amount of money, but it will be overshadowed by the negative effects that we will see in subsequent quarters. If people don't do the responsible thing and pay down their bills, then they are only making their situation worse, and it will take them even longer to pay back this "free" rebate. Do we really want to encourage this kind of irresponsible spending? This is how we got in a hole to begin with!

Sending money to people who are in debt and don't have savings sounds nice, but it won't give us the results that our politicians want. If the recipients use it to pay bills or create savings, the economy will continue to stagnate; if they use it to buy more stuff, they are just digging themselves a deeper hole. Everyone will be excited for a couple of days in May, but we'll be back in a rut by June. Mission: not accomplished.

If we really wanted to increase economic growth by a few points this summer, we would give the $600 to those who make more than $75,000 per year because they are more likely to have disposable income. Now, let me be clear: I do not feel that the goal of temporarily increasing economic growth by 1-2% warrants giving a tax break to upper class taxpayers. Additionally, I do not need $600 from the government, nor will I feel any hostility if, when the final numbers are released, it turns out that I lost the tax rebate sweepstakes. I'm fine. Really. This is not sour grapes from someone who has a comfy job at the largest IT company in the world.

That said, people with disposable income tend to... dispose of it. They go out to eat and buy things they don't really need, all of which fuels the job market and salary numbers that have so concerned our dear leaders. The growth caused by such disposal of income would still be temporary, but it would happen. If this is the goal, the tax rebates should go to the upper middle class: those wealthy enough that they don't have unmanageable debt but not so wealthy that $600 is a drop in the bucket.

Of course, you cannot, in an election year, tell middle class voters who are financially strapped that the answer to their problems is a tax rebate for people who don't have any problems. I understand that. But I would hope that our leaders would understand the points I have raised and not make the proposal in the first place, thus avoiding the debate entirely.

The second thing that is wrong with this plan is that our government cannot afford to give us a tax rebate right now. We have not had a balanced budget in almost a decade. Our national debt makes me want to throw up under my desk. Our 401k money and future business plans are riding on the hope that large Asian countries will continue to buy our bonds. We are in a war that, whether you approve of it or not, costs billions of unbudgeted dollars per year. And despite all of this, the government wants to return part of its yearly income? If this idea were any more stupid, the amount of stupidity would cause some kind of cosmic integer overflow and make the whole thing brilliant.

Put another way: if the government were a person, he would have nothing to his name. He would have his credit cards taken away, his car repossessed, and his belongings sold at auction after settling in bankruptcy court. If such a person offered you $20 because he knew you were a little short on cash this month and couldn't afford to meet the gang for drinks, would you take it?

No?

Well, that's the situation we find ourselves in right now: we're handing out rebates like its 2001 despite a massive increase in debt. I'm a fairly libertarian guy, which means that I normally perk up when people mention tax cuts; the fact that I'm saying the government should keep our money should clarify just how bad I think our balance sheet is. It's never fun to pay taxes, but when your leaders overspend their budget multiple years in a row, you either have to increase their income (taxes) or boot them out of office. You can't Reagan-omics your way out of a $400 billion deficit. You certainly can't do it seven times.

In summary, this plan is a joke. In the best case, tax rebates for lower and middle class people will not generate economic growth, and in the worst case, it will generate a small bump in growth but increase the deficit and weaken the dollar. It's a lose-lose situation. Frankly, I have trouble believing that anyone involved with this plan would pass a second grade arithmetic test.

Fail.

Labels: , ,

Wednesday, January 23, 2008

legendary

I started using Google Charts a few weeks ago, and I have to say: it's pretty stellar. You can create bar, line, or pie charts with multiple colors and data sets using a simple HTTP GET. The names of the query parameters are kind of... trite... but overall I think the API is very user-friendly. I'm a fan.

Of course, the API does have one problem: it requires me to send all of my data outside the IBM firewall. Perhaps you hadn't noticed, but the IBM Corporation employs a lot of lawyers, and said lawyers get very uncomfortable when you start talking about sharing company data with servers owned by our competitors[1]. It's unlikely that Google is employing a bunch of people to read through its server logs, find requests originating from its competitors' servers, and muse about their significance to Google's management team[2], but lawyers are paid to be paranoid, and ours are very good at their job. The net of this is that any IBM application that uses Google Charts and is not an obvious demo must be reading from a public data store.

I like to poke fun at IBM's giant legal department, but the truth is that it's not much different from that of other companies. IBM isn't the only company that will have trouble using Google Charts, so it would be nice to see some API enhancements with a nod to confidentiality. I think the easiest solution would be to split up the generation of charts and legends; the numbers that are used to create the actual bars or lines are only meaningful if they are accompanied by labels, so keeping the two things separate should satisfy the requirements of most corporate lawyers. The API should be augmented with some sample JavaScript code for generating legends that match the colors and font of a given chart; this code could be provided alongside the existing code for encoding data and invoked by programmers who are not allowed to share legend text with the outside world. This isn't as seamless as the original API, but it's better than nothing.

Assuming that Google is in no rush to appease third-party developers using a service that doesn't generate any revenue, I'll be writing my own legend generator in the near future. I'll post the code once it's complete.

[1] I guess they're a competitor. I can't think of an area where we compete with Google directly, but my inner lawyer is telling me that once a software company reaches a certain size, it automatically becomes a competitor, regardless of its current investments.

[2] The Terms of Service explicitly denies such activity.

Labels: , ,

Tuesday, January 22, 2008

beacon

Lately my blog has been devoid of the deep technical content implied by my host name; I assure you it has not been from lack of interest. In the last two months, I've published three articles on IBM's developerWorks, each exploring a different aspect of Project Zero and REST. Check it out:

  • Title: Extend Project Zero's scripting platform with Flickr APIs

    Abstract: The Flickr photo sharing service is one of today's most popular Web applications. It provides a robust hosting service with slick social networking capabilities that make uploading, organizing, and finding photos very simple. That's all very cool, but from a developer's perspective, the most interesting thing about Flickr is its public API for reading and writing photo data. You can send API requests over HTTP using any programming language you wish, and many open source projects have sprung up to encapsulate this API for various languages. In this article, you'll learn how to "Zero-ize" the Flickr API by providing a Groovy binding that is easily reusable in your Project Zero applications. When you're done, you'll be able to read and write photo data from your Groovy scripts in just a few lines of code.

    Reader's Digest Version: You want to use the Flickr API in your Java applications, but everywhere you turn there's a factory pattern or a glorified HttpURLConnection. You have started building Flickr URLs with StringBuilder, laboring under the strain of append() and hard-to-read query strings, when you receive the tragic news: you have died of dysentery. Game over.

    Fortunately, Groovy scripting lets you use all of your Java skillz while shaking off the cruft that was keeping you down. This article creates a set of Groovy scripts for invoking the Flickr API and shows how to share the scripts throughout your Zero applications; it ends by showing you how to generate one of those ubiquitous photo collages so that your site will look exactly like every other site on the Internet.


  • Title: Manage an HTTP server using RESTful interfaces and Project Zero

    Abstract: WS-* users and REST users have an ongoing debate over which technique is most appropriate for which problem sets, with WS-* users often claiming that more complex, enterprise-level problems cannot be solved RESTfully. This article puts that theory to the test by trying to create a RESTful solution for a problem area that is not often discussed by REST users: systems management. In a previous developerWorks tutorial, I showed how to create a Web services interface for managing HTTP server products; the tutorial used concepts from WSDL and the WS-* standards to define the management interface and software from Apache Muse and Apache Axis to create the management application. For this article, I use Project Zero and REST design principles to recreate the interface and function of the original application and determine if REST is a valid option for this enterprise project.

    Reader's Digest Version: Human sacrifice! Dogs and cats living together! Mass hysteria!

    It's almost unthinkable: creating a fair and level comparison of WS-* and REST based on experience working in both worlds. Well, I went ahead and thought it, and then I wrote it down so everyone could share my completely non-hysterical evaluation of REST as a foundation for remote systems management tools.


  • Title: Add Ruby templating to your Project Zero applications

    Abstract: Ruby users, take note. You can now do everything that Groovy and PHP users can do when creating Project Zero applications! In a previous article, we showed how to augment Project Zero to provide support for the Ruby scripting language. The code that we wrote enabled Ruby users to transfer their scripting skills to the Zero platform and take advantage of its unique programming model. Of course, scripting isn't the only way that Ruby is used to create applications - programmmers who use the Ruby on Rails framework also mix Ruby in HTML templates similar to JSP and PHP. These templates, called RHTML files, are very useful for creating dynamic user interfaces, and this article will show you how to extend our Ruby support to include them.

    Reader's Digest Version: Remember the first time you saw Back to the Future? As the movie ends, Marty has just discovered that his father isn't a sucker anymore, his sister is popular, his brother has a job, and something he's done has warranted his parents buying him a brand new 4x4. When Jennifer struts in a few minutes later, you undoubtedly thought, This was a killer movie. And you were right.

    But then, out of nowhere, Doc screeches into Marty's driveway in a beat-up De Lorean and tells the two teenagers that their future is in shambles and they have to go to the future to prevent a certain tragedy. No way! The movie closes with the De Lorean lifting off the ground and flying into 2015. Wow! Robert Zemeckis just turned your expectations upside-down, and now you can hardly wait for Back to the Future II. Do you remember that?

    Well, if you're like most people, you had the exact same response when you read this last abstract and realized that my Ruby on Zero article has its own Part II; you thought the first article was great, but now that you've gotten a taste, you can't imagine life without Part II and its Mr. Fusion-fueled RHTML files.


Having explored over a dozen topics related to Zero and REST, it's clear to me that one of Zero's greatest strengths is how flexible it is; in other words, Zero does not get in my way as I try to bend it to meet the needs of my project. Most of the time I don't have to do any bending at all, but sometimes I do, and rarely is something so hard that it's deemed impossible or not worth the trouble. If the Zero platform is successful, this will certainly be one of the reasons: it provides you with many tools and conventions for getting things done, but it doesn't force you into absolutes or some kind of software design religion.

Labels: , ,

Monday, January 7, 2008

irresponsible

We don't have a television in our house, but holidays and vacations always grant us the opportunity to sit in front of one for hours at a time, be it in a relative's house or a hotel room. There's a lot of bad TV out there, but most of it just fails to be interesting; once in a while, though, I find a show that crosses the line from being bad to just plain offensive. Extreme Makeover: Home Edition is such a show. After watching a couple of episodes, I spent a few days stewing in the iniquity of it all, trying to formulate a coherent rant that didn't suffer from myriad exasperated tangents. I will dispense that rant now.

When I first encountered Extreme Makeover: Home Edition (EMHE), I assumed it was just a way to pull at the heart strings of America's TV audience and get them to watch what is essentially a one-hour commercial for all of the show's sponsors. I don't fault ABC for taking the opportunity to show an hour of non-stop commercials, I just can't believe that all of the hosts are able to pull it off with a straight face.
Host #1: Sal and Julie love to grill outside during the summer, but they haven't been able to do much grilling since they ran out of charcoal last June. We could just buy them a new bag of charcoal, but I think we can do better than that.

Host #2: I talked our friends at Sears, and they said that Sears offers a great selection of propane grills and accessories, all covered by a Sears Home Warranty.

Host #1: Wow, it sounds like Sears has everything we need. Let's buy an expensive Sears brand grill that will make Sal and Julie happy for years to come.

Host #2: Good idea. Going to Sears will make this outdoor grilling area better than ever.

Host #1: Let's go to Sears!

Host #2: Sears!
This aspect of the show is just mindless and predictable, and I have no problem with that[1]. What bothers me about EMHE is the complete lack of fiscal responsibility that is demonstrated by both the producers of the show and the lucky families they have selected. I originally thought that the show would provide the families with reasonable upgrades to their existing homes using materials provided by the sponsors, making it a sappier and more commercial version of TLC's Trading Spaces; what I found was a show that glorified suburban excess while completely ignoring the plight of people who do not even have a home to renovate.

One of the first EMHE episodes I saw focused on some family in Wyoming that had bought a house that was half underground and, consequently, filled with radon gas. The whole family was sick from the radon poisoning, and they didn't have the money to build a new house or take care of the dozens of stray pets they had adopted over the years. Enter EMHE. They tore down the original house and gave this family of four a million-dollar home with seven bedrooms, a pet sanctuary, and, by my count, exactly fifty-two flat-panel TVs.

Why is this bad? Let me count the ways:

The first and most obvious thing that eats at my soul is the fact that ABC has used its immense power to extract millions of dollars in time and materials from local citizens but only managed to help one family. I don't see why a poor or middle class family that is on the down and out needs a McMansion in order to improve their lives. Every time they highlight some family member who works with disabled kids or a local charity, it strikes me that this person must have extreme cognitive dissonance upon moving into a house that is light years beyond their means.

Having grown up in a lower-middle class suburb with a single mother, I can honestly say that if anyone had offered us a brand new 3 BR/2 BA ranch like the ones all of my friends lived in, we would have been more than happy to take it. Such a house would cost between $100,000 and $200,000 depending on which area of the country it was built in; why, then, does ABC feel the need to build homes that are assessed at $500,000 to $1,000,000? I'm sure that the families are excited to live in such luxury, but if you toned down the luxury three or four notches, would they really know the difference? Would they be any less happy?

EMHE could provide these families with nice suburban homes and all of the latest gadgets for about $200,000. By restricting themselves to "nice" and "impressive" (as opposed to "grand" and "overwhelming"), the show could afford to help three or four times as many families. It would have more content to work with and there would be no effect on the amount of product placement that is currently in the show. I really don't think there would be any negative impact on revenue or ratings if the network changed the show to balance cool home improvement with the desire to help as many people as possible.

The second thing that irks me about this show is also tied to fiscal irresponsibility. It's bad enough that a giant corporation is spending excessively on something that isn't necessary (big surprise), but it's made worse by the fact that they are pushing these families into a situation that will leave them house poor. Keep in mind that these families are already "regular poor", and while house poor may seem like an upgrade, it's not exactly the stress-free life that ABC promises on the show. If a family can barely afford their current mortgage and cost of living and is not in the position to upgrade their admittedly ramshackle house, can they really afford the property taxes on a $500,000 house? Depending on what state you live in, the property taxes on such a house could easily exceed the combined mortgage payments and property taxes of a house in the low $100,000s[2].

Of course, there is a chance that the families can remain frugal in their new luxury pad and pay their property tax bill on time. Success is less likely when it comes to the utility bills. Again, we're talking about families that were already having trouble paying the bills when they lived in homes that were 1,500 square feet or less; the new homes average over 5,000 square feet, and many of them have beautiful-yet-costly structural features. The Wyoming family came home to a three-story house with a foyer wall made of glass, and when you couple that with eastern Wyoming's distinct lack of trees, I think it's safe to say that this place is going to be a greenhouse for most of the year; their only respite will come during winter, when all of their heat will rise through the foyer and escape out the giant glass wall. I would love to see the parents' reaction to that first electric bill.

The third and final thing that has me yelling at the TV is the fact that Wyoming is one of an increasingly small number of states that has not passed a law to raise its minimum wage above the federal rate of $5.85. The people of Wyoming would march on Cheyenne if anyone tried to pass a state law that raised the local minimum wage or, alternatively, increased their state sales tax in order to help more families on welfare. And yet, I saw hundreds of Wyoming residents come out to build an enormous new home for one family in need, despite the fact that said family could not repay them, did not do anything to earn the house, and did not even help build the house. This stinks of hypocrisy. The lesson here is that spending a million dollars and organizing hundreds of volunteers is no problem if the cause is heart-warming and there's a good chance you'll be on TV, but it's out of the question to do the same when the goal is to help random people whose hard-luck stories are not relayed to you in tender, five-minute TV segments.

But enough about Wyoming. That episode didn't even bother me that much, because I'm sure that if Wyoming was like the rest of America and had a some basic laws in place to protect home buyers[3], the radon thing would have been caught before the closing and the family never would have bought the house. Some of these other families are much more suspect, and their prizes much more enraging. Let's move on, this time to Kirkland, Washington.

The family in Kirkland includes a single mother who has three daughters and has renovated her inground pool for the purpose of teaching area children to swim. This small business gives her the means to pay her bills, but her house is falling apart and it would cost more to fix it than to rebuild. Unlike the Wyoming family, which lived on a couple of acres in the middle of, well, Wyoming, this family lives in a quaint suburb next to houses that are similar in size. It was during this episode that ABC discovered a new way to encourage poor financial decision making.

The Kirkland house had been in the family for generations, so the mortgage was paid off long ago; this means that the family's monthly costs were going to food, utilities, and the temporary fixes they've put in place to make their home safe. Surprisingly, my initial reaction to this situation was not to tear the house down and build a million-dollar property complete with gazebos and a professional swimming pool. Instead, I thought it would make the most sense for the mother to put the property up for sale, move into an apartment, and get a new job that provides the same income as her swimming lesson business (which can't be very large, given that her customer base is fairly small and she has to compete with non-profits such as the YMCA).

The great thing about my solution is that it's the responsible thing to do, and it doesn't require me to believe that the family's problems are equivalent to those living in public housing in downtown Seattle. I realize that this sounds harsh when compared to the ABC solution, but it is a solution, and one that the mother should have adopted a long time ago. Kirkland is a popular town, and there are plenty of potential buyers for a nice suburban plot upon which a new family could build their dream home; since she doesn't have a mortgage to pay off, she could sell the property for an extremely low price and still make a big addition to her savings account. This family doesn't need a McMansion, it needs a real estate agent and a basic investment strategy.

The last and most recent episode I caught was about some family in Vermont that had two young boys, one of whom was physically and mentally handicapped. They seemed like pretty reasonable people, and the house they ended up getting wasn't as lavish as others before it; but while I didn't have any beef with the actual family, the whole episode got me thinking about the unfairness of ABC's selection process. This family bought a "fixer upper" that had no real foundation. The house should have been condemned. They were only able to afford the house because no one else would go near it, and frankly, I don't think that such a desperate decision should give them priority over other Vermont residents who have sobbier sob stories.

There are thousands of other families across the country in equally tough situations who have not stretched themselves beyond their means and taken on mortgages for homes they can't afford. These people will never be recognized by ABC because they don't own property. They are in the same dire straits, and are arguably more responsible citizens, and yet, without a homeowner's deed, they will have no shot at the McMansion on 1.5 acres like the people from Vermont. All we have learned from this episode is that if you give in to America's big house obsession and spend yourself bankrupt while competing with the Jonses, a big team of All American volunteers will come out to save you. Reward you, even.

There are plenty of other, less grown-up reasons to hate EMHE, but I've covered the ones that everyone should agree upon. Every day I wake up and check the daily news to see if the president of ABC has managed to form a synapse between his two working neurons and pull the plug on this sham of a television show. Every day I am disappointed.

So much anger.

[1] It may be mindless, but it's not immoral.

[2] Despite the fact that the new house is a contest prize, the familes can avoid paying income tax on it thanks to a questionable tax loophole.

[3] I checked - it doesn't.

Labels: ,

Saturday, December 8, 2007

destiny

Two years ago today, Bridgid and I started dating. Having spent some time with her in the months leading up to our date, I was certain that we would make it as a couple. But I didn't tell her that; even if she felt the same way, I didn't want her to think I was crazy or impulsive.

So I kept mum until the time was right.

One year ago today, Bridgid and I celebrated one year of dating. We had shared a lot of great experiences in just twelve months, and I was certain that I wanted to marry her. But I didn't tell her that either; even if she was willing to accept my proposal, I didn't have a ring.

So I worked overtime until I had the cash.

Today, Bridgid and I are celebrating two years of dating.

And I have a ring.

Labels: ,

Friday, November 30, 2007

potential

Anyone who has used the Internet for any length of time knows that ninety percent of web pages are full of personal tripe and pictures of cats; in other words, this site has only realized half its potential. Today is the day I reach for the stars and make this a real first-class web site.

We've named him Dwight.

Labels: ,

lipstick

Those who follow the Supreme Court have been buzzing with anticipation since the justices announced that this term's docket would include DC vs. Heller, a case that will determine the constitutionality of our capital district's handgun ban. The SCOTUS blog has a good summary of the two positions being argued in the case, as well as the implications it has for other laws that restrict gun ownership. The hearing won't happen until March, but that hasn't stopped people on both sides of the argument from setting their propaganda machines to HIGH and doing everything short of calling the justices at home.

But despite all of the excitement over the Court's decision to tackle this controversial issue, the fact is that the ruling in Heller will not have the conclusive, clarifying effect that everyone is looking for. Because D.C. is a federal entity, the ruling will only affect the federal government's ability to limit gun ownership - it doesn't say anything about state or municipal legislatures, which is where most of the controversial gun laws are authored. At best, the ruling in Heller will inspire new appeals focused on state laws, but it will not have a direct effect on those laws.

I know it's hard for those at the center of the Second Amendment debate to do so, but I wish we could just admit that this case is not as groundbreaking as it has been portrayed and start talking about the real cause of this conflict, which is the irrelevance of gun laws written in 1789. No matter which side you're on, I think it's safe to admit that the Second Amendment suffers from limited imagination and poor grammar. Here is the text:
A well regulated Militia, being necessary to the security of a free State, the right of the people to keep and bear Arms, shall not be infringed.
Ignoring the awkward and unnecessary comma after Arms, this sentence has two reasonable but opposing interpretations:

  1. All individuals should be able to own guns in order to protect themselves and participate in government-sponsored militias. The weapons may be used for national defense, self-protection against criminals, or revolution against the government. Since threats against the individual exist today, this right is still valid.

  2. All individuals should be able to own guns in order to participate in government-sponsored militias. These militias were not wealthy or well-organized enough to provide soliders with weapons, and allowing citizens to own guns ensured that they would be equipped to fight when called upon. Because our country now has a very wealthy and powerful military, this right is no longer valid.

The tricky thing about the second interpretation is that it still doesn't restrict the right to own private guns - it simply says that the need for a militia is no longer a valid argument. The complexity of this statement is seemingly endless, which is why I find the hoopla over Heller so frustrating. Trying to make a real constitutional decision based on the Second Amendment is putting lipstick on a pig: either way you go, it's not very impressive. The vague text and lack of judicial precedent means that future justices could easily overturn your decision. The Second Amendment provides no real guidance in 2007, which is why I think it should just be repealed. This idea is not as radical as it sounds.

If the Second Amendment were stricken from the Constitution tomorrow, the Tenth Amendment ensures that we would be in a similar situation to the one we face now: state laws would govern who could own what kinds of guns. The only new possibility would be for a state to ban private guns all together; since the people doing the banning are subject to popular elections, I think it is unlikely that more than a few states would go through with a full ban. There is enough diversity of opinion in most states to prevent politicians who favor gun restrictions from going "too far". States like Oregon and Connecticut will probably ban guns immediately, but so what? You can still go to Kentucky and pick up a handgun and a carton of milk in the same trip. Right-leaning folks have proposed this same solution in the debate over Roe vs. Wade, and I don't think gun ownership is any less significant.

That said, I don't think that anyone who is invested in this debate could ever process the idea of repealing the Second Amendment as rationally as I have written it, so here is an alternative idea: nullify the Second Amendment by writing a new amendment. This is the same idea used by the authors of the Twenty-first Amendment, which made obsolete the alcohol prohibition of the Eighteenth Amendment. The new amendent could spell out the nation's policy on individual gun ownership, taking into account all of the technological and social advances that have occurred in the last two hundred and eighteen years. It could also respect the rules for using commas.

It's unlikely that George Mason could have imagined the kinds of weapons that humans would build in the years after the Constitution was ratified, nor could he imagine a world where a a miltiary superpower did not have to draft its male citizens. Even if you are a card-carrying member of the NRA, I don't think you could dispute that the Second Amendment does not take these things into account. It is incredibly naive about the role of guns in society. We simply cannot know what would have been written had Mason known that, in 2007, individuals would have access to weapons that kill dozens of people per minute, or that a rifle is no longer an adequate tool for revolution. Rather than waste time debating poorly-worded text written two centuries ago, we should amend the Constitution to clarify exactly what the country wants.

Proposing this new amendment would generate endless hype and debate, and getting Congress to agree on the exact text would be a monumental task. But hey, that's why they make the big bucks. This is a hard problem, and it's pretty clear that the original guidance given to us in the Second Amendment is not working. There shouldn't be this much controversy over one sentence. The right to keep and bear arms shouldn't hinge on a prepositional phrase that sounds more like musing than declaration. If we want to settle the debate and the majority is not willing to take the easy route (repealing the Second Amendment and delegating to the states per the Tenth Amendment), then a clarifying amendment is a must. Everything else is a waste of oxygen.

Labels: , ,

Sunday, November 25, 2007

synopsis

I'm a bit late, but here are the notes I took from the talks given last Thursday as part of ApacheCon Track 2, which had a focus on REST and the web development landscape. I considered morphing my notes into a more traditional narrative, but I think the minute-by-minute notes are more interesting.

Matt Raible - Comparing Java Web Frameworks

  • Gives us a choice between two presentations: one focused on older, more established frameworks (all of which he has used), and one focused on newer frameworks (half of which he has not used professionally). The audience votes for the latter.

  • The frameworks presented include Flex, Seam, GWT, Grails, Wicket, and Struts 2. Matt hasn't used Flex, Seam, or GWT, so analysis of those is not very in-depth.

  • Polling the audience shows that only a handful of people are using each of the six frameworks we discussed. The presentation seems to work off of this theme: each framework is good for certain types of apps, but there is no all-around winner.

  • This talk is kind of fluffy, but no one seems to mind because Matt has a lot of charisma and tells good stories.

  • Flex is a force, but in order to create the server side support needed for most apps, you need to buy very expensive products from Adobe or roll your own solution. This is not a full stack. Two audience members tell stories about difficulties with the "roll your own" approach.

  • Flex can't incorporate HTML content very well, so it's hard to integrate new, Flex-based content with older HTML/template content. Matt says Flex can only render about a half dozen tags. That seems pretty lame - even the JDK's HTML text editor can do better, and it's on HTML 3.0.

  • Groovy and Grails are not very popular outside of the echo chamber (and Zero!). Matt is a Grails fan and recently convinced a client to use Grails on a project, but it's his first professional project with the framework.

  • Because Grails is based on J2EE, many teams that might consider it will end up using Struts, since they already have those skills.

  • GWT allows one to create HTML and JavaScript-based UIs with Java. Matt believes that the job market for GWT will see the most growth in 2008-2010.

  • Struts 2 is far better than Struts 1. Never use Struts 1. The developers of Struts 1 drink kitten blood and are the bane of the open source community (or something - I'm not a Struts user, so I'm in the dark as to why Struts 1 is so bad).

  • Lots of graphs showing employment numbers for the various frameworks. Summary: if you're a freelancer, Flex and Struts 2 are Money.


Ora Lasilla - The Semantic Web, and Why The Open Source Community Should Care

  • This is today's keynote, and it's very well-attended.

  • I can't hear a damn thing in the back of the room. Other people are looking around, so I guess I'm not the only one.

  • The audio has improved a bit. I guess I'll manage.

  • Ora says that IT is not very automated - the computer is just a tool that you use while you do work. "You work, and the computer helps". It's like a hammer: it won't build anything on its own.

  • True automation requires an increase in structured data and standardization. He forgets to mention the need for enormous policy definitions and natural language processing.

  • So far this is just a review of semantic web, not why I should care. We've all been "waiting" for the Semantic Web for over ten years, so I'm not sure why this in-depth review is necessary.

  • Ora says that the open source community is:

    1. more accepting of new ideas,

    2. more innovative than traditional players, and

    3. more relaxed when it comes to finding a business model.

    to which I would respond:

    1. hahahahahahahahahahahahahahahahahahahahahaha

    2. Most large open source projects have contributors who work at medium to large-sized corporations (so they can obtain things like food and shelter). I think that if these corporate drones stopped contributing to open source, the community would be a lot smaller and less innovative.

    3. This can also be a negative: the reason there are so many dead or stagnant open source projects is that the code doesn't generate any money, and when push comes to shove, people have to do work that pays the bills first.

  • Ora continues to hammer on the business model point, saying that "before we get to the point where we make money, we need more experimentation and open-minded development". The Semantic Web has been "just two years away" for about ten years now - how much more experimentation do we need?

  • The guy next to me is typing on his laptop using the hunt-and-peck method. At ApacheCon! Jesus.

  • Here's what's ahead of us with regards to the Semantic Web:

    • "Let's try to get computers working for us"

    • "I'm after some kind of paradigm shift in personal computing"

    I wonder how long it's been since this guy wrote a line of code.

  • I just checked his web site - he works in Common Lisp. That's about right.

  • Now hunt-and-peck guy is making these deep, heavy sighs. Constantly. It's very distracting.

  • This talk has no answers. Big surprise.

  • Not that I'm bitter, or anything.


Roy Fielding - A Little REST and Relaxation

  • I arrive early to get a good seat. It's standing room only by the time Roy starts his talk.

  • The talk ends up being a history of the W3C and web protocol development. Towards the end, Roy says, "I wish I could spend more time talking about how to create a RESTful service." That's the whole reason I came, dude! Anger!

  • Roy says that refining server-side resource models is not as important as the hypertext-based navigation that guides users or client software; as long as you have the original URL to a site, you should be able to find anything else from the hypertext content. I think this is misguided based on how many of todays web applications are exposing public APIs that enable content sharing and mashups.

  • This talk gives me the impression that REST is just for applications that are primarily UI-driven. It's the same old REST doesn't work for enterprise software argument used by WS-* proponents, except it's coming from Roy Fielding. I don't know why he's so focused on hypertext and applications that operate within a single domain (host).


Sanjiva Weerawarana - WS-* vs. REST: Facts, Myths, and Lies

  • Some people leave after Roy's talk, but the room remains at 90% capacity. Sanjiva's talk is sure to ruffle some feathers, and that always puts butts in the seats.

  • I still hold a bit of a grudge against Sanjiva for the rigmarole we had to go through for Muse 2.0, but I will put that aside for today and try to listen to his claims objectively.

  • Sanjiva says that WS-Addressing is probably one of the worst things about WS-* and that it should allow for the use of a simple URI for people who don't need endpoint references or the implied resource pattern. Preach on, man.

  • He started with some WS-* negatives, but as the talk wears on, it's becoming more and more about the negatives of REST. I can't say that he's being unfair to REST - most of his points are reasonable - but he did kind of gloss over WS-*.

  • The talk was well-received, and he didn't get many questions afterwards. He was pretty harsh on REST, but not inaccurate; I still think the talk would have been more effective if he'd spent more time detailing WS-* negatives instead of using broad statements like web services aren't right for every project.


Dan Diephouse - Building Scalable, Reliable, and Secure RESTful Services

  • Dan is another WS-to-REST convert who spent some years implementing SOAP engines and WS-stacks and has moved on to Mule, which is an open source ESB; I don't know how an ESB is any less enterprise-y than WS-*, but I guess it makes him happy.

  • Dan has chosen to pack an incredibly large amount of information into a one-hour presentation. As time ticks away, I can't help but feel that this talk would be much better if it were a week-long session instead. Perhaps he doesn't have time for the kind of multi-day labs offered at ApacheCon, but it would make his presentation less overwhelming.

  • We're fifteen minutes in, and I've given up trying to summarize. There's a lot of good material here, but I'm just going to end up re-typing his bullets. If you'd like to see the presentation yourself, you can find it here.


Looking back, Day 2 Track 2 was definitely worth the $150 conference fee, but it wasn't worth giving up my no-vomit streak; when I threw up last Saturday, I was only a month away from the six year mark. Six years isn't quite as impressive as my previous no-vomit streak (nine years, one month), but it's nothing to sniff at. If I could do it all over again, I'd rather have the streak.

Labels: ,

Monday, November 19, 2007

ravaged

I was planning to post all of my notes from ApacheCon this weekend, but by Saturday afternoon I had taken ill; I spent the rest of the weekend lying prostrate and begging for death. It's a good thing that Bridgid was there to take care of me because I'm a real wuss when it comes to being sick. I can only hope that this episode hasn't ruined my mystique.

My notes will be posted shortly...

Labels: ,

Wednesday, November 14, 2007

dud

Today was discouraging. I hit a six-mile traffic jam just outside of Charlotte on my way to ApacheCon, and I didn't see one person on the other side of the highway with his hand out the window. In other words, all of the time I spent documenting our road rage prevention system was for naught. I was expecting the magic of the Internet to cause a new meme to spread rapidly across the land and save me from these kinds of experiences, but I guess that isn't going to happen. The Internet is too busy creating lolcats.

I wish I had a time machine so that I could turn back the clock and tell the inventors of the Internet to not even bother. What a disappointment.

Labels: , ,

Tuesday, November 6, 2007

cheaters

Cycling is a very popular hobby in Cary, but for all of the people riding around town in their ill-advised spandex outfits, we have seen little improvement with regard to cycling-friendly roadways and parks. Many of Cary's main roads are finally being expanded to meet the demands of last decade's population growth, but only a few of them have cycling lanes. I often encounter situations where people approach cyclists who are coasting in and out of the breakdown lane and then swerve around them at full speed, with barely a look to see what's happening alongside them. It's irritating and dangerous, all at the same time.

But unlike most residents, I'm not upset because our transportation department has failed to recognize the plight of the avid cyclist; I'm upset because I'm not a cyclist and I hate sharing the road with them. In fact, one of the things I hate most about sharing the road is the phrase sharing the road. I see this admonition on traffic signs and bumper stickers across Wake County, and it's one of the worst ideas I've ever encountered. The cyclist is traveling with a vehicle that he can lift off the ground with one finger; I am traveling with a two-ton steel bullet that's moving at twice his speed. We cannot share the road. Asking automobile drivers to share the road with cyclists is a red herring that pits cyclists against drivers and draws attention away from the fact that our civil engineers have dropped the ball.

Physics aside, there is another reason that I don't like sharing the road: cyclists are bad motorists. Every cycling enthusiast I've ever met[1] is quick to complain about automobile drivers that try to run them off the road, throw things at them, or otherwise treat them as second-class motorists. They talk about state laws that give equality to cyclists and other slow-moving vehicles, but they always gloss over the parts about cyclists being restricted by all of the same rules and signals. The same cyclists who want me to coast patiently behind their peloton as we try to conquer a hill at ten miles per hour are quick to pedal through a red light if there's no oncoming traffic. I also like it when they piggyback with cars that have been waiting at a stop sign; nothing says "responsible motorist" like hanging out in my blind spot through a busy intersection!

Ignoring traffic rules is fine for ten-year-old kids parading around town with their friends[2], but if you want equality in the eyes of the law, you had better sit at that red light and wait for it to change, even if traffic is low and you don't have a license plate. You had better wait your turn on the stop sign merry-go-round. And you had better hope I never run for office, because in Dan Jemiolo America, all cars will be equipped with high-powered lasers.

So much anger.

[1] An enthusiast is anyone who has one or more cycling-related bumper stickers on his car or wears cycling shoes to the office.

[2] Assuming they're smart enough to avoid my car.

Labels: , ,

Wednesday, October 31, 2007

charades

I don't like Halloween. It's a boring holiday whose resulting ennui is trumped only by Thanksgiving and its multi-day torture of lukewarm turkey, awkward conversations, and Detroit Lions football. That said, I know that a lot of you are still excited for Halloween and want to impress your peers with a clever costume[1], so I feel obligated to share with you what is probably the best Halloween costume idea you have ever heard; I can't remember if I came up with it myself or not, but in the absence of evidence to the contrary, I will take credit for it here. Prepare to be inspired.

A surefire way to be a hit at your next Halloween party is to dress like a Flintstones vitamin. I'm sure you've seen lots of guys dress as Fred Flintstone, but it's always in the official orange and black outfit; it's a pretty popular costume and you can get it at most stores. To be truly innovative, though, you need to take this costume and paint over it so that it's monochromatic[2] while still allowing the pattern to show through. You can then use face paint to make your face, arms, and legs the same color; if you're really committed, you'll get some temporary hair dye so that your hair will match as well. When you're finished, you'll look just like the Fred Flintstone vitamins that you used to have each morning with breakfast. The public will adore you.

Extra Credit: Children of the 70s and 80s will recall that there was no Betty Rubble vitamin in the original Flintstones Vitamin collection (she first appeared in 1996). If you're a woman who wants to get in on this great idea, you could dress as a Betty Rubble vitamin and impress the socks off of all the trivia geeks who ask about your costume.

[1] Unless you're female, in which case you'll probably be dressing as a vampish [noun].

[2] I suggest purple or red.

Labels: ,

Friday, October 26, 2007

foretoken

Bridgid and I went to Pittsburgh a few weekends ago, and on the way home we witnessed a ten-mile traffic jam on the other side of the West Virginia highway. It was painful to watch people sitting in such an awful mess, especially as we encountered those people who had only been in it a few minutes and had no idea what they were in for. Both of us become extremely frustrated in traffic - the feeling of helplessness, combined with the knowledge that four out of five traffic jams are caused by trivial events on the side of the road[1], just fuels the rage minute after minute. I would rather be attacked by flying robot sharks that shoot lasers out of their eyes than sit in traffic that I know is caused by people who are hoping to see a cool accident and have (apparently) never used the Internet before.

The tragedy in West Virginia brought to mind other instances where we had seen horrible traffic jams that continued to grow because the people driving in the opposite direction had no way of warning the oncoming victims; soon we were discussing ideas for a universal signal that drivers could give to people on the other side of the road to let them know that all hope was lost, and what the rules would be for using it. This post will be my first attempt at harnessing the power of the Internet to start a nationwide trend[2].

First, we need to define some vocabulary:

  • highway - A stretch of road on which there is less than one traffic signal per mile and the average speed limit is fifty miles-per-hour or higher.

  • traffic jam - A situation that requires vehicles to move at less than half the speed limit for five miles or more.

  • free-flowing traffic - The normal rate of travel for a particular road at a particular time of day.

  • bicycle turn signal - T