BibleGateway.com Verse Of The Day

Wednesday, January 31, 2007

Chicken Mushroom Soup

Came up with this one trying to emulate a soup I had at Chilis once. Not sure how close it is since they seem to have it when I go there anymore.

INGREDIENTS
1 can cream of mushroom soup
1 can chicken broth
1 can sliced mushrooms
1 boneless chicken breast
garlic powder
black pepper
salt

DIRECTIONS
Cut chicken into 1" cubes & brown. Combine all ingredients in slowcooker and cook on low. Scale up for larger pots of soup.

Italian Beef

Got this one from my Mom. Makes good sandwiches on hard rolls.

INGREDIENTS
6 lbs sirloin tip roast
2 onions
1 stalk celery
1 green pepper
1/2 bottle ketchup
2 T. BBQ sauce
2 T. Vinegar
1 t. Pepper
2 T. Salt
2 T. Chili powder
2 cups water

DIRECTIONS
Cook roast all night in crock pot. Flake meat & take off any fat. Put back in crock pot. Combine all other ingredients pour over meat. Leave on low all day.

Stuffed Mushrooms

Ingredients
1 package whole mushrooms
pepperoni
sliced salami
sliced ham
grated parmesan cheese
1 egg
either heavy cream, provolone, or mozzarella cheese.

Directions
1. Pull stems from mushrooms.
2. Lay out mushroom caps on baking pan.
3. Put stems, Pepperoni, salami, & ham in food processor to chop finely.
4. Combine meat w/ egg & mix well.
5. Add grated cheese to desired consistency.
6. Pack mushroom caps w/ mixture.
7. Put cheese on the caps, or pour cream over them.
8. Bake (~350 deg) until cheese in bubbly & turning brown.

Beer Can Chicken

This is a yummy treat in the warmer weather. Speaking of warmer weather, who the hell turned off Global Warming? I was starting to enjoy the warm December, but now it's freakin cold!

Anyway, beer can chicken. Slow roasted on an open fire and still tender and juicy.

1. Fire up the grill. I like charcoal and wood chips, but you can use gas.
2. Rub the whole chicken with Montreal seasoning or any other spice you like. Salt, pepper, garlic powder is a nice simple rub.
3. Drink half a can of beer, leave the other half in the can.
4. Sodomize the chicken carcass with the can of beer, making sure not to spill any beer.
5. Prop up the bird on the grill so it looks like he's taking a dump. The can should be fully upright.
6. Cover up and let it sit until done.

Don't worry too much about overcooking, the evaporating beer will keep it moist.

Tuesday, January 30, 2007

Robb's "Award Winning" Chili Recipe

For printable copy http://frontiernet.net/~nicholson150/Chili.pdf

Instead of duplicating the recipe here, I'll just include it with a handy iframe....

Friday, January 19, 2007

DAO Generator Update

Progress has been somewhat slow, but I fixed some issues with the Velocity templates, as I got a chance to generate the persistence layer for a mini project, which surfaced a few issues.

Also, main bulk of work now is with the custom query generation. At first I started with a custom query tab, then a different tab for each table. That screen got really busy and unusable really fast, so I decided to do more of a popup, screen-by-screen "wizard" type approach.

Click on the table, hit "Custom Method" button...


And it pops up a screen with the current custom methods for that table (if any)....

Then you can edit, delete, or create new. New button launches a screen that will look something like this (but needs some way to display all the parms as they are added, with way to edit or delete parms)....

The DAO generation for stored procedures has been a pain in the butt, so I shelved that chunk for now. One of the databases I ran this against had 2 stored procedures in the same schema with the same name, and as far as I could tell the params looked the same too. That of course puts duplicate methods in the DaoFactory but only generates one DAO class instead of two. Maybe I should just make that whole thing more generic, like the DAO "execute" method takes a single array of parameters instead of being a finely grained typed call. And then the binding is done on the fly. If you sent too many or too few params, you lose, Exception thrown.

Once I get the custom query stuff done, the next chunk of work will be to make this work with other database servers. I can test it against Oracle, MySQL, and SQL-Server without too much effort since I have all those installed on my PC.

HTTP Proxy - BURP Suite

As more and more of our development centers around integrating various systems, we find that troubleshooting issues gets more and more complicated. Instead of just walked through my own code with a debugger or examining log files, you have to involve other groups and application owners. Part of the hassle is convincing other people that there is a problem at all, let alone where the problem might lie. Complicate that with the fact that you may not have as much visibility into the whole transport layer as you might like.

