Zocalo, in Arlington on Broadway just east of the center, is amazingly yummy. We went there for lunch. Best fajitas and enchiladas I've ever had. Not overly cheesy, greasy stuff. Good, fresh ingredients, well balanced.
On the other hand, Ixtapa, just over the Lexington border, is a much better place to plow through a few drinks in the company of your (young) children. Great spicy cheese dip most of the time, but not entirely consistent.
Ixtapa is almost as good as Los Loros in Atlanta. Cheap, cheesy Mexican. Entirely different category from Zocalo.
Sunday, September 20, 2009
Friday, September 18, 2009
Debugging Unit Tests in Maven2 (mvn)
Recently I got fouled up by this issue in Intellij's IDEA. Basically IDEA loads up the Spring context one way, maven another. IDEA's trying to be helpful by doing this, but it's causing me headache. Instead of running and debugging my unit tests in IDEA, I had to resort to launching mvn on the command line and attaching a remote debugger to it via IDEA. How do you do this? Comme ca:
Then create a remote debugging session in IDEA for port 62905.
It's pretty tedious because you have to fire up mvn, then wait for it to wait, and then start the debugging session from IDEA.
While you're at it, you might want to set
mvn -Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=62905 -Xnoagent -Djava.compiler=NONE" -Dtest=YourTestClass testThen create a remote debugging session in IDEA for port 62905.
It's pretty tedious because you have to fire up mvn, then wait for it to wait, and then start the debugging session from IDEA.
While you're at it, you might want to set
-Dhibernate.show_sql=true and change your log4j.properties to include log4j.logger.org.hibernate.SQL=DEBUG, SQL_APPENDER to see what Hibernate is sending to the database.
Tuesday, September 8, 2009
Mail.app is eating Bamboo
We upgraded Bamboo recently. The latest version sends out much smarter email summaries of build failures. Unfortunately, Mail.app eats the HTML so I get an email that has a subject and zero visible content...unless I go to View -> Message -> Best Alternative.
I have to hit a few button to tell Mail.app "You're HTML display is busted. Try something else"?! No other email client I've ever used has ever had trouble dealing with HTML, even horribly malformed HTML. Mail.app mostly seems to be able to handle HTML, but these corner cases are really annoying, especially when you have to deal with them on every message. I can't even set this property on a folder or a smart folder. That's really bad design.
Here's how you get Mail.app to fix itself--also terrible design. Open up terminal and type:
Yikes.
Tip 'o the hat to this post.
I have to hit a few button to tell Mail.app "You're HTML display is busted. Try something else"?! No other email client I've ever used has ever had trouble dealing with HTML, even horribly malformed HTML. Mail.app mostly seems to be able to handle HTML, but these corner cases are really annoying, especially when you have to deal with them on every message. I can't even set this property on a folder or a smart folder. That's really bad design.
Here's how you get Mail.app to fix itself--also terrible design. Open up terminal and type:
defaults write com.apple.mail PreferPlainText -bool FALSEYikes.
Tip 'o the hat to this post.
Tuesday, September 1, 2009
Kettlebells are kicking my butt
Baby number two is due in about 6 months. When we were at T-minus 6 months for our first child, I was in great shape. I swam about 50 laps of crawl 5 days a week at the most amazing pool at MIT's Z center. Best shape of my life.
Then our daughter arrived, I never slept, and I ate junk food to keep myself sane for the better part of the first two years of her life. After the first year, I got mono, which knocked me on my ass for about 6 straight months. I packed on some pounds and am now generally a pretty huge weakling. I strain muscles really easily now that I have so little muscle mass. The latest episode involved straining my wrist while unloading a lawn mower to hack my out-of-control-overgrown lawn. The lawn had gotten so overgrown that our little manual push mower wasn't so much cutting grass as combing it, so I had to borrow a friend's power mower. The previous strain involved carrying some luggage into the house after vacation.
These little indignities are getting to be more than just embarrassing. What to do?
I called my SEAL buddy to ask him for his advice on how to get back some functional strength in some simple workouts. His advice:
1. Install pullup bar in a well traveled area of the house. Do pullups (or in my case, attempt pullup) whenever you pass by.
A few notes on this: you can't just put the pullup bar in the basement. It has to be front and center, in a part of the house you visit often during the regular course of the day. If installing the pullup bar doesn't elicit gasps of horror from your spouse because of how the pullup bar's presence ruins the aesthetic of the room, you haven't put the bar in the right place. You want the pullup bar in the most obtrusive spot possible. In my case, it's in the pantry door frame. The lure of the pantry is irresistible: it contains cookies, chocolate, and the coffee grinder. I'm in there at dozen times a day, which means I'm trying pullups a dozen times a day.
I was amazed at how many people report nearly killing themselves doing pullups on improperly installed pullup bars. It's pretty simple: screw it into solid, load bearing wood framing, like a door frame.
2. Get a book by Pavel Tsatsouline and start doing kettlebell workouts with a 25 pound kettlebell.
A few notes on the kettlebell: No way in hell could I handle a 25 pound kettlebell. If I dropped it, I'd either crush my toes, the cat, shatter the floor, or sustain numerous strains at the very least. I picked up a lady's 10 pound bell to start with, just to make sure I could get the technique right before moving up to real man weight. Kettlebell workouts--even with light weights--are killer. Just you try 5 or 10 Turkish getups. You will be huffing and puffing in no time, and as Pavel says for many of his workouts, "Bring a puke bag."
The results, after just 10 days or so, are striking. I find myself with more energy. My arms are well toned--heck, I even have deltoids. Me--deltoids! When I used to lift weights at the gym years ago, I ended up with weird arms--big biceps, smaller triceps, and no shoulders. It's hard to do well-balanced weight lifting workouts what with all the goofy Nautilus equipment, but with a few simple kettlebell moves, you'll be amazed how your body changes.
I've also been amazed at how kettlebells develop real functional strength. Traditional weight lifting isolates your muscles and gives you the ability to lift weights in a particular way. For example, curling 50 pound dumbells makes you really good at...curling 50 pound dumbells. But day-to-day life doesn't present you with the opportunity to bench press something in order to accomplish anything of practical value.
Carrying a squirming two year old up steep stairs with one hand while dragging a 50 pound bag of concrete requires full body functional strength, not just huge biceps. The balance involved in these sorts of tasks is important, as is your body's ability to shift loads around. I find kettlebells are very good at building what I'll call "practical" strength. Ditto for the pullup bar.
Then our daughter arrived, I never slept, and I ate junk food to keep myself sane for the better part of the first two years of her life. After the first year, I got mono, which knocked me on my ass for about 6 straight months. I packed on some pounds and am now generally a pretty huge weakling. I strain muscles really easily now that I have so little muscle mass. The latest episode involved straining my wrist while unloading a lawn mower to hack my out-of-control-overgrown lawn. The lawn had gotten so overgrown that our little manual push mower wasn't so much cutting grass as combing it, so I had to borrow a friend's power mower. The previous strain involved carrying some luggage into the house after vacation.
These little indignities are getting to be more than just embarrassing. What to do?
I called my SEAL buddy to ask him for his advice on how to get back some functional strength in some simple workouts. His advice:
1. Install pullup bar in a well traveled area of the house. Do pullups (or in my case, attempt pullup) whenever you pass by.
A few notes on this: you can't just put the pullup bar in the basement. It has to be front and center, in a part of the house you visit often during the regular course of the day. If installing the pullup bar doesn't elicit gasps of horror from your spouse because of how the pullup bar's presence ruins the aesthetic of the room, you haven't put the bar in the right place. You want the pullup bar in the most obtrusive spot possible. In my case, it's in the pantry door frame. The lure of the pantry is irresistible: it contains cookies, chocolate, and the coffee grinder. I'm in there at dozen times a day, which means I'm trying pullups a dozen times a day.
I was amazed at how many people report nearly killing themselves doing pullups on improperly installed pullup bars. It's pretty simple: screw it into solid, load bearing wood framing, like a door frame.
2. Get a book by Pavel Tsatsouline and start doing kettlebell workouts with a 25 pound kettlebell.
A few notes on the kettlebell: No way in hell could I handle a 25 pound kettlebell. If I dropped it, I'd either crush my toes, the cat, shatter the floor, or sustain numerous strains at the very least. I picked up a lady's 10 pound bell to start with, just to make sure I could get the technique right before moving up to real man weight. Kettlebell workouts--even with light weights--are killer. Just you try 5 or 10 Turkish getups. You will be huffing and puffing in no time, and as Pavel says for many of his workouts, "Bring a puke bag."
The results, after just 10 days or so, are striking. I find myself with more energy. My arms are well toned--heck, I even have deltoids. Me--deltoids! When I used to lift weights at the gym years ago, I ended up with weird arms--big biceps, smaller triceps, and no shoulders. It's hard to do well-balanced weight lifting workouts what with all the goofy Nautilus equipment, but with a few simple kettlebell moves, you'll be amazed how your body changes.
I've also been amazed at how kettlebells develop real functional strength. Traditional weight lifting isolates your muscles and gives you the ability to lift weights in a particular way. For example, curling 50 pound dumbells makes you really good at...curling 50 pound dumbells. But day-to-day life doesn't present you with the opportunity to bench press something in order to accomplish anything of practical value.
Carrying a squirming two year old up steep stairs with one hand while dragging a 50 pound bag of concrete requires full body functional strength, not just huge biceps. The balance involved in these sorts of tasks is important, as is your body's ability to shift loads around. I find kettlebells are very good at building what I'll call "practical" strength. Ditto for the pullup bar.
Tuesday, May 26, 2009
Whither javaworld.com?
I have been losing faith in javaworld.com lately. Maybe I've just advanced to the level of programming where I'm highly skeptical of programming advice dispensed by people who work in development environments that are highly dissimilar to mine. It's not that the advice is bad; it's just that it can't be applied in any practical sense to my environment, or it yields no benefit in my environment.
I still read javaworld.com from time to time, but this little nugget in an article describing cloud computing really makes me wonder:
"Likewise, you should not be concerned with writing application code to implement scalability, reliability, and other cloud and distributed computing features that a cloud platform could provide..."
Uh, right. I'll just store everything in Object[], read and write data using unbuffered classes, call read(byte b) a billion times instead of read(byte[]) once, etc., etc., because the cloud will manage scalability for me. WTF?
Building scalability into the application code is incredibly important. Likewise, if my application dies all the time, the proper solution is not just to let the cloud restart it and cross your fingers. The proper solution is to code the app so it doesn't crash. The article's advice is especially ludicrous because when you use the pay-as-you-compute model, application crashes waste your money because you're paying to crash and restart, instead of paying for your app to do something useful. Furthermore, if you build scalability into your app, your app becomes cheaper to run on the cloud because you use fewer resources (electrons, clock cycles, network, storage) to run it.
I still read javaworld.com from time to time, but this little nugget in an article describing cloud computing really makes me wonder:
"Likewise, you should not be concerned with writing application code to implement scalability, reliability, and other cloud and distributed computing features that a cloud platform could provide..."
Uh, right. I'll just store everything in Object[], read and write data using unbuffered classes, call read(byte b) a billion times instead of read(byte[]) once, etc., etc., because the cloud will manage scalability for me. WTF?
Building scalability into the application code is incredibly important. Likewise, if my application dies all the time, the proper solution is not just to let the cloud restart it and cross your fingers. The proper solution is to code the app so it doesn't crash. The article's advice is especially ludicrous because when you use the pay-as-you-compute model, application crashes waste your money because you're paying to crash and restart, instead of paying for your app to do something useful. Furthermore, if you build scalability into your app, your app becomes cheaper to run on the cloud because you use fewer resources (electrons, clock cycles, network, storage) to run it.
Tuesday, May 12, 2009
Random Hilarious Error Messages
I come across silly error messages fairly often. I thought I'd capture them here for entertainment value.

