Wednesday, April 30, 2008

Things I Find To Be Awesome

There are a few things out there that I use or see or read about that I just plain think are awesome. In paying homage to my newfound effort not to complain, I will present things I find to be awesome here:

1) My Macbook Pro - it's really fast, and it goes to sleep and wakes up without complaining or grouchiness. It doesn't crash (well once but I was doing something absurd), and it looks nice.

2) Yapta - anyone who travels frequently and hasn't seen this site is crazy. You can tag flights for tracking (currently a large subset of carriers are yapta-friendly), and you get emails telling you when prices go up and down on your flights. Awesome.

2a) Kayak - People probably know about this one, but it's the best travel searching tool out there. So great. Get all my flights through it now.

3) Amazon - duh, but as an avid reader, there can be no finer website. Seriously.

4) My New Job - anyone who has ever worked at a job where they felt stifled and surrounded by negativity who then goes to a place where everything is the exact opposite would have to understand. Also, see #1.

5) The Nationals new stadium - anyone who slogged through the last three years at RFK has to agree that this new stadium is awesome. I have season tickets near the top of the stands near the end in left field, and my seats are great. I ate a hot dog, and it was hot! I had a nice draft beer that I didn't have to search intently for. Huzzah!

6) Guajillo - This little restaurant between Court House and Rosslyn on Wilson Boulevard is awesome. It's some of the best authentic Mexican fare I have tasted, this side of...well...Mexico. Everyone who hasn't eaten there and is interested in DC-area Mexican food needs to go there right away.

This is merely a subset of things I find to be awesome. Others on this list are my fiancee, open source software, and baseball, but those are all sort of 'automatic' and didn't require specific mention.

Monday, April 28, 2008

Monday, Rainy Monday

Mondays aren't usually the best days no matter what the weather is like, but they are especially lame when it's pouring, dark, and you forgot your rowboat.

The weekend was great. My grandparents had a great time - it's not often that you can get together with your family and help your grandparents celebrate 92nd and 90th birthdays on the same weekend. It's great to have them both still around, and I appreciate all the great times we spent together when I was younger, and the great times we continue to share. It was also great to see all my cousins/uncles/aunts, and even better to find out that they will all be making the trek to D.C. to attend our wedding. Very good news indeed!

What else is new? I slammed through Bringing Down The House on the flights this weekend. Jena had just read it and loved it so I brought it with me. In case anyone doesn't know it's the book upon which the recent film "21" is based. Pretty awesome book - just imagining someone playing 8 hands of blackjack at once with $50K on the table is cool. Vegas is fun. I am on to the Complaint-Free world book, having completed the early baseball history book on the train. So far it's pretty interesting, and the source of some pretty awesome quotes like this one:

We are all self-made, but only the successful will admit it.

That's a good one. I am a big proponent for not whining about things you aren't willing to change, so hopefully this will help me practice what I preach.

In other new, we booked our hotel room in Sardinia for the honeymoon - looks awesome. I doubt we'll want to leave.

Wednesday, April 23, 2008

Latest Books, Frustrations, and Awesome Weather

Well it's been a few since I've written. Since we last checked in, I have completely given up on reading Midnight in Sicily. Life is too short to read books that suck. I have finished The Last Kabbalist of Lisbon, which was excellent. The author, Richard Zimler, seems to have a few other books out, so I will definitely be checking those out. Also, in celebration of the Tigers ability to finally string together a few wins, I have decided to read A History Of Early Baseball, which is a short, easy ride about baseball's rise in the middle of the 19th century. So far so good. Reading about baseball is not as fun as watching, and watching isn't as fun as playing, but it's better than slogging through Midnight in Sicily! I also finished The Wisdom of Crowds, which was an interesting read, but probably could have been about 100 Linkpages long. So many of those types of books seem to be centered around a crystallized but very simple premise, then proceed to spend 200-300 pages to 'prove the hypothesis' using (hopefully) entertaining and enlightening real-world stories. Wisdom of Crowds was well written, and was a good follow up to Made To Stick.

I recently ordered 7 more books from Amazon. It's not my fault - their recommendation system works so well that I just HAVE to do these things. As Jena says, if my worse vice is to buy too many books, we can work with it. I am especially excited about one of the books - A Complaint Free World: How to Stop Complaining and Start Enjoying the Life You Always Wanted. As someone who tends to be put off by what I see as the increasing incompetence and apathy in our world, I would love to see how to transcend that and focus on what I can control. Hopefully it won't be a bunch of self-help mumbo-jumbo. I'll let you know what I figure out.