I trace through all my code to the last point before it fails, and that is a call into the SOAP connector. So the request may or may not be getting to the target system OK. The SOAP requet you think you created and the one actually getting transmitted may be different.

Enter the BURP suite, a set of tools to act as an HTTP proxy and capture requests and responses. Now you know exactly what your app is spewing out and what the target system is responding (or not). It can be a simple proxy, showing you all the requests and responses, or you can intercept requests/responses, alter them, and forward that.

Below: Main screen

Below: Detail screen showing a particular request, your altered request, and the response, each in tabs. I did some censoring to take out specific server names and stuff.

There are also other tools in the suite, like spider, repeater, etc. but I mostly find the proxy and intercepter useful for troubleshooting and testing. This thing is definitely worth the free download, esp if you are doing any kind of web services type crap and dealing with less-than-cooperative developers from other teams or systems.

Below is a screenshot of the configuration screen for the proxy. You can configure exactly what to capture and automatically alter some header info, etc.

BTW - You can click on any of the pictures for a bigger view. Closeups aren't just for porn anymore.

Sunday, January 07, 2007

Raising Chickens In The Backyard

Well, now that we have two boats, a lawn mower, a snow blower, and a broken down Jeep YJ stored on our property (none of which belong to us, this is all in addition to our lawn mowers and Jeep) we just couldn't deny that we are true 315-ers, even if we do still carry a 585 area code. We are true Wayne County rednecks -- we eat critters from the woods out back, we have a pool that contained thousands of tadpoles this past spring, and now we have a Sanford and Son collection started. The cap it all off, we really need some livestock running around. And hence, our decision to raise chickens for food....

We're starting to move forward on our plan to raise chickens this spring. Our thought is this will be somewhat educational for the girls, as well as a source of meat and eggs. Mmmmm, barbecue chicken!! Doesn't get much fresher than killing it and grilling it 30 minutes later. The breeds we picked are good all around birds that lay a decent amount of eggs but still get to be good eating size.

There is a block building in the back yard, the size of a good size shed. We will turn that building into the coop by adding some perches and nest boxes in there, and adding a fenced in run. We have a very large barn so we really don't need that small outbuilding for any real storage or anything.

Since we live in an area that is known for having rough winters, we will order the chicks closer to spring so we don't have to worry too much about them freezing. We also settled on breeds that are known for doing well in the northeast: Rhode Island Reds and Buff Orpingtons.







We'll be ordering 25 day old chicks from Murray McMurray hatchery, along with a starter kit (water bottles, feeders, brooding light, etc. We will get some feed, grit, fencing, and waterers at local suppliers like Country Max or Tractor Supply Company. In warmer weather we plan to let the chickens free range during the day so they eats bugs and stuff from the yard.

This should be an interesting, fun, educational, and hopefully rewarding experience. I have a smoker that could cook up probably 10 chickens at time and still have room for corn on the cob, so COCK A DOODLE DOO!!

Friday, January 05, 2007

2007 IRS Tax Withholding Calculator

To figure out how to full out your W-4 to maximize in-pocket money year round without having to pay ... http://www.irs.gov/individuals/page/0,,id=14806,00.html

Thursday, December 14, 2006

Ant Visualization Tool - yWorks Ant Explorer

Found this free tool last night that shows a visual graph of an Ant build.xml and shows the hierarchy of task dependencies. Can be stand-alone installed or Webstart, or IDE plugin for Eclipse or Netbeans.

http://www.yworks.com/en/products_antexplorer_about.htm

Wednesday, December 13, 2006

DAO Gen Update 12/13

Between other tasks and our Christmas party, I got some work done on the DAO generator tool.

Completed Tasks
  • ResourceManager - getConnection() for when Connection is not supplied: Currently it's guts are commented out. Should put a JNDI lookup for a data source in there. That's how we do it, most likely anyone doing server-side code also does this. They could always customize for using DBCP or some other mechanism.
  • DB query tab. Lets you enter queries and run them. Results come out to output tab as tab-separated text, along with number of rows retrieved and how long it took to run.
  • simple Batch file launcher for Windows.
  • Fixed an elusive NPE on describe that only happened once in a blue moon.
  • Usability stuff: there are validations now for required fields being blank, and clicking on describe button will take you to output tab to show what is going on. When done, it goes to DB explorer tab. If a field is blank when validation runs, the config tab is selected so user can fill in,and some other things that make it all more usable.