This one comes at me from Oracle's Corporate Time Mac Client. How many windows does it take before you have too many? Five. Yup, five. I routinely have about 20 Firefox windows open without any sort of trouble. Five windows? Seriously?

I think this message came from SQL Navigator 5.5.4.847. I can't tell, though, because the dialog box doesn't give me the slightest clue. Wouldn't it be nice if my computer at least told me which application caused this?

This one comes at me from Oracle's Corporate Time Mac Client. How many windows does it take before you have too many? Five. Yup, five. I routinely have about 20 Firefox windows open without any sort of trouble. Five windows? Seriously?

I think this message came from SQL Navigator 5.5.4.847. I can't tell, though, because the dialog box doesn't give me the slightest clue. Wouldn't it be nice if my computer at least told me which application caused this?
Tuesday, May 5, 2009
Attempo Live Backup makes life miserable for developers.
Our company has had to switch from TSM to Attempo's Live Backup. It's wreaking havoc on developer productivity.
Builds, of which developers do dozens each day, delete and recreate thousands of files over the period of about 5 minutes. The backup system sees all of this disk activity and thinks "Oh boy, better get started caching changes and streaming them to the backup server!" Never mind the fact that those 150,000 class files are a compiler artifact and can be reproduced at will by running javac after checking out the appropriate source code from subversion--another backup system.
So what's a developer to do? Spend an hour configuring Attempo to ignore class files, war files, jar files, zip files, etc. The biggest bang for the buck I got was telling Attempo to ignore the many dozen "target" directories in my build tree, which is where most of the action takes place. It takes an hour to do this because you have to add the directories one by one. It would be really great if Attempo could use regexes for client side exclude directories and files.
Doing all of this configuration of Attempo greatly sped up my builds.
Builds, of which developers do dozens each day, delete and recreate thousands of files over the period of about 5 minutes. The backup system sees all of this disk activity and thinks "Oh boy, better get started caching changes and streaming them to the backup server!" Never mind the fact that those 150,000 class files are a compiler artifact and can be reproduced at will by running javac after checking out the appropriate source code from subversion--another backup system.
So what's a developer to do? Spend an hour configuring Attempo to ignore class files, war files, jar files, zip files, etc. The biggest bang for the buck I got was telling Attempo to ignore the many dozen "target" directories in my build tree, which is where most of the action takes place. It takes an hour to do this because you have to add the directories one by one. It would be really great if Attempo could use regexes for client side exclude directories and files.
Doing all of this configuration of Attempo greatly sped up my builds.
Subscribe to:
Posts (Atom)