<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4531828283487978792</id><updated>2011-12-15T19:05:27.583-06:00</updated><title type='text'>Backwards Hindsight</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-2154203616823811433</id><published>2010-08-12T17:46:00.000-05:00</published><updated>2010-08-12T17:46:33.987-05:00</updated><title type='text'>Big snakes and programming...</title><content type='html'>I have started trying to learn Python again.&lt;br /&gt;&lt;br /&gt;This time, I am using the book "&lt;a href="http://manning.com/briggs/"&gt;Hello! Python&lt;/a&gt;" by Anthony Briggs.&lt;br /&gt;&lt;br /&gt;I am only a few chapters in so far, but it is an easy read. &amp;nbsp;It is going fairly slowly for me, but that is because its audience is beginning programmers. &amp;nbsp;And, it seems like it would be great for new programmers (or hobbyists) getting started with Python.&lt;br /&gt;&lt;br /&gt;The book is still in its 'early access' phase, so it is only available online as a PDF. &amp;nbsp;But, you can order it as a 'real' book too and get a copy in digital form to start on while you are waiting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-2154203616823811433?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/2154203616823811433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=2154203616823811433' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2154203616823811433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2154203616823811433'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2010/08/big-snakes-and-programming.html' title='Big snakes and programming...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-2771458011153960644</id><published>2010-08-12T17:37:00.000-05:00</published><updated>2010-08-12T17:37:36.668-05:00</updated><title type='text'>Did you miss me...</title><content type='html'>I had these grand plans for this blog and I think that those big plans kept me from keeping active here.&lt;br /&gt;&lt;br /&gt;I thought that I needed to have something big and important to say before I said anything.&lt;br /&gt;&lt;br /&gt;I am going to try to get over that.&lt;br /&gt;&lt;br /&gt;Small things can be important too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-2771458011153960644?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/2771458011153960644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=2771458011153960644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2771458011153960644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2771458011153960644'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2010/08/did-you-miss-me.html' title='Did you miss me...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-1676127010426162373</id><published>2009-11-16T18:00:00.000-06:00</published><updated>2009-11-16T18:00:01.263-06:00</updated><title type='text'>The little things mean the most...</title><content type='html'>There is a programming pattern that I had never seen before.&lt;br /&gt;&lt;br /&gt;That is, there are multiple constructors of a Java class that share a 'base' block of code that needs to be called for each of them.&lt;br /&gt;&lt;br /&gt;Well, I try to minimize opportunities for bad typing.&amp;nbsp; So, when I came across a situation like this - I created a method called base() that would be called by each of the constructors.&amp;nbsp; That way, the code would exist in one place and would be easier to keep clean and up to date.&lt;br /&gt;&lt;br /&gt;Good plan right?&lt;br /&gt;&lt;br /&gt;It worked, but today I was playing with the idea of making my big giant app send Twitter updates to let me know what was going on and notify me as errors occured.&amp;nbsp; The java library that I stumbled onto was twitter4j by Yusuke Yamamoto.&lt;br /&gt;&lt;br /&gt;I wanted to make sure that if I tried to send a large (more than 140 character) tweet - it would be handled gracefully rather than getting truncated.&amp;nbsp; At first glance, they would have gotten truncated.&amp;nbsp; I'll have to check further to see if this is true.&lt;br /&gt;&lt;br /&gt;But, my base() trick is not as clever as I thought.&lt;br /&gt;&lt;br /&gt;There was a better way, that I never saw before today.&amp;nbsp; And that is to use the regular zero parameter constructor by calling it from each of the other constructors as this().&amp;nbsp; Clean and beautiful - thanks Yusuke.&lt;br /&gt;&lt;br /&gt;To myself I say...&lt;br /&gt;&lt;br /&gt;Duh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-1676127010426162373?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/1676127010426162373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=1676127010426162373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/1676127010426162373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/1676127010426162373'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/11/little-things-mean-most.html' title='The little things mean the most...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-3287152199521050636</id><published>2009-11-10T18:00:00.086-06:00</published><updated>2009-11-11T00:33:05.090-06:00</updated><title type='text'>Cookbooks and Recipes: Men, Women, and Programming...</title><content type='html'>Disclaimer:  I think that everyone who chooses to be a programmer has to be (at least) a little bit crazy - whether male or female.  But I think we are missing out by not having more female programmers - so if you are female and so inclined then I at least would welcome you.  Also, I have a strange sense of humor.&lt;br /&gt;&lt;br /&gt;So... Now that we've settled that...&lt;br /&gt;&lt;br /&gt;I got to listen to Kirrily Robert speak at ApacheCon last week.  She gave a keynote about women in open source and technology&lt;em&gt;&lt;/em&gt; called 'Standing Out In the Crowd'.  And it struck me that there are numerous books on programming that include the words 'cookbook' or 'recipe' in their titles.&lt;br /&gt;&lt;br /&gt;Now, I love to cook - so I don't mean to imply that cooking is in any way a 'womanly' pursuit or task.  But, there are many that think of it that way.&lt;br /&gt;&lt;br /&gt;Anyway - one of the ideas that are presented as justification for the fact that there are few females in programming is that somehow the 'pink brain' is not suited to mathematics.&lt;br /&gt;&lt;br /&gt;I will not even bother arguing whether or not this is true (Kirrily cited a study that determined that there was a &lt;u&gt;slight&lt;/u&gt; difference).  Regardless of any difference that may exist - it does not matter.  I have been a programmer for over two decades and with the exception of a very small number of projects - there has been very very little math that was involved.&lt;br /&gt;&lt;br /&gt;What is involved (as far as I am concerned) is understanding a problem and then &lt;u&gt;teaching&lt;/u&gt; a computer to go through the steps to solve it.&lt;br /&gt;&lt;br /&gt;So, how good a programmer you are is determined by:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;How well you can wrap your head around a problem.&lt;/li&gt;&lt;li&gt;How well you can learn a particular language's syntax.&lt;/li&gt;&lt;li&gt;How well you can break the solution of the problem into a sequence of steps.&lt;/li&gt;&lt;li&gt;How well you can codify those steps in the language's syntax.&lt;/li&gt;&lt;/ol&gt;Most of the time, not much math.&lt;br /&gt;&lt;br /&gt;Some languages may lend themselves to solving particular types of problems better or more 'elegantly'.  But I have never heard of a language (human or computer) that is somehow easier to learn based on which gender you are.&lt;br /&gt;&lt;br /&gt;Sometimes, boolean algebra can be used to make solutions 'prettier'.  But most of the programmers that I have worked with never studied boolean algebra - male or female.&lt;br /&gt;&lt;br /&gt;Hopefully, math will stop being used as justification for saying or thinking that 'women can't program'.  And instead, the idea that programming is really &lt;i&gt;teaching&lt;/i&gt; gains more mindshare.&lt;br /&gt;&lt;br /&gt;Not every person who decides to be a programmer is cut out for it.  There is a certain amount of insanity necessary to be good at it because you are effectively trying to teach a machine to solve a problem by describing the solution in a language that is not natural for you -or- the computer.  And the computer is not going to go out of it's way to bridge that gap.  That is &lt;u&gt;all&lt;/u&gt; up to you!&lt;br /&gt;&lt;br /&gt;There is nothing that I can see that makes males more suited to programming than females.  And empathy (seeing a situation from the point of view of the other 'person') is often thought of as being a trait that is stronger in females.  So, if there is a natural advantage held by anyone - it might be by women.&lt;br /&gt;&lt;br /&gt;So, if you have an interest in foreign languages and in teaching completely empty-headed students who will force to you explain &lt;u&gt;every single step&lt;/u&gt; in excruciating detail - then programming might be for you.&lt;br /&gt;&lt;br /&gt;There may be a very good reason why there aren't more female programmers.&lt;br /&gt;&lt;br /&gt;They are smarter than us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-3287152199521050636?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/3287152199521050636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=3287152199521050636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/3287152199521050636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/3287152199521050636'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/11/cookbooks-and-recipes-men-women-and.html' title='Cookbooks and Recipes: Men, Women, and Programming...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-753457007233036586</id><published>2009-11-03T18:58:00.000-06:00</published><updated>2009-11-03T18:58:59.160-06:00</updated><title type='text'>Goin back to Cali...</title><content type='html'>I am in California.&lt;br /&gt;&lt;br /&gt;This is the second time that I have been in this state.&lt;br /&gt;&lt;br /&gt;The first time was over fifteen years ago.&amp;nbsp; And I was here to see how a software company was planning on translating their product from a character based program that ran from a command line in either DOS or _nix - to a windows program.&lt;br /&gt;&lt;br /&gt;They were going to try to use a program to translate a BASIC language system to Visual Basic.&amp;nbsp; But the program required a person to make sure that the individual programs were written according to a set of programming standards.&lt;br /&gt;&lt;br /&gt;They almost never were - so they ended up doing a substantial rewrite and forced those that had written customizations to write them all over again.&lt;br /&gt;&lt;br /&gt;This time, I get to attend the 10th anniversary ApacheCon.&lt;br /&gt;&lt;br /&gt;Over the past ten years, the Apache foundation has grown from a small group of people who forked the code from the NCSA web server - to an international group of programmers and users who develop and use a growing set of software projects (currently more than 60 and growing).&lt;br /&gt;&lt;br /&gt;About three years ago, my day job gave me the opportunity to develop a substantial new system that would eventually replace a number of scattered information systems that spanned spreadsheets and flat file databases.&amp;nbsp; It would also integrate that information with the company's accounting system.&lt;br /&gt;&lt;br /&gt;In trying to figure out the best platform for developing this new system I stumbled onto WebSphere community edition (WASCE) and through it - Apache Geronimo.&lt;br /&gt;&lt;br /&gt;I was hooked.&amp;nbsp; Here was an environment to develop for that was scalable, standards based, open source, fast, ... everything I could hope for.&lt;br /&gt;&lt;br /&gt;Through Geronimo - I found a number of other projects that are integrated by Geronimo.&amp;nbsp; And each of them was the same - open communities that seek feedback and encourage participation.&lt;br /&gt;&lt;br /&gt;I do not know how many people are reading this.&amp;nbsp; Or how many of you are involved in software development.&amp;nbsp; But it is an amazing thing to find people spread out across the whole world who are passionate enough to give away their time and energy developing and/or supporting software.&lt;br /&gt;&lt;br /&gt;Last time in California turned out to be a moderately interesting waste of time.&lt;br /&gt;&lt;br /&gt;This time, nothing has really started yet - and I am already excited to get to be a part of something so bold and (at least in my experience) unique.&lt;br /&gt;&lt;br /&gt;This is, in a word...&lt;br /&gt;&lt;br /&gt;Awesome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-753457007233036586?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/753457007233036586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=753457007233036586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/753457007233036586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/753457007233036586'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/11/goin-back-to-cali.html' title='Goin back to Cali...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-3137864159405621798</id><published>2009-10-07T19:00:00.074-05:00</published><updated>2009-10-07T19:00:01.482-05:00</updated><title type='text'>OSGi (or - late to the party again)...</title><content type='html'>Just when I thought that I might have been getting in on the beginning of 'the next big thing' - I find out that I am actually ten years (years?) late.&lt;br /&gt;&lt;br /&gt;Recently the Apache foundation accepted a new podling into the Incubator called Aries.&lt;br /&gt;&lt;br /&gt;If you are unfamiliar with the 'Incubator' and/or 'podlings' - take a look at this page on the Apache website:&amp;nbsp; http://incubator.apache.org/&lt;br /&gt;&lt;br /&gt;Anyway, the Aries project seeks to develop the bridge between OSGi and Java EE.&lt;br /&gt;&lt;br /&gt;I have come to really like the way that Java EE makes separating the front end development from back end processing.&amp;nbsp; And since OSGi seems to be the way that much of the Java world is going - I'm trying to get in on the ground floor with Aries.&lt;br /&gt;&lt;br /&gt;But, the 'ground floor' is pretty high.&amp;nbsp; OSGi has been around for ten years now.&amp;nbsp; And so there is quite a lot of 'assumed knowledge' that goes along with it.&amp;nbsp; Also, the actual specifications for Java EE in OSGi are still being written and are not expected to be finished until the beginning of 2010.&amp;nbsp; Aries hopes to help in fleshing out those specs as well as providing an implementation of them.&lt;br /&gt;&lt;br /&gt;Well, I should get back to reading the specs that have been written.&amp;nbsp; They are only 516 pages long (ack!).&lt;br /&gt;&lt;br /&gt;So far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-3137864159405621798?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/3137864159405621798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=3137864159405621798' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/3137864159405621798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/3137864159405621798'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/10/osgi-or-late-to-party-again.html' title='OSGi (or - late to the party again)...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-2158521766315315530</id><published>2009-08-08T16:45:00.000-05:00</published><updated>2009-08-08T16:45:18.495-05:00</updated><title type='text'>Excuses...</title><content type='html'>It is very easy to have being 'too busy' become the reason for everything that you don't get around to doing.&lt;br /&gt;&lt;br /&gt;But, I suspect (and very much hope) that getting more organized will help.&lt;br /&gt;&lt;br /&gt;I recently tried to put together a todo list and managed to get half a page of software fixes that I needed to do (almost certainly an incomplete list) onto the list along with 'make complete todo list' and 'enter todo list into some kind of software to keep track of it'.&lt;br /&gt;&lt;br /&gt;I didn't get much farther than that because I thought that the only way that tracking my list would only make sense if I had a mobile device of some kind that would allow my to access the list when I was away from my computer.&amp;nbsp; And right now my phone is decidedly 'not smart'.&amp;nbsp; Which is fine for my phone - all I do with it is make and receive calls.&lt;br /&gt;&lt;br /&gt;But, it is not good for me - because that basically ended my quest for becoming organized.&lt;br /&gt;&lt;br /&gt;So, this past week I have begun 'Organization Attempt 2.0'.&lt;br /&gt;&lt;br /&gt;Rather than putting the list of software issues onto a piece of paper - I finally got around to entering all of them into the issue tracker that I installed over a year ago to just that.&amp;nbsp; I had been entering them as someone became available to work on them (which makes any kind of planning rather difficult).&amp;nbsp; I probably missed some (or lots) of issues.&amp;nbsp; But it is a start.&amp;nbsp; And as long as I can keep the list updated as I remember them (or they raise their ugly heads) - then I will be freeing up a big block of mental space for more useful purposes.&lt;br /&gt;&lt;br /&gt;I am still wrestling with the idea that I need a mobile device to carry around a digital version of the rest of my todo list.&amp;nbsp; I still have several months left on my mobile phone contract and my provider does not sell the smartphone that I would want to get.&amp;nbsp; Getting out of my contract is not particularly cheap (over a hundred dollars) and I do not want to settle for one of the phones that they do have.&lt;br /&gt;&lt;br /&gt;I want to get rid of that excuse though.&lt;br /&gt;&lt;br /&gt;I'm tired of being overwhelmed all of the time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-2158521766315315530?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/2158521766315315530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=2158521766315315530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2158521766315315530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2158521766315315530'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/08/excuses.html' title='Excuses...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-8814245697630242687</id><published>2009-07-21T23:37:00.000-05:00</published><updated>2009-07-21T23:37:20.752-05:00</updated><title type='text'>See my pretty hammer...</title><content type='html'>It happened again.&lt;br /&gt;&lt;br /&gt;I learned about a feature in OpenJPA that allows you to specify the fetch behavior exactly as you need it - fetch groups.&lt;br /&gt;&lt;br /&gt;And, they are awesome.&amp;nbsp; My opinion doesn't carry much weight - but if it did, then fetch groups would be part of the JPA spec.&lt;br /&gt;&lt;br /&gt;But like every tool - they should only be used when it is appropriate.&lt;br /&gt;&lt;br /&gt;One reason that they should be used only as really needed is that in Apache Geronimo, casting a regular EntityManager to an OpenJPAEntityManager causes a new transaction to be started.&lt;br /&gt;&lt;br /&gt;In itself that isn't necessarily so bad, but it does begin to clutter things if you use them excessively.&amp;nbsp; And, that is exactly what I did.&lt;br /&gt;&lt;br /&gt;I took my shiny new hammer and started whacking everything.&lt;br /&gt;&lt;br /&gt;Including my thumb.&lt;br /&gt;&lt;br /&gt;Ouch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-8814245697630242687?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/8814245697630242687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=8814245697630242687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8814245697630242687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8814245697630242687'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/07/see-my-pretty-hammer.html' title='See my pretty hammer...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-2961843322083379360</id><published>2009-07-14T20:01:00.001-05:00</published><updated>2009-07-14T20:12:59.618-05:00</updated><title type='text'>I wonder if this box is too small...</title><content type='html'>I am starting to think that I will need to take another look at the database that I am using.&lt;br /&gt;&lt;br /&gt;Up until now, I have been using MySQL because it is free and many (many, many,...) web sites use it for their database back end.&lt;br /&gt;&lt;br /&gt;But I seem to be testing its limits - at least on the hardware I'm running it on.&lt;br /&gt;&lt;br /&gt;I have been steadily growing a Java app (JEE5) using Apache OpenJPA to connect to the database.&lt;br /&gt;&lt;br /&gt;When I first started, the EJB3 and JPA were still in development.&amp;nbsp; EJB2 was too complicated for the benefit that I thought that I would get so I 'faked it' and created my own psuedo EJB app using: JDBC, servlets, servlets pretending to be EJBs, and POJOs.&lt;br /&gt;&lt;br /&gt;The database performance was fairly bad because I have -severely- interlinked data model.&amp;nbsp; So getting the data to display anything typically involves at least 8 tables linked heavily and repeatidly.&lt;br /&gt;&lt;br /&gt;Here is a try at describing something similar to my structure.&amp;nbsp; If you want a headache, try drawing out the relationship diagram.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Master entity (1 -&amp;gt; M) Component&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Master entity (1 -&amp;gt; 1) Category&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt; Master entity (1 -&amp;gt; 1) Sub-Category&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Master entity (1 -&amp;gt; 1) Sub-Sub-Category&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Master entity (1 -&amp;gt; 1) Creator (User)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Master entity (1 -&amp;gt; 1) Owner (User)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Category (1 -&amp;gt; M) Sub-Category&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Sub-Category (1 -&amp;gt; M) Sub-Sub-Category&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;User (1 -&amp;gt; 1) Department&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Component (1 -&amp;gt; 1) Component Class&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Component (1 -&amp;gt; M) Component Attribute&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Component Class (1 -&amp;gt; M) Class Attribute&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Class Attribute (1 -&amp;gt; M) Attribute Value (list of possible)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Component Attribute (1 -&amp;gt; 1) Attribute&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Component Attribute (1 -&amp;gt; 1) Value&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Attribute (1 -&amp;gt; M) Attribute Value (list of possible)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;JPA rescued me.&amp;nbsp; Just changing my data access to use JPA increased the performance of my app about ten-fold.&amp;nbsp; And, it simplified my code - I was in love.&lt;br /&gt;&lt;br /&gt;Later EJB3 session beans took the place of my fake EJBs (servlets).&amp;nbsp; And I was in love again.&lt;br /&gt;&lt;br /&gt;But now, I have millions of rows in over a hundred tables.&amp;nbsp; Linked together in ways that I could probably not even write JDBC to access anymore.&amp;nbsp; And the data is stored in MySQL.&lt;br /&gt;&lt;br /&gt;Don't get me wrong - I really do like MySQL.&amp;nbsp; It has been good to me.&lt;br /&gt;&lt;br /&gt;But my database with data and indexes is approaching three gig.&amp;nbsp; As in three billion bytes - and MySQL is starting to have some trouble.&lt;br /&gt;&lt;br /&gt;So I think I might need to stray.&lt;br /&gt;&lt;br /&gt;Breaking up is hard to do though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-2961843322083379360?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/2961843322083379360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=2961843322083379360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2961843322083379360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2961843322083379360'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/07/i-wonder-if-this-box-is-too-small.html' title='I wonder if this box is too small...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-3367721898704656447</id><published>2009-07-09T00:26:00.000-05:00</published><updated>2009-07-09T00:26:57.654-05:00</updated><title type='text'>Wouldn't you know...</title><content type='html'>Well, I'm trying to move forward with using/learning Groovy.&lt;br /&gt;&lt;br /&gt;But, I need to use it with JPA and EJB3 session beans.&lt;br /&gt;&lt;br /&gt;In case you were wondering...&amp;nbsp; There aren't any good ('realistic') examples of how to do this.&amp;nbsp; At least not that I was able to find on the web.&lt;br /&gt;&lt;br /&gt;It may be, that there are books that demonstrate how to use them - I don't know yet.&lt;br /&gt;&lt;br /&gt;So, instead of being able to jump in and run -&lt;br /&gt;&lt;br /&gt;Baby steps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-3367721898704656447?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/3367721898704656447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=3367721898704656447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/3367721898704656447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/3367721898704656447'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/07/wouldnt-you-know.html' title='Wouldn&apos;t you know...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-5350890026815095184</id><published>2009-07-08T00:17:00.000-05:00</published><updated>2009-07-08T00:17:27.035-05:00</updated><title type='text'>'Scuse me while I whip this out...</title><content type='html'>I think that the biggest problem with learning about a new programming language or tool is:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;While you are holding your new 'hammer',&lt;/div&gt;&lt;div style="text-align: center;"&gt;everything looks like a nail.&lt;/div&gt;&lt;br /&gt;And you need to learn what the real cases are that the new tool is actually is the right one for the job.&lt;br /&gt;&lt;br /&gt;Otherwise, you end up writing lots of bad code trying to shoehorn an inappropriate method into a place it does not belong.&lt;br /&gt;&lt;br /&gt;For me, there is a second problem that I sometimes have trouble overcoming.&amp;nbsp; And that is when I already have a solution (possibly a very ugly one) that should have used this new method that I just learned.&amp;nbsp; In this case, it is scary to break something that works just to do it the 'right' way.&lt;br /&gt;&lt;br /&gt;There have been some resounding successes for me recently.&lt;br /&gt;&lt;br /&gt;Trading JDBC data access for JPA - Amazing improvement in code understandability and speed.&lt;br /&gt;&lt;br /&gt;Trading 'thick' servlets that included large chunks of functionality that really belonged in EJBs for EJBs - Tremendous increase in code resuse and automatic transaction support inherited from the EJB container.&lt;br /&gt;&lt;br /&gt;Not every experiment panned out though.&amp;nbsp; I used a message driven bean to perform a cleanup process asynchronously that really needed to stay synchronous (I still haven't cleaned all of the mess up from that).&lt;br /&gt;&lt;br /&gt;So, now - as I try to learn Scala and Groovy (I can't seem to limit myself to one language at a time) it is hard to find when and how to apply them.&lt;br /&gt;&lt;br /&gt;Oh well.&lt;br /&gt;&lt;br /&gt;If it was easy...&lt;br /&gt;&lt;br /&gt;Everyone would do it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-5350890026815095184?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/5350890026815095184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=5350890026815095184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/5350890026815095184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/5350890026815095184'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/07/scuse-me-while-i-whip-this-out.html' title='&apos;Scuse me while I whip this out...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-8463326688524461820</id><published>2009-07-07T19:00:00.052-05:00</published><updated>2009-07-07T19:00:02.242-05:00</updated><title type='text'>Focus...</title><content type='html'>That is something that I have a combination of far too much and far too little of.&lt;br /&gt;&lt;br /&gt;When I am working on something - I can do so completely ignoring just about everything else (fatigue, hunger, distracting noises, etc).&lt;br /&gt;&lt;br /&gt;But, there are &lt;u&gt;way&lt;/u&gt; too many things that I want/need to learn.&amp;nbsp; Particularly with computer technology (and languages).&lt;br /&gt;&lt;br /&gt;And, since any one would take at least a few months to figure out whether I really want to learn it (and the fact that there are only twenty-four hours in a day) - how could I pick just one at a time?&lt;br /&gt;&lt;br /&gt;I should though.&amp;nbsp; And I know that I should.&lt;br /&gt;&lt;br /&gt;Because instead of already having a decent start on Drupal - I have managed to taste:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Drupal&lt;/li&gt;&lt;li&gt;Ruby (very small taste)&lt;/li&gt;&lt;li&gt;Scala&lt;/li&gt;&lt;li&gt;Groovy&lt;/li&gt;&lt;li&gt;etc&lt;/li&gt;&lt;/ul&gt;But I cannot do anything useful in any of them.&lt;br /&gt;&lt;br /&gt;So - I have to pick one.&lt;br /&gt;&lt;br /&gt;And focus on it.&lt;br /&gt;&lt;br /&gt;Everything else will have to just go on my todo list.&lt;br /&gt;&lt;br /&gt;Where did I put that thing?&lt;br /&gt;&lt;br /&gt;And which one comes first?&lt;br /&gt;&lt;br /&gt;Scala and Groovy would probably be most useful for work...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Argh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-8463326688524461820?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/8463326688524461820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=8463326688524461820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8463326688524461820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8463326688524461820'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/07/focus.html' title='Focus...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-995787179967939003</id><published>2009-06-29T17:17:00.000-05:00</published><updated>2009-06-29T17:17:33.182-05:00</updated><title type='text'>In case you were wondering...</title><content type='html'>Well, I managed to put together a todo list.&lt;br /&gt;&lt;br /&gt;It is several pages long.&amp;nbsp; And, I have almost certainly missed half of the things that I need to do.&lt;br /&gt;&lt;br /&gt;But, it is a start.&amp;nbsp; I still need to find some single place to keep/update it.&lt;br /&gt;&lt;br /&gt;Until now, I have kept several concurrent todo lists.&amp;nbsp; One (at least) in my head and several on paper that I usually misplace before finishing everything on them.&lt;br /&gt;&lt;br /&gt;One thing that I was on my list as a recurring task was updating this blog: Once a week - on Tuesdays.&lt;br /&gt;&lt;br /&gt;I missed out on last week - partly because I was trying to more completely list out the rest of my todo list and partly because I had a thousand other things to do (some on the list and many that slipped through the cracks).&lt;br /&gt;&lt;br /&gt;So, I am going to try try to cut myself a little slack and allow myself to make that Tuesday post anytime before the next Tuesday.&amp;nbsp; This is the first such 'late but not missed' post.&lt;br /&gt;&lt;br /&gt;Hopefully, there will be more tomorrow (Tuesday).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But, I guess we'll see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-995787179967939003?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/995787179967939003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=995787179967939003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/995787179967939003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/995787179967939003'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/06/in-case-you-were-wondering.html' title='In case you were wondering...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-2911303146534541587</id><published>2009-06-18T17:45:00.000-05:00</published><updated>2009-06-18T17:45:03.561-05:00</updated><title type='text'>The first step...</title><content type='html'>The first step to really getting organized is to figure out everything that you need to do.&lt;br /&gt;&lt;br /&gt;The second step is to order the list in terms of what should be done first, second, etc.&lt;br /&gt;&lt;br /&gt;Unfortunately, the first step to becoming totally overwhelmed with what you need to do is the same as the first step to getting organized.&lt;br /&gt;&lt;br /&gt;A todo list is supposed to have an end, right?&lt;br /&gt;&lt;br /&gt;It will be nice when I find it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-2911303146534541587?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/2911303146534541587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=2911303146534541587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2911303146534541587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2911303146534541587'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/06/first-step.html' title='The first step...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-1914543926098843838</id><published>2009-06-16T19:03:00.002-05:00</published><updated>2009-06-16T19:12:00.892-05:00</updated><title type='text'>Drupal simmering...</title><content type='html'>I had hoped that I would be able to spend a good chunk of time learning how Drupal works and building something useful with it.&lt;br /&gt;&lt;br /&gt;But, real life got in the way - so that has not happened (yet).&lt;br /&gt;&lt;br /&gt;And, the reason for that is probably that on my todo list, everything has a priority of 'Should be done Yesterday!'&lt;br /&gt;&lt;br /&gt;I think I will try to get my list to have a little more structure.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is going to be interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-1914543926098843838?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/1914543926098843838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=1914543926098843838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/1914543926098843838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/1914543926098843838'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/06/drupal-simmering.html' title='Drupal simmering...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-6893350289079224074</id><published>2009-04-30T00:59:00.002-05:00</published><updated>2009-04-30T01:05:30.881-05:00</updated><title type='text'>Handing over the keys...</title><content type='html'>I'm generally not a fan of systems where the computer tries to figure out what you 'really want to do'.&lt;br /&gt;&lt;br /&gt;But, I have gotten to a point in my life where I might be open to the idea that it is possible for a development environment to guess correctly.&lt;br /&gt;&lt;br /&gt;And so, I am beginning to try out Drupal.&lt;br /&gt;&lt;br /&gt;If things work out, then it will make my development of sites easier (I'll still hand code my web -apps- at least for the time being).&lt;br /&gt;&lt;br /&gt;Taking a deep breath....&lt;br /&gt;&lt;br /&gt;And off we go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-6893350289079224074?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/6893350289079224074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=6893350289079224074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/6893350289079224074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/6893350289079224074'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/04/handing-over-keys.html' title='Handing over the keys...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-2406184756525098798</id><published>2009-04-30T00:52:00.002-05:00</published><updated>2009-04-30T00:59:11.776-05:00</updated><title type='text'>Doc, it hurts when I...</title><content type='html'>Normally, I would say that if something hurts - you should stop doing it.&lt;br /&gt;&lt;br /&gt;But, I didn't know how badly I was hurting myself when I created multiple versions of all of my JPA entities depending on the depth of data that I wanted to have fetched.&lt;br /&gt;&lt;br /&gt;So, fixing my app to use FetchGroups (an OpenJPA feature) to do what I had hacked together has been (and still) is a fairly painful process.&lt;br /&gt;&lt;br /&gt;I first have to find each place that needs to have a custom fetch group defined and then add to the fetch group until it contains everything that I need.&lt;br /&gt;&lt;br /&gt;Once I have it set up correctly though...It is a beautiful thing.&lt;br /&gt;&lt;br /&gt;Fast, clean, and obvious what is going on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-2406184756525098798?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/2406184756525098798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=2406184756525098798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2406184756525098798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2406184756525098798'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/04/doc-it-hurts-when-i.html' title='Doc, it hurts when I...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-8607829251614306813</id><published>2009-04-02T00:04:00.002-05:00</published><updated>2009-04-02T00:38:11.462-05:00</updated><title type='text'>That was painful, but worth it...</title><content type='html'>Last week I found out about a feature that the OpenJPA folks put into their implementation of JPA.  But, it is not part of the standard.&lt;br /&gt;&lt;br /&gt;That feature is custom fetch plans - And, I think I can safely say that they are my newest favorite thing.&lt;br /&gt;&lt;br /&gt;The reason that these are exciting for me personally is that I use JPA to pull data from my back end database that is then converted to XML using JAXB and sent to a browser for processing/display.  If I were to transform a completely populated 'top-level' entity, then I would be creating an XML document that could be several Mb.&lt;br /&gt;&lt;br /&gt;Over the past year, JavaScript engines have gotten faster - and continue to do so.  But, trying to make JavaScript parse and manipulate blocks of XML data that are that big is not a nice thing to do to the browser (or the user).&lt;br /&gt;&lt;br /&gt;Until this past week, I thought that I would need to create tailored versions of my JPA entities in order to send back just the part of the XML that I actually needed.  Then, I found out about (Cue choir of angels) dynamic fetch plans.&lt;br /&gt;&lt;br /&gt;What dynamic fetch plans do is allow you to specify which fields and relations are eagerly fetched at the time that you execute the query.  That may not sound particularly earth shattering - but give it time to sink in.&lt;br /&gt;&lt;br /&gt;You are able to specify down to the individual database column level exactly what will be pulled from the database (and/or specify the fetch depth).  When doing JAXB processing, this allows me (and you if you need it) to tailor the exact data that will be turned into XML.&lt;br /&gt;&lt;br /&gt;One poignant example of how this can clean up the XML sent to the browser is to send a list of top level entities for listing in a drop down.  The only data that really needs to be sent back is the entity key and description.  Without custom fetch groups, JAXB would try to build the entire fully populated entity tree for each entity.  The amount of data being sent back to the browser would be insane!  My previous solution of creating an array of JPA entity beans in order to define every possible grouping of desired fields was also insane.  I picked a middle ground of an overly populous graph that small enough/big enough for most uses and a sparse graph that would be super quick but only useful in one or two cases.&lt;br /&gt;&lt;br /&gt;Now, I have been able to remove all of the extra Entity beans.  I have simplified the definition of my entity relationships and removed the possibility of missing changes if I change the actual table structures.  Plus, I am able to exactly specify what I want to send back in each situation (anywhere from fully populated entities to single fields).&lt;br /&gt;&lt;br /&gt;I just wish I had known about them two years ago when I first started using OpenJPA.  It would have saved me a lot of refactoring and testing (at a time that I really can't afford to spend the time).  But I am glad that I managed to 'stumble onto' them.  I didn't really go looking for an EJB 3 entity manager - I just used the one that came with Geronimo.  If I had shopped around, I might not have given this the weight it deserves.&lt;br /&gt;&lt;br /&gt;And it is -huge-.  Not only can you pare down an overly generous eager fetch - you can also expand an excessively lazy fetch - at runtime with very little programming cost.&lt;br /&gt;&lt;br /&gt;By the way, the painful part is trying to undo two years worth of hacks to accomplish something that was included in OpenJPA - in five days.&lt;br /&gt;&lt;br /&gt;I think I used to sleep - didn't I?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-8607829251614306813?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/8607829251614306813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=8607829251614306813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8607829251614306813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8607829251614306813'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/04/that-was-painful-but-worth-it.html' title='That was painful, but worth it...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-4503826652509766961</id><published>2009-03-11T22:02:00.004-05:00</published><updated>2009-03-12T10:23:54.577-05:00</updated><title type='text'>Can we talk...</title><content type='html'>I get to spend a lot of my time (most of my time actually) working on web apps.&lt;br /&gt;&lt;br /&gt;Nowadays I use Geronimo for my server, Firefox for my browser, and Dojo for the two to talk to each other.&lt;br /&gt;&lt;br /&gt;Last time (actually, the time before that) I showed how I parse the XML that I am sending from the browser to the server.  But, I did not show how that XML gets created.&lt;br /&gt;&lt;br /&gt;Well, since I like to make things simple for myself, I wrote a couple of wrapper functions to abstract the Dojo functions so that I would not have to rewrite large blocks of code if the syntax changes in Dojo (which it has done since I started).  Also, having a single way to send messages to my server means that I can have a consistent way of parsing those messages.&lt;br /&gt;&lt;br /&gt;I broke the sending of messages into two parts:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Building the message&lt;/li&gt;&lt;li&gt;Sending the message and specifying the callback&lt;/li&gt;&lt;/ol&gt;And go figure, there is a JavaScript function (that I wrote) to do each of those things.&lt;br /&gt;&lt;br /&gt;For building the message, I created a function called 'queueCommand'.  The idea was that you could create several message queues that all needed to be sent to the same servlet (and whose output would be consumed by the same callback function).  I actually set up a number of functions and made it possible to build several message queues - but for simplicity, we'll pretend there is only one at a time.&lt;br /&gt;&lt;br /&gt;Here is queueCommand:&lt;br /&gt; function queueCommand(command) {&lt;br /&gt;     var commandXML = encapsulateCommand(command);&lt;br /&gt; &lt;br /&gt;     if (window.commandQueue === undefined) {&lt;br /&gt;         window.commandQueue = [];&lt;br /&gt;     }&lt;br /&gt;     &lt;br /&gt;     window.commandQueue[window.commandQueue.length] = commandXML;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;Pretty simple right?  Ooops!  You caught me.  There is a third method that I neglected to mention.  The encapsulateCommand function tries to remove characters that would cause the generated XML to be invalid as it puts together a simple (and standardized for my purposes) XML snippet.&lt;br /&gt;&lt;br /&gt;Here is encapsulateCommand (with a helper function):&lt;br /&gt; function encapsulateCommand(command) {&lt;br /&gt;     var nodes = "";&lt;br /&gt; &lt;br /&gt;     for (i in command) {&lt;br /&gt;         nodes += "&lt;" + i + "&gt;" + escapeString(command[i]) + "&lt;!--" + i + "--&gt;";&lt;br /&gt;     }&lt;br /&gt; &lt;br /&gt;     var commandXML = "&lt;command&gt;" + nodes + "&lt;/command&gt;";&lt;br /&gt; &lt;br /&gt;     return commandXML;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; function escapeString(inputData) {&lt;br /&gt;     var outputData = inputData;&lt;br /&gt;&lt;br /&gt;     if (typeof inputData == 'string') {&lt;br /&gt;         if (inputData != null &amp;amp;&amp;amp; inputData != "") {&lt;br /&gt;             outputData = inputData.replaceAll("&amp;amp; ", "&amp;amp; ");&lt;br /&gt;             outputData = outputData.replaceAll("&lt;", "&amp;lt;");                 outputData = outputData.replaceAll("&gt;", "&amp;gt;");&lt;br /&gt;             outputData = outputData.replaceAll("\"", """);&lt;br /&gt;             outputData = outputData.replaceAll("\\", "~1~");&lt;br /&gt;             outputData = outputData.replaceAll("%", "~2~");&lt;br /&gt;             outputData = outputData.replaceAll("\'", "~3~");&lt;br /&gt;             outputData = outputData.replaceAll("\n", "~4~");&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt; &lt;br /&gt;     return outputData;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;And here is an example of how you would call it:&lt;br /&gt; var pushCommand = queueCommand({&lt;br /&gt;     action: "doSomething",&lt;br /&gt;     fieldValue: dojo.byId('fieldID').value&lt;br /&gt; });&lt;br /&gt;&lt;br /&gt;I don't actually send back a return value.  But, I do capture the result in a variable because if something goes wrong - receiving the result into a variable prevents the error from stopping program execution.  If I were being more diligent, I would send back an actual result status (or maybe even the assembled command) - But I didn't do that.&lt;br /&gt;&lt;br /&gt;So, when the above command (var pushCommand = ...) is executed, the following XML snipped gets added to the queue (shown here 'pretty'):&lt;br /&gt;&lt;br /&gt;&amp;lt;command&amp;gt;&lt;br /&gt;&lt;command&gt;&amp;lt;action&amp;gt;&lt;action&gt;doSomething&lt;/action&gt;&amp;lt;/action&amp;gt;&lt;br /&gt; &lt;fieldvalue&gt;&amp;lt;fieldValue&amp;gt;SomeValue&lt;/fieldvalue&gt;&amp;lt;/fieldValue&amp;gt;&lt;br /&gt;&lt;/command&gt;&amp;lt;/command&amp;gt;&lt;br /&gt;&lt;br /&gt;The pushQueue function bundles up all of the commands that have been placed into the queue inside of a proper XML header and a &lt;commands&gt;&lt;/commands&gt; 'envelope'.&lt;br /&gt;&lt;br /&gt;Here is pushQueue:&lt;br /&gt; function pushQueue(url, onLoad) {&lt;br /&gt;     var queue = window.commandQueue;&lt;br /&gt;&lt;br /&gt;     if (queue == undefined) {&lt;br /&gt;         window.commandQueue = [];&lt;br /&gt;         queue = window.commandQueue;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     var xmlDoc = "";&lt;br /&gt; &lt;br /&gt;     xmlDoc += "";&lt;br /&gt;     xmlDoc += "&lt;commands&gt;";&lt;br /&gt; &lt;br /&gt;     for (var i = 0; i &lt;&gt;";&lt;br /&gt;&lt;br /&gt;     window.commandQueue = [];&lt;br /&gt;  &lt;br /&gt;     var parser = new DOMParser();&lt;br /&gt; &lt;br /&gt;     var xmlDocument = parser.parseFromString(xmlDoc, "text/xml");&lt;br /&gt; &lt;br /&gt;     var ajax = dojo.rawXhrPost({&lt;br /&gt;         url: url,&lt;br /&gt;         postData: xmlDocument,&lt;br /&gt;         load: onLoad,&lt;br /&gt;         headers: {&lt;br /&gt;             "Content-Type": "application/xml"&lt;br /&gt;         },&lt;br /&gt;         handleAs: "xml"&lt;br /&gt;     });&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;You would call pushQueue with the URL of the servlet (or whatever resource is going to handle the message) and the callback function that should get the result.&lt;br /&gt;&lt;br /&gt;Here is an example of calling pushQueue:&lt;br /&gt; var sendTheMessage = pushQueue("/Handler", callBackFunction);&lt;br /&gt;&lt;br /&gt;After that call, Dojo would send the following XML document to '/Handler':&lt;br /&gt;&lt;br /&gt;&lt;/commands&gt;&amp;lt;?xml version='1.0' encoding='utf-8' ?&amp;gt;&lt;br /&gt;&lt;commands&gt;&amp;lt;commands&amp;gt;&lt;commands&gt;&lt;br /&gt; &lt;command&gt;&amp;lt;command&amp;gt;&lt;br /&gt;     &lt;action&gt;&amp;lt;action&amp;gt;doSomething&lt;/action&gt;&amp;lt;/action&amp;gt;&lt;br /&gt;     &lt;fieldvalue&gt;&amp;lt;fieldValue&amp;gt;SomeValue&lt;/fieldvalue&gt;&amp;lt;/fieldValue&amp;gt;&lt;br /&gt; &lt;/command&gt;&amp;lt;command&amp;gt;&lt;br /&gt;&lt;/commands&gt;&amp;lt;commands&amp;gt;&lt;br /&gt;&lt;br /&gt;Now, just in case you were wondering, there is nothing special about the 'command' and 'commands' tags that I used.  They are really entirely arbitrary, but they make sense for what I am sending (a list of commands, each or which is a command).&lt;br /&gt;&lt;br /&gt;And, when the result is sent back from 'Handler', it will send the result to my JavaScript function called 'callBackFunction'.&lt;br /&gt;&lt;br /&gt;So, with a couple of functions placed in a JavaScript file that is included on all of my pages, I am able to have a standard way of sending messages to my server.  And because the format of the messages is the same every time, I can use the same XML parsing code (shown on a previous post) to extract the information.&lt;/commands&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-4503826652509766961?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/4503826652509766961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=4503826652509766961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4503826652509766961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4503826652509766961'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/03/can-we-talk.html' title='Can we talk...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-6539413455210470968</id><published>2009-03-11T21:59:00.002-05:00</published><updated>2009-03-11T22:02:07.332-05:00</updated><title type='text'>Days go by...</title><content type='html'>It doesn't seem like it has been over a month since the last time I posted.&lt;br /&gt;&lt;br /&gt;But, the fact is that it has been (ack!).&lt;br /&gt;&lt;br /&gt;So, back to the grindstone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-6539413455210470968?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/6539413455210470968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=6539413455210470968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/6539413455210470968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/6539413455210470968'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/03/days-go-by.html' title='Days go by...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-231320346772686776</id><published>2009-01-30T21:53:00.002-06:00</published><updated>2009-01-30T22:12:16.234-06:00</updated><title type='text'>Goodbye to the old...</title><content type='html'>When I first started using Geronimo (the Apache JEE server), it was on version 'point something'.  And, I needed to parse XML messages being sent from a browser to servlets.&lt;br /&gt;&lt;br /&gt;So, I used JDOM.  It was fairly simple to use and the JDOM libraries were included with Geronimo.&lt;br /&gt;&lt;br /&gt;That made things very simple.  All I needed to do to parse the XML messages was put something like this in the doPost method:&lt;br /&gt;&lt;snip&gt;&lt;br /&gt;        Reader reader = request.getReader();&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            SAXBuilder builder = new SAXBuilder(false);&lt;br /&gt;            Document doc = builder.build(reader);&lt;br /&gt;            Element root = doc.getRootElement();&lt;br /&gt;&lt;/snip&gt;&lt;br /&gt;&lt;br /&gt;Then, to get values out of the document, I wrote a number of wrapper functions like getString, getLong, getX - to convert the values in the XML document into something useful (something other than strings).&lt;br /&gt;&lt;br /&gt;But, when Geronimo went from version 1.x to 2.x, they dropped the JDOM library from the assembly - And I started to have to include it myself.&lt;br /&gt;&lt;br /&gt;Recently, I finally got tired of having to add the library myself and started to look for alternatives to using JDOM.&lt;br /&gt;&lt;br /&gt;Enter W3C...&lt;br /&gt;&lt;br /&gt;So, now I get to change a bunch of servlets from the code above to this new version:&lt;br /&gt;&lt;br /&gt;        Document document = getXML(request, dbf);&lt;br /&gt;&lt;br /&gt;Ok, so that wasn't quite all that I did.  That 'getXML' function isn't included with the W3C's DOM classes.  I had to write it myself.  And, here it is:&lt;br /&gt;&lt;br /&gt;    protected Document getXML(HttpServletRequest request, DocumentBuilderFactory dbf) {&lt;br /&gt;        Document document = null;&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            DocumentBuilder db = dbf.newDocumentBuilder();&lt;br /&gt;&lt;br /&gt;            BufferedReader in = request.getReader();&lt;br /&gt;&lt;br /&gt;            String input = "";&lt;br /&gt;            String xmlText = "";&lt;br /&gt;&lt;br /&gt;            while((input = in.readLine()) != null) {&lt;br /&gt;                xmlText = xmlText + input;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            System.out.println("Received: " + xmlText);&lt;br /&gt;&lt;br /&gt;            InputSource source = new InputSource();&lt;br /&gt;            source.setCharacterStream(new StringReader(xmlText));&lt;br /&gt;&lt;br /&gt;            document = db.parse(source);&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            System.out.println("Exception: " + e.getMessage());&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return document;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;Now, that is much bigger (as far as lines of code) than the old way.  But, by putting it into a function - you can't tell.  And, once I am done with all of the change over, I will be able to get rid of that extra JDOM dependency.&lt;br /&gt;&lt;br /&gt;Plus, along with finding how to change over to use the W3C's DOM, I also found the XPath libraries.  So, I was able to change all of my XML to use real, properly formed documents.  What I had been doing before was storing all of the real information in attributes of a single element.&lt;br /&gt;&lt;br /&gt;Bonus!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-231320346772686776?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/231320346772686776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=231320346772686776' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/231320346772686776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/231320346772686776'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/01/goodbye-to-old.html' title='Goodbye to the old...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-4085815563914740832</id><published>2009-01-30T17:58:00.002-06:00</published><updated>2009-01-30T18:04:37.494-06:00</updated><title type='text'>Take a deep breath...</title><content type='html'>Well - I have been slowly trying to get myself accustomed to the idea of social networking over the internet.&lt;br /&gt;&lt;br /&gt;This blog was my first tentative step.&lt;br /&gt;&lt;br /&gt;Then, I let myself get a twitter account - I don't plan on posting anything just yet.  That may change.&lt;br /&gt;&lt;br /&gt;But, I finally got around to reading other people's blogs.&lt;br /&gt;&lt;br /&gt;And I realized something.&lt;br /&gt;&lt;br /&gt;I have a long way to go to get my blog to be what I want it to be.&lt;br /&gt;&lt;br /&gt;So hopefully this is a changing point.  I hope that from now on, this will become a blog that someone else would actually follow.&lt;br /&gt;&lt;br /&gt;Wish me luck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-4085815563914740832?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/4085815563914740832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=4085815563914740832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4085815563914740832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4085815563914740832'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/01/take-deep-breath.html' title='Take a deep breath...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-4242684760048056146</id><published>2009-01-28T22:50:00.002-06:00</published><updated>2009-01-28T23:10:49.234-06:00</updated><title type='text'>Tools holding you back...</title><content type='html'>I have gotten too used to working with tools and skipped over learning how to build java artifacts by hand.&lt;br /&gt;And now, I am starting from scratch on my new project.&lt;br /&gt;&lt;br /&gt;Which isn't such a big deal.  Using Eclipse, I started creating my WAR file - no problem.&lt;br /&gt;&lt;br /&gt;But, I want to use Maven to manage the project parts.  Including creating the database pools.&lt;br /&gt;&lt;br /&gt;So, I finally -have- to learn how to use Maven my self.&lt;br /&gt;&lt;br /&gt;Yay!&lt;br /&gt;&lt;br /&gt;(No, really - Yay.  Seriously).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-4242684760048056146?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/4242684760048056146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=4242684760048056146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4242684760048056146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4242684760048056146'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/01/tools-holding-you-back.html' title='Tools holding you back...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-6311527266133589714</id><published>2009-01-26T22:28:00.003-06:00</published><updated>2009-01-26T22:42:58.793-06:00</updated><title type='text'>Wait, I think I saw it move...</title><content type='html'>There actually has been (a very small) step forward.&lt;br /&gt;&lt;br /&gt;I have one web service and one entity written.&lt;br /&gt;&lt;br /&gt;(One down and how many to go?)&lt;br /&gt;&lt;br /&gt;Now I have to put it into a maven project and start setting up unit testing.&lt;br /&gt;&lt;br /&gt;And then write the rest of the General Ledger.&lt;br /&gt;&lt;br /&gt;Piece of cake.&lt;br /&gt;&lt;br /&gt;(Maybe pie - pie is a little trickier to make than cake).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-6311527266133589714?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/6311527266133589714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=6311527266133589714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/6311527266133589714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/6311527266133589714'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/01/wait-i-think-i-saw-it-move.html' title='Wait, I think I saw it move...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-629159326439824508</id><published>2009-01-11T23:12:00.002-06:00</published><updated>2009-01-11T23:28:05.242-06:00</updated><title type='text'>Nothing like starting small...</title><content type='html'>I had nearly forgotten what it was like to start from scratch.&lt;br /&gt;&lt;br /&gt;Actually, I think that I did forget what it was like to start from scratch.&lt;br /&gt;&lt;br /&gt;I have been programming professionally for twenty years now.  And except for toy projects - only about three years of that time was spent working on projects that started in my head.  Everything else has been upgrades and changes to significant code bases started by someone else.&lt;br /&gt;&lt;br /&gt;And even the current focus of my professional work (which started in my own head) is two years since its start.  Even it feels like working on an established code base.  Many of the decisions that were made on design/implementation choices were just the farthest reach of what I knew how to do.&lt;br /&gt;&lt;br /&gt;Now, I know a lot more than I did then - And that makes things more complicated when deciding which approaches I should use for AccSys.&lt;br /&gt;&lt;br /&gt;Well, the going is slower than I thought it would be -&lt;br /&gt;&lt;br /&gt;But it is going!&lt;br /&gt;&lt;br /&gt;Finally (geeze).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-629159326439824508?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/629159326439824508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=629159326439824508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/629159326439824508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/629159326439824508'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/01/nothing-like-starting-small.html' title='Nothing like starting small...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-4247742080139237624</id><published>2009-01-11T21:43:00.002-06:00</published><updated>2009-01-11T21:48:33.911-06:00</updated><title type='text'>It's time to start...</title><content type='html'>Well, I haven't really had a chance to do the kind of design that I hoped on my G/L - But, time keeps slipping by.&lt;br /&gt;&lt;br /&gt;So, I'm going to go ahead and start work (using the semi-congealed design that is floating around in my head).  And, as I have time, I'll continue working on the formal design.&lt;br /&gt;&lt;br /&gt;(Note to self: I should really use this new beginning as an opportunity to do test driven coding - rather than trying to do all of my testing by hand after the work is finished).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-4247742080139237624?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/4247742080139237624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=4247742080139237624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4247742080139237624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4247742080139237624'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2009/01/its-time-to-start.html' title='It&apos;s time to start...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-2948997368238803129</id><published>2008-12-31T18:41:00.003-06:00</published><updated>2008-12-31T19:25:34.558-06:00</updated><title type='text'>The next big thing...</title><content type='html'>Some time ago, I managed to build up a sufficiently large ego as to think that I would be able to write a good accounting system from scratch.&lt;br /&gt;&lt;br /&gt;I went ahead and started a project on Google Code called 'accsys'.&lt;br /&gt;&lt;br /&gt;Soon after creating the project, I became overwhelmed with life and work - and my dream of a good, free, web based accounting system that would also be accessible through web services fell to the wayside.&lt;br /&gt;&lt;br /&gt;Life and work have not calmed down since then - they have probably only gotten more hectic.  But, I don't want to put off starting this any longer.&lt;br /&gt;&lt;br /&gt;So, I'm not going to.  Today marks the beginning of the design phase of my project.  Over the next two weeks, I should have enough time to work out the general framework and the data structures for the first module (general ledger).&lt;br /&gt;&lt;br /&gt;If you would like to keep up with the progress of my new baby - here is the URL of the project home page: http://code.google.com/p/accsys/&lt;br /&gt;&lt;br /&gt;I will also make updates here to track my progress.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-2948997368238803129?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/2948997368238803129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=2948997368238803129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2948997368238803129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2948997368238803129'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/12/next-big-thing.html' title='The next big thing...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-5543167127673379842</id><published>2008-12-31T17:17:00.002-06:00</published><updated>2008-12-31T17:22:15.191-06:00</updated><title type='text'>My last 'new favorite thing' of 2008...</title><content type='html'>I am not sure how long it will last, but I have a new favorite thing:&lt;br /&gt;&lt;br /&gt;Stateful session EJBs (SFSBs)&lt;br /&gt;&lt;br /&gt;I have been working with some fairly massive (and complex) data structures that I have been reloading from my database every time I needed to do a query or modification.  And now, it looks like I may be able to stop doing this!&lt;br /&gt;&lt;br /&gt;There will be some fairly radical changes necessary to really take advantage of SFSBs - but I am expecting the speed improvements to more than justify the work.&lt;br /&gt;&lt;br /&gt;Yay!  I like new toys.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-5543167127673379842?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/5543167127673379842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=5543167127673379842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/5543167127673379842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/5543167127673379842'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/12/my-last-new-favorite-thing-of-2008.html' title='My last &apos;new favorite thing&apos; of 2008...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-4582370140808749956</id><published>2008-12-30T20:16:00.003-06:00</published><updated>2008-12-30T20:23:19.802-06:00</updated><title type='text'>Trying out new toys...</title><content type='html'>Up until now, I have been perfectly happy to only use stateless session beans in my application.&lt;br /&gt;&lt;br /&gt;And, I have been able to do a lot of optimization to speed up the user's experience.&lt;br /&gt;&lt;br /&gt;But, if I can avoid reloading large data structures every time the user is making a change to them - then that should be an additional (and possibly very large) speed boost.&lt;br /&gt;&lt;br /&gt;Plus, I would be able to make changes to the data structure separate from the back end database without trying to cache it on the browser - which would be a nightmare!&lt;br /&gt;&lt;br /&gt;So, I am finally going to try to use a stateful bean.  If it works (if I manage to make it work) then I'll get to rewrite a -lot- of code to take advantage of stateful beans.&lt;br /&gt;&lt;br /&gt;If it doesn't work, then at least I already have everything working with stateless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-4582370140808749956?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/4582370140808749956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=4582370140808749956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4582370140808749956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4582370140808749956'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/12/trying-out-new-toys.html' title='Trying out new toys...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-5875683612771343856</id><published>2008-12-19T18:05:00.002-06:00</published><updated>2008-12-19T18:13:52.309-06:00</updated><title type='text'>OMDB!</title><content type='html'>I never mentioned it, but I did manage to do an initial stab at making an AppEngine version of my origami model diagram database (omdb).&lt;br /&gt;&lt;br /&gt;For grins, you can try it out.&lt;br /&gt;&lt;br /&gt;Here are the address formats to request information:&lt;br /&gt;http://omdb.appspot.com/getDesigner?designerFirstName=&lt;first&gt;&amp;amp;designerLastName=&lt;lastname&gt;&lt;br /&gt;&lt;br /&gt;http://omdb.appspot.com/getAuthor?authorFirstName=&lt;firstname&gt;&amp;amp;authorLastName=&lt;lastname&gt;&lt;br /&gt;&lt;br /&gt;If you enter something that does not exist, then it creates it and adds back to the data store.  If you have the record ID, then you can replace the names with designerID=&lt;id&gt; or authorID=&lt;id&gt; - respectively.&lt;br /&gt;&lt;br /&gt;There are pages for origami models and books, but there is no nice way to find something unless you already know everything about it - not very useful yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-5875683612771343856?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/5875683612771343856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=5875683612771343856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/5875683612771343856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/5875683612771343856'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/12/omdb.html' title='OMDB!'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-2824319679908452893</id><published>2008-12-19T17:58:00.003-06:00</published><updated>2008-12-19T18:00:49.361-06:00</updated><title type='text'>This is harder than it looks...</title><content type='html'>I'm not sure where I got the idea that doing a blog would be easy.&lt;br /&gt;&lt;br /&gt;I have enough 'life' going on, that there is no natural time for blogging.&lt;br /&gt;&lt;br /&gt;So, I am going to try (or at least try to try) to do a minimal amount of blogging by forcing myself to enter -something- on a regular schedule.  And then, if something noteworthy comes up, then I'll blog it as it comes up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-2824319679908452893?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/2824319679908452893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=2824319679908452893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2824319679908452893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2824319679908452893'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/12/this-is-harder-than-it-looks.html' title='This is harder than it looks...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-223223082384813417</id><published>2008-08-04T22:43:00.002-05:00</published><updated>2008-08-04T22:51:13.246-05:00</updated><title type='text'>Finally! Steps forward...</title><content type='html'>This past Thursday, I got to attend the AppEngine Hackathon in Chicago.&lt;br /&gt;&lt;br /&gt;And now, I have the back end of my origami database website written.&lt;br /&gt;&lt;br /&gt;All it does right now though is return XML files containing the designer, author, source (book), and model information.  I still need to write the presentation part of the site (and write up usage info so that others can access and use the API I am making to access the data).&lt;br /&gt;&lt;br /&gt;And Python is &lt;span style="font-style: italic;"&gt;officially&lt;/span&gt; an interesting language.&lt;br /&gt;&lt;br /&gt;Still weird though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-223223082384813417?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/223223082384813417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=223223082384813417' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/223223082384813417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/223223082384813417'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/08/finally-steps-forward.html' title='Finally! Steps forward...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-2289842734469097386</id><published>2008-06-23T17:51:00.002-05:00</published><updated>2008-06-23T17:54:01.235-05:00</updated><title type='text'>Every dark cloud...</title><content type='html'>Not everything is bad though.&lt;br /&gt;&lt;br /&gt;Since I was blocked by hosting my website and mail locally, I began taking a look at the Google App Engine (there is probably a trademark in there somewhere).&lt;br /&gt;&lt;br /&gt;It also uses Python as the language for apps, so - I have begun trying to figure out how to host the 'data server' for my origami web site on GAE.&lt;br /&gt;&lt;br /&gt;Not there yet.&lt;br /&gt;&lt;br /&gt;Again, hopefully soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-2289842734469097386?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/2289842734469097386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=2289842734469097386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2289842734469097386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2289842734469097386'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/06/every-dark-cloud.html' title='Every dark cloud...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-9133472439405246990</id><published>2008-06-23T17:49:00.001-05:00</published><updated>2008-06-23T17:51:05.258-05:00</updated><title type='text'>False starts anyone....?</title><content type='html'>Well, I put together my server and set up my web server and app server then tried to 'tunnel' through my hardware firewall.&lt;br /&gt;&lt;br /&gt;No dice.&lt;br /&gt;&lt;br /&gt;And that is where I've been stuck all this month.&lt;br /&gt;&lt;br /&gt;This sucks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-9133472439405246990?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/9133472439405246990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=9133472439405246990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/9133472439405246990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/9133472439405246990'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/06/false-starts-anyone.html' title='False starts anyone....?'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-2307825628645838797</id><published>2008-05-20T17:38:00.002-05:00</published><updated>2008-05-20T17:44:52.011-05:00</updated><title type='text'>And they're off...</title><content type='html'>Well, I put together my new server system that will (hopefully soon) be the host for my email and web sites.&lt;br /&gt;&lt;br /&gt;Soon I should be saving a few buck by 'hosting my own'.&lt;br /&gt;&lt;br /&gt;Finally.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-2307825628645838797?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/2307825628645838797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=2307825628645838797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2307825628645838797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2307825628645838797'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/05/and-theyre-off.html' title='And they&apos;re off...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-6006291392001896108</id><published>2008-05-15T21:48:00.002-05:00</published><updated>2008-05-15T21:54:10.005-05:00</updated><title type='text'>And baby makes three...</title><content type='html'>Well, there isn't actually a baby.&lt;br /&gt;&lt;br /&gt;But, my original website (that is kind of my baby) is back in semi-active development.&lt;br /&gt;&lt;br /&gt;I haven't gotten very far, because I am waiting to see if I have to stay on the original language that it was written in (PHP) and just add AJAX functionality with DOJO.  Or, if I can completely rewrite it in Java or Django.&lt;br /&gt;&lt;br /&gt;Now that I think about it, rewriting it in both would be a useful exercise - and advertisement.&lt;br /&gt;&lt;br /&gt;Now I just need to be able to host everything myself.&lt;br /&gt;&lt;br /&gt;From home.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-6006291392001896108?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/6006291392001896108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=6006291392001896108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/6006291392001896108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/6006291392001896108'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/05/and-baby-makes-three.html' title='And baby makes three...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-5929585194510379091</id><published>2008-05-15T21:06:00.003-05:00</published><updated>2008-05-15T21:48:50.059-05:00</updated><title type='text'>Oh what a tangled web...</title><content type='html'>I have owned several domains for some time, and I seem to be accumulating them (slightly).&lt;br /&gt;&lt;br /&gt;When I started (I can't remember exactly when that was), I only had one.  Then I bought a second one that pointed to the first.&lt;br /&gt;&lt;br /&gt;Now, I have five.  And I haven't gotten much further than I was when I had two.&lt;br /&gt;&lt;br /&gt;At this point, I have the two that pretty much point to the same place - a web site hosted on someone else's servers.  And a third that is pointing to email - hosted on someone else's servers.&lt;br /&gt;&lt;br /&gt;Since I now have 'extra' domains, I can afford to try setting one up to do the things that I am paying others for now (web and email hosting).  Also, if I am hosting my own web sites, then I will be able to take advantage of languages and hosting environments that I would be unwilling to pay extra for (JavaEE, etc).&lt;br /&gt;&lt;br /&gt;And, I have a computer that spends all of its time turned on doing nothing hooked up to a broadband internet connection.&lt;br /&gt;&lt;br /&gt;Hopefully, before Monday rolls back around, I will have at least a functioning test for my own web and mail host running.&lt;br /&gt;&lt;br /&gt;Hopefully.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-5929585194510379091?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/5929585194510379091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=5929585194510379091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/5929585194510379091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/5929585194510379091'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/05/oh-what-tangled-web.html' title='Oh what a tangled web...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-5838521457336705097</id><published>2008-05-15T20:57:00.002-05:00</published><updated>2008-05-15T21:06:23.505-05:00</updated><title type='text'>It's not just a scary snake anymore...</title><content type='html'>Looks like computer languages are going to get boosted.&lt;br /&gt;&lt;br /&gt;I have begun taking a look at both Groovy and Python/Django.&lt;br /&gt;&lt;br /&gt;So far, Groovy seems to be a streamlined version of Java that preserves complete compatibility with Java bytecode.  I will have to do more playing before I can say anything more interesting about it though.&lt;br /&gt;&lt;br /&gt;Python/Django are actually a combination of a language (Python) and a high-level web framework written in it (Django).&lt;br /&gt;&lt;br /&gt;Python is kind of strange.  There is no real declaration of variables - they just start to exist when you first use them.  And, they are loosely typed - So, you can assign a variable a string value, then assign the same variable a numeric value.  And the type magically changes.  Also, whitespace matters.  Rather than having any kind of code blocking characters, Python uses indenting.&lt;br /&gt;&lt;br /&gt;Django looks like it should be useful for me at least for some more utilitarian sites.  I'm fairly sure that as I get more comfortable with it, there will be more uses that 'pop up'.  But for now, my unfamiliarity with Python and basic distrust of high-level languages are holding that back.&lt;br /&gt;&lt;br /&gt;Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-5838521457336705097?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/5838521457336705097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=5838521457336705097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/5838521457336705097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/5838521457336705097'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/05/its-not-just-scary-snake-anymore.html' title='It&apos;s not just a scary snake anymore...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-3264621796175844545</id><published>2008-05-15T20:55:00.001-05:00</published><updated>2008-05-15T20:57:27.050-05:00</updated><title type='text'>Ack! Too much progress...</title><content type='html'>After so long with no steady posting, this week should be a turn around.&lt;br /&gt;&lt;br /&gt;I already have one post unrelated to my 'three post topics for May' and I have started doing something for each of the topics I pre-picked as well.&lt;br /&gt;&lt;br /&gt;Watch for updates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-3264621796175844545?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/3264621796175844545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=3264621796175844545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/3264621796175844545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/3264621796175844545'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/05/ack-too-much-progress.html' title='Ack! Too much progress...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-7502528852272876190</id><published>2008-05-15T19:04:00.006-05:00</published><updated>2008-05-15T19:25:26.233-05:00</updated><title type='text'>How can several SLSBs share the same interface?</title><content type='html'>Here is a tip that I wasn't able to find anywhere (maybe I didn't look hard enough).&lt;br /&gt;&lt;br /&gt;It may be a rare situation that you would have a large number of session beans (EJB3 session beans) that need to share the exact same interface.  And probably, there are several reasons why it could be argued that it is a bad idea anyway.&lt;br /&gt;&lt;br /&gt;But, I had about twenty-five timer beans that only needed to expose the same single method 'setSchedule' - so that they could be scheduled.&lt;br /&gt;&lt;br /&gt;When I first created all of these timers, I made separate interface classes for each of them so that I could easily access them like this:&lt;br /&gt;&lt;br /&gt;@EJB private TimerInterface1 timerInstance;&lt;br /&gt;&lt;br /&gt;That wasn't so bad - Even though every timer class that I created ended up having its own interface that was exactly like all of the others.&lt;br /&gt;&lt;br /&gt;When I got up to twenty-five though - I thought there &lt;span style="font-style: italic;"&gt;must &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;be a better way.&lt;br /&gt;&lt;br /&gt;And I finally found it.  So now, I only have one interface class for all of the timers and here is how the particular bean that is needed gets declared and accessed.  As a note, I happened to be using stateless session beans - the same should work for stateful.&lt;br /&gt;&lt;declaration&gt;&lt;br /&gt;(declaring)&lt;br /&gt;@Stateless&lt;br /&gt;public class ParticularBeanImplementation implements GenericInterface {&lt;/declaration&gt;&lt;br /&gt;&lt;br /&gt;&lt;access&gt;(accessing)&lt;br /&gt;@EJB(beanName="ParticularBeanImplementation") private GenericInterface specificInstance;&lt;br /&gt;&lt;/access&gt;&lt;br /&gt;I can't believe it took so long for me to find how to do this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-7502528852272876190?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/7502528852272876190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=7502528852272876190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/7502528852272876190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/7502528852272876190'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/05/how-can-several-slsbs-share-same.html' title='How can several SLSBs share the same interface?'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-7947043436879347074</id><published>2008-04-29T21:03:00.002-05:00</published><updated>2008-04-29T21:07:50.302-05:00</updated><title type='text'>Subjects for May...</title><content type='html'>How did it get to be May so soon?&lt;br /&gt;&lt;br /&gt;Anyway - Here are three topics that I will write about in the next month (at least):&lt;br /&gt;&lt;br /&gt;1) Rewriting origamicentral taking advantage of AJAX (provided by Dojo).&lt;br /&gt;2) Investigating what it will take to do my own hosting of web and email.&lt;br /&gt;3) Learning a new language (either spoken or computer - not decided yet)&lt;br /&gt;&lt;br /&gt;If I manage to start doing my own hosting then there will be more -&lt;br /&gt;&lt;br /&gt;Wait and see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-7947043436879347074?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/7947043436879347074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=7947043436879347074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/7947043436879347074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/7947043436879347074'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/04/subjects-for-may.html' title='Subjects for May...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-8018454519594793013</id><published>2008-04-29T20:41:00.002-05:00</published><updated>2008-04-29T21:00:08.537-05:00</updated><title type='text'>Ok.  It's officially ridiculous now...</title><content type='html'>My origami website is just about six years old now.&lt;br /&gt;&lt;br /&gt;And, although it does just what it is supposed to - that is waaaaay too long for a website to go without any changes.&lt;br /&gt;&lt;br /&gt;Last month, I discovered that the database back end for the site went down (I have no idea how long it was down though).  And, I realized (again) that I really need to rework the site.&lt;br /&gt;&lt;br /&gt;It's been six weeks since then. &lt;br /&gt;&lt;br /&gt;Time to get to work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-8018454519594793013?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/8018454519594793013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=8018454519594793013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8018454519594793013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8018454519594793013'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/04/ok-its-officially-ridiculous-now.html' title='Ok.  It&apos;s officially ridiculous now...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-8145674374705846283</id><published>2008-04-12T17:21:00.002-05:00</published><updated>2008-04-12T17:25:19.208-05:00</updated><title type='text'>Finding time...</title><content type='html'>I figured that it would be difficult to find things to write about in a blog.&lt;br /&gt;&lt;br /&gt;What I didn't guess is how difficult it would be just to &lt;span style="font-style: italic;"&gt;find the time&lt;/span&gt; to write.&lt;br /&gt;&lt;br /&gt;I'm starting to realize now though.&lt;br /&gt;&lt;br /&gt;So, in an effort to make this a little more consistent, I'm going to try to put together a list of ideas for my next few posts and keep at least two or three 'ahead of myself'.&lt;br /&gt;&lt;br /&gt;We'll see if that works (crossed fingers).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-8145674374705846283?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/8145674374705846283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=8145674374705846283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8145674374705846283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8145674374705846283'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/04/finding-time.html' title='Finding time...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-3311104610790125598</id><published>2008-03-15T18:00:00.002-05:00</published><updated>2008-03-15T18:07:41.151-05:00</updated><title type='text'>We are experiencing technical difficulties...</title><content type='html'>At some point in the relatively recent past, my origami website database got corrupted.&lt;br /&gt;&lt;br /&gt;I don't know exactly when or how - but it did.&lt;br /&gt;&lt;br /&gt;Because it is essentially a static reference site - I never really have done any maintenance on it.&lt;br /&gt;&lt;br /&gt;I keep thinking that I should rewrite it (Since the site was created six years ago, it could use some work).&lt;br /&gt;&lt;br /&gt;Also, this just highlights the fact that I should host it myself.&lt;br /&gt;&lt;br /&gt;Just in case you want to find where a particular origami pattern is published, here is the site in it's current (very old!) form:&lt;br /&gt;&lt;br /&gt;http://origamicentral.org&lt;br /&gt;&lt;br /&gt;(You will notice that it auto-forwards to http://origami.joyfulnoisewebdesign.com)&lt;br /&gt;&lt;br /&gt;I'll post about it again after I get around to rewriting it (And it won't auto-forward after that).&lt;br /&gt;&lt;br /&gt;Yeah!  More work for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-3311104610790125598?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/3311104610790125598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=3311104610790125598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/3311104610790125598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/3311104610790125598'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/03/we-are-experiencing-technical.html' title='We are experiencing technical difficulties...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-4979558617110400877</id><published>2008-03-14T15:57:00.004-05:00</published><updated>2008-03-14T16:16:28.595-05:00</updated><title type='text'>Employees of 'some company' are not eligible...</title><content type='html'>As if to highlight the fact that programmers (typically) make poor testers (at least for systems that they worked on) - A new Geronimo user sent a question to the support list that basically said "When I deploy an app to the root context it doesn't say that it is in the correct place".&lt;br /&gt;&lt;br /&gt;That is something that I noticed quite a while ago.  But, because I was able to work around it - I never bothered to look any deeper.  This is at least the second time that someone else had to complain about something before I 'scratched my own itch' to fix a problem that I had experience myself.&lt;br /&gt;&lt;br /&gt;Well, it is fixed now.&lt;br /&gt;&lt;br /&gt;Hopefully, I will learn my lesson this time.  If I run into a problem, then there is a good chance that someone else will too (eventually).  Besides fixing a problem once means I don't have to remember how to work around it.&lt;br /&gt;&lt;br /&gt;My brain is cluttered enough as it is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-4979558617110400877?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/4979558617110400877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=4979558617110400877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4979558617110400877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/4979558617110400877'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/03/employees-of-are-not-eligible.html' title='Employees of &apos;some company&apos; are not eligible...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-727187059252137866</id><published>2008-03-07T17:24:00.002-06:00</published><updated>2008-03-07T17:28:17.501-06:00</updated><title type='text'>You have reached the end of side one...</title><content type='html'>I wonder how many kids have never heard a recorded voice say that.&lt;br /&gt;&lt;br /&gt;Anyway, it is the end of the work week (supposedly) and my first week of having a blog.&lt;br /&gt;&lt;br /&gt;Amazingly enough I manged to get in enough posts to look like there is one for every day of the week.&lt;br /&gt;&lt;br /&gt;Next week (or later tonight, or sometime this weekend) I will hopefully be able to post something that is actually worth reading.&lt;br /&gt;&lt;br /&gt;Hopefully.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-727187059252137866?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/727187059252137866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=727187059252137866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/727187059252137866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/727187059252137866'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/03/you-have-reached-end-of-side-one.html' title='You have reached the end of side one...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-8662178603335320982</id><published>2008-03-06T23:19:00.000-06:00</published><updated>2008-03-06T23:26:17.063-06:00</updated><title type='text'>My first 'pearl' of wisdom for you...</title><content type='html'>Even though it might seem like a good idea to be the only one who can do a particular task at your company or be the only one who knows some particularly important piece of information - it really isn't.  There are degrees of being indispensable and they probably could at least limp by without you there (they just may not want to limp by).&lt;br /&gt;&lt;br /&gt;On the other hand, it is really no fun when you have your own deadlines to meet and one of those other areas where you are the -only- expert suddenly catches fire.&lt;br /&gt;&lt;br /&gt;Is human cloning possible yet?&lt;br /&gt;&lt;br /&gt;Bummer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-8662178603335320982?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/8662178603335320982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=8662178603335320982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8662178603335320982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/8662178603335320982'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/03/my-first-pearl-of-wisdom-for-you.html' title='My first &apos;pearl&apos; of wisdom for you...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-6131827128548029029</id><published>2008-03-06T16:18:00.000-06:00</published><updated>2008-03-06T16:25:50.636-06:00</updated><title type='text'>Writer's block one day in...</title><content type='html'>Something that I was worried about (that has kept me from starting a blog in the first place) is trying to figure out what to write about on a regular basis.&lt;br /&gt;&lt;br /&gt;And here I am on the second day with plenty of things that I -could- write about but unsure about what actual might -belong- here.&lt;br /&gt;&lt;br /&gt;The idea behind 'backwards hindsight' is to try to get a little closer to 20/20 when looking into the future.&lt;br /&gt;&lt;br /&gt;If I'm lucky (and you are too) then some of the problems/solutions that I write about will give you a different way of looking at the problems that you run into that will make finding the answers easier.&lt;br /&gt;&lt;br /&gt;We'll see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-6131827128548029029?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/6131827128548029029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=6131827128548029029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/6131827128548029029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/6131827128548029029'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/03/writers-block-one-day-in.html' title='Writer&apos;s block one day in...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-9045356057448162172</id><published>2008-03-05T19:12:00.000-06:00</published><updated>2008-03-05T19:18:39.550-06:00</updated><title type='text'>Since you probably don't actually know me...</title><content type='html'>The big 'point and giggle' part about me writing Java off as a fad way back when is that now it is one of my favorite languages.&lt;br /&gt;&lt;br /&gt;And that is a good thing since it is the primary language that I use at work and the language that Apache Geronimo (an open source project that I am a committer on) is written in as a J2EE and JEE5 application server.&lt;br /&gt;&lt;br /&gt;So it would have been nice to have had those ten years or so programming in Java.&lt;br /&gt;&lt;br /&gt;Oh well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-9045356057448162172?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/9045356057448162172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=9045356057448162172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/9045356057448162172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/9045356057448162172'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/03/since-you-probably-dont-actually-know.html' title='Since you probably don&apos;t actually know me...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4531828283487978792.post-2236521176978367620</id><published>2008-03-05T18:56:00.000-06:00</published><updated>2008-03-05T19:03:20.962-06:00</updated><title type='text'>If only I had known then...</title><content type='html'>Back in 1995 I read a book about Java programming and did a couple of tutorials.&lt;br /&gt;&lt;br /&gt;After finishing that experiment I decided that Java was too slow, too cumbersome, and that it wasn't going to go anywhere.&lt;br /&gt;&lt;br /&gt;Oops.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4531828283487978792-2236521176978367620?l=bhindsight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bhindsight.blogspot.com/feeds/2236521176978367620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4531828283487978792&amp;postID=2236521176978367620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2236521176978367620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4531828283487978792/posts/default/2236521176978367620'/><link rel='alternate' type='text/html' href='http://bhindsight.blogspot.com/2008/03/if-only-i-had-known-then.html' title='If only I had known then...'/><author><name>Jay McHugh</name><uri>https://profiles.google.com/113284497021288603447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-l1S3soIF75E/AAAAAAAAAAI/AAAAAAAAAAA/bF1oHFEBalw/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