Screenshot of simple query runner tab:


Outstanding Tasks
  • DaoFactory - generated factory class is missing factory methods for stored procedure DAO's (easy fix, but have been busy with GUI)
  • Stored Proc DAO's - need a lot of work
  • CLOBS/BLOBS/BFILES - haven't accounted for those at all. they are a pain to write by hand so they should be done right in the generated code.
  • Generated DAO's and all classes need to be fully tested to make sure the templates are right.
  • Dist - need to come up with a distribution package mechanism, with shell and batch files to launch, special directory for templates, etc.
  • Custom Queries - not implemented in generator or GUI yet.
  • Saving new project file - app should put .prj extension on filename automatically if it isn't there.
  • Help screen needs content
  • Code cleanup w/ respect to comments, package names, etc.
  • Pick a better name for application and update the package names
  • Documentation would be helpful
  • Pick an open source license and OS project hosting

Tuesday, December 12, 2006

DAO Gen Update 12/12

I got lots of cosmetic and functional work done on the GUI side of my persistence generator. Still need to work on the Velocity templates, implement custom query generation, clean up code/comments, pick a better name, open source it somewhere, and some more GUI features to add.

Progress this week:
  • Added a Browse button for the template directory to make it more consistant with the generated code destination field. Also improved the layout a little bit on the screen.
  • Switched to a tabbed interface. The main screen from last week is now the configuration tab. There will be a tab for writing the custom query methods, running queries against the current DB, the output window has been nixed in favor of an output tab, and a tab that visually shows the DB objects to some extent.
  • Add mnemonics to menu and toolbar controls.
  • Open and Save/Save As now fully work, and described database meta data gets saved with project.
  • Help "about" and "contents" actually launch screens, even if there is no real content yet.
Screenshots: Config Tab (default Java "Metal" look and feel)Output tab (used to be separate window)

DB Explorer tab:
Look And Feel is controlled by View menu, below are the Windows (native) and the crappy "Motif" look-a-like that comes with Java:



Outstanding task list:
  • ResourceManager - getConnection() for when Connection is not supplied: Currently it's guts are commented out. Should put a JNDI lookup for a data source in there. That's how we do it, most likely anyone doing server-side code also does this. They could always customize for using DBCP or some other mechanism.
  • DaoFactory - generated factory class is missing factory methods for stored procedure DAO's (easy fix, but have been busy with GUI)
  • Stored Proc DAO's - need a lot of work
  • CLOBS/BLOBS/BFILES - haven't accounted for those at all. they are a pain to write by hand so they should be done right in the generated code.
  • Generated DAO's and all classes need to be fully tested to make sure the templates are right.
  • Dist - need to come up with a distribution package mechanism, with shell and batch files to launch, special directory for templates, etc.
  • DB query tab - not implemented yet
  • Custom Queries - not implemented in generator or GUI yet.

Tuesday, December 05, 2006

A Few Unix Shell Tricks

If you want to set a value in a shell script, but only if it isn't already set (e.g. set a default value but let it be overridden), try this. The following command will set PROJECT to be mqbridge, unless PROJECT is already set. In that case, the current value overrides. I have used this trick in ksh and bash. Not sure what other shells it works in.

export PROJECT=${PROJECT:-"mqbridge"}

Redirecting stderr to stdout: If you are trying to capture output of a command into a file, you will notice the regular output goes into the file, but errors go directly to the screen instead. If you want to capture both, use shell redirection like this (2>&1) after your command.

For example, to have all output go to the screen and to a file, you can do something like this:

    run.sh 2>&1 | tee output.log





Wednesday, November 29, 2006

Crontab Format

Every time I need to put something in cron, I forget the format or layout of each job. I stripped this decent explanation from this site:

The format of the crontab file is as follows:

Minute (0-59) Hour (0-23) Day of Month (1-31) Month (1-12 or Jan-Dec) Day of Week (0-6 or Sun-Sat) Command

0 2 12 * 0,6 /usr/bin/find

This line executes the "find" command at 2AM on the 12th of every month that a Sunday or Saturday falls on.

Wednesday, November 08, 2006

In Loving Memory...