In other news, I am frustrated by web applications. I think that there are too many frameworks, not enough examples, and that JavaScript is terrible. That said, I am definitely learning a hell of a lot right now - being at a small company like Sportsvite definitely allows you to be a jack-of-all-trades, and we really are doing a lot of interesting stuff right now that I think will really improve the site. That's the end of my little techno-driven rant.

The weather outside is beautiful. And I am sitting here programming and blogging. Anyone know of a world where I can sit outside every day and make money programming? Sign me up. Headed to Indiana this weekend for my grandmother's 90th birthday party. It'll be great to see the family! Hopefully I'll have some great pictures.

Thursday, April 17, 2008

Quartz - Job Processing Done Right

On our site, we have some background jobs that run periodically - we used JBoss to manage them, and it usually works. Sometimes they don't. The problem there is that once the job scheduler stops doing its thing, you can't really do anything but rerun the jobs periodically until you have a chance to bounce the server, which you can't do until night time (and obviously that isn't even particularly desirable). Well, today was one of those days. JBoss stopped running its scheduler, with nary a log message or stack trace. Just stopped. Yesterday it worked. Today, not so much. That sucks. We decided that it was a good time to untether ourself from JBoss and move to Quartz. In about a half of an afternoon, I had downloaded the code, perused the documentation, rewritten our scheduled processes to use Quartz, and tested and committed it. You can't often say that when you undertake something like this (believe me - we are currently in the testing stage of a long-overdue Hibernate 2-3 upgrade that hasn't been fun or easy), so I thought in honor of Quartz's simplicity and ease of use, I'd write a post, including how we got it working.

What is Quartz?

From their site:

"Quartz is a full-featured, open source job scheduling system that can be integrated with, or used along side virtually any J2EE or J2SE application"
How Do I Use Quartz?

Quartz is simple to use. To get started, download the distribution from their site, stick it in your classpath, and you are ready to go. First things first - you need to get your properties file set up. A simple configuration need only include this (or less if you want to fall back to defaults):

#===============================================================
# Configure Main Scheduler Properties
#===============================================================

org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.instanceId = AUTO

#===============================================================
# Configure ThreadPool
#===============================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5

#===============================================================
# Configure JobStore
#===============================================================

org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore


Once you have this going, you need to setup your jobs file. Most of the examples that came with Quartz show how to declare jobs in Java code. This is fine and all, but what if you don't want to have to recompile to change a quick setting? No good. I want to use XML. If you don't agree, feel free to follow one of the many examples they provide. To use XML, there are a couple things to keep in mind. First off - Quartz doesn't want to read these jobs from XML by default - you have to tell it to. In order to do so, you just need to add the following to quartz.properties:

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = my-jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true


Then just create a file my-jobs.xml:

<?xml version="1.0" encoding="UTF-8"?>
<quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
overwrite-existing-jobs="true">

<job>
<job-detail>
<name>AwesomeProcessor</name>
<group>awesome-group</group>
<description>Run the awesome job</description>
<job-class>
com.sportsvite.AwesomeProcessor
</job-class>
<job-data-map allows-transient-data="false">
<entry>
<key>superbad</key>
<value>true</value>
</entry>
</job-data-map>
</job-detail>

<trigger>
<cron>
<name>awesomeTrigger</name>
<group>awesome-trigger-group</group>
<job-name>awesomeProcessor</job-name>
<job-group>awesome-group</job-group>
<!-- trigger every 30 min -->
<cron-expression>0 0/30 * * * ?</cron-expression>
</cron>
</trigger>
</job>
</quartz>

Pretty simple, right? That's all you have to do on the configuration side.

NOTE: When you deploy the code, make sure that these two files end up in WEB-INF/classes so they are picked up in the classpath.

Now you need to kick off the Scheduler somehow. Most of the exercises show you how to do it in the code, but we don't want to rely on that, right? If you are running in a servlet container, they give you a simple servlet, the QuartzInitializerServlet. It is included in the jar file, and all you have to do is add it to the web.xml:


<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<display-name>Quartz Initializer Servlet</display-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

So we have told the Quartz scheduler to kick off a job called AwesomeProcessor, so we need to code the class. This is simple - you just need a class that implements the Quartz interface Job, and has the following method:

