Spiral Dive

  Sunday, February 23, 2003


No JSR necessary.

System.debuggerBreak(). In my halcyon days of C++, there was a useful idiom we used a lot as part of our debugging and diagnostic suite of code tricks. The idea was that there were certain parts of the code that, if we hit them, we immediately wanted the debugger, if running, to break on. We did it more or less like the following: [The Mountain of Worthless Information]

public class BreakMe extends RuntimeException {
public static boolean breaksActive;
public static debuggerBreak() {
   if (breaksActive) {
      throw new BreakMe();
   }
}

Then just set a debugger exception breakpoint that fires on BreakMe.  Every Java debugger I'm aware of supports this.  Which leads to a rant:

Are you one of this idiot library coders who tests for the end of an array by waiting for ArrayIndexOutOfBounds?  Or do you test the existence of something by catching NullPointerException?  I hate you.  You make me nuts.  I don't want your code throwing an exception during its normal run.  Some of the Apache stuff is guilty of this and it drives me nuts.  I don't give a crap if you saved 0.0234 ms during a routine.  You screwed up my ability to debug code.

My code never throws exceptions during the normal course of a run.  Yours shouldn't either, especially if it's a library and you expect rational human beings to use it.

 


11:32:06 AM    

Overreactions.

Tom Friedman wonders if we are.  Yes, we are.  This has been a real week of disasters -- two club fires, crazy weather, buildings collapsing...every once in a while Joe America needs to pull out his pocket calculator and figure out where the real dangers in his life come from.  Let's see -- probability wise, the most dangerous thing you do each day is get in your car and drive to work.  44,000 people die each year in automobile accidents, and a hell of a lot more than that get injured.  These kinds of problems have become routine, though.  9/11 was bad, yes, but more people die each month on the roads than died in 9/11.  Heart disease can kill ya. 

Terrorism punctured our juvenile illusion of invulnerability as a society.  The thing to remember is, we didn't lose anything.  We've always been in danger; we just forgot about it for a long time. 

Do you want to overreact?  Those people in Chicago are dead because they thought they were in a terrorist attack, and there was panic.  I think it is fundamentally irresponsible of our current government to be engendering (even if through good intent) such an atmosphere of fear and distrust.  There are bigger, scarier things out there than terrorism.  They're the things that live in your everyday life, and they're far more likely to hurt you or kill you than an Islamic idiot on drugs.


7:32:31 AM    

Rule Stuff.

Expert Systems: Principles and Programming - Giarratano.

That's THE rules engine book -- covers CLIPS extensively and gets into the heart of things nicely.  A little dry at times, though.  I'm looking forward to Norvig's new book too.

Some other projects of interest include Lisa (LISP Rete) by David Young.  Xanalys has their KnowledgeWorks product, which I'd love to get my hands on...see what I can do with combined forward and backward chaining.

I highly recommend reading papers on TREAT networks and Gator networks.  I spent a bunch of time trying to figure out how to dynamically optimize Gator networks last week -- it's a tough problem.


6:37:58 AM    