Charlie
(AKC "Good Grief Charlie Brown")
April 27, 1998 - November 7, 2006
Airedale Terrier

Charlie was our first dog, our first baby. He was diagnosed with Lymphoma (cancer of the lymph node system) about 2 weeks ago, and we had to put him down last night. It was not an easy decision, but it was what was right for him so he wouldn't suffer and be in pain any longer.

The Lymphoma was a horrible disease, because early detection doesn't really buy you anything. We took him to the vet because his throat was swollen and his eyes were red. We thought he had an allergic reaction or infection. We weren't prepared to hear the doctor say the "C" word, especially since Charlie was acting completely normal, looked normal, was still playing and happy, wagging his tail, eating and drinking, and just being himself.

Charlie was a great dog. Even when we had children, he took to them very well and welcomed them to the family. He soon became very protective of them, like they were his own. He would sleep in the hallway outside their doors at night. If someone he didn't know came to the house, he made sure to be between the girls and the stranger at all times. When they cried in their crib, he would go investigate and come barking at us so we knew something was up.

(Left: Charlie and Morgan taking a break from playing)

He was of course every bit a terrier though, we can't forget that. He was smart, but stubborn. When training him, he would reach a point where he would get bored and just wouldn't cooperate. He was big enough to do his share of "counter surfing" -- getting up on the counters to steal any food that wasn't bolted down. He had no use for other animals, especially strange dogs. Sure he played with the dogs he knew, like Morgan, Pongo, Sage, Wolf, etc. But any other dog he would go nuts barking and lunging at them. As a very small puppy, he actually started barking and "picking a fight" with a full grown rottweiler. That's terrier attitude for you.