public void execute( JobExecutionContext ctxt )
{
String s = (String) ctxt.getString( "superbad" );
doFoo( s );
}

Note the use of the JobExecutionContext - you can use that to pass a bunch of arguments in a Map-like structure. It corresponds to the job-data element in the my-job.xml file.

Now when you fire up your server, the Quartz scheduler will activate and you'll see a message like this in standard out:

18:27:45,722 INFO [JobSchedulingDataProcessor] Scheduling 1 parsed job.
18:27:45,723 INFO [JobSchedulingDataProcessor] Adding job: awesome-group.AwesomeProcessor
18:27:45,735 INFO [JobSchedulingDataProcessor] 1 scheduled job.
18:27:45,735 INFO [QuartzScheduler] Scheduler QuartzScheduler_$_NON_CLUSTERED started.
18:27:45,736 INFO [Engine] StandardContext[]QuartzInitializer: Scheduler has been started...
18:27:45,736 INFO [Engine] StandardContext[]QuartzInitializer: Storing the Quartz Scheduler Factory in the servlet context at key: org.quartz.impl.StdSchedulerFactory.KEY

That's it! It's going to work now. The best thing about Quartz is that if you have bad XML or some other issue, it gives you a meaningful error message that you can easily remedy. Not all open source products can say the same.

Kudos to Quartz. It made my programming day pretty pleasant. Hope this helps others get up to speed. For a bunch of examples and other helpful information, check out the Quartz Wiki.

Tuesday, April 15, 2008

Doing Good

One day last week, I was waiting at the awful traffic light at H and Massachusetts Ave NW to get onto 395 South to take another another awesome day at Sportsvite, when I saw this genius from Maryland finish his soda, and throw it out of his car onto the street. (Only idiots drink big gulps in the morning, I am pretty sure). I am not really sure why he'd do that. He had a really crappy old Buick. It's not like an empty cup would really take away from the aesthetic of his 1993 $%#box sedan, but he felt like he just had to throw it out on the street. Now it's not beautiful over there by any stretch, but that doesn't mean it's his trash can either. Sadly, before I could get out and throw his cup back in his car, the light turned green. Flash forward to yesterday. Sitting at the same light, I see a guy walking along Mass Ave, picking up all the trash on the side of the road and sidewalk (no small chore) while walking on his way to work. Chances are he got the big gulp.

Why am I babbling about this? This made me wonder - what if everyone did one block every day? Would there still be litter? Would the streets look so terrible? Living where I live, I don't have a sidewalk to call my own, so I can't clean the place that is MINE. But, after seeing that guy picking up trash, while I was cooling down from my run this morning, I saw some litter along North Carolina Ave by Eastern Market and I picked it up. I did this for about 6 blocks. It felt good, and who knows - maybe someone saw me and they'll do it tomorrow.

I thought a little more, and it dawned on me that Capitol Hill is filled with dogs. Everyone has dogs, and they all pick up the dogs droppings. But they don't pick up trash that they see. I think that's crazy. Why don't they just bring two bags? That way they can pick something up on their walk that isn't coming out of their dog's ass, and they can make themselves feel better! That's a win-win in my book. Everyone should want to do this, even if they are selfish - litter has to bring down property values, right?? On a side note - this whole thing reminded me of those Insurance commercials you see with the whole 'Pay It Forward' message:



Give a hoot - don't pollute.

Why Lou Dobbs Does a Disservice to America/Why I Hate Lou Dobbs

So Lou Dobbs is a flaming idiot. Not a stupid fellow, but an idiot nonetheless. I keep reading his driven on CNN.com, and every so ofter he's on while I am at the gym. I think he's never actually said something I agree with. His campaign for the 'middle-class' is hilarious, and his campaign against the evil immigrants is shortsighted and obnoxious at best. His flames against NAFTA and free trade policies are poorly formed and shortsighted, and his whole xenophobic attitude is reminiscent of bad times gone by, Why is it bad for America to buy things that are made less expensively overseas? Because people in Ohio lose their jobs? You know what? If Bob in Alabama can make my car part faster than Joe in Ohio, then maybe Joe should find something different to make, or figure out how to make that car part at a lower cost. If not, Joe won't be selling too many car parts anymore. Joe and all his employees are going to lose their jobs. They could:

A) Get some job retraining.
B) Sit around and complain about how the evil Alabamese and their price-cutting evil capitalist leaders are flooding the market with cheap car parts.
C) Take a long look at the state of the market and push your union reps to start defending not just your current wages, but the future of your family and community.