  Saturday, February 22, 2003


Use the right Rule Tool.

Ted's looking at drools.  I say, cool!  Rules are excellent.  I respect the work that Bob's done on drools, but XML syntax?  Youch!  It's OK for machine generation but it ain't a human language...Take a look at Ted's example, then see this:

(deftemplate person (slot name))
(deftemplate hasSister (slot person)(slot sister))

(defrule has-sister
?f0 <- (person (name ?name))
?f1 <- (hasSister (name ?name)(sister ?sister)
=>
(printout t "Found sisters")
)

The "prolog-like" language is actually significantly more LISP-like -- it came out of NASA and is called CLIPS.  Jess is a very cool (and fast) adaptation of it to the Java platform.  I highly suggest you check it out (as I've stated in previous blog entries).

The point is, CLIPS is pretty good at declaring these kinds of rules.  Its syntax has stood the test of time.  It's not perfect (Jess makes some extensions that are good, and more should be there), but once you get into "rule think" it's hard to stop...I can't.

I spent a chunk of the last week thinking about this stuff, while I was on planes.  Planes are good for thinking.


6:45:57 PM    

  Thursday, February 13, 2003


We can win this thing.

A brilliant bit of satire, snagged from cocula.com, origin uncertain:

For those worried that this impending attack on Iraq won't achieve its aims, it's important to point out America's stunning success stories since WW II.

Korea, 1950s. Stunning US clean-sweep victory obliterates North Korea from political map of the world. within months the two countries are merged in one peaceful, capitalist, nation.

Vietnam, 1975. Another dazzling American victory asNorth Vietnam, too, vanishes from the map of world history, merging into the peaceful, capitalist south, as was the objective.

Lebanon, 1980s. US Marines kick serious Arab ass.

El Salvador-Guatemala-Nicaragua-Panama, 1970s-1980s. US earns admiration of poor peasants everywhere for hardass, sound defeat of communist insurgent guerillas, making the region safe for the apparel industry.

Grenada, Reagan Admin. One tough uS military handily defeats battle-hardened, career Soviet-trained Grenadian military.

Gulf War I, 1991. US completely demolishes Hussein regime, driving Hussein off the stage of world history.

Somalia, 1990s. US wins hearts and minds of Muslim people throughout northern Africa.

Serbian campaign, 1990s. US teaches Serbian population danger of supporting a thug like Milosevic; US learns value of demolishing utility infrastructure and causing heavy environmental damage. Populations must learn the dangers of living in a conflict zone, and bring about regime change more quickly!

Afghanistan, 2001-2003. US teaches Taliban and Al-Qaeda lesson they will never forget, completely smashing Al-Qaeda and driving it permanently from the stage of history. Leader Bin Laden killed, all top leadership along with him.

Gulf War II, Feb-Mar. 2003. US unleashes "shock and awe" campaign, killing 38,000 Iraqis in first 48 hours, issues no apologies, saying "they knew what they were getting into, living in a combat zone like that." Hussein escapes, goes underground to write his memoirs, reassemble a guerilla army. Several hundred thousand US troops remain to "mop up pockets of resistance." US loses only 5 soldiers in training accidents in 6 day war.

Korean War II, late 2003. US pulverizes Korean nuclear facilities, launches 2,200 cruise missiles at Pyongyang, killing 65,000 Koreans in 48 hours in Shock and Awe II, issues no apology, saying, "they knew what they were getting into, living in a combat zone." 15,000 US troops remain to mop up "pockets of resistance." US loses 6 soldiers, only in training accidents.

Iran, 2004. Declaring Iranian uranium mines were being used to develop a nuke capability, US unleashes Shock and Awe 3, dropping 150 of its 15,000 pound "daisy cutter" bombs on Tehran, killing half the population in the first 48 hours. 24,000 troops remain to mop up pockets of resistance, no US casualties.

Gaza Strip, early 2005. US joins Israeli campaign, intensive house-to-house fighting rages. 10,000 US troops remain to mop up pockets of resistance, handily winning the war.

Indonesia, 2005. Declaring the country had gone over to the Islamist extremists, US levels Jakarta with cruise missiles. Several thousand mop up troops fan out through dozens of islands. President Bush declares another 6-day victory.

Afghanistan, 2005. US sends in larger contingent to fight new alliance of Pashtun warlords with breakaway "Pashtun Autonomous Zone" of northern Pakistan.

Pakistan, 2006. US invades as Pakistan breaks into 3 separate regions. Large force of US mountain fighters take up positions in Kashmir. Islamabad completely demolished by "Battlefield nukes" launched from howitzers, torrent of cruise missiles and 15,000 pound bombs.

Menachem Begin City (formerly Cairo), Egypt, 2006. 24,000 US soldiers remain to mop up pockets of resistance after joint US-Israeli campaign rearranges regional map.

Late 2006. NATO disintegrates into 3 bitter rival alliances. Donald Rumsfeld declares "good riddance."

Gulf War III, 2007-2008. Iraqi opposition breaks into warring factions, US invades North, South and Western regions. Bush dispenses with formalities of regime change, appoints a panel of 7 oil company CEOs to run the "special energy zone."

2007. United Nations disintegrates into 3 rival groupings of nations. Republican Presidential Candidate Jeb Bush declares, "good riddance to bad rubbish."

Saudi Arabia, late 2008. Supreme Court declares Jeb Bush defeat of Lieberman in presidential campaign despite Lieberman's 5,600,000 vote margin over Bush. Bush grows impatient with the Muslim Oil Embargo which has taken 6,500,000 barrels of oil a day off the US market. First US use of a (much larger) nuke since Pakistan campaign completely demolishes Riyadh. No mop-up operation is deemed necessary.

World War III, mid 2008. Jeb Bush declares 6-day-victory over strange coalition of European, radical Islamic, Latin American and Asian alliance. 600,000 US troops stationed globally in mop-up operations.

etc. [thanks to BobbyG]


11:37:10 PM    

Again?

The gubment has decided to put anti-aircraft missiles near "terror targets" such as the Pentagon and (I presume) the White House.  Seems pretty asinine to me.  Here's the thing:

The only purpose for these missile batteries is if the government suspects that there will be another 9/11 attack, conducted by hijackers, with an airliner.  That's the only reason.  Is frickin' Canada going to send bombers?  Or maybe Guatemala?  I doubt it.  So it's about attacking airliners.

The missile batteries shouldn't be there.  We need to be getting some level of security in exchange for our loss of freedoms and conveniences, don't we?  Putting the missiles there sends the wrong signal.  It says that we still don't have it right, and that we think another 9/11 could happen.

Personally I think there will be something new, next time.  It's a little too hard for an attack by air.  It'll be something else.  So back off with the anti-air missiles, and lay off the DC airspace.  It's pointless.  Start putting the thinking cap on.  It's coming from somewhere else.


11:33:09 PM    

National Threat Level.

It seems to me that the Department of Homeland Security's "National Threat Level" is flawed from the start. Why? This is a vast country, and its actions and citizenry are spread out across the globe. What can manifest as a threat in one area is no threat whatsoever in others.

The use of a single metric to describe conditions across a whole nation's activities is deceptive and unnecessary fear-mongering. I suggest to you that the average small-town dweller in Idaho need not worry about catastrophic acts of terrorism.

A more realistic approach to the problem would include the acknowledgement that in a country of this size, terrorist acts are likely to affect a relatively small number of high profile target areas. These areas would include, obviously, New York and Washington, as examples.

It is therefore substantially more rational to target warnings about terrorism to those areas that are truly at risk, rather than alarming the population in general.


3:31:02 PM    

Chiara.

She wondered why she's gotten such a warm reception in the blog world. Being a high tech girl in a big wide world doesn't hurt, but the reason is here:

It's what she writes.

From the heart, and that's rare when coupled with the ability to enumerate a good deal of what's going on there.


2:16:42 PM    

Chris Crawford.

The name may ring a bell with a few of you.  He's written a new book on interactivity.  I just picked it up tonight, and my first impressions are good.  I haven't actually opened it yet.  The book just feels nice, and at $29.95, was pretty easy on the wallet.  I like that in a book.

It'll be my reading as I go overseas for the next week. 


12:13:37 AM    

  Monday, February 10, 2003


Permissions.
  1. It added tons of small scale permissions (like per-file read permissions) instead of wildcarding

The new version fixes both of these problems. And it's GPLed. Now off to pick the right source repository... [Ockham's Flashlight]

Hi Stu...one point here -- generating lots of small scale permissions is the point!  See erights.org.  But...if you know that substantially all of the permissions in a category are being used (like all of them), then I guess a wildcard is OK.  Wait -- it's not.  The reason is that in the future, you may be granting a permission, due to the wildcard, that you really didn't mean to.

Stay small, stay granular.


10:49:55 PM    

Clay Shirky Gets It.

Dave Winer doesn't think so.  Are we on the same planet?  It is intuitively (and experientally) obvious that there are weblogs that get read a lot more than others.  This does have something to do with the content of those weblogs, but it also has a great deal to do with exposure through "top rank" lists and other mechanisms.  List ranking mechanisms tend to perpetuate the present, and as time goes by, make it more difficult for new information sources to gain any traction.

Writing good things and getting referred can work, but generally fail to deliver much critical mass.

Whether Dave wants to admit it or not, there is an A-list.  He's on it, for sure.  The very vast majority of us do operate at the departmental level.  All Shirky is saying is that a web log is not a great equalizer.  You can say whatever you want, but don't expect very many people to be aware of what you've said, or react to it in any way.

I give up this text in an attempt to be disproven. 


4:01:15 PM    

Faith-based Budgeting.

As I learn more of the "new" Bush budget, I realized that he has extended and imposed his doctrine of faith-based initiatives into the budget area.  The president appears to have a religious fervor and belief behind his economic policies -- complete faith that through some miracle the deficits that he, two years ago, predicted would never occur, will somehow disappear.  Imposing this kind of trust in a particular manifestation of the divine is precisely what this country's constitution is intended to avoid.


3:44:24 PM    

  Sunday, February 09, 2003


Fixing Airspace.

I went running this morning and put on my problem-solving hat...

I guess the idea behind the 6am monday morning transponder codes is that somehow the controllers will be able to sort through them all and determine if the aircraft with the code is actually doing what it said it would do. I don't think they will be able to do this; it's going to be too hard.

Wouldn't it make more sense to set aside a series of transponder codes and have VFR pilots use them? Assign each airport a code --

  • 125x - HEF
  • 126x - JYO
  • 127x - VKX
  • 131x - FDK

Then use the following, x =

  • 0 - outbound to north
  • 1 - inbound from noth
  • 2 - outbound to east
  • 3 - inbound from east
  • 4 - outbound to south
  • 5 - inbound from south
  • 6 - outbound to west
  • 7 - inbound from west
  • 8 - pattern work (stay at airport)

etc...evens are outbounds and odds are inbounds.

For example:

  • 1254 - outbound from HEF to the south
  • 1255 - inbound to HEF from the south
  • 1266 - outbound from JYO to the west
  • 1267 - inbound to JYO from the west
  • 1261 - inbound to JYO from the north
  • 1311 - inbound to FDK from the north
  • 1318 - pattern work at FDK

The controller can tell at a glance what the aircraft's intentions are, and software can easily be written that can track it and note deviations. Airport to airport conveyance (dc3) would still require flight plan, I guess.

Note that the existing TFR needs to be retained under this scheme, although entry and exit is much easier. You still "need" that buffer zone.

The advantage of this scheme is that by simply setting a transponder code the VFR pilot communicates his/her intentions to ATC, and ATC has a _vastly_ simpler job of tracking it all. They can do a FAR more accurate job as well, because they'll know exactly what to look for!

Note that a VFR pilot must still _monitor_ an appropriate ATC frequency, in case controllers want to talk.


12:00:56 PM    

Huh?

The movie "The Recruit" is awesome. [graham glass: what's next?]

Dear Graham.  You are a badass coder but a highly questionable movie reviewer.  Awesome?  Did we see the same movie?  Maybe I just don't like Colin Farrell all that much.  I liked even the cheesy Spy Game considerably more.  I fell asleep during Solaris.  Of course I was pretty tired. 

I can't believe I liked How to lose a guy in 10 days.  It's exactly the kind of movie that I don't like (I like "serious" films).  But I couldn't stop laughing.  Plus I had the secondary screen of my friend Christina's face, watching her laugh her ass off!  I did see a few guilty looks on the faces of women in the theater...hah!


9:32:28 AM    

Power.

PermissionGrabber. Yesterday I vowed to turn on SecurityManager all the time, and figure out the necessary policy files for Java applications that I use. Ross mused that it would be cool if the Java runtime provided a flag to generate this information automatically. What a great idea! And, who needs help from the runtime? PermissionGrabber is a simple Java app that will execute some other Java app, figure out what permissions it needs to run, and generate an appropriate policy file. All you have to do is java PermissionGrabber SomeApp I just threw this together and can think of a few dozen little enhancements already. Let me know if this is cool and what you would like to see added. [Ockham's Flashlight]

My power is growing exponentially.  Muahaha. 

Cool trick!  And a major step in the right direction for permission policy files!


2:05:55 AM    

  Friday, February 07, 2003


Living in Fear.

Is it an option, in America, to live without fear?  To live without the consequences of the fear of others?  I think not.  As I write this, the FAA is about to drastically increase the size of the TFR (temporary flight restriction) around the Washington DC area.  This is due to the increased threat level perceived by intelligence sources, indicating that terrorism is a possibility.

The fact is, there just isn't really anything that you can do with a little plane.  The TFR does not apply to larger aircraft -- you know, the kind that can actually smash into something and do damage.  It only applies to little planes.  I guess the TSA (Transportation Security Agency) thinks that someone could drop a dangerous chemical out of a plane, or something like that. 

Doing so would be suicidal.  Any plane attempting something like that would be shot down immediately.  And why would you bother?  You'll attract far too much notice.  Why not simply drive a truck around in a populated area, spraying your chemical?  It'll just look like the exhaust on a truck anyway.  You'll get a hell of a lot farther, and do a lot more damage.

The thing is, small aviation is a simple target. It's also a perfect example of how those in power do not do their homework.  They can and do make knee-jerk reactions.  I find it far more probable that this restriction is a political response, so the administration can say they are doing something.  It is a defense against the (stupid) charge of the democrats that this administration isn't doing enough to protect the American people.

I'll tell you this.  From where I stand, they're doing too much.  Freedoms and rights are being eroded heavily.  Due process is sacrificed because, well, you can't have too much security.  And sometimes you just need to do bad things to good people if you're going to save the rest of us.  And they're probably not good people anyway -- they probably have something to hide.

It's the same thing over and over again in our society.  People are for the death penalty, because they don't believe that they'll ever be wrongly accused.  Yet in one state, fully 50% of those on death row were exonerated due to genetic evidence! 

Preventing pilots from flying their planes isn't going to affect most of the population, but for a dreamer who's sunk his entire life savings into the plane, it's completely unfair.  We should never destroy the dreams and priviledges of a minority for the benefit of the perceived safety of others.  It is unfair.

I think that truth matters.  I think that we have sacrificed far too much to these terrorists already, and that our slow descent into a conforming police state should be abhorred.

The simplest and most effective way to deliver a weapon of mass destruction to a US city is by putting it in a car.  Why are we not banning cars?  Because that would affect a lot of people

If someone violates the TFR, there is significant potential that that pilot could be shot down.  One view is, "well, he should have known better than to fly there!".  That is callous beyond belief.  I call it what it truly is: Manslaughter.  It's an ugly word, and it's the right one. 

Imagine a schoolyard, filled with children.  Draw a line down the center of the playground.  Now, to fight terrorism, we explain to the children that they must all stay on one side of the line.  There is some sort of valuable asset on the other side of the line.  Now that we've warned the children, we set up a tripwire, loaded with explosives.  Then we tell them to play like normal.  Eventually, someone will stray.

It just feels like the start of something horribly wrong, and I don't know what.


8:40:33 PM    

Generate the Policy.

Turn that security manager on!. Most Java developers I know download and execute applications all the time, without using a SecurityManager. (Admit it, you have tried various open source projects.) The madness stops for me today. Whenever I download some Java app, I am going to start with SecurityManager on, and policy empty. Then, it is simple to read exception traces (or turn on -Djava.security.debug) to figure out what permissions are needed. For example, it took me all of five minutes to produce this policy file for jing: /* assumes that files are all in the current directory */ grant /* codeBase "jing.jar" */ { permission java.util.PropertyPermission "user.dir", "read"; permission java.io.FilePermission "*", "read"; }; Of course, building these files can be laborious. Maybe somebody should start a repository with sample policy files for key Java applications... [Ockham's Flashlight]

I think it would be cool if there was a flag on the Java runtime that just generated a policy file automatically as you ran the app...as the developer you could quickly get a nicely fine-grained policy file appropriate to your app and distribute it.  As a user, you could look at the generated policy file and see if it makes sense to grant the application the rights it wants...


1:19:46 PM    

JDK 1.5 Enums

No sir, I don't like it. Enums in JDK1.5 are a good idea -- they make your code a hell of a lot more readable. But doesn't anybody get that sets of enums are just great?

Delphi had a set construct. Each enum gets a unique identifier. You can declare a set of enum. The compiler handles these very efficiently, and just uses numbers for them whenever possible. If the number of bits in an integer is exceeded, you can use a bit vector or something like that. Very fast set operations are possible (then again, Pascal had set operations built into the language).

Why does such a simple concept have such inefficient implementation in Java, and most other languages?
10:58:50 AM    


Reading Things.

Radio vs Syndirella. [Sam Ruby]

I have a simpler reason why I like Radio better.  It doesn't make the stupid assumption that practically every reader in existence makes.  Who the hell wants to read things one at a time?  I sure don't.  You know those excessively broken up HTML documents you find on the web every once in a while?  The ones that give you two sentences, then require you to click on the "next" button to see the next part?  Why on earth can't they just load the whole thing?

Some web sites make you do that stupid "click for the next page" crap.  I hate that.  I usually just choose the printable version -- I get the whole thing in one nice big article, and I can scroll through and read it at my leisure.

Radio gives me nice weblog articles and lets me read them all at once.

My wish list for a newsreader would include an "everything" view.  This view simply builds one giant document of everything I'd want to look at, annotates it appropriately, and let's me get through it quickly.  For newsreaders and that ilk, it's probably more effective to divide things by "topic".  There are tons of ways this kind of thing could be presented visually.

 


12:07:14 AM    

  Saturday, February 01, 2003


Good run.

Clears the head of whatever's bothering you.  Six hours of good coding today, and I'll have a relaxing time tonight.  One of the good days.


6:47:00 PM    

Languages.

Language of the year.

The Pragmatic Programmer suggests learning a new programming language (at least) once per year. Specifically, you should learn a language that changes the way you think about things - learning C# if you know Java doesn't count.

Last year I decided to learn Ruby - a lot of people told me how great it is. At first I thought it was pointless, but I eventually dived in. Man, I'm glad I did! I've since fallen in love with language.

[Joe's Jelly]

After my last post, I gotta calm down/switch gears. 

Hmm.  Learning Ruby, I gotta say that I don't think you're pushing your boundaries.  Want to learn something new and truly mind-expanding?  Go find Ernest Friedman-Hill's Jess system.  Read the manual, think hard, and you'll find out where computer science is going in the long run.  Yes, he's created a CLIPS system for Java, and perhaps that on its own is not worthy of what I've just said.  But when you start thinking about what you can accomplish with it, and what happens when you attempt to create aspect-based systems and couple them with rule programming, you get to a very interesting place.

I've been in this game a long time (17 years) and that combination represents the first truly new thing I've been exposed to in some time.


4:16:19 PM    

What are we doing?

Now, it's happened again. America took far too long to get back into space after Challenger, and I fear that Columbia will yield the same result. I exhort and urge us all, from President Bush to the assembly-line workers in the huge shuttle preparation buildings in Orlando (where we visited just one month ago) to continue to explore space. Not because we don't value the lives of those who have perished, but because we honor what they believed in. Let the flights continue unabated--it's the only way for us to master a collective national fear. Build another pair of shuttles to replace Challenger and Columbia, taking advantage of all the new advances we've undertaken in the years since their first construction. Mankind's destiny lies in space--we must leave the crib and venture out into the real world. [The Mountain of Worthless Information]

Ted's right -- we need to get back out there.  I've often asked myself over the past few years a question: What is this country trying to do?  If you don't live in the US, feel free to ask yourself the same question about your own country.

Are we trying to create peace and prosperity?  Are we trying to make our citizens happy?  Those are such internal goals.  Should not the desire of a great society be to build something of beauty, expand the knowledge of the world, or discover a new truth?  So enthralled are we with the twin notions of obedience and prosperity that we have forgotten the essential core of the human spirit, that which I believe justifies our existence -- our ability to surprise God and expand the boundaries of what we know and achieve. 

There is an 8 year old boy without a mother, in Racine, Washington, because our politicians felt that saving a few dollars was more important than safety protocols that would have kept his mother alive.  Seventeen years ago, a teacher's family lost their mother because a subcontractor falsified test documents to avoid cost overruns.

Seven remarkable human beings are dead because we don't have our priorities straight.  That's you and me, and the people who represent us. 

We're about to spend somewhere in the neighborhood of $200 billion crushing the leadership (and hopefully only the leadership) of a small country in the middle east.  Is there not another way? 

Billions of dollars go, in farm subsidies, not to support our nation's farmers, but to prop up the massive agricultural companies that rob them of their lives' work. 

Here in DC, the leaders of the local teacher's union gleefully robbed their membership of their dues money, using it to buy themselves whatever they felt like.  They, in particular, had no concept of consequence.

What has happened to ethics?  What has happened to responsibility?  We so often declare a "moral person" to be someone who takes certain stands on certain issues -- the unsolvable issues, the ones that don't actually matter.

I think the ethics of our interactions with other people, and with society as a whole, are the next frontier of human awareness.  Without finding the right way to live together, to work out our differences, to be good to each other, we will not survive. 

It is time that we declare that lack of regard for known consequence is a prime failing, and try to better ourselves. 

Have we dug too deep of a hole? 

You -- the politicians who axed NASA's budget.  Did you care how the money was spent?  Were you concerned at all with what was being accomplished?  Were you just trying to eliminate an annoyance, an easy target?  Were you being political when you voted to slash the budget?

You now reap the deadly and tragic consequences of your decision.


4:08:23 PM