(Left: classic example of Charlie being in the middle of the action during Taryn's birthday party)

When we first went to get Charlie as a puppy, we were "just going to look". I liked Airedales from what I knew about them, but had no real intention of actually getting one right then. I was still in an apartment that didn't allow dogs, but I was closing on my first house in a few weeks. Plus I was going to ask my girlfriend to marry me. I wanted it to be a surprise, so I kept telling her I didn't have the money for the ring. Well in her mind, I had no money for a ring but I just dropped $500+ for a puppy. I just couldn't resist once I saw them. There were about 4 puppies left when we got to the breeder's house, and Charlie was running around with a little purple ribbon tied around his neck like a collar. For some reason we gravitated right to him, but he kept running under their porch. The breeder spent a good 15 minutes or so trying to get him to come out so we could take him home. We're glad he finally came out. And my wife has since forgiven me for the ring incident once she found out I had already purchased the ring.

(Right: Upside-down Bear)

If Charlie was laying down, and any of us walked near him, he would roll over on his back with all 4 paws up in the air. We would say "Charlie's upside-down" and then rub his belly. After getting used to this behavior, he would sometimes "go upside-down" even if you weren't near him, knowing you would go over and rub his belly anyways. We even taught our daughters that any time he was upside-down, they had to rub his belly.

He was never much for the game of Fetch in the traditional sense. Throw a ball or frisbee and he would run over, grab it, and then lay down to chew on it. So we turned it into a game of "I'm Gonna Get You". We would run after him, and he would grab the toy and run away, purposely getting himeself into situations where we could corner him and grab the toy, but then running past us in the other direction.

Sometimes Charlie would kind of sigh in his sleep, so it sounded like he was "leaking" air. Another strange thing he did was he would lick my head when I got down on the floor to play with him. It was funny when he would get done eating or drinking, then walk the length of our bed rubbing one side of his face on the comforter, then back the other way rubbing the other side of his face, like our bed was a giant napkin just for him. Speaking of napkins, he would go on one his marathon water drinking sessions, then come up to you with his terrier beard dripping wet and put his head on your lap (usually when you're wearing shorts!).

We will miss Charlie a lot. I didn't really feel ready to say goodbye, but I wouldn't have been any more ready next week, next month, or even 8 years from now when he would have been "old". We did the right thing for him instead of being selfish and keeping him around in misery. We'll always remember him and love him. He was our first baby.
(Left: "You lookin' at me?")

(Below: Just hangin' out)


Monday, September 18, 2006

Outer Joins: Sybase versus Oracle

I've never had the 'pleasure' of dealing with Sybase. I've created databases in Sybase and MS SQL Server (based on Sybase code at one point), but never had to interact with them directly (they were just meta databases for Silverstream servers).

So on a current project I have to convert a bunch of queries in Java code from Sybase to Oracle, as the database has been migrated.

To oversimplify, a right outer join in Sybase might look like this....

SELECT *
FROM table1, table2
WHERE table1.col3 =* table2.col3

And in Oracle it would look more like this...

SELECT *
FROM table1, table2
WHERE table1.col3(+) = table2.col3

For a left outer join, Sybase...

SELECT *
FROM table1, table2
WHERE table1.col3 *= table2.col3

And Oracle...

SELECT *
FROM table1, table2
WHERE table1.col3 = table2.col3(+)

As a side note, when you see something like "SELECT getDate(), ...", the getDate() function is basically the Sybase equivalent of SYSDATE.

Thursday, September 14, 2006

Rednecks on Parade

From a car show in my home town of Scottdale , PA last summer. Just came across these pictures on my hard drive. Some guy spent a lot of time and money building this replica of the General Lee, complete with the musical horn. Except for some minor details, he did a pretty good job. I loved that show as a kid (still do), so my wife got a few pictures for me.

Tuesday, August 29, 2006

Robb's Southwest Chicken Tortilla Soup

I ordered chicken tortilla soup at Red Robin one day and liked it. But I thought I could at least match it, if not make it better at home. After we had a roasted whole chicken for dinner one night, with lots of broth and leftover meat, I came up with this recipe. I've altered it a little bit each time, so there is really no "wrong" way to make this -- it's hard to screw up. Great to have cooking in the fall on football Sundays!

Ingredients:

  • A Left over roasted chicken, deboned & cubed
  • Chicken broth or stock, bullion/water as needed
  • Frank’s Red Hot (cayenne pepper sauce) I don't measure so it might be about 1/4 cup or so?
  • Spicy V8 Juice (maybe about 1 cup or so, this is optional as sometimes we don't have any)
  • 1 can black beans, drained/rinsed of the “sludge”
  • 1 can sweet yellow corn
  • Finely chopped fresh cilantro (1 bunch)
  • 3-4 slices bacon, chopped and cooked (optional, I always forget this and it always tastes great anyways)
  • Garlic cloves, minced (a few spoonfools, depending on how much you like garlic)
  • 1 large onion, finely chopped
  • 1 Jalapeno pepper, finely chopped
  • Little bit ground cumin to taste
  • Dinosaur BBQ “Foreplay” and/or Chili powder to taste
  • Black Pepper to taste
  • The chicken and broth are probably plenty salty but you can add more if desired

Cut the chicken into small cubes or pull apart with a fork, depending on how you like chicken in soup. Put all the ingredients above into a crock pot and cook it on low all day. When you're ready to eat, scoop it into a bowl and crumble some tortilla chips on top, sprinkle some cheddar or "taco" cheese on top, and add a dollop of sour cream. Enjoy!

Thursday, August 24, 2006

JavaOne 2006

I should say something about JavaOne too, while in a Blog Editing frenzy. I can sum up JavaOne 2006 in three workds: Annotations, AJAX, and SOA. Well, AJAX and SOA aren't words so much as acronyms. Well, okay, AJAX kind of is a word if you are talking about the cleaning product, and it's funny how some of the folks have turned SOA into a word, as some talking heads kept referring to "sew ah".

Overall, Sun does one heck of a job producing this thing. The whole even is just overwhelming. It is like controlled chaos, so many people doing so many things and yet it is well organized for the most part. You had to sign up for your presentations ahead of time and your smart card was read at the door which would let them know if you were signed up or not. Big screens everywhere with the Sun/Java propganda blaring, all the signage was Sun or Java or Duke, you would think you were in a Sun building instead of Moscone center. There were bean bags, video games, movies, foosball, etc in the open areas for people to relax and hang out between sessions. Of couse Wifi everywhere, and it was funny to see people huddled around the few outlets charging their laptops (I was one of them, so it wasn't so funny when all the outlets were being used).

Anyways, all the complexity of J2EE programming (sorry it's now Java EE, not J2EE) is now gone! Instead of writing butt loads of XML descriptors for the J2EE containers, you just slap some annoations in your class and PRESTO! Write a simple POJO and spew @Session in there and now it's a session EJB. Expose it as a webservice, you say? @WebService. It's all magic. It's all...Xdoclet. Really, how writes all those EJB interfaces anymore anyways? Not that annotations aren't a welcome convenience, but it's not a revolutionary new idea that Sun just ame up with. Other things annoations are used for are dependency injections. So not just XDoclet, but Spring. Oh well, how can anyone say open source community is irrelevant when so many of the ideas are making into the new "standards-based" Java world?

SOA, everyone demo'd some sort of SOA tools it seemed. Sun kept pimping the latest NetBeans and Glassfish, which lets you do all kinds of drag and drop poop-flinging or WSDL files and services and whatever to create brilliant SOA based applications. Oracle, not to be outsold by rival crack dealers, had to push their own version of the drag-n-drop SOA tools on their own server. Eek, it's freakin' flowcharts all over again to look at these tools. And it's all so easy, you have perfect like web services already wel defined and sitting there, with one method call on each one that sends back simple strings, and we string them together with a little bit of drag-n-drop data mapping and a few conditionals, and BAM! A useless application!

Those were all in the keynote sessions in the morning. So I figured the SOA sessions would be even more detailed and in depth, but it was basically the same smoke and mirrors. At one point, a presenter was making a change and went to the browser to show us how it would just magically show the extra service or whatever, and ...crickets... it didn't work. It's all freaking magic point-n-click until something doesn't work -- then what? You have no idea what's really going on under the hood of all that graphical diarrhea and annotation soup.

I went to the Jboss party and the Eclipse party. Both were cool in their own ways. It was hard to find just a regular old neighborhood bar to go and grab a beer in San Francisco. Everthing was pretentious and/or artsy crap -- like wine bars, or places with cloth tablecloth and $50 a plate meals. I want a place where you walk in and they have beer, lot of beer, that's not $8.00 a pint, and burgers and chicken fingers and crap like that. A bar for regular Joes like me. Couldn't find it.

So the first time I really got my drink on that week was at the Jboss party. That was weird. I walked to the end of the street and didn't see the place where the party was supposed to be. Finally I saw the address on the building across the street, and it matched. It looked like an abandoned warehouse though. I walked up and a couple guys in black with headsets said "this way" and pointed to a chainlink gate. We walked down that "alley" to a side door, where another dude in black with a headset welcomed us in. I made the comment to the guy next to me that I felt like we were in a bad mobster movie, and we were about to be gunned down. Inside was a big empty room with a DJ pumpin out beats and open bars. OPEN BARS! Jack Daniels and Cokes for me please, and lots of them. Free food too, but OPEN BARS. It got weird when Fleury got up to speak, as I couldn't understand a word he said, but between his red beret and maniacal screaming it seemed like he was a third world revolutionary getting ready to overthrow some corrupt regime. Then some lady came out and did some sort of weird trapeze dance thing up in the air. Odd indeed.

Thouroughly beyond soberness, I left with a couple of dudes from Sherwin Williams, and tried to get into the SDN party. I of couse didn't have my invite, and they did. We tried, but I got turned away. As if this weren't enough of an omen to go back to the hotel, I instead stumbled over to the Eclipse party. Free microbrew beer. Sweet! I'm already stumbling and they are givingme 20 ounce glasses of really dark and strong beer. I talked to some dudes from I think Finland or Norway or something like that until the place shutdown, then made my way back to the hotel.

It was a good night. The party put on by Sun was OK, but it was 2 drinks and you had to wait in line forever since it was pretty much all of the JavaOne attendees instead of, say, just the Jboss or Eclipse users. It was cool to meet the guys from MythBusters though.

It was a good time overall, got my loot bag filled up, learned some new stuff, got some pointers, talked to some smart folks, and just plain absorbed all that is Java for a week. I would definitely go back if my company offered again.

BibleGateway.com

As a new Christian trying to read and understand the Bible for the first time, I've found this website to be invaluable to my study. I just found it a few hours ago, but in that time it has been incredible. You can search any passages, in just about any language and any translation of the Bible. You can even show different translations and different languages side by side, for example comparing the King James Version, the New Internation Version, and the New American Standard Version side by side. This not only helps compare and contrast the various Bibles to see which one you might like to buy, but also provides better understanding and insight into the passage as you read the different translations. I never even knew so many versions existed, or what the reasoning or goal of the translations are/were. It's all explained on this site.

I've entered a search form over in the margin for you to try out a simple search, as well as an updating verse of the day at the top of this page. There is even a Firefox toolbar that lets you search this site.