Unfortunately, they usually do B and C, but the culprit isn't Alabama, it's Mexico, China, Japan, what have you.

Lou Dobbs spends all his time spewing nativist rants about protectionism, when the simple fact is that America doesn't really NEED nor should it WANT to have these manufacturing jobs. The demand isn't there to buy goods made by union labor drawing $25-35 an hour. Why would it be? Lou Dobbs' next show topic should be called "The Fleecing of the Middle Class: Support America and Buy Overpriced Stuff!". How would that go over?

Want to rant about something, Lou? Rant about unions. Unions were created for a noble purpose. A century ago, Upton Sinclair wrote of the abominable conditions in factories, and the powerless workers who were just lucky to have a job, even if it meant risking their lives each and every day to do the work. Unions were necessary, and government controls were necessary. That kind of thing would never happen nowadays, and if it did, there would be some 20/20 expose or a YouTube video posted that would blow the scandal wide open. Unions are not protecting people's safety anymore. So, what do they do? Let's see.

1) Take a cut of everyone's check
2) Use that money to pay for a cadre of lobbyists in DC who bribe politicians to support the unsustainable industry
3) Force companies to pay unsustainable wages to the workers in the union in the unsustainable industry
4) Strike when the unsustainable industry tries to do something that will lower costs, hence making it a sustainable industry
5) Pay unemployment (only for a while) when their bully tactics inevitably end with bankruptcy and business shutdowns of said unsustainable industries

Where is the union after the factory moves to Alabama? In Alabama, of course, where the cycle of inevitable cost rises will continue. What about when the factory moves to Mexico? Hmm. No more union. What do those workers do then? Collect unemployment and watch Lou Dobbs! Yay!

Why aren't the unions doing the respectable thing and telling their people "Look guys, here's the deal - this is no longer a manufacturing economy. This plant will eventually move or shut down, so what you guys need to do is get educated so that you can get a job in the service industry. We are going to take all your dues and help this become a reality. In the meantime, we probably won't get many pay raises for you, but we will work with the companies to keep your jobs while you go to school and get training." That would be so much more productive. But instead, we complain about evil NAFTA. Meh. Not that great.

The immigration policy rants by Dobbs are a whole 'nother post.

Thursday, April 10, 2008

Tigers! Books! Travel!

Tigers Win!

1-7. In the standings, it isn't much of a difference, but man does it look better than 0-7. Seriously. WAY BETTER. Bonderman got a win for the first time since roughly 2004, and the bats woke up a bit. Clete Thomas continues to impress. Happy day(s) are here again, for now at least.

In other news, the Nats stink.

In other news, I finished reading America's Three Regimes, by Morton Keller. This was a good read, interesting and informative. Keller describes the evolution of the political system and parties in particular through the life of the American Nation. Reading it makes me even more upset about the two-party system and it's inability to serve national interests, especially at the end of the book, when Keller talked about the rise of special interests in the political arena. Sigh. I would definitely recommend this book - a shade under 300 pages, and while packed with information, doesn't read like a textbook.

I have moved on to the Wisdom of Crowds. So far so good. I'll write more about it shortly, as it's gotten me thinking a bit. As I read more of these sort of sociology meets technology meets economics books, it's interesting to contrast the ideas and concepts across each of them. Surely they overlap and become sort of repetitive, but each book does have its own interesting and usually valid message that it conveys.

I am also STILL reading Midnight in Sicily, albeit slowly. I have read too much of it to turn back now, and with some weekend travel looming (more later), hopefully I can finally finish it. I am also continuing with my historical fiction. The latest book that Amazon recommended me is The Last Kabbalist of Lisbon, by Richard Zimler. It's a well-written and eye-opening account of the plight of the Jews in Portugal around the time of the Inquisition. I am not sure why I keep ending up reading historical fiction about converted and secret Jews (David Liss books as well), but they are all fascinating, and satisfy my craving for history while still being light and easy reads.

The next couple weeks are going to be busy - here at Sportsvite, we are getting ready to do the first release that will include my work. That's exciting, but pushing code into production is always stressful. The weekends are for travel. This weekend, we are off to Massachusetts to celebrate the first birthday of Jena's nephew William. That ought to be a blast! He's a joy to be around, and it will be great to see Jena's family as well. Next weekend, it's off to Philly to catch a baseball game and hang out with college friends. Then the following week, it's off to the bustling metropolis of Crawfordsville, IN, to celebrate my grandmother's 90th birthday! So exciting! She's still amazingly full of life, and it will be great to see them and the rest of my family. Lots coming up - hopefully I'll have some good pictures to post.

Wednesday, April 9, 2008

Why Is This Happening/Nationals Park

0-7.

The Tigers are 0-7.

Baseball is funny like that. Two years ago, you knew the Tigers wouldn't completely suck like they had for the last 20 years or so, but you had no clue that they would go to the World Series. This year, everyone KNEW that they were headed to the postseason. 0-7. They stink. They don't field, pitch, run bases well, and they don't hit. How can they not hit. Their lineup is actually better than many all-star game lineups. It's like Nintendo lineup central, but they can't hit. Why? I wish I could understand, and I hope it changes, but goodness, they stink. I am not happy. In other news, Jena and I made it to our first game at Nationals Park, and while the game was kind of a stinker (10-7 loss to the lowly and no-name Marlins), and the weather was worse (42 degrees and wet), the stadium is A HUGE IMPROVEMENT over RFK. The seats were comfy, and angled towards the action. The concourses are wide. Bathrooms and concessions are all over, and easily reachable. It's no Camden Yards, but it compares favorably with, say, Citizens Park in Philadelphia. The scoreboard is AMAZING. The sound system is about 20 times better/louder/clearer than RFK. All in all, they made some great strides. It validated our decision to pick up a 20-game package at the list minute.

Two complaints about the game:

Red, Hot & Blue: Sucked at RFK - everything was always cold, and the people were complete idiots that worked there. Still sucks at the new park (worse even)? It's more expensive, and they ran out of baked beans. So 10.50 for a so-so lukewarm sandwich, and they were out of a side, which is forgivable, except THE PARK WAS HALF FULL AND IT WAS ONLY THE THIRD INNING. Hmm. Bad planning. Won't be going back there for anything any time this year. Disappointing because we really enjoy the actual Red Hot & Blue restaurants.

Aramark (or whoever runs all food concessions): Since we couldn't get our baked beans, we checked out Noah's Pretzels. Pretty reasonable, relative to the golden $10.50 sandwich, was a $4 pretzel, and it was really good, especially when compared to the hopelessly dry and cardboard-esque $4.50 pretzels that they served up at RFK. We got a soda, but they had NO LIDS AND NO STRAWS. Now, I am no rocket scientist, nor do I consider myself an expert in food service, but how do you not have about 1 billion straws and lids sitting around just in case you need them? It's not like they go bad. No excuse. Did I mention that it was only the third inning? At a half-full game? Bad Bad Bad.

Anyway, I trust that Stan K. and his cronies will get this straightened out, and maybe they can just evict Red Hot & Blue in favor of a second Ben's Chili Bowl location, but all in all, it was a good night. The parking people in lot M were actually FRIENDLY. The ushers too! Such a far cry from the hostile staff at RFK. Well done, Nats. Now start winning! My teams have a combined 12 game losing streak. Unawesome.

Wednesday, April 2, 2008

MacBookPro.Sweetsauce.Awesome.Computer.com

So. It happened. I got a MacBook Pro. Here at Sportsvite, the entire engineering team (yes all three of us) has Macbook Pros. Out of sheer computer envy, I kept watching my compadres on their fancy computers and thinking to myself "Man, I sure would be more productive if I had one of those." I think that in the back of my mind I knew that was BS, and I just wanted to have the same computer as them. I am here to say that I was right, and wrong.

What's Awesome

Old Computer (Core 2 Duo 1.66Mhz, Vista Home Premium) JBoss Startup: 90s
New Computer( Core 2 Duo 2.2Mhz, OS X Leopard) JBoss Startup: 16s
Old Computer Screen: 14in, 1200x800
New Computer Screen: 15in, 1440x900
Old Computer Startup: 2-3 min
New Computer Startup: 30-60 sec

The incredibly crisp seamless performance.

This whole .dmg file, where you open it and drop it into the Applications directory and it just works? Not bad!

The giant crisp display.

The smooth, quiet keyboard.

The dock. Nice.

The non-ridiculous power cord, and the magnetic connection to the computer that it uses.

Garageband. I have no clue how it works, but it will be a part of my guitar practice sessions for a while, until I do.

Adium. The little green duck is hilarious, and it seems be a really awesome simple chat tool.

What's Not So Awesome

Well for starters, where the hell is the right mouse button? I don't know, but I wish I could find it. Don't tell me to hit apple either every time I click. That's LAME.COM. But, I can look past this - I am sure all those devoted Mac snobs out there must look at it as a sign of their greater purpose and ability. I think it's kinda lame, but I am okay with it. Fortunately, there are USB ports, into which you can plug nice mice with all the buttons. Problem solved!

Installing Apache http server. This one was a tough one. This really sucked. A lot. Like on the suckiness scale, this one had to be about a 30 out of 10. Fortunately, my friend Bob showed me DarwinPorts, which seems to be awesome. They have all these ready made packages, and you just type things like port install apache2. True to its name, it does just that! Huzzah! By the way, I also hate mod_jk2, but oh well. It all works now.

Sudo. The idea of sudo sucks. I will have to get around to do setting it up so everything is done as root like I do on my linux box at home. Sudo is lame. Sudo just means you have to type a four-letter word before you do something catastrophically stupid. I don't like Sudo.

The apparently lack of the start menu like in Windows. I don't really like that either. I know I can use finder to get to Applications, but it's just not the same as being able to just get there from my screen. Again, likely something I'll figure out.

The fact that JDK6 isn't ready yet. Come on guys! Good thing I am not doing performance engineering anymore, since all those sweet tools like jmap, jhat, jstack, and jconsole were greatly improved in JDK6.

No pgUp or pgDn by themselves. Also no home or end. This is one place where my Toshiba really shines - it's got a great and friendly keyboard.

Replacing 'control' with this 'Apple' key, but not having it in the same place as 'Control' - that sucks. maybe there is some way to reroute the keyboard. I can see this causing so many problems.

More to come later

Tuesday, April 1, 2008

Opening Day Redux

Well, Opening Day(s) have come and gone, and the Nationals are 2-0, looking like a whole new team, and basking in the afterglow of a fabulously successful stadium grand opening. Anyone who didn't watch the game and calls themselves a fan is probably kicking themselves. Jena and I stayed up for "one more inning" to see what happened in the bottom of the ninth. With two outs, lo and behold, Ryan Zimmerman comes up and laces one, a line drive that carried into the seats in left-center field (a stroke that would be have been a double at RFK), and just like that, the first game in Nationals Park came to a successful end.

Sadly we couldn't make it to the game, since we just weren't willing to pay $300 for a pair of tickets. It was a well-played game, and it was great to see them come out on top. As much of a critic as I might be of the current administration, I could have done without the booing of the president when he came out to throw the first pitch. Come on people. It's a BASEBALL game, not a congressional hearing. At least the guy can throw - we saw him throw out the first pitch at RFK in the Nats' inaugural season, and were most impressed with his arm. After watching him Sunday night, I can say with great confidence that whatever he might have lost in approval rating doesn't seem to have affected his velocity, so kudos to him for that!

The mighty Nationals followed up their Sunday victory with another win yesterday against the mighty Phillies, by dropping a 5-run ninth on their closer. Did the Nats have a five-run inning last year? Seriously. I can't remember one. Anyway, it's good to see that new and old guys are all doing their thing, and it's really exciting to have Nick Johnson back - he has been a fave of ours since he arrived. It must be really gratifying for him after that terrible injury, and especially to have the early success that he's had. I can also tell you that watching him at first base is a lot more comforting than watching Dmitri bungle around. (We love you Dmitri, seriously). A great start to a season that will be exciting for the new stadium and the new feeling around the team's future. I am excited for our first game next Thursday!

The Tigers - well - they didn't fare quite as well - Verlander was good-not-great and their bullpen was bad-not-awful. Sadly their high-octane offense wasn't enough, and they went down 5-4. The great thing about baseball is that they have 161 games to turn it around. I was able to watch the game on MLB.TV at work. Did I mention that the internet is the most incredible thing ever? On the subject of MLB.TV, why can't they show real commercials on the breaks? Why? They show this static display that says (imaginatively) "MLB.TV". Last year they had a pac-man game that ran in a loop, and a pong game. Why!?! When you watch about 130 of these, and every commercial break brings you this, you become almost hypersensitive to it. There are so many other things they could show, like highlights, news, scores. Anything but pong and pac-man. Weird.

Anyway, very excited for the season to get underway. Big time fun! Hopefully tomorrow my guys can get it together in game 2 against the Royals. Also found out that I will be checking out a Phillies-Mets game in Philly with a couple of friends from college in a few weeks. Awesome!