<?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-8824498</id><updated>2012-02-09T05:24:35.114-07:00</updated><category term='mobile'/><category term='liberal'/><category term='postgresql'/><category term='web'/><category term='nerd blog web confluence wordpress'/><category term='apple'/><category term='maven'/><category term='tomcat'/><category term='peoplesoft'/><category term='nerd'/><category term='iphone'/><category term='spring'/><category term='trendy'/><category term='quercus'/><category term='windows'/><category term='tv'/><category term='eclipse'/><category term='learning'/><category term='work'/><category term='opera'/><category term='xen'/><category term='database'/><category term='nerd java windows'/><category term='tapestry'/><category term='sakai'/><category term='linux'/><category term='hibernate'/><category term='java'/><category term='mysql'/><category term='php'/><category term='x11'/><category term='jsp'/><category term='school'/><category term='pizza'/><category term='netbeans'/><category term='oracle'/><category term='x'/><category term='obama'/><category term='ui'/><category term='prius'/><category term='blackberry'/><category term='ehcache'/><category term='sql'/><category term='condo'/><category term='unix'/><category term='languages'/><category term='mac'/><category term='drupal'/><category term='microsoft'/><category term='coffee'/><category term='snowboarding'/><category term='ide'/><category term='svn'/><category term='subversion'/><category term='mysqlsucks'/><title type='text'>Al's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default?start-index=101&amp;max-results=100'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>160</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8824498.post-8565429338240063190</id><published>2010-03-05T13:15:00.002-07:00</published><updated>2010-03-05T13:25:06.088-07:00</updated><title type='text'>Why normal people don't like computer security</title><content type='html'>Today, I wanted to put some money on my Sun Dollars account (ASU's play money system), so I went to do it online.  They had changed the system to add money (again), so I went through the hoops of figuring it out.  During the process I noticed that anyone in their right mind would never think of putting their credit card number on this web page.  As you can see in the screen shot below, there are a number of things that flagrantly violate "Internet common sense":&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F0yOcylvDVs/S5Fmji8Q6AI/AAAAAAAAAhk/wIW3mP5Ah04/s1600-h/Screen+shot+2010-03-05+at+1.12.36+PM.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 342px;" src="http://2.bp.blogspot.com/_F0yOcylvDVs/S5Fmji8Q6AI/AAAAAAAAAhk/wIW3mP5Ah04/s400/Screen+shot+2010-03-05+at+1.12.36+PM.png" alt="" id="BLOGGER_PHOTO_ID_5445246185328666626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First of all, I'm handed off to some site that I've never heard of called "jsatech.com".  I am doing business with ASU.  I've never heard of any jsatech.com and I have no idea who they are.  I certainly don't trust them.  Fortunately, it is an SSL site, and I'm a nerd, so I can theoretically see some information from the certificate.  In this case, however, the vendor has not chosen to purchase a certificate which does a rigorous identity verification.  Again, since I'm a computer nerd, I know that probably the only thing they had to do was prove they owned the domain jsatech.com, which really says nothing about their business practices (or even the fact that they are a business that exists).  And then they want me to type in both my ASU ID and my credit card number, both pieces of information that should normally be protected from parties we do not trust.  I ended up entering the information because I wanted some Sun Dollars.  So does everyone else, I'm sure.&lt;br /&gt;&lt;br /&gt;This is not an uncommon situation.  You want to do something online that requires sensitive data, so you end up passing it off to some third party you don't really trust.  In this case, we expect users to deal with this.  But then we go around complaining about how "dumb users" don't use common sense when dealing with computer security.  I think as computer people, we should probably start following our own advice before we try to complain about other people.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-8565429338240063190?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/8565429338240063190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=8565429338240063190' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8565429338240063190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8565429338240063190'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2010/03/why-normal-people-dont-like-computer.html' title='Why normal people don&apos;t like computer security'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_F0yOcylvDVs/S5Fmji8Q6AI/AAAAAAAAAhk/wIW3mP5Ah04/s72-c/Screen+shot+2010-03-05+at+1.12.36+PM.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2982406337972504802</id><published>2010-01-25T17:48:00.004-07:00</published><updated>2010-01-25T17:50:32.534-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Spring JDBC is awesome</title><content type='html'>I would like to just take a moment to express my love for Spring JDBC.  I just deleted giant swaths of database connection handling code from an app I'm maintaining by replacing a DAO with a Spring JDBC version.  If you haven't taken the time to learn about it, check it out &lt;a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2982406337972504802?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2982406337972504802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2982406337972504802' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2982406337972504802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2982406337972504802'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2010/01/spring-jdbc-is-awesome.html' title='Spring JDBC is awesome'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-6478457394143233074</id><published>2010-01-15T11:48:00.004-07:00</published><updated>2010-01-15T11:53:29.412-07:00</updated><title type='text'>Google Health sort of sucks</title><content type='html'>It seems like Google Health was developed without much consultation with a domain expert.  For example, it looks like they just got some sort of shotgun list of lab tests and dumped it into their database:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F0yOcylvDVs/S1C4lEjBeSI/AAAAAAAAAhU/E1I3aLq_b58/s1600-h/Screen+shot+2010-01-15+at+11.45.57+AM.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 384px; height: 95px;" src="http://4.bp.blogspot.com/_F0yOcylvDVs/S1C4lEjBeSI/AAAAAAAAAhU/E1I3aLq_b58/s400/Screen+shot+2010-01-15+at+11.45.57+AM.png" alt="" id="BLOGGER_PHOTO_ID_5427040497996757282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;which of these should I select if I want to record an HDL value?  They all seem the same to me.&lt;br /&gt;&lt;br /&gt;Then, you have something like EKG which is way more complicated than having a single numeric unit value, and they expect you to just type in a number:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F0yOcylvDVs/S1C4oghPWvI/AAAAAAAAAhc/tvwRbnRioAQ/s1600-h/Screen+shot+2010-01-13+at+9.14.13+PM.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 292px;" src="http://4.bp.blogspot.com/_F0yOcylvDVs/S1C4oghPWvI/AAAAAAAAAhc/tvwRbnRioAQ/s400/Screen+shot+2010-01-13+at+9.14.13+PM.png" alt="" id="BLOGGER_PHOTO_ID_5427040557045078770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's a good start, being able to get all of the data stored, but I just wish it were a little more intelligent about the data it is collecting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-6478457394143233074?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/6478457394143233074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=6478457394143233074' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6478457394143233074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6478457394143233074'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2010/01/google-health-sort-of-sucks.html' title='Google Health sort of sucks'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_F0yOcylvDVs/S1C4lEjBeSI/AAAAAAAAAhU/E1I3aLq_b58/s72-c/Screen+shot+2010-01-15+at+11.45.57+AM.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7980072420842849750</id><published>2010-01-14T13:01:00.008-07:00</published><updated>2010-01-14T14:31:04.166-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Moving code from one SVN to another</title><content type='html'>I am currently working on merging some of the projects from two different SVN repositories to one repository.  I don't want to do a full dump of one and restore to the other, because the organization is a bit different in each.  The solution is something like this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Dump the entire source repository&lt;/li&gt;&lt;li&gt;Use &lt;a href="http://svnbook.red-bean.com/en/1.1/ch05s03.html"&gt;svndumpfilter&lt;/a&gt; to split the dump into separate files&lt;/li&gt;&lt;li&gt;Import each file separately into the right spot in the target repository&lt;/li&gt;&lt;/ol&gt;Here's a couple one-liners to split the dump file (I love Unix):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ cat source_repo.dump |grep -a ^Node-path: | grep -v / |uniq | sed "s/Node-path: //g" &gt; projectlist.txt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ for i in `cat projectlist.txt`; do cat svn_oasis.dump | svndumpfilter include $i &gt; $i.dump; done&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The first command creates a list of top level directories, and the second does the splitting.  Now, you have a separate dump file for each different top level directory in the source repo.  This can be tweaked if you want to split it based on different criteria.&lt;br /&gt;&lt;br /&gt;Once you have the dump file for a project and you want to import it, you use a command like this:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;cat project.dump | svnadmin load /usr/local/svn/myrepo&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Make sure that the path you are importing doesn't exist.  I did not make sure, then I think svnadmin imported a bunch of stuff, but was unable to create the top level dir, so it probably left a bunch of orphaned crap in the repo.  The load process seems pretty half baked, so be careful :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7980072420842849750?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7980072420842849750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7980072420842849750' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7980072420842849750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7980072420842849750'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2010/01/moving-code-from-one-svn-to-another.html' title='Moving code from one SVN to another'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-9198464746011976126</id><published>2010-01-12T10:27:00.003-07:00</published><updated>2010-01-12T15:27:55.766-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>PHP</title><content type='html'>&lt;a href="http://briansamson.com/b/"&gt;Samson&lt;/a&gt; pointed out this PHP bug report to me:&lt;br /&gt;&lt;br /&gt;http://bugs.php.net/bug.php?id=50696&lt;br /&gt;&lt;br /&gt;It is an entertaining read.  This illustrates a couple of problems with PHP that make me wary of using it for anything too serious.  They seem to have a flagrant disregard for specification of their API, as well as backward compatibility.  Additionally, the lack of strong typing appears to be the source of all of their issues.  I'm not going to say weak typing is bad, I just find strong typing forces the programmer to resolve issues at compile time instead of at runtime (i.e. before the end user is actually running the code and the app blows up on them).&lt;br /&gt;&lt;br /&gt;All of this culminates into this bug report, which erupts into a flame war, uncovering the underlying big egos that have probably led to the feeling that strict specification is unnecessary and developers can just "deal with" changes in the API in minor releases.  Both of the PHP developers involved in the conversation were extremely unprofessional and resorted to such tactics as name dropping to argue their case.&lt;br /&gt;&lt;br /&gt;It sucks, because I think PHP would be pretty nice if they were just a little more strict and professional about these things (both the technical and personal issues).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-9198464746011976126?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/9198464746011976126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=9198464746011976126' title='50 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/9198464746011976126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/9198464746011976126'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2010/01/php.html' title='PHP'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>50</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7207436580643357702</id><published>2010-01-07T00:12:00.003-07:00</published><updated>2010-01-07T00:18:32.157-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='x11'/><category scheme='http://www.blogger.com/atom/ns#' term='x'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>X Windows</title><content type='html'>Recently, I have heard several references to the term "X Windows".  For all of you uninformed fools out there, here's the official word straight from the horse's mouth (see man X):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The X.Org Foundation requests that the following names be used when referring to this software:&lt;br /&gt;&lt;center&gt;&lt;br /&gt;                                                                       X&lt;br /&gt;                                                                X Window System&lt;br /&gt;                                                                  X Version 11&lt;br /&gt;                                                          X Window System, Version 11&lt;br /&gt;                                                                      X11&lt;/center&gt;&lt;/blockquote&gt;&lt;center&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;So, as you can see, there is no reference to "X Windows".  It has nothing to do with "Windows", so don't call it that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7207436580643357702?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7207436580643357702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7207436580643357702' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7207436580643357702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7207436580643357702'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2010/01/x-windows.html' title='X Windows'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-6792787386441058067</id><published>2009-12-22T22:17:00.006-07:00</published><updated>2009-12-23T01:18:12.233-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Sometimes I feel like constructors should be removed from Java</title><content type='html'>Sometimes constructors in Java are convenient.  You can instantiate your class with all the data you need with a simple one-liner:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;Car car = new Car(numberOfWheels, color, engine, doors);&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;That code is fairly readable and concise, but things can quickly spiral out of control.  Unless you use really descriptive variable names like those above, it's pretty easy to get lost.  Eventually you end up with code like this (partially obfuscated to protect the innocent):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;foo = new Bar(rs.getString(1),&lt;br /&gt;                          rs.getString(2),&lt;br /&gt;                          rs.getString(3),&lt;br /&gt;                          rs.getString(4),&lt;br /&gt;                          rs.getString(5),&lt;br /&gt;                          rs.getString(6),&lt;br /&gt;                          rs.getString(7),&lt;br /&gt;                          rs.getString(8),&lt;br /&gt;                          rs.getString(9),&lt;br /&gt;                          rs.getString(10),&lt;br /&gt;                          rs.getDate(11),&lt;br /&gt;                          rs.getDate(12),&lt;br /&gt;                          ("Y".equals(rs.getString(13)) ? true : false),&lt;br /&gt;                          ("Y".equals(rs.getString(14)) ? true : false),&lt;br /&gt;                          ("Y".equals(rs.getString(15)) ? true : false),&lt;br /&gt;                          ("Y".equals(rs.getString(16)) ? true : false),&lt;br /&gt;                          ("Y".equals(rs.getString(17)) ? true : false),&lt;br /&gt;                          ("Y".equals(rs.getString(18)) ? true : false),&lt;br /&gt;                          ("Y".equals(rs.getString(19)) ? true : false),&lt;br /&gt;                          rs.getTimestamp(20),&lt;br /&gt;                          rs.getTimestamp(21),&lt;br /&gt;                          rs.getString(22),&lt;br /&gt;                          rs.getString(23),&lt;br /&gt;                          rs.getString(24));&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is the point where I say you gotta just use a blank constructor and setter methods.  Much more readable.  And on a side note, when you are typing rs.getString(24), you should probably start thinking about how it might be more readable if you refer to your result set columns by name.  That is all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-6792787386441058067?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/6792787386441058067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=6792787386441058067' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6792787386441058067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6792787386441058067'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/12/sometime-i-feel-like-constructors.html' title='Sometimes I feel like constructors should be removed from Java'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-4778016290979624634</id><published>2009-12-16T10:04:00.003-07:00</published><updated>2009-12-16T10:13:19.213-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Ditch MySQL now</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F0yOcylvDVs/SykVGz9Na7I/AAAAAAAAAg0/aDRj5sh6V_0/s1600-h/larry+ellison+eating+a+hot+dog"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 156px; height: 184px;" src="http://4.bp.blogspot.com/_F0yOcylvDVs/SykVGz9Na7I/AAAAAAAAAg0/aDRj5sh6V_0/s400/larry+ellison+eating+a+hot+dog" alt="" id="BLOGGER_PHOTO_ID_5415883233660070834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;MySQL was "bought" by Sun last year, as you may know.  The fact that this is significant sort of illustrates one of the reasons I didn't like MySQL from the moment I met it in 1997 or so.  It's only like half in the game as far as being free and open source.  It is tied way too much to MySQL AB, the company, and the way it is licensed is totally shady.  Anyway, now Sun is dying and Larry Ellison is about to scoop it up.  Monty, the MySQL guy is &lt;a href="http://monty-says.blogspot.com/2009/12/help-saving-mysql.html"&gt;whining to the Internet&lt;/a&gt;, trying to get the European Commission to block the deal.  It's a sad story, but if Oracle doesn't buy Sun, they will just need to get bought by someone else or go out of business.  The real sad part of the story is the death of Sun, one of the original great Internet companies (my other favorite being SGI which met its fate years ago).  In any case, MySQL's future is dark and cloudy.&lt;br /&gt;&lt;br /&gt;That is why I'm just going to go ahead and plug my favorite database, &lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt;.  You should check it out, it's awesome.  It is way more powerful than MySQL and the licensing is better.  It was built from the ground up to be a real database, not some tinkering project like MySQL.  If you are running a project, especially an open source one, that is dependent on a database, you should take a serious look at PostgreSQL and consider making it your database of choice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-4778016290979624634?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/4778016290979624634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=4778016290979624634' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4778016290979624634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4778016290979624634'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/12/ditch-mysql-now.html' title='Ditch MySQL now'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_F0yOcylvDVs/SykVGz9Na7I/AAAAAAAAAg0/aDRj5sh6V_0/s72-c/larry+ellison+eating+a+hot+dog' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2510763619445411188</id><published>2009-12-09T17:06:00.002-07:00</published><updated>2009-12-09T17:11:33.521-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Always name your constraints in Oracle</title><content type='html'>In Oracle, when you create a constraint (like a primary key), you can either provide a name or have Oracle generate one for you.  I got lazy on a recent project, and had Oracle generate the constraint names for the primary keys on my new tables.  Later, I had to come back and change the key structure and it bit me.  What I like to do is keep a set of DDL files in my project to update the database schema as it evolves.  When you want to change the structure, you create a new DDL file and put in your ALTER TABLE statements.  You apply it to the dev database, then when you are satisfied, you apply it to QA and eventually production.  This may vary depending how many environments you have, but the idea is a consistent set of database updates across environments.&lt;br /&gt;&lt;br /&gt;Anyway, today I had to drop the primary keys and create new ones, so I ended up with statements like this:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: courier new;"&gt;ALTER TABLE CRITICAL_COURSE_REQUIREMENT DROP CONSTRAINT SYS_C0031831;&lt;br /&gt;ALTER TABLE CRITICAL_COURSE_REQUIREMENT ADD CONSTRAINT CRITICAL_COURSE_REQUIREMENT_PK PRIMARY KEY (CATALOG_TERM, ACADEMIC_PLAN, SUBJECT, CATALOG_NBR);&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the DDL is then dependent on the runtime state of the Oracle database at the time the original PK was added.  This sucks, because it will end up with a different name in each environment.  So, in the new PK, I gave it a name (CRITICAL_COURSE_REQUIREMENT_PK) which will be consistent across environments next time I need to change it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2510763619445411188?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2510763619445411188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2510763619445411188' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2510763619445411188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2510763619445411188'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/12/always-name-your-constraints-in-oracle.html' title='Always name your constraints in Oracle'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-3408635206015919627</id><published>2009-11-24T11:06:00.003-07:00</published><updated>2009-11-24T11:08:34.403-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>A recipe for trouble</title><content type='html'>Dear the Internet,&lt;br /&gt;&lt;br /&gt;Please never write this code:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;            if (value == null || value.equals("")) {&lt;br /&gt;   d = new Date(0);&lt;br /&gt;           } else {&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;This is what I like to call "bug hiding".  Rarely does a person really mean 12/31/1969 when they pass you a null or blank value.  That is all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-3408635206015919627?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/3408635206015919627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=3408635206015919627' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3408635206015919627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3408635206015919627'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/11/recipe-for-trouble.html' title='A recipe for trouble'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5893455399476101091</id><published>2009-11-19T11:22:00.004-07:00</published><updated>2009-11-19T11:29:30.771-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jsp'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>JSP is still really bad</title><content type='html'>I had to do some maintenance work recently on a JSP app.  Normally, I avoid JSP like the plague because my (dated) experience with it has been mostly bad.  The app I had to maintain was a stone age thing full of scriptlets, but I did a little research and used JSTL to do some of the work on the updates.  I was pretty impressed with how cleanly you can do some flow control stuff now.  So, I started some new development on a new project with JSP as a proof of concept to see if it is a tolerable programming environment now.  It isn't.  For the real basics, there has been a lot of improvement, but some of the mechanisms for taglibs, dealing with variable between servlet/JSP, etc. are still very clunky.  And today I encountered this.  If you forget to put the return type when defining a function within your app, you get a super mysterious error.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F0yOcylvDVs/SwWOHxzPbBI/AAAAAAAAAgg/7fZG1Vv2u3w/s1600/Screen+shot+2009-11-19+at+11.20.12+AM.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 142px;" src="http://2.bp.blogspot.com/_F0yOcylvDVs/SwWOHxzPbBI/AAAAAAAAAgg/7fZG1Vv2u3w/s400/Screen+shot+2009-11-19+at+11.20.12+AM.png" alt="" id="BLOGGER_PHOTO_ID_5405883192006634514" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F0yOcylvDVs/SwWOOyyM7nI/AAAAAAAAAgo/RlIww6f6fQU/s1600/Screen+shot+2009-11-19+at+11.20.29+AM.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 82px;" src="http://3.bp.blogspot.com/_F0yOcylvDVs/SwWOOyyM7nI/AAAAAAAAAgo/RlIww6f6fQU/s400/Screen+shot+2009-11-19+at+11.20.29+AM.png" alt="" id="BLOGGER_PHOTO_ID_5405883312529796722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I guess you could blame the implementation (Jasper), but what does anyone else use?  Also, you can sort of tell from the screen shot of the editor, but the JSP editor in the current version of Eclipse is pretty awful.  It displays some of your double quotes as single quotes, which is really awkward.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5893455399476101091?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5893455399476101091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5893455399476101091' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5893455399476101091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5893455399476101091'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/11/jsp-is-still-really-bad.html' title='JSP is still really bad'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_F0yOcylvDVs/SwWOHxzPbBI/AAAAAAAAAgg/7fZG1Vv2u3w/s72-c/Screen+shot+2009-11-19+at+11.20.12+AM.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-62783918337499965</id><published>2009-10-24T22:00:00.002-07:00</published><updated>2009-10-24T22:03:25.351-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><title type='text'>Miscellany</title><content type='html'>Here's a good example of some bad user interface design in my favorite IDE.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F0yOcylvDVs/SuPbqPKc5wI/AAAAAAAAAgY/IcQ6l4eOb7w/s1600-h/Screen+shot+2009-10-24+at+9.58.40+PM.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 145px;" src="http://2.bp.blogspot.com/_F0yOcylvDVs/SuPbqPKc5wI/AAAAAAAAAgY/IcQ6l4eOb7w/s400/Screen+shot+2009-10-24+at+9.58.40+PM.png" alt="" id="BLOGGER_PHOTO_ID_5396398297191343874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I know the Maven stuff is a plugin, so I'm guessing NetBeans allows plugins to install tabs under "Miscellaneous".  So what you end up with is a configuration screen that looks simple until you find out that there are really supposed to be 30 tabs instead of 7, but they are hiding out in the Miscellaneous section.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-62783918337499965?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/62783918337499965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=62783918337499965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/62783918337499965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/62783918337499965'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/10/miscellany.html' title='Miscellany'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_F0yOcylvDVs/SuPbqPKc5wI/AAAAAAAAAgY/IcQ6l4eOb7w/s72-c/Screen+shot+2009-10-24+at+9.58.40+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-8008235533725613921</id><published>2009-10-08T18:42:00.005-07:00</published><updated>2009-10-09T00:18:39.286-07:00</updated><title type='text'>An elegant DAO design for un-elegant queries</title><content type='html'>I am a big Hibernate fan, but sometimes you can't use Hibernate.  When you can't, &lt;a href="http://static.springsource.org/spring/docs/2.5.x/reference/jdbc.html"&gt;Spring's JDBC support&lt;/a&gt; is awesome.  One of the reasons I encounter frequently for not being able to use Hibernate is some ridiculously complicated queries (I'm looking at you, Peoplesoft).  When you have a giant long SQL query, you often encounter some code that looks like this:&lt;br /&gt;&lt;blockquote&gt;        &lt;span style="font-family:courier new;"&gt;String sql = "SELECT " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "RM.RTITLE1, " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "RM.RNAME, " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "SR.USER_SEQ_NO, " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "SR.INT_SEQ_NO AS SUBREQ, " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "SRT.USER_SEQ_NO, " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "SRT.TEXT, " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "(SELECT SRA.COURSE FROM SUB_REQ_AR SRA WHERE SR.INT_SEQ_NO = SRA.SUB_INT_SEQ_NO AND SRA.USER_SEQ_NO = 1) AS COURSE " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "FROM DPROG D JOIN DPROG_REQ DR ON D.INSTIDQ = DR.INSTIDQ " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "AND D.INSTID = DR.INSTID " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "AND D.INSTCD = DR.INSTCD " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "AND D.DPROG = DR.DPROG " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                "AND D.DPFYT = DR.DPFYT JOIN REQ_MAIN RM ON D.INSTIDQ = RM.INSTIDQ " +&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ugly, isn't it?  Well, some of my coworkers that were running into this came up with the idea of putting the SQL into its own files.  It is a great idea and I doubt they are the first to think of it.  They don't use Spring, though, and I thought Spring would be able to provide some good glue to put it all together.&lt;br /&gt;&lt;br /&gt;It turns out, Spring has something called &lt;a href="http://static.springsource.org/spring/docs/2.5.x/reference/resources.html"&gt;Resource&lt;/a&gt; that can automatically load things from various places.  I chose to use the classpath, and put the SQL files into the same package as the DAO.  The only problem here, is with Maven, you end up with the SQL file in src/main/resources and the code in src/main/java, which is a little annoying.  The Resource object doesn't get the whole job done either; it just provides an InputStream, and having to write code to read the contents of the file has no place in my elegant solution.  So, this is where &lt;a href="http://commons.apache.org/io/description.html"&gt;commons-io&lt;/a&gt; comes into play.  In the setter for the Resource object, I use IOUtils to read the file and stick it in a String.&lt;br /&gt;&lt;br /&gt;So, the overall strategy goes like this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Put SQL in file in src/main/resources&lt;/li&gt;&lt;li&gt;Create DAO object with a Resource setter for the SQL file&lt;/li&gt;&lt;li&gt;Wire the SQL file resource in your applicationContext.xml&lt;/li&gt;&lt;li&gt;Read in the file using IOUtils in the setter&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Here's the DAO definition in applicationContext.xml&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;bean id="darsCourseDao" class="edu.asu.eadvisor.onoff.dao.DarsCourseDaoImpl"&amp;gt;&lt;br /&gt; &amp;lt;property name="dataSource" ref="darsDataSource"&amp;gt;&lt;br /&gt; &amp;lt;property name="subreqsForCourseQuery" value="classpath:/edu/asu/eadvisor/onoff/dao/GetSubreqForCourse.sql"&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;And the setter in the DAO looks like this:&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setSubreqsForCourseQuery&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Resource&lt;/span&gt; &lt;span class="n"&gt;subreqsForCourseQuery&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="n"&gt;IOException&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span class="n"&gt;InputStream&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subreqsForCourseQuery&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInputStream&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;&lt;br /&gt;                &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br /&gt;                        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;subreqsForCourseQuery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;IOUtils&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br /&gt;                &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;br /&gt;                        &lt;span class="n"&gt;IOUtils&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;closeQuietly&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&lt;br /&gt;                &lt;span class="o"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span class="o"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-8008235533725613921?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/8008235533725613921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=8008235533725613921' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8008235533725613921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8008235533725613921'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/10/elegant-dao-design-for-un-elegant.html' title='An elegant DAO design for un-elegant queries'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-8896752279427716427</id><published>2009-09-02T20:59:00.003-07:00</published><updated>2009-09-02T21:02:48.881-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Eclipse Quality</title><content type='html'>If you work with me, you might know that I'm not what you would call a super enthusiastic fan of Eclipse.  You might not know that I used to really like it.  I still do sort of like it, but it just seems like they have quality problems.  This example I noticed today is sort of an indicator of the quality of the software they provide.  It doesn't really require much discussion.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F0yOcylvDVs/Sp8_kQhCA8I/AAAAAAAAAf4/MOQERW_8uZY/s1600-h/eclipse.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 74px;" src="http://1.bp.blogspot.com/_F0yOcylvDVs/Sp8_kQhCA8I/AAAAAAAAAf4/MOQERW_8uZY/s400/eclipse.png" alt="" id="BLOGGER_PHOTO_ID_5377086372245013442" border="0" /&gt;&lt;/a&gt;See, at first, I was like "haha, noobs accidentally put in two references to the same menu".  But, no.  It is actually two different menus with different options.  I don't get it, man.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-8896752279427716427?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/8896752279427716427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=8896752279427716427' title='51 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8896752279427716427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8896752279427716427'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/09/eclipse-quality.html' title='Eclipse Quality'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_F0yOcylvDVs/Sp8_kQhCA8I/AAAAAAAAAf4/MOQERW_8uZY/s72-c/eclipse.png' height='72' width='72'/><thr:total>51</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-3570007140435131877</id><published>2009-07-22T13:05:00.003-07:00</published><updated>2009-07-22T13:20:59.041-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tapestry'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Tapestry 5 pain points</title><content type='html'>I have been doing &lt;a href="http://tapestry.apache.org/tapestry5.1/"&gt;Tapestry 5&lt;/a&gt; work for about a year now, and I'm definitely still learning, but I think I know my way around fairly well.  I really (mostly) like it, and I think it is way easier to use than Tapestry 4, as well as many other frameworks.  It also results in a nice clean code base which isn't too difficult to approach.  There are, however, a couple of areas that I really just find confusing.  Some of them aren't too bad once you get to know them, but they are hard to learn.  I think it is important for most aspects of the framework to be easy to learn/use, because if people encounter pain during their initial impression stage, they will abandon the framework and use something else.&lt;br /&gt;&lt;br /&gt;The first issue I have is with the way that the &lt;a href="http://tapestry.apache.org/tapestry5.1/tapestry-core/ref/org/apache/tapestry5/corelib/components/Select.html"&gt;Select component&lt;/a&gt; works when you want to have a dynamic model for the list.  I think this is a common requirement for applications, so it is something people will most likely encounter fairly quickly.  For complex models, it is usually necessary to implement two interfaces: &lt;a href="http://tapestry.apache.org/tapestry5.1/apidocs/org/apache/tapestry5/SelectModel.html"&gt;SelectModel&lt;/a&gt; and &lt;a href="http://tapestry.apache.org/tapestry5.1/apidocs/org/apache/tapestry5/ValueEncoder.html"&gt;ValueEncoder&lt;/a&gt;.  The interfaces make sense once you get to know them, but I think the learning curve is quite steep for such a common task.  I'm not sure how this could be solved, but it seems like Tapestry 4 may have had a more simple system (though I'm sure it had some problems which led to it being redone).&lt;br /&gt;&lt;br /&gt;The second issue I have is with &lt;a href="http://tapestry.apache.org/tapestry5.1/guide/pagenav.html"&gt;page context&lt;/a&gt;.  Often times in standalone web applications, I have created pages which take query string parameters.  These can be referenced by external apps or pages, and used to link between pages of an app.  Tapestry's equivalent is the page context, which can be used to pass contextual data between pages.  There are two problems that I've encountered with page context.  First, it is limited in what data it can represent.  It is generally just a list of nameless parameters.  This makes it difficult to pass only certain parameters or parameters with names.  Second, the format for the URL is not a part of the spec (correct me if I'm wrong), so it can only reliably be used via other Tapestry pages.  This makes it difficult to pass data in to a Tapestry page from an external place.&lt;br /&gt;&lt;br /&gt;So to sum it up, I'd like to reiterate that I really do like Tapestry 5 and hope for its widespread adoption, but it has a few points that are difficult to deal with.  If these issues were addressed in a future version, I think it would help ease a new developer's adoption of the framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-3570007140435131877?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/3570007140435131877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=3570007140435131877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3570007140435131877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3570007140435131877'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/07/tapestry-5-pain-points.html' title='Tapestry 5 pain points'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5925734846800794410</id><published>2009-05-22T14:22:00.007-07:00</published><updated>2009-05-22T14:27:45.191-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tapestry'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Image submit in Tapestry 5.1</title><content type='html'>This just took me a really long time to figure out, so I'm writing it down.  Tapestry 5.1 adds support for submit buttons with an image (I think it was added in 5.1).  In any case, you just use the normal &lt;t:submit&gt; tag, but you add an image attribute which is an "asset".  I added an Asset property to my page class and used @Inject and @Path to inject the asset.  I used that property name in the image attribute, and it didn't work.  It turns out, you don't need to declare the asset as a property in your page class.  You just specify the path in the image attribute just like you would in the @Path annotation.  So, it looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;t:submit image="context:images/submit.gif"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;Much simpler than I was thinking.  Sometimes I get really frustrated with these little Tapestry issues...&lt;/t:submit&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5925734846800794410?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5925734846800794410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5925734846800794410' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5925734846800794410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5925734846800794410'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/05/image-submit-in-tapestry-51.html' title='Image submit in Tapestry 5.1'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-8635526876487603170</id><published>2009-05-05T10:48:00.004-07:00</published><updated>2009-05-05T10:55:20.879-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Tabs vs spaces in Netbeans</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F0yOcylvDVs/SgB9hN4yYyI/AAAAAAAAAT8/ElU6bAxOa60/s1600-h/Picture+2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 380px;" src="http://1.bp.blogspot.com/_F0yOcylvDVs/SgB9hN4yYyI/AAAAAAAAAT8/ElU6bAxOa60/s400/Picture+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5332399968423666466" /&gt;&lt;/a&gt;&lt;br /&gt;I work with some people that like spaces and some people that like tabs in their code.  I don't really care, so I try to follow whatever the project is using.  I ran into a big problem with Netbeans, though, in that it seems like getting it to use tabs only is impossible.  It turns out they appear to be following a weird part of the Java Code Conventions spec:&lt;br /&gt;&lt;blockquote&gt;Four spaces should be used as the unit of indentation. The exact construction of the indentation (spaces vs. tabs) is unspecified. Tabs must be set exactly every 8 spaces (not 4).&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/docs/codeconv/html/CodeConventions.doc3.html#262"&gt;http://java.sun.com/docs/codeconv/html/CodeConventions.doc3.html#262&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;So, Netbeans sort of has two different "numbers" around tabs.  There is a number that says how many spaces a tab should appear as, and a number that says how many spaces should be used when you indent something.  By default a tab appears as 8 spaces, but a level of indentation is 4 (like the spec says above).  As a result, it inserts four hard spaces when you indent one level, and a tab if you indent two levels.  The solution is to set the two numbers to the same value.  Just a wee bit confusing for a new user.&lt;br /&gt;&lt;br /&gt;Here's a bug report where someone describes it:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=52053"&gt;http://www.netbeans.org/issues/show_bug.cgi?id=52053&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-8635526876487603170?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/8635526876487603170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=8635526876487603170' title='44 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8635526876487603170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8635526876487603170'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/05/tabs-vs-spaces-in-netbeans.html' title='Tabs vs spaces in Netbeans'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_F0yOcylvDVs/SgB9hN4yYyI/AAAAAAAAAT8/ElU6bAxOa60/s72-c/Picture+2.png' height='72' width='72'/><thr:total>44</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-3124977519493956283</id><published>2009-04-22T09:56:00.003-07:00</published><updated>2009-04-22T10:03:36.812-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='opera'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Opera!</title><content type='html'>I got really sick of Firefox hogging all of the memory on my laptop (it has 4 gigs), and I thought it would be fun to drive my coworkers nuts by reporting bugs specific to an exotic browser, so I started checking them out the other day.  I started with Amaya because I remember it being really crappy back in like '98.  Unfortunately it still is.  So, I tried Opera and it is actually pretty nice.  The interface is a little ugly, but it seems to be way faster than Firefox.  It also has this cool speed dial thing that comes up whenever you open a new tab that shows you all of your favorite web sites, and it shows them as pictures, which I think is really cool.  So far it is pretty much able to keep up with FF on ajaxy web sites, although I have noticed a few issues with facebook.  It also works with this web site I use that has a complicated Java applet.  Pretty cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-3124977519493956283?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/3124977519493956283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=3124977519493956283' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3124977519493956283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3124977519493956283'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/04/opera.html' title='Opera!'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-1937795418855309827</id><published>2009-04-14T22:40:00.003-07:00</published><updated>2009-04-14T22:44:07.163-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Windows XP sucks</title><content type='html'>We all know Windows 7 and Windows Vista suck, but today I ventured into the land of Windows XP so I could transfer all of my financial documents over to my Mac where the backups are more reliable and what not.  I have a 200 GB external drive I was using on my DVR, so I plugged it into the Windows box and went to partition it.  It would only allow me to use NTFS, making it incompatible with the Mac.  I googled.  You can only make a FAT32 partition up to 32 GB on XP.  Stupid.  The suggested workaround is to use Lunix.  This is why Microsoft is in a downward spiral right now.  Good work, guys.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-1937795418855309827?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/1937795418855309827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=1937795418855309827' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1937795418855309827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1937795418855309827'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/04/windows-xp-sucks.html' title='Windows XP sucks'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-6151342455070534413</id><published>2009-03-24T14:14:00.004-07:00</published><updated>2009-03-24T14:19:48.859-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Browsing old versions of a subversion repository</title><content type='html'>I was trying to look at the contents of an old file in subversion today that had long ago been deleted, with no luck.  In the Eclipse plugin for CVS, they had a feature that would allow you to define a date, then browse the repository based on that date, but it seems to be missing from subversion.&lt;br /&gt;&lt;br /&gt;I found a workaround, but it isn't quite as nice.  You can browse a specific revision of the entire subversion repository, then look at the file.  All you have to do is go to this URL:&lt;br /&gt;&lt;br /&gt;http://&amp;lt;host&amp;gt;/&amp;lt;repo&amp;gt;/!svn/bc/&amp;lt;revision&amp;gt;/&lt;br /&gt;&lt;br /&gt;Where the base URL is the root of your repository, and the extra stuff after the ! specifies the revision.  And don't ask me what bc stands for, I have no idea.&lt;br /&gt;&lt;br /&gt;As for finding out which revision to look at, that is a little tricky.  It can be helpful to look at logs of other files and see which dates correspond to which revisions.&lt;/revision&gt;&lt;/repo&gt;&lt;/host&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-6151342455070534413?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/6151342455070534413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=6151342455070534413' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6151342455070534413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6151342455070534413'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/03/browsing-old-versions-of-subversion.html' title='Browsing old versions of a subversion repository'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2238202351989565957</id><published>2009-01-27T17:22:00.005-07:00</published><updated>2009-01-28T00:50:14.567-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='ehcache'/><title type='text'>Managing ehcache through Spring</title><content type='html'>There does not appear to be any documentation in the Spring manual about setting up an ehcache cache in your Spring container.  There is a Spring bean &lt;a href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/cache/ehcache/EhCacheFactoryBean.html"&gt;built in&lt;/a&gt; to do it.  To set it up with the default configuration, all that is needed is a line like this:&lt;br /&gt;&lt;blockquote&gt;    &lt;span style="font-family:courier new;"&gt;&amp;lt;bean id="mediaCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;It looks like you can also customize quite a bit of the config without providing an ehcache.xml file.  That could be nice so you don't have to go chasing around to find all of the settings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2238202351989565957?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2238202351989565957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2238202351989565957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2238202351989565957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2238202351989565957'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/01/managing-ehcache-through-spring.html' title='Managing ehcache through Spring'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-6401210748888108884</id><published>2009-01-22T16:47:00.002-07:00</published><updated>2009-01-22T16:49:21.387-07:00</updated><title type='text'>A coffee cup quote</title><content type='html'>I got a cup from Starbucks the other day and I usually don't read the quotes on them, but I happened to read this one.  It was interesting and I kept the cup around...here's what it said:&lt;br /&gt;&lt;blockquote&gt;Failure's hard, but success is far more dangerous.  If you're successful at the wrong thing, the mix of praise and money and opportunity can lock you in forever. -- Po Bronson&lt;br /&gt;&lt;/blockquote&gt;Hmmmm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-6401210748888108884?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/6401210748888108884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=6401210748888108884' title='63 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6401210748888108884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6401210748888108884'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/01/coffee-cup-quote.html' title='A coffee cup quote'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>63</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-6333290955195399248</id><published>2009-01-22T10:42:00.002-07:00</published><updated>2009-01-22T10:42:41.732-07:00</updated><title type='text'>Proof that Rupert Murdoch has ruined the WSJ</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F0yOcylvDVs/SXiwCumIp8I/AAAAAAAAAT0/ZRhCLL08i78/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 254px;" src="http://1.bp.blogspot.com/_F0yOcylvDVs/SXiwCumIp8I/AAAAAAAAAT0/ZRhCLL08i78/s400/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5294174922888226754" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-6333290955195399248?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/6333290955195399248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=6333290955195399248' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6333290955195399248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6333290955195399248'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/01/proof-that-rupert-murdoch-has-ruined.html' title='Proof that Rupert Murdoch has ruined the WSJ'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_F0yOcylvDVs/SXiwCumIp8I/AAAAAAAAAT0/ZRhCLL08i78/s72-c/Picture+4.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-548278237099894264</id><published>2009-01-20T15:49:00.002-07:00</published><updated>2009-01-20T15:51:47.295-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tapestry'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Tapestry 5: radio buttons coming back with value "on"</title><content type='html'>I ran into a problem today where I was setting the value of a radio button in Tapestry 5 to a long field within a property.  I was getting back the value "on" and Tapestry was crashing trying to coerce it into a long type.  It turns out the value was null, and the default value for a radio button is "on".  So, if you encounter this, make sure your value fields are not null.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-548278237099894264?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/548278237099894264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=548278237099894264' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/548278237099894264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/548278237099894264'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/01/if-your-t5.html' title='Tapestry 5: radio buttons coming back with value &quot;on&quot;'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-4761125073570359603</id><published>2009-01-13T00:31:00.002-07:00</published><updated>2009-01-13T00:34:11.558-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Computer lingo</title><content type='html'>I often find myself staring down some technical thing and step back for a moment to interpret the words on my screen the way a normal person would.  I think I might start blogging these anecdotes.  Here's the one I'm looking at right now:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://confluence.atlassian.com/display/DOC/Upgrading+Confluence+EAR-WAR+Edition"&gt;Upgrading Confluence EAR-WAR Edition&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To a normal person, an ear is a thing that you hear with and a war is a thing that involves guns and bombs.  The concept of fighting a war with ears or having a war involving ears is pretty funny.  Confluence is also a word that means something.  Perhaps the ear war is taking place near the confluence of two rivers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-4761125073570359603?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/4761125073570359603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=4761125073570359603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4761125073570359603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4761125073570359603'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2009/01/computer-lingo.html' title='Computer lingo'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-1990689957439488729</id><published>2008-12-23T19:05:00.003-07:00</published><updated>2008-12-23T19:09:02.792-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>More Peoplesoft awesomeness</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F0yOcylvDVs/SVGZU0r5r1I/AAAAAAAAASs/SDCwvnpP_wM/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 238px;" src="http://4.bp.blogspot.com/_F0yOcylvDVs/SVGZU0r5r1I/AAAAAAAAASs/SDCwvnpP_wM/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5283172420901515090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Check out this awesome Peoplesoft screen shot.  They are the masters of user friendliness.  I was kind of confused when I read the explanation here, but knowing the "Message Set Number" and "Message Number" really put things in context for me.  Dear Peoplesoft developers: Welcome to 2008.  Please lose the cryptic numbers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-1990689957439488729?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/1990689957439488729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=1990689957439488729' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1990689957439488729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1990689957439488729'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/12/more-peoplesoft-awesomeness.html' title='More Peoplesoft awesomeness'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_F0yOcylvDVs/SVGZU0r5r1I/AAAAAAAAASs/SDCwvnpP_wM/s72-c/Picture+2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-3476395769079774706</id><published>2008-11-15T21:53:00.003-07:00</published><updated>2008-11-15T21:56:26.986-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Cool error message</title><content type='html'>Here's a funny error message I got the other day.  Courtesy of Peoplesoft.  It happens to me all the time and I always press the wrong button.  The best part is, Peoplesoft's definition of "unsaved data" seems to go way beyond the generally accepted definition, so usually there is nothing to worry about when you get it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F0yOcylvDVs/SR-nld-dyjI/AAAAAAAAARw/BIbJOtZzXPI/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 98px;" src="http://4.bp.blogspot.com/_F0yOcylvDVs/SR-nld-dyjI/AAAAAAAAARw/BIbJOtZzXPI/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5269114351190395442" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-3476395769079774706?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/3476395769079774706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=3476395769079774706' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3476395769079774706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3476395769079774706'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/11/cool-error-message.html' title='Cool error message'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_F0yOcylvDVs/SR-nld-dyjI/AAAAAAAAARw/BIbJOtZzXPI/s72-c/Picture+1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-3865081873471934396</id><published>2008-10-31T15:52:00.002-07:00</published><updated>2008-10-31T15:59:01.347-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ide'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><title type='text'>A couple of Netbeans issues</title><content type='html'>I think this is week 3 of Netbeans now, so I've used it a bit longer than planned.  I found a couple of things that are annoying.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I miss the synchronize view in Eclipse.  There is a simple "Show Changes" view that shows all of your subversion changes, but it isn't hierarchical at all.  I had to do a massive commit today, and it was very tedious selecting each file without being able to select whole directory structures.&lt;/li&gt;&lt;li&gt;It seems to hide certain project files from you, kind of like Visual Studio.  For example, in one of my Maven based projects, I had a README.txt at the top level, and I can't see it in the "Projects" view.  If I go to the "Files" view, I can see it, but then I don't get any other organizational stuff, like source folders.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-3865081873471934396?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/3865081873471934396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=3865081873471934396' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3865081873471934396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3865081873471934396'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/10/couple-of-netbeans-issues.html' title='A couple of Netbeans issues'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-1149385664086048169</id><published>2008-10-31T10:57:00.003-07:00</published><updated>2008-10-31T16:10:05.444-07:00</updated><title type='text'>Why you SHOULD use a case sensitive file system on your Mac</title><content type='html'>There is a lot of noise on the Internet saying case sensitive file systems on the Mac are bad.  I guess if you are running Adobe apps, you can listen to that, since they are apparently developed sloppily and depend on a lack of case sensitivity.  Any real developer, however, will find that the lack of case sensitivity causes problems.  Here are two I recently ran into that ended up wasting a LOT of time debugging:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In Tapestry 5, a lot of effort has been made to make things not case sensitive.  Developing a t5 app on my Mac, I had that in my head, and created some page templates using all lower case, and their Java classes in typical upper &lt;a href="http://en.wikipedia.org/wiki/CamelCase"&gt;camel case&lt;/a&gt;.  I ran the app and tested it out until I was satisfied it was working.  I deployed it to the Unix dev server and it mysteriously stopped working.  It turns out, it searches for page templates based on the case sensitive class name.  So my Index class was looking for the file Index.tml.  I had index.tml.  On the Mac, the OS returns index.tml when you look for Index.tml.  Worst of all, I had to use a Unix machine to rename the files in the SVN repository because the Mac refused to acknowledge any change.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Working on another project, I had a directory structure that had a directory in all caps.  I needed to change it to lower case.  Once that was done, I tried to commit the changes to SVN.  I got this:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;svn: Commit failed (details follow):&lt;br /&gt;svn: Server sent unexpected return value (405 Method Not Allowed) in response to MKCOL request for '/svn/!svn/wrk/626a333b-f635-42b4-896e-5df2dd0475c2/ecampus/src/com'&lt;/blockquote&gt;&lt;br /&gt;Not cool.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-1149385664086048169?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/1149385664086048169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=1149385664086048169' title='58 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1149385664086048169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1149385664086048169'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/10/why-you-should-use-case-sensitive-file.html' title='Why you SHOULD use a case sensitive file system on your Mac'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>58</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2747755679350414053</id><published>2008-10-31T10:25:00.004-07:00</published><updated>2008-10-31T16:04:29.629-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='obama'/><category scheme='http://www.blogger.com/atom/ns#' term='liberal'/><category scheme='http://www.blogger.com/atom/ns#' term='prius'/><title type='text'>Obama stickers on your hybrid</title><content type='html'>I just have to say, it's extremely cliche to drive a Prius with a Barack Obama sticker.  It seems like &lt;a href="http://www.flickr.com/groups/obamaprius/pool/"&gt;at least 60% of Priuses have one&lt;/a&gt;.  I see thousands every morning.  Today, however, I was driving through traffic and I saw a Chevy Tahoe with an Obama sticker.  I thought it was a little funny, then I got closer and noticed that it was a "Hybrid", and I laughed out loud.  That is all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2747755679350414053?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2747755679350414053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2747755679350414053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2747755679350414053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2747755679350414053'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/10/obama-stickers-on-your-hybrid.html' title='Obama stickers on your hybrid'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2780860957383374519</id><published>2008-10-16T21:19:00.002-07:00</published><updated>2008-10-18T15:15:30.945-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>The end of Netbeans week</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F0yOcylvDVs/SPpebg6fkSI/AAAAAAAAARI/xt0SPeuMdPs/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_F0yOcylvDVs/SPpebg6fkSI/AAAAAAAAARI/xt0SPeuMdPs/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5258619341693227298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I have finished my week of Netbeans usage and so far am pretty impressed.  I was able to go all week without using Eclipse once.  A large part of that is thanks to the fact that I've been using Maven 2 for a large number of my most recent projects.  If you have a pom.xml, Netbeans will be able to check out your project and open it without you doing a single bit of configuration.  This is great, since it goes a long way in preventing IDE lock-in.  If you are working on a Maven project, you can use Netbeans easily, even if everyone else is using Eclipse.  I didn't get very deep into working on non-Maven projects, so that may have been quite a bit more hassle.  All in all, though, Netbeans has come a long way since the last time I gave it a serious test.  Here are some of my favorite features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Autocomplete seems quite a bit faster than Eclipse&lt;/li&gt;&lt;li&gt;Maven integration is good, but I only briefly tried projects with parent-child relationships, which seemed to trip it up a bit&lt;/li&gt;&lt;li&gt;Adding getters/setters is a lot less hassle than Eclipse.&lt;/li&gt;&lt;li&gt;Using jetty:run right inside Netbeans was pretty easy, though it did require the use of external Maven, I'm not sure why.&lt;/li&gt;&lt;li&gt;The web.xml editor is pretty cool&lt;/li&gt;&lt;li&gt;It has a built in SOAP client, although it seems pretty clunky.&lt;/li&gt;&lt;li&gt;SVN integration seems complete and not very buggy.  The interfaces are quick and simple, though I might say it's a bit oversimplified from the way Eclipse does things.&lt;/li&gt;&lt;li&gt;The built in editor support for non-Java files seems less buggy than in Eclipse.&lt;/li&gt;&lt;/ul&gt;I may give Netbeans another week.  It should be pretty obvious to anyone that it takes longer than a week to fully get a feel for such a complicated piece of software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2780860957383374519?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2780860957383374519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2780860957383374519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2780860957383374519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2780860957383374519'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/10/end-of-netbeans-week.html' title='The end of Netbeans week'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_F0yOcylvDVs/SPpebg6fkSI/AAAAAAAAARI/xt0SPeuMdPs/s72-c/Picture+3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-906073692789683935</id><published>2008-10-14T16:48:00.003-07:00</published><updated>2008-10-14T16:55:37.950-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tapestry'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>The modern Java web app</title><content type='html'>I'm always looking for ways to streamline Java web app development.  In case I haven't spread the word to you, here's the current set of technologies I'm liking:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tapestry 5 - This is the framework I'm using, but I'm not saying it's better than anything in particular, but I like some of the stuff they are doing.&lt;/li&gt;&lt;li&gt;Hibernate with annotations - I've been a big fan of hibernate for a long time, using the annotations seems to simplify the mapping process quite a bit.&lt;/li&gt;&lt;li&gt;&lt;a href="http://static.springframework.org/spring/docs/2.5.x/reference/orm.html#orm-hibernate"&gt;Spring Hibernate integration&lt;/a&gt; - makes transaction/error handling way way easier in Hibernate.  I am using HibernateDaoSupport as a base class.  Tapestry 5 also has Spring integration, allowing you to inject the DAO's right into your page classes&lt;/li&gt;&lt;li&gt;Maven 2 - So much easier than ant and dependency hell, once you get used to the paradigm shift.  It might cause issues with your Eclipse tomcat integration, but I always found that to be flaky anyway.  Use Jetty instead.&lt;/li&gt;&lt;li&gt;Maven Jetty plugin - Allows you to build/deploy your app with one command (mvn clean jetty:run).  Much easier than dealing with some of the flakiness of tomcat deployment, and allows you to just run one of your apps at a time.&lt;/li&gt;&lt;/ul&gt;I am also looking into Spring Security, and hoping it will simplify authorization, and I'm doing some IDE evaluations to see if it's time to ditch Eclipse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-906073692789683935?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/906073692789683935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=906073692789683935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/906073692789683935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/906073692789683935'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/10/modern-java-web-app.html' title='The modern Java web app'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-155528918359737296</id><published>2008-10-13T09:50:00.002-07:00</published><updated>2008-10-13T09:56:27.514-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>IDE of the week: Netbeans 6.1</title><content type='html'>Happy Monday morning.  After battling with Maven and the Tomcat plugin in Eclipse a bit last week, I have decided to try some alternative IDEs.  I've heard good things about IntelliJ, and I think the Maven integration in Netbeans is supposed to be good.  So, I've decided to give each of them a week of use and see if they can beat out Eclipse.  This week is Netbeans 6.1.  So far, I've spent a few minutes installing updates and reading up on the Maven support (you have to install a plugin through the plugin manager).  Now that the plugin is installed, it automatically recognizes Maven projects when I check them out, so that is cool.  Hopefully I can make it through the week without reverting to Eclipse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-155528918359737296?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/155528918359737296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=155528918359737296' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/155528918359737296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/155528918359737296'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/10/ide-of-week-netbeans-61.html' title='IDE of the week: Netbeans 6.1'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-24636087047304718</id><published>2008-09-18T11:10:00.002-07:00</published><updated>2008-09-18T11:17:31.638-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Subversion</title><content type='html'>Today I came across two interesting things about Subversion.  First of all, I think I installed the binary version from the Subversion web site on my Mac, since it is in /usr/local/bin, so I dunno if these are true about the one that comes with Leopard.  Anyway, I just typed "svn commit" and emacs opened up.  I didn't even know I had emacs.  So, apparently emacs is the default editor on this build of svn.  Once I stumbled my way through the editing of the commit message, and remembered the key sequence to quit (CTRL-X, CTRL-C), a dialog popped up on my mac prompting me to allow the command line version of svn access to my keychain.  I accepted and didn't have to type in my password.  Pretty fancy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-24636087047304718?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/24636087047304718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=24636087047304718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/24636087047304718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/24636087047304718'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/09/subversion.html' title='Subversion'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7902388591149699247</id><published>2008-08-27T21:47:00.002-07:00</published><updated>2008-08-27T21:58:46.599-07:00</updated><title type='text'>Stop the madness</title><content type='html'>Today, I received a call from my credit card company.  They notified me that my balance (which is set up for auto-pay) was overdue and were wondering if I'd like to set up a payment.  I was pretty mad about the situation because I set up automatic payment to avoid any late payments and I know it's pretty much impossible to remedy the situation once they ding your credit.  I started to explain this to the guy, and the call promptly dropped.  After calling back two more times, I was informed that I would only be allowed to pay a small portion of my bill today via their online systems, and I would have to wait 15 days to pay the remaining balance.  Additionally, they agreed that the finance charges and late fees were unfair, but claimed to be unable to do anything about them until the balance was paid in full.  Finally, they were unable to explain why the payment stopped working and/or when it might start working again.  This got me thinking.  Why are so many things like this such a big pain?&lt;br /&gt;&lt;br /&gt;I've never worked for a bank, but I have worked for various groups of people that deliver online services, not unlike those that I blame for a large portion of the problems I experienced this evening.  Sadly, I have to admit that these things are actually intentionally designed to limit the ability for a user to do what they want for various different reasons.  Here are a few I've heard...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;it would be &lt;span style="font-style: italic;"&gt;insecure&lt;/span&gt;&lt;/li&gt;&lt;li&gt;the customer might possibly do something they don't actually want if we let them do that&lt;/li&gt;&lt;li&gt;we might get sued by the customer for allowing them to do that&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I don't think the customer would want it to work like that because I don't&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I have always been a strong opponent of arbitrary limitations and guessing what the end user wants, but it seems like it's always a losing battle.  Why must this be?  When will service organizations return to their mission of &lt;span style="font-style: italic;"&gt;serving&lt;/span&gt; the customer instead of making them want to stab their eyes out with a rusty screwdriver?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7902388591149699247?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7902388591149699247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7902388591149699247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7902388591149699247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7902388591149699247'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/08/stop-madness.html' title='Stop the madness'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-3101510624526579866</id><published>2008-07-22T10:02:00.002-07:00</published><updated>2008-07-22T10:07:08.223-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd blog web confluence wordpress'/><title type='text'>Blogger malaise</title><content type='html'>Lately I have been pretty displeased with blogger's lack of progress in keeping up with the current state of technology.  The thing that I hate the most is that their HTML editor is really not conducive to sharing code.  So, I've been thinking about moving to something else for this blog.  I was thinking WordPress, but I have heard some gripes about it.  Atlassian is offering free personal licenses for Confluence, which has some blog support, plus it would allow me to create a little Wiki for more in-depth stuff.  I am leaning towards installing Confluence on alwold.com, but that box only has 512 mb of RAM, so I'm a little worried.  Anyone have any good/bad experiences with blogging software that would be helpful?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-3101510624526579866?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/3101510624526579866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=3101510624526579866' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3101510624526579866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3101510624526579866'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/07/blogger-malaise.html' title='Blogger malaise'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7313343557319447895</id><published>2008-07-18T00:07:00.002-07:00</published><updated>2008-07-18T00:11:39.324-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd java windows'/><title type='text'>XP Command Prompt</title><content type='html'>Tonight I'm working on a little Java project for fun, and I decided to take a stab at it on my Windows XP box.  I am using maven to build, and normally I use a lot of command prompt interaction for the build stuff when I'm on my Mac and it works great.  On Windows, I hate the command prompt, so I was trying to do most everything through Eclipse plugins, but then I ran into this:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;Error message: Missing:&lt;br /&gt;----------&lt;br /&gt;1) javax.transaction:jta:jar:1.0.1B&lt;br /&gt;&lt;br /&gt;  Try downloading the file manually from:&lt;br /&gt;      http://java.sun.com/products/jta&lt;br /&gt;&lt;br /&gt;  Then, install it using the command:&lt;br /&gt;      mvn install:install-file -DgroupId=javax.transaction -DartifactId=jta -Dversion=1.0.1B -Dpackaging=jar -Dfile=/path/to/file&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;At this point, I knew it was going to be command prompt time.  I had to download maven, set my windows path, and run the command.  I must say, after a long time away from the Windows command prompt, using it really makes me want to stab my eyes out.  Maybe I should just get rid of this box and stick to the Mac.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7313343557319447895?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7313343557319447895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7313343557319447895' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7313343557319447895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7313343557319447895'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/07/xp-command-prompt.html' title='XP Command Prompt'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2211445717283105598</id><published>2008-07-01T21:19:00.003-07:00</published><updated>2008-07-01T21:30:40.570-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tapestry'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Tapestry 5: First Impressions</title><content type='html'>My new group at ASU is loosely standardizing on Tapestry, so I've been spending some time learning it.  We are officially using 4.1, I think, since it's the latest official release, but I decided to go all rogue style and switch to 5.0 after spending some time on 4.1.  From the noise on the web, it sounds like Tapestry gets completely rewritten for every new version, so 5.0 is pretty different from 4.1.  Anyway, it seems much better, but there are still some weird problems.  Here are some of the interesting things I've run into:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you need to call some Tapestry page from an outside app with data, you can simulate Tapestry's "&lt;a href="http://tapestry.apache.org/tapestry5/tapestry-core/guide/pagenav.html"&gt;activation/passivation&lt;/a&gt;" by building URL strings which will feed your onActivate method.  They look like this: http://localhost:8080/app/page/param1/param2, where param1 and param2 will be passed in a List (not an array, as I found out the hard way) to onActivate.  I'm not sure if this is the best way to do it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you loop through a list of items and want to be able to edit those items (like by having a checkbox), you pretty much need to set up a &lt;a href="http://tapestry.apache.org/tapestry5/tapestry-core/ref/org/apache/tapestry5/corelib/components/Loop.html"&gt;PrimaryKeyEncoder&lt;/a&gt;, otherwise it will serialize/deserialize stuff and all your changes will be lost.  This was very hard to figure out.&lt;/li&gt;&lt;/ul&gt;So far I'm only moderately impressed.  There seem to be too many assumptions that don't fit the model of my first app very well, but we'll see how it goes once I get better at it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2211445717283105598?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2211445717283105598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2211445717283105598' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2211445717283105598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2211445717283105598'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/07/tapestry-5-first-impressions.html' title='Tapestry 5: First Impressions'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-4877661215837131960</id><published>2008-05-07T09:53:00.003-07:00</published><updated>2008-12-10T18:53:15.889-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='sakai'/><title type='text'>MathML vs LaTeX</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F0yOcylvDVs/SCJcjAI-cQI/AAAAAAAAACg/1IxsJpzXW-c/s1600-h/latex.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_F0yOcylvDVs/SCJcjAI-cQI/AAAAAAAAACg/1IxsJpzXW-c/s320/latex.png" alt="" id="BLOGGER_PHOTO_ID_5197818676341797122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So I was trying out some stuff in Sakai, pretending to write an assessment (quiz, to the uninitiated) with complicated equations.  I ran into a few problems like you can't do fractions, there is no square root symbol, no multiplication symbol, etc.  Perhaps I will write a full review once I figure out if these limitations are real, or if I'm just missing something.&lt;br /&gt;&lt;br /&gt;Anyway, I remember seeing complicated equations on Wikipedia, so I decided to investigate how they do it.  It looks like the equations on there were generated by LaTeX, but they are just ugly png files with a lot of jaggies.  I was thinking it would have been cool if they had used &lt;a href="http://svgkit.sourceforge.net/SVGLaTeX.html"&gt;SVG&lt;/a&gt;.  But, they had some info on possible future direction, which led me to the &lt;a href="http://en.wikipedia.org/wiki/MathML"&gt;MathML&lt;/a&gt; entry, which is supposedly going to be implemented in next gen web browsers. &lt;br /&gt;&lt;br /&gt;One of the more annoying aspects of what you &lt;span style="font-style: italic;"&gt;can&lt;/span&gt; do with Sakai (and Microsoft's Equation Editor I might add) is that you have to do tons of highlighting and clicking to format things.  Like, if I want a chemical equation like HC2H3O2, it requires highlighting 3 things and clicking 3 buttons.  That back and forth of the mouse gets quite frustrating.  In LaTeX, things are much simpler.  You would just write:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;HC_2H_3O_2&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;and you would be done.  MathML, on the other hand, is a terribly verbose XML format (check out the quadratic equation example in the Wikipedia entry), so it's not much better than the point and click method.   I realize that LaTeX is a little intimidating to write by hand, and a program could easily generate either LaTeX or MathML, but I have yet to see a program that is as efficient at building equations as hand-coding LaTeX markup is.  With that in mind, I think allowing a subset of LaTeX is probably the best way to allow people to enter equations.  There is some interesting work out there, like &lt;a href="http://svgkit.sourceforge.net/SVGLaTeX.html"&gt;this JavaScript library&lt;/a&gt;.  It would be cool to see something like that integrated into one of Sakai's rich text editors.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-4877661215837131960?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/4877661215837131960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=4877661215837131960' title='57 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4877661215837131960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4877661215837131960'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/05/mathml-vs-latex.html' title='MathML vs LaTeX'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_F0yOcylvDVs/SCJcjAI-cQI/AAAAAAAAACg/1IxsJpzXW-c/s72-c/latex.png' height='72' width='72'/><thr:total>57</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5281583096443498880</id><published>2008-05-06T18:08:00.003-07:00</published><updated>2008-05-06T18:11:23.931-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='sakai'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Sakai is a monster</title><content type='html'>I wanted to test out some functionality in the assessment tool in Sakai, so I just ran svn up on my dusty 2-5-x sources, built, and started up tomcat.  This was at the bottom of catalina.out:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;INFO: Server startup in 144105 ms (2008-05-06 18:00:38,367 main_org.apache.catalina.startup.Catalina)&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;It takes two minutes and 24 seconds to start!  And I have a recent MacBook Pro with 4 gigs of ram.  Madness, I say.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5281583096443498880?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5281583096443498880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5281583096443498880' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5281583096443498880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5281583096443498880'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/05/sakai-is-monster.html' title='Sakai is a monster'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-3237755269330656917</id><published>2008-05-06T17:55:00.003-07:00</published><updated>2008-05-06T18:08:16.117-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Getting tomcat to stop deleting your context xml files</title><content type='html'>I've been plagued with this annoying problem in tomcat for about a year, and it has been driving me crazy.  I've looked through the code, joined the mailing list, etc. etc.  The problem is when you have context xml files, such as /usr/local/tomcat/conf/Catalina/localhost/app.xml.  Generally, you would use such files to set up JNDI data sources for database connections, but I also use them to set up configuration beans in order to keep environment-specific data outside of your application code (which I consider the whole war file to be).  Anyway, tomcat seems to randomly delete those files when I change anything in the application files.  I tried various configurations using war files, no war files, and war files in funny locations, and it happened to all of them.&lt;br /&gt;&lt;br /&gt;I never did find out why it deletes the files, but I did find a solution, thanks to a user on the tomcat mailing list.  All you have to do is turn off "autoDeploy" on the "Host".  Basically, you need to edit /usr/local/tomcat/conf/server.xml and change the &lt;span style="font-family: courier new;"&gt;&lt;host&gt;&lt;/span&gt; xml element, so that it says &lt;span style="font-family: courier new;"&gt;autoDeploy="false"&lt;/span&gt; instead of &lt;span style="font-family: courier new;"&gt;autoDeploy="true"&lt;/span&gt;.  And with that, all my problems are over.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-3237755269330656917?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/3237755269330656917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=3237755269330656917' title='61 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3237755269330656917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3237755269330656917'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/05/getting-tomcat-to-stop-deleting-your.html' title='Getting tomcat to stop deleting your context xml files'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>61</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-8818035815872549578</id><published>2008-05-06T11:12:00.003-07:00</published><updated>2008-05-06T13:06:11.529-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Dropping tables in MySQL</title><content type='html'>Say you have access to a MySQL database, and you need to restore it from a previous copy.  You could just run the SQL file from the dump, but that is slightly unclean, since it won't delete tables that it doesn't know about.  Now, let's assume you don't have full admin access to the server, so you can't drop and recreate the db.  You have to drop all the tables.  Here's what happens:&lt;br /&gt;&lt;blockquote  style="font-family:courier new;"&gt;&lt;span style="font-size:78%;"&gt;mysql&gt; show tables;&lt;br /&gt;+------------------------------+&lt;br /&gt;| Tables_in_cem                |&lt;br /&gt;+------------------------------+&lt;br /&gt;| academic_periods             |&lt;br /&gt;| admin_leases                 |&lt;br /&gt;| admin_services               |&lt;br /&gt;| admins                       |&lt;br /&gt;| course_adds_kills            |&lt;br /&gt;| course_gateways              |&lt;br /&gt;| course_organizations         |&lt;br /&gt;| course_services              |&lt;br /&gt;| course_types                 |&lt;br /&gt;| courses                      |&lt;br /&gt;| instructors                  |&lt;br /&gt;| organization_course_gateways |&lt;br /&gt;| organization_gateways        |&lt;br /&gt;| organizations                |&lt;br /&gt;| roles                        |&lt;br /&gt;| section_params               |&lt;br /&gt;| sections                     |&lt;br /&gt;| services                     |&lt;br /&gt;| transactions                 |&lt;br /&gt;+------------------------------+&lt;br /&gt;19 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; drop table academic_periods, admin_leases, admin_services, admins, course_adds_kills, course_gateways, course_organizations, course_services, course_types, courses, instructors, organization_course_gateways, organization_gateways, organizations, roles, section_params, sections, services, transactions;&lt;br /&gt;ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails&lt;br /&gt;&lt;br /&gt;mysql&gt; show tables;&lt;br /&gt;+------------------+&lt;br /&gt;| Tables_in_cem    |&lt;br /&gt;+------------------+&lt;br /&gt;| academic_periods |&lt;br /&gt;| course_gateways  |&lt;br /&gt;| course_types     |&lt;br /&gt;| courses          |&lt;br /&gt;| organizations    |&lt;br /&gt;| services         |&lt;br /&gt;+------------------+&lt;br /&gt;6 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; drop table academic_periods, admin_leases, admin_services, admins, course_adds_kills, course_gateways, course_organizations, course_services, course_types, courses, instructors, organization_course_gateways, organization_gateways, organizations, roles, section_params, sections, services, transactions;&lt;br /&gt;ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails&lt;br /&gt;&lt;br /&gt;mysql&gt; show tables;&lt;br /&gt;+------------------+&lt;br /&gt;| Tables_in_cem    |&lt;br /&gt;+------------------+&lt;br /&gt;| academic_periods |&lt;br /&gt;| course_types     |&lt;br /&gt;+------------------+&lt;br /&gt;2 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; drop table academic_periods, admin_leases, admin_services, admins, course_adds_kills, course_gateways, course_organizations, course_services, course_types, courses, instructors, organization_course_gateways, organization_gateways, organizations, roles, section_params, sections, services, transactions;&lt;br /&gt;ERROR 1051 (42S02): Unknown table 'admin_leases,admin_services,admins,course_adds_kills,course_gateways,course_organizations,course_ser'&lt;br /&gt;&lt;br /&gt;mysql&gt; show tables;&lt;br /&gt;Empty set (0.00 sec)&lt;/span&gt;&lt;/blockquote&gt;Mission accomplished.  You have to run the command n number of times, where n is the depth of the foreign key constraints, but keep feeding mysql the command and the tables will eventually be gone.  I would contend that a "real" database would work out the dependencies and drop them all in one feel swoop.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-8818035815872549578?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/8818035815872549578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=8818035815872549578' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8818035815872549578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8818035815872549578'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/05/dropping-tables-in-mysql.html' title='Dropping tables in MySQL'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2756255475600800190</id><published>2008-05-01T10:53:00.002-07:00</published><updated>2008-05-01T13:46:12.003-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Hibernate error reporting</title><content type='html'>Sometimes, Hibernate is really bad at error reporting.  Today I added a NOT NULL constraint to a column in my database and ran my unit tests.  Several failed with errors like this:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;testAddInstructor(edu.asu.cem.test.dao.CourseDAOTest)  Time elapsed: 0.009 sec  &lt;&lt;&lt;&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:92)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:222)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2229)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2665)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.engine.ActionQueue.executeInserts(ActionQueue.java:158)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:245)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at edu.asu.cem.test.dao.CourseDAOTest.setUp(CourseDAOTest.java:103)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at java.lang.reflect.Method.invoke(Method.java:585)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.junit.internal.runners.MethodRoadie.runBefores(MethodRoadie.java:122)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:86)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:138)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:125)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.apache.maven.surefire.Surefire.run(Surefire.java:132)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at java.lang.reflect.Method.invoke(Method.java:585)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:308)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:879)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Caused by: java.sql.BatchUpdateException: failed batch&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hsqldb.jdbc.jdbcStatement.executeBatch(Unknown Source)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hsqldb.jdbc.jdbcPreparedStatement.executeBatch(Unknown Source)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    ... 44 more&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;I had made several changes since running the tests, so I had to think about what might be making a database call crash.  Luckily, I was able to remember, but I have spent hours debugging these before.  I wish the JDBC exception was floated to a higher point in the exception chain so it would be displayed.  In this case, all I had to do was set a value for the fields that were no longer nullable.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2756255475600800190?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2756255475600800190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2756255475600800190' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2756255475600800190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2756255475600800190'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/05/hibernate-error-reporting.html' title='Hibernate error reporting'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-8670760194719075803</id><published>2008-04-29T15:23:00.002-07:00</published><updated>2008-04-29T15:30:05.362-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>MySQL Feature Bingo</title><content type='html'>Using newish features in MySQL is kind of like playing bingo.  Especially if you don't control the version of the server you are working with.  Here are some excerpts from the official manual that illustrate this point:&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/triggers.html"&gt;Support for triggers is included beginning with MySQL 5.0.2.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Before MySQL 5.0.10, triggers cannot contain direct references to tables by name.&lt;/li&gt;&lt;li&gt;The DEFINER clause specifies the MySQL account to be used when checking access privileges at trigger activation time. It was added in MySQL 5.0.17.&lt;/li&gt;&lt;li&gt;From MySQL 5.0.17 on, MySQL checks trigger privileges like this:&lt;/li&gt;&lt;li&gt;In MySQL Server 3.23.44 and up, the InnoDB storage engine supports checking of foreign key constraints&lt;/li&gt;&lt;li&gt;As of MySQL 4.1.1, mysqldump generates dump files that take advantage of this capability automatically when they are reloaded.&lt;/li&gt;&lt;li&gt;Views (including updatable views) are implemented beginning with MySQL Server 5.0.1.&lt;/li&gt;&lt;li&gt;Beginning with MySQL 5.0.3, the grant system takes stored routines into account as follows:&lt;/li&gt;&lt;li&gt;As of MySQL 5.0.1, a stored procedure or function is associated with a particular database.&lt;/li&gt;&lt;li&gt;Multiple SELECT statements generate multiple result sets, so the client must use a MySQL client library that supports multiple result sets. This means the client must use a client library from a version of MySQL at least as recent as 4.1.&lt;/li&gt;&lt;/ul&gt;...and the list goes on of course.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-8670760194719075803?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/8670760194719075803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=8670760194719075803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8670760194719075803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8670760194719075803'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/04/mysql-feature-bingo.html' title='MySQL Feature Bingo'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2230507711723674196</id><published>2008-04-21T13:56:00.004-07:00</published><updated>2008-04-21T14:04:47.888-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='school'/><title type='text'>Online Learning Systems and Search</title><content type='html'>Back when I was a CS undergrad, Blackboard was not very popular yet (at least among the nerdy CS faculty).  Most classes had a class web site involving a tilde, the professor's username and some quick and dirty HTML.  They were generally extremely simple, concise, and easy to navigate.  Additionally, they were open to the public either out of intention or lack of effort to secure them.  As a result, one could visit the ASU web site and search for a class like CSE 340 and find a collection of class web sites with syllabi, assignments, etc.  This was really useful for getting a feel for a class and/or professor's style before actually registering for it.  You could read the syllabus and see what material would be covered, whether group work would be involved, how it would be graded, etc.  It was all very nice.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, everyone uses Blackboard and all of the course resources are on lockdown (perhaps for the reverse reasons as they were previously public).  You pretty much can't find anything useful if you search for a class number on the ASU web site, based on my quick testing.  I suppose this is a good thing, because many professors consider such materials part of the intellectual property and don't want them to be freely available, but I think quite a few wouldn't mind if prospective enrollees were able to read through the course materials.  Perhaps an opencourseware system is the answer.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2230507711723674196?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2230507711723674196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2230507711723674196' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2230507711723674196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2230507711723674196'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/04/online-learning-systems-and-search.html' title='Online Learning Systems and Search'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5589656278036809869</id><published>2008-04-16T09:42:00.002-07:00</published><updated>2008-04-16T09:51:00.930-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Suck-u-remote</title><content type='html'>Today's annoying software of the day would be Checkpoint's SecuRemote.  This program is a typical firewall/VPN client.  Overzealous security enthusiasts push their draconian ideas of how a computer should (not) work on us, and productivity grinds to a halt.  I'm not much of an expert, but SecuRemote apparently uses something called an "encryption domain" to specify which hosts are behind the firewall.  If you have the software installed, it will pop up a box to connect whenever you attempt to connect to one of the machines in the encryption domain.  If you cancel this box, your computer will be unable to access the host in question, regardless of the fact that you may be trying to access non-firewalled ports.  Add to the situation a bunch of IT people that install this software on everyone's computers (most of whom do not even have an account on the firewall), and you have an end-user nightmare, which I might add is quite difficult to diagnose if you don't know they have it installed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5589656278036809869?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5589656278036809869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5589656278036809869' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5589656278036809869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5589656278036809869'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/04/suck-u-remote.html' title='Suck-u-remote'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2515208203758099222</id><published>2008-04-15T21:14:00.002-07:00</published><updated>2008-04-15T21:19:19.384-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Windows Vista backup is useless</title><content type='html'>I recently upgraded the hard drive in my Macbook Pro.  It has Leopard and Windows Vista on it.  In order to prepare for the hard drive upgrade, I did a Time Machine backup with Leopard, as well as backing up my home directory.  For Vista, I ran the full computer backup and the "files backup" and told it to back up all files.  I reinstalled Leopard and everything worked fine.  I booted Vista with the CD and told it to restore from my full backup.  It proceeded to do so, but destroyed my Leopard installation in the process.  I reinstalled Leopard and restored from the Time Machine backup.  I reinstalled a fresh version of Vista.  I did a full restore of my files in Vista.  I proceeded to go into my drivers folders to install device drivers in Vista and all of the driver files were missing.  It also restored various programs to c:\program files, minus all exe files.  So now, I have no device drivers, no programs, and my Vista is useless.  I also cannot find any way to extract any files out of the "full PC" backup.  I used to think people were just being Microsoft haters when they said Vista sucks, but I truly cannot believe that they spent so much time and money developing something with such a useless backup solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2515208203758099222?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2515208203758099222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2515208203758099222' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2515208203758099222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2515208203758099222'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/04/windows-vista-backup-is-useless.html' title='Windows Vista backup is useless'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-132627305478544477</id><published>2008-04-15T17:06:00.001-07:00</published><updated>2008-04-15T17:08:02.882-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Automagic</title><content type='html'>The word automagic is awful.  It's like one of those things that computer nerds throw around thinking they are very witty, when really the word automatic would work perfectly fine.  I wish they would stop.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-132627305478544477?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/132627305478544477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=132627305478544477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/132627305478544477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/132627305478544477'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/04/automagic.html' title='Automagic'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2624688315367641873</id><published>2008-04-04T17:31:00.003-07:00</published><updated>2008-04-04T17:33:34.714-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>$109 million</title><content type='html'>There is a lot of buzz today about the Clintons making $109 million from 2001-2007.  I personally don't care and I don't think they should have been pressured to disclose their tax returns.  It's personal business and there's no reason they should have to.  But, I have to say, I don't know why Hillary would want to aspire become the most busy and stressed out person in the world if she has that much money.  I'd retire.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2624688315367641873?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2624688315367641873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2624688315367641873' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2624688315367641873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2624688315367641873'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/04/109-million.html' title='$109 million'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-3238653753742292383</id><published>2008-04-02T11:25:00.004-07:00</published><updated>2008-04-02T14:13:12.455-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tv'/><title type='text'>Suck-you-in TV</title><content type='html'>Lately, the mass media has been making lots of blunders when it comes to modernizing itself.  The music industry constantly shoots itself in the foot and the movie industry is now &lt;a href="http://blog.netflix.com/2007/08/instant-watching-on-mac-firefox-and.html"&gt;following suit&lt;/a&gt;.  TV, however is innovating at an amazing rate.  DVD box sets that cost &lt;a href="http://www.amazon.com/West-Wing-Complete-Collection/dp/B000HC2LI0/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=dvd&amp;amp;qid=1207160976&amp;amp;sr=8-1"&gt;exorbidant sums of money&lt;/a&gt;, cable rates being ridiculously high, and DVR's sucking more money out of consumers.  But one of the key things that I would like to highlight is Suck-you-in TV.  You know that friend that can't hang out tonight because they have to watch Lost?  Well, the &lt;a href="http://online.wsj.com/article/SB120709012659781613.html?mod=hps_us_editors_picks"&gt;verdict is in&lt;/a&gt;.  TV actually makes you less happy than hanging out with your friends and doing things that actually use your brain.  TV companies have discovered that it is really easy to suck people in by making shows that are at least slightly interesting and have a story line that absolutely requires that you don't miss an episode.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Every time you get sucked in to one of these shows, it deletes at least one hour of productive or happiness-inducing time from every week you have for all of eternity.  If you get sucked into five shows, you are looking at five hours a week, 260 hours a year.  Imagine what you could do with 260 random hours.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, next time someone tells you how awesome Lost is and how you should start watching it, you should ignore them.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-3238653753742292383?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/3238653753742292383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=3238653753742292383' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3238653753742292383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3238653753742292383'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/04/suck-you-in-tv.html' title='Suck-you-in TV'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5558395019470995852</id><published>2008-03-22T23:21:00.003-07:00</published><updated>2008-12-10T18:53:16.234-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Safari/Windows</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F0yOcylvDVs/R-nR7VsNSwI/AAAAAAAAACU/wOBhNGeAzkQ/s1600-h/safari.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_F0yOcylvDVs/R-nR7VsNSwI/AAAAAAAAACU/wOBhNGeAzkQ/s320/safari.PNG" alt="" id="BLOGGER_PHOTO_ID_5181903663631518466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;There's been a lot of noise online about Safari 3.1 installing itself on Windows for people with iTunes.  I actually had to try in order to get it to install on mine.  But, I have to say, it totally sucks.  I think I tried Safari 2 on Windows a while ago, and thought it was ok, but Firefox was better.  Now they've gone way overboard trying to OS X-ify it in the way it looks.  Try it out and see what I mean.  They pretty much threw away all of the built-in Windows controls and rewrote them to match OS X.&lt;br /&gt;&lt;br /&gt;This is particularly interesting because I've been running into a lot of Apple fanboys on forums talking about Java on the iPhone and saying how the Java look and feel will destroy the iPhone.  I don't think any of these people have tried Java since 1996 or so, much less on a cell phone where the J2ME controls usually match up with the native UI of the phone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5558395019470995852?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5558395019470995852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5558395019470995852' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5558395019470995852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5558395019470995852'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/03/safariwindows.html' title='Safari/Windows'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_F0yOcylvDVs/R-nR7VsNSwI/AAAAAAAAACU/wOBhNGeAzkQ/s72-c/safari.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-4180297781464479437</id><published>2008-03-11T19:53:00.004-07:00</published><updated>2008-12-10T18:53:16.454-07:00</updated><title type='text'>FYI: Bank of America and the Post Office, you both suck!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F0yOcylvDVs/R9dG5iXtweI/AAAAAAAAACM/dc80Gp_j7j4/s1600-h/bofasucks.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_F0yOcylvDVs/R9dG5iXtweI/AAAAAAAAACM/dc80Gp_j7j4/s320/bofasucks.PNG" alt="" id="BLOGGER_PHOTO_ID_5176684250978435554" border="0" /&gt;&lt;/a&gt;Let me tell you a story while I wallow in my own self pity.  I'm sure you all know that most major banks and the US post office are customer service disasters, so this probably won't phase you.&lt;br /&gt;&lt;br /&gt;About a year ago, I moved into a new condo.  I called up many awful customer service hotlines to update all my addresses.  I got lots of junk mail.  So much junk mail the post office decided my mailbox was too small for it.  They decided to put a hold on my mail and start returning it to senders without asking me. &lt;br /&gt;&lt;br /&gt;Luckily, Bank of America apparently has several customer-friendly (note sarcasm) procedures to deal with such mishaps.  First of all, they of course stop delivering new statements to the address in question.  Second, they also stop posting them in your online account.  Third, they make no attempt to notify you of such events.  Finally, to add a nice twist of &lt;a href="http://www.worsethanfailure.com"&gt;WTF &lt;/a&gt;to it, they display an &lt;span style="font-style: italic;"&gt;error&lt;/span&gt; when you try to view statements.&lt;br /&gt;&lt;br /&gt;So, now here it is, March 11th, corporate taxes are due in less than a week, and I have no bank statements from 2007, and will not have any for "7-10 business days".  I am 95% to blame for this situation, but I still hate corporate America for its assistance in this matter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-4180297781464479437?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/4180297781464479437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=4180297781464479437' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4180297781464479437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4180297781464479437'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/03/fyi-bank-of-america-and-post-office-you.html' title='FYI: Bank of America and the Post Office, you both suck!'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_F0yOcylvDVs/R9dG5iXtweI/AAAAAAAAACM/dc80Gp_j7j4/s72-c/bofasucks.PNG' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2371569681399389320</id><published>2008-03-10T20:27:00.005-07:00</published><updated>2008-12-10T18:53:16.626-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='sakai'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Sakai and the App Builder plugin</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F0yOcylvDVs/R9X-ACXtwdI/AAAAAAAAACA/GyiILVvxZDw/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_F0yOcylvDVs/R9X-ACXtwdI/AAAAAAAAACA/GyiILVvxZDw/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5176322623322046930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So, I am trying to jump into Sakai development by writing a tool that can keep a log of email conversations between instructors and students.  Since I'm new to Sakai, I will probably end up starting over a few times before I figure out the best way to develop.  I decided, at the advice of a coworker to start using &lt;a href="http://www2.caret.cam.ac.uk/rsfwiki/Wiki.jsp?page=Main"&gt;RSF&lt;/a&gt; and the &lt;a href="http://bugs.sakaiproject.org/confluence/display/BOOT/Sakai+App+Builder"&gt;App Builder&lt;/a&gt; plugin.  So far, it's pretty intimidating.  I started by doing a full &lt;a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete"&gt;CRUD&lt;/a&gt; framework, since that is one of the options for the plugin.  I think digesting RSF and the way they set up their Hibernate stuff at the same time is a bit much, so I've gone backwards to starting with their hello world app, which I'm going to try to convert into a number guessing game to give me a handle on session management, RSF, etc.  It seems like there is a pretty serious lack of any tutorials that go beyond &lt;a href="http://aeroplanesoftware.com/sakai-training-videos/"&gt;modifying the hello world to say something different&lt;/a&gt;.  The whole video tutorial thing is pretty cool, so maybe I'll make one if I get far enough along.  But for now, I can recommend starting with hello world if you don't know RSF already.  I can also say that RSF looks pretty nice so far.  Much simpler than JSF but some of the same good ideas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2371569681399389320?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2371569681399389320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2371569681399389320' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2371569681399389320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2371569681399389320'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/03/sakai-and-app-builder-plugin.html' title='Sakai and the App Builder plugin'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_F0yOcylvDVs/R9X-ACXtwdI/AAAAAAAAACA/GyiILVvxZDw/s72-c/Picture+1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-450902682560758099</id><published>2008-03-10T17:47:00.003-07:00</published><updated>2008-12-10T18:53:16.808-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Web 2.0 idea</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F0yOcylvDVs/R9XXRCXtwcI/AAAAAAAAAB4/jMvQoqZ7hsg/s1600-h/ogre01.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 147px; height: 130px;" src="http://1.bp.blogspot.com/_F0yOcylvDVs/R9XXRCXtwcI/AAAAAAAAAB4/jMvQoqZ7hsg/s320/ogre01.jpg" alt="" id="BLOGGER_PHOTO_ID_5176280034426339778" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ok, so I think I just came up with a great web 2.0 idea.  It would be kind of like delicious on crack.  The idea is that you take a snippet of a web page, like a quote, and you "bookmark" it, then you can annotate it with comments.  Like, for example, when you are reading some documentation about some computer programming nonsense and the guy that wrote it says something really nerdy, you can bookmark it along with your commentary ("NERDS!") and this picture of Ogre from Revenge of the Nerds.  Then a person can see the snippet and your commentary, and clicking on it brings them to the web page which you found it on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-450902682560758099?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/450902682560758099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=450902682560758099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/450902682560758099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/450902682560758099'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/03/web-20-idea.html' title='Web 2.0 idea'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_F0yOcylvDVs/R9XXRCXtwcI/AAAAAAAAAB4/jMvQoqZ7hsg/s72-c/ogre01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7631854140540018635</id><published>2008-03-10T15:33:00.004-07:00</published><updated>2008-03-10T15:40:21.927-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Leopard terminal color rotate</title><content type='html'>I used to use &lt;a href="http://www.macosxhints.com/article.php?story=20040823015557368"&gt;this&lt;/a&gt; trick to rotate colors between terminal windows.  When I upgraded to Leopard, the windows stopped being transparent, which sucked.  I have finally come up with a solution that uses a different technique.  You will need to create several terminal profiles for different color schemes.  The cool thing about this way of doing it is that you can use different transparency settings for different colors.  You should call the new profiles "rotate X" where X is a number.  Then you install this script as /Users/alwold/setcolor.sh or some such thing:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span style="font-family:courier new;"&gt;#!/bin/sh&lt;br /&gt;if [ -e ~/.lastterm ]; then&lt;br /&gt;  LAST_PROFILE=`cat ~/.lastterm`&lt;br /&gt;fi&lt;br /&gt;if [ "$LAST_PROFILE" == "" ]; then&lt;br /&gt;  LAST_PROFILE=1&lt;br /&gt;else&lt;br /&gt;  LAST_PROFILE=$(($LAST_PROFILE+1))&lt;br /&gt;fi&lt;br /&gt;if [ "$LAST_PROFILE" == "6" ]; then&lt;br /&gt;  LAST_PROFILE=1&lt;br /&gt;fi&lt;br /&gt;echo tell application \"Terminal\" to set current settings of first window to settings set \"rotate $LAST_PROFILE\" |osascript&lt;br /&gt;echo $LAST_PROFILE &gt; ~/.lastterm&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Finally, you need to call that script from your .profile (or you can just put the whole script in your .profile).  Also, the script assumes you have rotate 1 - rotate 5.  If your number of profiles is different, change the 6 accordingly.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7631854140540018635?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7631854140540018635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7631854140540018635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7631854140540018635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7631854140540018635'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/03/leopard-terminal-color-rotate.html' title='Leopard terminal color rotate'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7991001933706903096</id><published>2008-03-06T16:43:00.003-07:00</published><updated>2008-03-06T16:48:04.723-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Obligatory iPhone post</title><content type='html'>Today, Apple announced the iPhone SDK, including an actual download.  This was sort of unexpected, since the rumors indicated it would be something unpolished.  This is cool.  But, what is perhaps even more cool is their distribution model.  They do have things on "lockdown", but the barriers to entry are lower than any other carrier model I've ever seen.  Developing with the SDK is free, registration in the program is $99, which seems to be the only cost to publish your app.  Revenue share is 70%, which is much higher than typical carriers.  Free apps are allowed, which is not available on any other carrier that I'm aware of.  This is almost enough to make it viable to use a non-hacked phone.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, I just need to free up some hard drive space so I can actually install the giant 4 gig SDK!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7991001933706903096?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7991001933706903096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7991001933706903096' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7991001933706903096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7991001933706903096'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/03/obligatory-iphone-post.html' title='Obligatory iPhone post'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-4052303672784324514</id><published>2008-02-26T09:03:00.003-07:00</published><updated>2008-02-26T09:14:16.255-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trendy'/><title type='text'>Diver down flags</title><content type='html'>What's up with all these people driving around in Phoenix with these &lt;a href="http://en.wikipedia.org/wiki/Image:Diver_Down_flag.svg"&gt;diver down&lt;/a&gt; flags plastered all over their cars?  Last time I checked we are in the middle of a desert...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-4052303672784324514?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/4052303672784324514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=4052303672784324514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4052303672784324514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4052303672784324514'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/02/diver-down-flags.html' title='Diver down flags'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2891637394865530252</id><published>2008-02-19T11:19:00.002-07:00</published><updated>2008-02-19T11:23:55.062-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysqlsucks'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>My favorite web browser and database, together at last!</title><content type='html'>Today, I was surfing the &lt;a href="http://dev.mysql.com/doc/"&gt;MySQL documentation site&lt;/a&gt;, and I noticed they have their manual available as &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Compiled_HTML_Help"&gt;CHM files&lt;/a&gt;.  CHM files are only readable on Windows with Internet Explorer.  Not only that, but they have been know to have &lt;a href="http://www.winwriters.com/security.htm"&gt;security holes&lt;/a&gt; in the past.  As if running IE did not put you at enough risk.  Awesome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2891637394865530252?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2891637394865530252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2891637394865530252' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2891637394865530252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2891637394865530252'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/02/my-favorite-web-browser-and-database.html' title='My favorite web browser and database, together at last!'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7156886364544778964</id><published>2008-02-15T12:03:00.009-07:00</published><updated>2008-03-25T16:05:55.896-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='quercus'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Drupal 5.7 on Resin 3.1.4</title><content type='html'>So, in case you didn't hear, &lt;a href="http://www.caucho.com/"&gt;Caucho&lt;/a&gt; has a component called &lt;a href="http://quercus.caucho.com/"&gt;Quercus&lt;/a&gt; built into their &lt;a href="http://www.caucho.com/resin-3.1/"&gt;Resin&lt;/a&gt; product which is a pure Java PHP interpreter.  With this product, it is claimed that one can achieve &lt;a href="http://www.workhabit.org/resin-backed-php-drives-4x-performance-improvements-drupal"&gt;4x performance gains&lt;/a&gt; with &lt;a href="http://drupal.org/"&gt;Drupal&lt;/a&gt; (phew...that was a lot of links).  The concept of being able to call into Java code as well seems appealing to me.  Although Drupal is now at version 6.0, I tried it with 5.7, since I know most modules work with 5.x, but I'm not sure about 6.  Here's a quick guide...&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Download Caucho Resin 3.1.4 (open source)&lt;/li&gt;&lt;li&gt;Download Drupal 5.7&lt;/li&gt;&lt;li&gt;Unzip Resin&lt;/li&gt;&lt;li&gt;Put a copy of &lt;a href="http://dev.mysql.com/downloads/connector/j/"&gt;mysql JDBC driver&lt;/a&gt; in the lib directory under resin&lt;/li&gt;&lt;li&gt;Put a copy of &lt;a href="http://java.sun.com/products/javamail/"&gt;JavaMail&lt;/a&gt; mail.jar in the lib directory also&lt;/li&gt;&lt;li&gt;Create mysql database for drupal and a user to access it&lt;/li&gt;&lt;li&gt;Go into webapps under the resin directory&lt;/li&gt;&lt;li&gt;Unzip drupal here&lt;/li&gt;&lt;li&gt;Rename drupal-5.7 to drupal&lt;/li&gt;&lt;li&gt;Create WEB-INF/resin-web.xml under the drupal directory:&lt;br /&gt;&lt;pre&gt;&lt;web-app xmlns="http://caucho.com/ns/resin"&gt;&lt;web-app xmlns="http://caucho.com/ns/resin"&gt;&lt;br /&gt;&lt;database name="jdbc/drupal"&gt;&lt;br /&gt;&lt;driver type="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"&gt;&lt;br /&gt;  &lt;url&gt;jdbc:mysql://localhost:3306/databasename&lt;/url&gt;&lt;br /&gt;  &lt;user&gt;username&lt;/user&gt;&lt;br /&gt;  &lt;password&gt;password&lt;/password&gt;&lt;br /&gt;&lt;/driver&gt;&lt;br /&gt;&lt;/database&gt;&lt;br /&gt;&lt;br /&gt;&lt;servlet name="php" class="com.caucho.quercus.servlet.QuercusServlet"&gt;&lt;br /&gt;&lt;init database="jdbc/drupal"&gt;&lt;br /&gt;&lt;/init&gt;&lt;br /&gt;&lt;br /&gt;&lt;servlet-mapping pattern="*.php" name="php"&gt;&lt;br /&gt;&lt;welcome-file-list&gt;&lt;welcome-file&gt;index.php&lt;/welcome-file&gt;&lt;/welcome-file-list&gt;&lt;br /&gt;&lt;br /&gt;&lt;rewrite-dispatch&gt;&lt;br /&gt;&lt;dispatch regexp="\.(php|gif|css|jpg|png|ico|js)"&gt;&lt;br /&gt;&lt;forward regexp="^/" target="/index.php?q="&gt;&lt;br /&gt;&lt;/forward&gt;&lt;br /&gt;&lt;/dispatch&gt;&lt;br /&gt;&lt;/rewrite-dispatch&gt;&lt;/servlet-mapping&gt;&lt;/servlet&gt;&lt;/web-app&gt;&lt;servlet name="php" class="com.caucho.quercus.servlet.QuercusServlet"&gt;&lt;servlet-mapping pattern="*.php" name="php"&gt;&lt;rewrite-dispatch&gt;&lt;dispatch regexp="\.(php|gif|css|jpg|png|ico|js)"&gt;&lt;br /&gt;&lt;/dispatch&gt;&lt;br /&gt;&lt;/rewrite-dispatch&gt;&lt;/servlet-mapping&gt;&lt;/servlet&gt;&lt;/web-app&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Modify drupal/sites/default/settings.php&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Change database name&lt;/li&gt;&lt;li&gt;Change username/password&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Start resin (java -jar lib/resin.jar)&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Go to &lt;a href="http://localhost:8080/drupal/install.php"&gt;http://localhost:8080/drupal/install.php&lt;/a&gt; (you need to explicitly go to install.php, since drupal gets confused about the modified settings.php, but no data in the db)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Your drupal should now be functional&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7156886364544778964?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7156886364544778964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7156886364544778964' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7156886364544778964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7156886364544778964'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/02/drupal-57-on-resin-314.html' title='Drupal 5.7 on Resin 3.1.4'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-969661859988590271</id><published>2008-02-15T11:23:00.002-07:00</published><updated>2008-02-15T11:30:05.565-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coffee'/><title type='text'>Coffee and cheap refills</title><content type='html'>So, when I used to work in the ghetto, I drove through downtown Chandler on the way to work, and I used to stop by the Starbucks in the San Marcos hotel.  One day I brought my own mug, and they only charged me 50 cents or so to fill it up, which was awesome, so I started bringing my mug and going there all the time.  When our office moved, I tried doing that at another location, but they charged me full price, so I started making my own french press coffee every morning.  I can't believe I actually had the motivation to do that.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now that I work at ASU, I walk by the law college and bookstore every morning, which both have a coffee shop.  I used to go to the law college, since it is a more independent coffee shop, but I somehow discovered that the cheap refill thing works at the bookstore Starbucks.  This morning, however, I stopped by the Starbucks by my house and it was full price.  I don't get it, what is their deal with this policy?  Does anyone know?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-969661859988590271?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/969661859988590271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=969661859988590271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/969661859988590271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/969661859988590271'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/02/coffee-and-cheap-refills.html' title='Coffee and cheap refills'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-8963695257156057279</id><published>2008-02-12T20:31:00.002-07:00</published><updated>2008-02-12T20:36:33.741-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>MySQL FTW</title><content type='html'>This little gem I encountered today speaks for itself...&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;div&gt;mysql&gt; select count(*) from Principal where status = ' ' and status = '';&lt;/div&gt;&lt;div&gt;+----------+&lt;/div&gt;&lt;div&gt;| count(*) |&lt;/div&gt;&lt;div&gt;+----------+&lt;/div&gt;&lt;div&gt;|    39021 | &lt;/div&gt;&lt;div&gt;+----------+&lt;/div&gt;&lt;div&gt;1 row in set (0.35 sec)&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-8963695257156057279?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/8963695257156057279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=8963695257156057279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8963695257156057279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8963695257156057279'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/02/mysql-ftw.html' title='MySQL FTW'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-1000858698844054523</id><published>2008-02-06T17:09:00.000-07:00</published><updated>2008-02-06T17:19:32.601-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='mysqlsucks'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>MySQL suckism of the day...oh and a PHP one too</title><content type='html'>MySQL supports a &lt;a href="http://en.wikipedia.org/wiki/Comma-separated_values"&gt;CSV&lt;/a&gt; import mechanism, which is exposed via phpMyAdmin.  Actually, phpMyAdmin has two options, one of which I assume uses PHP's &lt;a href="http://www.php.net/fgetcsv"&gt;fgetcsv&lt;/a&gt; function (which sucks, BTW).  Last week I had to import some CSV data into a database and process it.  First I tried the default option in phpMyAdmin, which resulting in a seemingly random number of rows in the db, completely unequal to the number of lines in the CSV file.  Then I tried "CSV using LOAD DATA" which uses the MySQL CSV import functionality.  Everything seemed to work ok (MySQL loves to not report problems as errors).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I was surfing along, I found out that some of the fields in my database (which were of type nullable int), were being set to 0 when no value was in the file.  I checked the file, and there was clearly no data in the field (it was two commas with nothing between them).  After a little googlage, I found lots of discussion about the problem, but no solution of course.  I'm not sure if the developers realized it, but databases support null types so that we can semantically express a lack of defined value.  An undefined value is not the same as a value of zero; this is like day 1 of computer science!  So, the CSV import of MySQL sucks.  Big surprise!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-1000858698844054523?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/1000858698844054523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=1000858698844054523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1000858698844054523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1000858698844054523'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/02/mysql-suckism-of-dayoh-and-php-one-too.html' title='MySQL suckism of the day...oh and a PHP one too'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5418991694790544798</id><published>2008-02-04T16:46:00.000-07:00</published><updated>2008-02-04T16:49:43.174-07:00</updated><title type='text'>Abercrombie and Fitch...pwned</title><content type='html'>This weekend I was at the mall, and I walked by Abercrombie and Fitch.  There was a giant picture of a guy with his ass crack sticking out, and I thought it was nasty.  Then today I read the WSJ and found &lt;a href="http://blogs.wsj.com/law/2008/02/04/virginia-to-abercrombie-fitch-clean-up-your-advertising/?mod=homeblogmod_lawblog"&gt;this&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;On Saturday, police in Virginia carted away two promotional photographs from the A&amp;amp;F store in Virginia Beach’s Lynnhaven Mall.&lt;/blockquote&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; Excellent.  The article goes on to describe the picture in question, and it is indeed the one I saw.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5418991694790544798?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5418991694790544798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5418991694790544798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5418991694790544798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5418991694790544798'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/02/abercrombie-and-fitchpwned.html' title='Abercrombie and Fitch...pwned'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7559693844873513168</id><published>2008-01-23T16:29:00.000-07:00</published><updated>2008-01-23T16:55:38.438-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tv'/><title type='text'>Cable is stupid</title><content type='html'>A few months ago, I looked at my cable bill and it was something like $125/month.  That is a lot of money.  I looked at Cox's prices online and found one thing I could easily save money on.  They now have several tiers of Internet service, and it is $60 for the highest.  When I subscribed, I'm sure I didn't pick that one, but they "transitioned" me to it at some point.  It is $45 for the middle one and $30 for the lowest.  So, I called them up and asked them to switch me to the $30 one.  They told me it would be horrible (it is 1.5 down/256 up), so I gave in and took the middle one.  It still saved $15/month ($180/year), and I didn't even notice the difference.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The bill, however, is still too high, so I've been thinking about canceling the video service.  You have to think about what you are getting with it:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Lots of reruns of network shows (you can get this with Netflix via DVD sets)&lt;/li&gt;&lt;li&gt;MTV (rots your brains)&lt;/li&gt;&lt;li&gt;Some sports you can't get on network tv&lt;/li&gt;&lt;li&gt;Cable shows (lots of them are on Netflix)&lt;/li&gt;&lt;li&gt;DVR (there are other options like Tivo, Windows Media Center, MythTV)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So really, most everything you need is available with broadcast TV and a $10 Netflix subscription.  The only thing that is really missing is sports.  So, everyone should go cancel their cable right now!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7559693844873513168?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7559693844873513168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7559693844873513168' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7559693844873513168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7559693844873513168'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2008/01/cable-is-stupid.html' title='Cable is stupid'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-4254640876523828889</id><published>2007-12-31T09:34:00.000-07:00</published><updated>2007-12-31T15:01:29.436-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Keyboards</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://al.wold.org/~alwold/IMG_1066.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px;" src="http://al.wold.org/~alwold/IMG_1066.JPG" border="0" alt="" /&gt;&lt;/a&gt;If you are a big nerd like me, you probably use a bunch of different operating systems.  Over the past few years, I have switched between Mac, Windows, and Linux pretty freely.  It's easy to switch from Windows to Linux and back, and a lot of the keyboard shortcuts you are used to work the same.  When you switch to a Mac, however, things are quite different.  Instead of using the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;CTRL&lt;/span&gt; key with your favorite shortcuts, you use the Apple key, which is really where the ALT key usually is.  But, sometimes you still use the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;CTRL&lt;/span&gt; key.  When you are using a cross-platform app like &lt;a href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt;, this is even more frustrating, because it is the same exact program, but uses different key sequences.  Since I have been alternating mostly between Mac and Windows lately, I have gotten use to the "feel" of the different keyboards, and my hands get used to switching.  If I try to use a PC keyboard on a Mac, however, I go crazy.  So, my hopes of having a KVM to switch between my Macbook Pro and my PC at home are shattered. So my question is, why Steve did you have to go and be all hip and change the keyboard?  Everyone else uses the same one!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-4254640876523828889?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/4254640876523828889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=4254640876523828889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4254640876523828889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4254640876523828889'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/12/keyboards.html' title='Keyboards'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-6182613892256320876</id><published>2007-12-11T10:46:00.000-07:00</published><updated>2007-12-11T11:07:02.450-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='xen'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Xen, HVM, and running out of memory</title><content type='html'>I think I'm in an uncommon situation, but I needed to set up lots of HVM (full virtualization) hosts on my Xen install, since the dom0 is a different distribution (debian) than the domU hosts (Fedora).  With paravirtualization, the "balloon driver" takes care of memory allocation, I think.  But in HVM mode, you actually have to have the amount of memory required by your VM available outside of dom0.  If you don't have enough, you get an error like this:&lt;br /&gt;&lt;blockquote&gt;Error: Error creating domain: (12, 'Cannot allocate memory')&lt;/blockquote&gt;&lt;br /&gt;It took forever to figure this out, but the key is to limit dom0's memory, so that you have enough for your VMs.  The machine I'm working with has 16 gigs, so I limited dom0 to 1 gig by using this line in the menu.lst for grub:&lt;br /&gt;&lt;blockquote&gt;kernel          /xen-3.0.3-1-amd64.gz dom0_mem=1024M&lt;/blockquote&gt;&lt;br /&gt;Yours will probably look different, but the key is the dom0_mem parameter.  Once you add that, you will have 15 gig left for allocating virtual machines.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-6182613892256320876?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/6182613892256320876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=6182613892256320876' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6182613892256320876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6182613892256320876'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/12/xen-hvm-and-running-out-of-memory.html' title='Xen, HVM, and running out of memory'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-3774538795135288483</id><published>2007-12-10T14:15:00.000-07:00</published><updated>2007-12-10T14:23:04.004-07:00</updated><title type='text'>Holiday Cheer</title><content type='html'>I don't know if it was ever the case in my lifetime, but I think people used to get happy and excited about "The Holidays", and be nice to each other.  At least that's what some of the media has led me to believe.  I can't say that I've actually noticed, but I have noticed something.  Right around the start of the holiday shopping season, people seem to get really aggressive and crazy.  It's probably the most noticeable when you are driving.  People are doing a lot of holiday tailgating and giving a lot of holiday angry looks.  So, next time you are out driving around or shopping or whatever, think about that.  You don't want to be &lt;span class="Apple-style-span" style="font-style: italic;"&gt;that guy.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-3774538795135288483?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/3774538795135288483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=3774538795135288483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3774538795135288483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3774538795135288483'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/12/holiday-cheer.html' title='Holiday Cheer'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-863727774457184868</id><published>2007-11-28T09:46:00.000-07:00</published><updated>2007-11-28T09:53:06.670-07:00</updated><title type='text'>Pictures</title><content type='html'>I think my blog is really boring because it doesn't have any pictures.  I'm jealous of those people that get themselves to carry their camera and take random pictures of interesting stuff during their day.  My brother &lt;a href="http://bobwold.blogspot.com"&gt;Bob&lt;/a&gt; was doing a picture a day project, but that seems to have died.  What I'd like to do, though, is capture a photo that complements whatever I happen to be writing about, as opposed to the picture being the star of the show.  I have a really nice camera, but it is too big to carry around all the time.  If you feel like getting me a smaller one, have a visit to my &lt;a href="http://www.amazon.com/gp/registry/wishlist/ref=sv_wl_4/103-7327418-1714229"&gt;Amazon wish list&lt;/a&gt; and pick one up :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-863727774457184868?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/863727774457184868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=863727774457184868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/863727774457184868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/863727774457184868'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/11/pictures.html' title='Pictures'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7367139301931335037</id><published>2007-11-28T09:34:00.000-07:00</published><updated>2007-11-28T09:45:56.339-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Lethargy and the Apple Wireless Mighty Mouse</title><content type='html'>A little while ago, I bought an &lt;a href="http://www.apple.com/mightymouse/"&gt;Apple Wireless Mighty Mouse&lt;/a&gt;.  It is a pretty nice mouse, and I think my favorite feature is the scroll ball, which can scroll really fast.  Yesterday morning, I noticed that the right click wasn't working like 80% of the time.  I searched and found &lt;a href="http://discussions.apple.com/thread.jspa?threadID=581109&amp;amp;start=0&amp;amp;tstart=0"&gt;this&lt;/a&gt;, which gave me an easy answer...I just have to lift up my left finger while clicking.  It's funny that it took so long for this problem to show up, but whatever.  By the end of the day, I was used to it and the problem was gone.  This morning, however, the problem is back.  I have, therefore, decided that it is probably due to my early morning not-fully-awakeness.  Man, I am really getting bored of sitting at a desk all day.  So there you have it--that is my boring story.  Now I feel like &lt;a href="http://www.theonion.com/content/news_briefs/entire_blogosphere_stunned"&gt;this guy&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7367139301931335037?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7367139301931335037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7367139301931335037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7367139301931335037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7367139301931335037'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/11/lethargy-and-apple-wireless-mighty.html' title='Lethargy and the Apple Wireless Mighty Mouse'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-6110582388946779177</id><published>2007-11-27T10:09:00.000-07:00</published><updated>2007-12-06T10:26:46.275-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Taking photos in Java with the Blackberry</title><content type='html'>According to &lt;a href="http://www.blackberry.com/news/press/2007/pr-27_03_2007-01.shtml"&gt;this press release&lt;/a&gt;, RIM has released the APIs needed to take photos with the Blackberry camera in Java apps.  As far as I have figured out, they have enabled the API to start the camera app, but not an API to listen for new photos.  That isn't particularly horrible, because you can use the File Connection API to open the Blackberry filesystem and monitor for new photos.  The only tricky part is knowing when the camera app has relinquished control back to your app, so you can start looking for the new photos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-6110582388946779177?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/6110582388946779177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=6110582388946779177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6110582388946779177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6110582388946779177'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/11/taking-photos-in-java-with-blackberry.html' title='Taking photos in Java with the Blackberry'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5531971921031434940</id><published>2007-11-15T12:06:00.000-07:00</published><updated>2007-11-15T23:00:11.018-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='mysqlsucks'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Another post about my favorite database</title><content type='html'>Relational databases are really cool.  When you get experienced with them, you can leverage all sorts of features to make sure your data is solid.  A good database schema will provide a good check against buggy code trying to mess up your data.  One of my favorite ways to enforce integrity is the usage of NOT NULL constraints.  I recently added some to a MySQL database I'm working on, and I noticed something unusual...&lt;div&gt;&lt;br /&gt;&lt;pre&gt;mysql&gt; alter table SERVICES add SERVICE_KEY varchar(64) NOT NULL UNIQUE;&lt;br /&gt;Query OK, 1 row affected (0.16 sec)&lt;br /&gt;Records: 1  Duplicates: 0  Warnings: 0&lt;br /&gt;&lt;br /&gt;mysql&gt; describe SERVICES;&lt;br /&gt;+------------------+---------------+------+-----+---------+----------------+&lt;br /&gt;| Field            | Type          | Null | Key | Default | Extra          |&lt;br /&gt;+------------------+---------------+------+-----+---------+----------------+&lt;br /&gt;| SERVICE_ID       | bigint(20)    | NO   | PRI | NULL    | auto_increment |&lt;br /&gt;| DESCRIPTION      | varchar(128)  | YES  |     | NULL    |                |&lt;br /&gt;| COMMENTS         | varchar(64)   | YES  |     | NULL    |                |&lt;br /&gt;| ACTIVE           | varchar(3)    | YES  |     | NULL    |                |&lt;br /&gt;| CREATED_BY       | varchar(128)  | YES  |     | NULL    |                |&lt;br /&gt;| CREATED_DATE     | datetime      | YES  |     | NULL    |                |&lt;br /&gt;| UPDATED_BY       | varchar(128)  | YES  |     | NULL    |                |&lt;br /&gt;| UPDATED_DATE     | datetime      | YES  |     | NULL    |                |&lt;br /&gt;| TYPE             | varchar(4)    | YES  |     | NULL    |                |&lt;br /&gt;| URL              | varchar(1024) | YES  |     | NULL    |                |&lt;br /&gt;| MAX_TRAN_THREADS | smallint(6)   | YES  |     | NULL    |                |&lt;br /&gt;| MAX_SYNC_THREADS | smallint(6)   | YES  |     | NULL    |                |&lt;br /&gt;| SERVICE_KEY      | varchar(64)   | NO   | UNI |         |                |&lt;br /&gt;+------------------+---------------+------+-----+---------+----------------+&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you may notice, the default value is somewhat nebulous on this new column.  Normally the default will show NULL, which is good.  In this case, it looks like it is either "nothing" which I would equate to NULL, or '', which is horrible because it breaks the whole purpose of having the constraint.  Since I trust MySQL to generally do the wrong thing, I test it:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;mysql&gt; insert into SERVICES (SERVICE_ID) values (NULL);&lt;br /&gt;Query OK, 1 row affected, 1 warning (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And of course, it is taking my null SERVICE_KEY value and turning it into ''.  So now, if my app is broken and trying to insert null into SERVICE_KEY, MySQL will save the day and "fix" the data, completely eliminating any errors from being produced that would have revealed the bug in my code.&lt;br /&gt;&lt;br /&gt;To quote the famous fashion designer Mugatu, I feel like I'm taking crazy pills!  Everyone seems to love MySQL, but it seems completely obvious to me that it is not even a candidate to be considered when writing anything moderately serious.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5531971921031434940?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5531971921031434940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5531971921031434940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5531971921031434940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5531971921031434940'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/11/another-post-about-my-favorite-database.html' title='Another post about my favorite database'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-6023335731846219328</id><published>2007-11-07T23:42:00.000-07:00</published><updated>2007-11-07T23:48:56.912-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>The HD format war</title><content type='html'>If you are a big nerd like me, you probably know that there are now two formats for publishing high definition movies, HD DVD and Blu-Ray.  Up until recently, from what I can tell, most normal people don't care at all.  The players were around $500 each and only play one format, so like half of the movies available.  So to view all movies, you need to spend about $1000 for both players, which is ridiculous.  Now, there have been sales where you can buy an HD DVD player for under $100, which is pretty cool, but you still can only play half of the movies.  Anyway, there is a really funny flamewar waging on the Internet, and it is totally ridiculous.  People are actually taking sides, which blows my mind.  Anyway, here are a couple links:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.engadget.com/2007/11/07/slysofts-latest-anydvd-beta-cracks-bd/"&gt;http://www.engadget.com/2007/11/07/slysofts-latest-anydvd-beta-cracks-bd/&lt;/a&gt; (see the comments)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.engadget.com/2007/11/07/format-war-gets-more-warlike/"&gt;http://www.engadget.com/2007/11/07/format-war-gets-more-warlike/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-6023335731846219328?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/6023335731846219328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=6023335731846219328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6023335731846219328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6023335731846219328'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/11/hd-format-war.html' title='The HD format war'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-1817850152609471754</id><published>2007-11-05T14:01:00.001-07:00</published><updated>2007-11-05T15:04:32.038-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Google Android</title><content type='html'>Today, Google announced their Android environment for mobile phones.  Supposedly, it is an open platform, whatever that means.  It sounded pretty cool until I found out Qualcomm was involved.  If they are involved, it can't be that open.  I also found this quote in the article on &lt;a href="http://www.techcrunch.com/2007/11/05/breaking-google-announces-android-and-open-handset-alliance/"&gt;techcrunch&lt;/a&gt;:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Q: “So if the industry wanted to create completely locked down devices, that would be possible?”&lt;br /&gt;&lt;br /&gt;And Rubin: “Yes.”&lt;br /&gt;&lt;br /&gt;Schmidt: “While that is possible, it is highly unlikely.” Uh-huh, what planet does he live on?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So my conclusion is, they may be able to produce a cool platform, but Qualcomm is going to mess it all up.  This isn't going to provide significant innovation.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-1817850152609471754?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/1817850152609471754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=1817850152609471754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1817850152609471754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1817850152609471754'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/11/google-android.html' title='Google Android'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7233007252864746185</id><published>2007-11-05T09:56:00.000-07:00</published><updated>2007-11-05T10:01:36.767-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>A2DP in Leopard</title><content type='html'>One of the features I was looking forward to in Leopard is support for Stereo Bluetooth headphones.  I am happy to report that it works, and the UI is much better than ones I've used in Windows (obviously, right?).  Unfortunately, I seem to pick up a lot of interference.  When I first tried them at home, I didn't notice it, so there might just be a lot of interference in my office on campus.  I can see like 5 wireless networks, so it makes sense.  I wonder if I'd have the same problem with a PC.  Maybe I should build a tinfoil box to sit in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7233007252864746185?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7233007252864746185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7233007252864746185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7233007252864746185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7233007252864746185'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/11/a2dp-in-leopard.html' title='A2DP in Leopard'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2882019905426945584</id><published>2007-10-31T11:08:00.000-07:00</published><updated>2007-10-31T11:13:23.656-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Stuffit Expander</title><content type='html'>Stuffit is a terrible program and no longer serves any purpose.  But, for some annoying reason, some people still use it.  If you use it to compress files, please &lt;a href="http://www.tgr.com/weblog/archives/000361.html"&gt;stop doing it&lt;/a&gt;.  If you come across a stuffit file that you need to expand, you have to sell your soul to get a copy of the expander.  Since this is extremely annoying, I am posting it &lt;a href="http://al.wold.org/~alwold/stuffit_exp_12.dmg"&gt;here&lt;/a&gt;, so enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2882019905426945584?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2882019905426945584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2882019905426945584' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2882019905426945584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2882019905426945584'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/10/stuffit-expander.html' title='Stuffit Expander'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-184025688477480023</id><published>2007-10-31T10:36:00.000-07:00</published><updated>2007-10-31T10:40:18.346-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='mysqlsucks'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Two more gripes about mysql</title><content type='html'>&lt;div&gt;First, this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;mysql&gt; grant all on confluence_2_6_0 to dmitsuper@'%' identified by 'xxx';&lt;/span&gt;&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;[alwold@bug ~]$ gunzip -c confluence_2_3_0.dump.gz | mysql -u dmitsuper -p confluence_2_6_0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Enter password: &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;ERROR 1044 (42000): Access denied for user 'dmitsuper'@'%' to database 'confluence_2_6_0'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Second, when I go to fix it (change confluence_2_6_0 to confluence_2_6_0.*), I can use the history in the mysql client to recall the grant line containing the password (so the password is stored in a file somewhere).&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-184025688477480023?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/184025688477480023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=184025688477480023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/184025688477480023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/184025688477480023'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/10/two-more-gripes-about-mysql.html' title='Two more gripes about mysql'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-6674939602777032375</id><published>2007-10-31T10:21:00.000-07:00</published><updated>2007-11-08T10:48:16.153-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Headless Fedora tips</title><content type='html'>Being a computer nerd makes you write ridiculous things like "headless fedora".  If you look up those words in the dictionary, you would think I was talking about hats for people with no head.  Anyway, it seems like a lot of system admin tasks on Fedora, if you look them up on google, refer to the graphical utilities included with it.  Many times it is advantageous to forgo the use of the graphical stuff (like in a headless setup).  Here are a few tips for how to do some things without the gui tools:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Configure the network&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The gui tool &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;system-config-network&lt;/span&gt; will recognize the lack of an X display, and present you with a nice curses (no, not like evil curses, another dumb computer word) based interface.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Change firewall rules&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Run the command &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;system-config-securitylevel&lt;/span&gt;.  The curses version of this program is a little confusing, but you have to go to the Customize button to change firewall rules.  Reloading them remotely is trickier, and I haven't found a great way.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Change startup services&lt;/span&gt;&lt;/div&gt;&lt;div&gt;There is a command which has come with Redhat for a long time called &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ntsysv&lt;/span&gt;.  Just run that and check the boxes for the ones you want.  You can also use the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;chkconfig&lt;/span&gt; command to do it in a more laborious process.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Update: you can reload the firewall rules without disrupting your ssh session by running &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;/etc/init.d/iptables restart&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'times new roman';"&gt;...awesome&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-6674939602777032375?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/6674939602777032375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=6674939602777032375' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6674939602777032375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/6674939602777032375'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/10/headless-fedora-tips.html' title='Headless Fedora tips'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2728063407236351556</id><published>2007-10-25T10:51:00.000-07:00</published><updated>2007-10-25T14:41:54.536-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>iPhone Tech Talk</title><content type='html'>This week, I had the opportunity to go to a talk at the University of Washington about developing apps for the iPhone.  At the moment, development is restricted to web apps, but there is an SDK that is supposed to come out in February which should open up more development avenues.  For now, we are restricted to web apps, so the talk was about that.  As a side note, it is possible to &lt;a href="http://www.google.com/search?q=iphone+jailbreak"&gt;develop apps natively&lt;/a&gt;, but it is completely unsupported by Apple.&lt;br /&gt;&lt;br /&gt;The day after the talk, Apple released most of the presentation materials on their &lt;a href="http://developer.apple.com/iphone/"&gt;iPhone dev site&lt;/a&gt;, so you can check it out there as well.  You have to sign up for an online ADC account, but that is free (although their "security questions" policy is highly obnoxious). &lt;br /&gt;&lt;br /&gt;So, on to the meat of the presentations... The talk was basically broken down into three sections.  First was a discussion of the capabilities of the iPhone web browser.  Next they discussed data (mostly video) capabilities on the iPhone.  Finally, they concluded with a session on designing good looking apps for the iPhone.&lt;br /&gt;&lt;br /&gt;The web browser built into the iPhone is based on Safari 3, which is currently in beta on Windows/Mac, but it will be fully released along with Leopard tomorrow.  Safari is based on &lt;a href="http://www.webkit.org"&gt;WebKit&lt;/a&gt;, which has an open source version.  Three levels of web support were defined: Compatibility, Optimization and iPhone apps.  Basically, the first step to making your web site work with the iPhone is making sure the regular version works with Safari 3 and the limits of the iPhone.  Optimization involves making your site work better with the I/O methods of the iPhone, and iPhone apps use specific Javascript/CSS features of the iPhone.&lt;br /&gt;&lt;br /&gt;The first part, compatibility, basically gives tips on how to keep your CSS and Javascript compatible with standards, rather than just making sure they work with the mainstream browsers.  They mentioned things like using Javascript object detection instead of user agent strings.  Generally, if your site works with Safari 3, you will probably be in good shape.&lt;br /&gt;&lt;br /&gt;The second part is optimization.  There are various tricks you can use to make sure your web site looks good on the iPhone.  For example, the iPhone pretends to be a 980x1091 display and then shrinks the web page, so you can test that on the desktop.  There are also some custom CSS things that set whether or not your web site should be zoomable, or what CSS file to use based on the characteristics of the browser (like screen size).  The CSS media queries are a standard CSS thing, so they will work in other browsers as well.&lt;br /&gt;&lt;br /&gt;Finally, if you are going to try to make a web site specifically for the iPhone, they have some additional recommendations.  You should make use of AJAX, so the app is responsive and interactive, and try to emulate the layouts and styles they use in native iPhone apps.  One of the more interesting things they mentioned was the use of the Canvas object, which is built into most web browsers (excluding IE), and allows drawing custom things on the fly on the screen.&lt;br /&gt;&lt;br /&gt;In the data presentation, the basic flow of data to and from the iPhone was described, most of which is pretty obvious.  Things like calendar data flowing to the phone via iTunes were described.  They also went into some depth about optimizing video for the iPhone.  There are some encoding settings built into Quicktime for the iPhone in Wifi and EDGE modes.  You can encode your video for the various data rates, and create a "Quicktime reference movie" which links to the various copies of the video.  The iPhone will choose the proper video when it is directed to a reference movie on the web.&lt;br /&gt;&lt;br /&gt;The design presentation went over some concepts of how to design your app to match up with the iPhone's native apps.  Most of it was pretty basic stuff.  They did iterate one important point, which is to keep in mind the goal of facilitating what your user wants to achieve.  Getting wrapped up in the details can lead to feature creep and make the flow of the application confusing.  I thought this was a good design concept in general which applies to all applications.&lt;br /&gt;&lt;br /&gt;All in all, the talk was an interesting overview of the dev environment available today, and gave some background into some of the "vibe" of the iPhone.  There were a couple cool things to pick up on, but a lot of noise as well.  While the current environment does provide the tools to achieve quite a bit, I look forward to what might come in the February release of the new iPhone SDK.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2728063407236351556?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2728063407236351556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2728063407236351556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2728063407236351556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2728063407236351556'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/10/iphone-tech-talk.html' title='iPhone Tech Talk'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5791279328915275870</id><published>2007-10-18T16:42:00.000-07:00</published><updated>2007-10-18T16:53:51.972-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Blackberry dev gripes</title><content type='html'>I've been working on a project to port a GPS enabled MIDP app to the Blackberry 8800.  This is the first Blackberry work I've done since the Nextel blackberry 7520 and 7100i's.  Things have changed a bit, but not that much.  The dev environment works pretty well, but I do have a couple gripes.  I think some of my issues have to do with not using the "JDE" they provide.  RIM should really come to grips with the reality that people write apps for many MIDP devices, and it would rarely be practical to use a Blackberry specific IDE.  Anyway, here's my list at the moment:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The 8800 randomly reboots sometimes when you use javaloader to install an app.  I've heard that something similar happens on the 8820, but it prompts you before rebooting.  This really slows down the turnaround on the compile-install-test cycle.&lt;/li&gt;&lt;li&gt;The 4.2.1 JDE comes with a JDWP debugger, which apparently lets you do on-device debugging.  I've gotten it to attach to a device via Eclipse, but it doesn't stop on my breakpoints.  It does output the System.out.println()s to the console though.&lt;/li&gt;&lt;li&gt;Over the air provisioning is clunky on Blackberry.  You have to provide a JAD (which you don't for cable loading, so why is it needed here?), and you have to split the COD file into a bunch of little ones (which I guess explains the need for a JAD).&lt;/li&gt;&lt;/ul&gt;I think I have a few others, but I can't remember them now.  I'll have to add them later...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5791279328915275870?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5791279328915275870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5791279328915275870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5791279328915275870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5791279328915275870'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/10/blackberry-dev-gripes.html' title='Blackberry dev gripes'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5247849469211576530</id><published>2007-10-08T16:35:00.000-07:00</published><updated>2007-10-08T16:36:50.938-07:00</updated><title type='text'>Altoids + water = pain</title><content type='html'>Have you ever tried drinking water after eating an Altoid or some other minty thing?  It's pretty painful.  Weird, isn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5247849469211576530?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5247849469211576530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5247849469211576530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5247849469211576530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5247849469211576530'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/10/altoids-water-pain.html' title='Altoids + water = pain'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-4249884813727450709</id><published>2007-10-02T16:01:00.000-07:00</published><updated>2007-10-02T16:04:33.674-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Java is better than .NET</title><content type='html'>Back at Trimble, I wanted to write some unit tests for our DAO stuff, so I came up with this crazy scheme to run a test SQL server on the local machine.  I had all this custom code set up to prep the database for the test, then run the tests.&lt;br /&gt;&lt;br /&gt;In Java, I am using a HypersonicSQL (is it even called that anymore?) in-memory database to do testing.  It's really fast since it doesn't write to disk, and every time you run the tests, you have a fresh database.  You just inject the HSQL config into the HibernateUtil class and run the tests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-4249884813727450709?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/4249884813727450709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=4249884813727450709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4249884813727450709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4249884813727450709'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/10/java-is-better-than-net.html' title='Java is better than .NET'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7819200666236203589</id><published>2007-07-25T23:13:00.000-07:00</published><updated>2007-07-25T23:30:05.445-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pizza'/><title type='text'>Pizza</title><content type='html'>A couple of weeks ago I was at Nello's and I was just thinking about how good their pizza is and how it seems impossible to reproduce good pizza at home.  Then I thought it would be cool to go on a mission and make a bunch of pizzas and try to improve them until I arrived at something that could compete with pizza from a restaurant.  I started with a little research on the Internet and came across &lt;a href="http://slice.seriouseats.com/jvpizza/"&gt;this page&lt;/a&gt;, which inspired me because the pizza looked awesome.  I told my brother Mike about the idea and he was in.  We started by just eliminating some of the common mistakes of homemade pizza.  We set the oven as high as it could go (550 degrees) and made sure the pizza stone was hot before putting the pizza on it.  I suggested we do the margherita style using fresh mozzarella and plain tomatoes.  We used canned whole skinned tomatoes, then ran them through the Cuisinart.  You can read more about the first few on &lt;a href="http://mikewold.blogspot.com/"&gt;Mike's site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Anyway, today was the first attempt at my house.  My kitchen isn't as well equipped as my mom's, so it was a bit more work.  We had to make the dough without the Cuisinart, but otherwise it wasn't too bad.  Today we did the Nello's clone, using whole slices of tomato with mozzarella on top.  This time we used gangster style mozzarella from Safeway, but it was pretty good.  Anyway, here's the pizza before cooking:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://al.wold.org/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=13151&amp;amp;g2_serialNumber=2"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://al.wold.org/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=13151&amp;amp;g2_serialNumber=2" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;...and here it is done:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://al.wold.org/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=13168&amp;amp;g2_serialNumber=2"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://al.wold.org/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=13168&amp;amp;g2_serialNumber=2" alt="" border="0" /&gt;&lt;/a&gt;This time we gave the dough some time to rise before making the pizza, and I think it helped.  You can see it's pretty puffy.  The pizza was pretty good, although it was a little lacking in flavor, especially when you hit a piece with no cheese.  I am itching to try the oven cleaning mode trick suggested on the site I mentioned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7819200666236203589?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7819200666236203589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7819200666236203589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7819200666236203589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7819200666236203589'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/07/pizza.html' title='Pizza'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-850130436757979389</id><published>2007-06-26T21:03:00.000-07:00</published><updated>2007-06-26T21:07:13.008-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Boo Steve Jobs</title><content type='html'>So, I had like no plans to buy the iPhone (at least until it gets some better specs), but I was reading &lt;a href="http://online.wsj.com/article/SB118289311361649057.html?mod=blogs"&gt;this&lt;/a&gt; review and they mentioned it has no SIM card.  Wack.  Being able to switch up phones is one of my favorite things about GSM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-850130436757979389?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/850130436757979389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=850130436757979389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/850130436757979389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/850130436757979389'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/06/boo-steve-jobs.html' title='Boo Steve Jobs'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-1103434921456588800</id><published>2007-06-21T10:19:00.000-07:00</published><updated>2007-06-21T10:54:22.807-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>OpenStreetMap</title><content type='html'>So, my brother &lt;a href="http://bobwold.blogspot.com"&gt;Bob&lt;/a&gt; went to the &lt;a href="http://conferences.oreillynet.com/where2007/"&gt;Where 2.0&lt;/a&gt; conference for work, and he apparently saw a talk about &lt;a href="http://www.openstreetmap.org"&gt;OpenStreetMap&lt;/a&gt;.  He wants to start a hiking version.  If you want to help him, you should contact him.  Anyway, I am not very interested in the hiking version since I spent 3 years working on that kind of thing and it was boring.&lt;br /&gt;&lt;br /&gt;After looking at OpenStreetMap, I am really getting interested.  Back in like 1999 I installed a computer in my car to play MP3's, and I wanted to write some navigation software.  In those days, I was crazy and thought you could program anything in a night with enough caffeine.  But, there was a lack of map data available.  The US Census &lt;a href="http://tiger.census.gov/"&gt;TIGER&lt;/a&gt; data was available, but at the time you had to buy a set of CD's, which was like $2k.  Now it is freely downloadable, but everyone knows it is way out of date and generally sucks.  OpenStreetMap, however, will be perfect for this project once it is completed.  I think once the initial map of the world is done, it will easily stay up to date with a bit of effort from Internet volunteers a la Wikipedia.  It will, in fact, be much easier because the street data network is much more finite than "human knowledge", which Wikipedia seeks to document.&lt;br /&gt;&lt;br /&gt;In any case, you should help the project out.  Once the map becomes complete, I will be very interested in working on ways to use it.  And this time I'm armed with 3 years of J2ME and BREW experience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-1103434921456588800?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/1103434921456588800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=1103434921456588800' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1103434921456588800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1103434921456588800'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/06/openstreetmap.html' title='OpenStreetMap'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-467916294201156411</id><published>2007-06-14T16:23:00.000-07:00</published><updated>2007-06-14T16:27:42.133-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Push email for Treo 650</title><content type='html'>It has been out for a while now, but I just got around to installing the push email update for the Treo 650.  I had to upgrade Versamail, so it cost about $12 total to get it working.  Once it was installed, it was really easy to connect it to my Exchange account and the push email works, as well as calendar synchronization.  Pretty cool.  It has crashed the Treo once so far, but it crashes a lot, so I wasn't too surprised.  Also, if your exchange server is heavily firewalled, like my previous employer, you may not have much luck, I imagine.&lt;br /&gt;&lt;br /&gt;Anyway, get it &lt;a href="http://software.palm.com/us/html/display_palm_product.jsp?navCategoryId=&amp;id=prod4761800"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I noticed they also have Blackberry connect for the Treo 650, which probably achieves generally the same thing, but I bet you have to do more work on the server side, plus something on the carrier.  This required nothing on the server and works with a regular data plan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-467916294201156411?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/467916294201156411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=467916294201156411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/467916294201156411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/467916294201156411'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/06/push-email-for-treo-650.html' title='Push email for Treo 650'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-4495516583613308610</id><published>2007-06-14T15:28:00.000-07:00</published><updated>2007-06-14T15:34:22.621-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Cell phones are stupid</title><content type='html'>Today, Sony Ericsson announced a bunch of new phones.  I've always though the W810i was a cool phone, but you couldn't even buy it on any US carrier until a few months ago.  Now they've announced some new phones, including the &lt;a href="http://www.engadgetmobile.com/2007/06/14/a-closer-look-at-sony-ericssons-w910-and-w960/"&gt;W960&lt;/a&gt;, which looks sweet.  Unfortunately, it won't be out until Q4, and it doesn't have American 3G frequencies.  Probably the only way to get it will be to get an unlocked version at a ridiculous price.  It seems like all the phones currently available consistently suck, and you can never get the good ones here in Qualcommland.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-4495516583613308610?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/4495516583613308610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=4495516583613308610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4495516583613308610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/4495516583613308610'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/06/cell-phones-are-stupid.html' title='Cell phones are stupid'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-796779691984646360</id><published>2007-06-01T20:08:00.000-07:00</published><updated>2007-06-01T20:11:29.554-07:00</updated><title type='text'>Giant Keys</title><content type='html'>So, I don't understand this.  Everything with regard to technology is getting tiny.  I just bought a USB key that can hold 2 GB and it's smaller than the 256 MB one I lost.&lt;br /&gt;&lt;br /&gt;My car keys, on the other hand are huge.  And it seems like the new ones are even bigger.  Why do we even need car keys?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-796779691984646360?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/796779691984646360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=796779691984646360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/796779691984646360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/796779691984646360'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/06/giant-keys.html' title='Giant Keys'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5621425891094113760</id><published>2007-06-01T18:09:00.000-07:00</published><updated>2007-06-01T18:20:56.779-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Windows Sucks</title><content type='html'>I used to have a cord going across the room in my home office to connect to my cable router, and it was really ugly.  Also, my Xbox wasn't connected to the network because it's in the other room.  So, I decided to hook up the network stuff by the TV and go wireless on the desktop.  Usually, I'd go all out and wire the place up all professional style, but I was kinda lazy, haven't really investigated the attic situation, and figured it would be cheaper to do wireless.&lt;br /&gt;&lt;br /&gt;Apparently this was a bad idea.  I've tried two wireless adapters and they constantly drop the connection.  I have a feeling this is Windows' fault, since it seems to be a common theme.  On top of that, my machine has been crashing a lot lately.  Like every day.  Both of these problems could be hardware problems, but I am pretty suspicious of Windows.  So, I started thinking about switching to Linux.  I really like Linux, but you just run into programs sometimes that don't work.  Here's the ones I'm worried about:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Rosetta Stone (I'm using it to learn German)&lt;/li&gt;&lt;li&gt;Quicken&lt;/li&gt;&lt;li&gt;Quickbooks&lt;/li&gt;&lt;li&gt;ATX (tax software)&lt;/li&gt;&lt;li&gt;Scanner support&lt;/li&gt;&lt;/ul&gt;I think some of those might work in WINE, but probably not all of them.  I think VMWare is my only real viable option, which would set me back $189, but would probably solve all of my problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5621425891094113760?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5621425891094113760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5621425891094113760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5621425891094113760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5621425891094113760'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/06/windows-sucks.html' title='Windows Sucks'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-3179077273842111785</id><published>2007-06-01T18:02:00.000-07:00</published><updated>2007-06-01T18:08:26.282-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>Brain drain</title><content type='html'>So, I remember when I used to have service with Sprint, my phone would go nutty when it was out of cell coverage.  I assume it was scanning various AMPS and CDMA frequencies for a signal and spending lots of battery power for no reason.  One time I went skiing and left it in the car and it was dead when I got back.&lt;br /&gt;&lt;br /&gt;I think something similar happens with the human brain.  Today at work, I was doing some investigative work on some new stuff and I kept running into roadblocks.  Usually when I hit a wall, I switch to something else to give myself momentum, but today I encountered problems everywhere.  By this afternoon I was really tired and just wanted to take a nap.  By the time I left work, I was exhausted.  We are supposed to be getting a couch in our lab at work, so it might be pretty cool to be able to just take a break and chill when this happens in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-3179077273842111785?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/3179077273842111785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=3179077273842111785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3179077273842111785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/3179077273842111785'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/06/brain-drain.html' title='Brain drain'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7000512344692994241</id><published>2007-05-24T15:12:00.000-07:00</published><updated>2007-05-24T15:31:50.095-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>Idea dumping</title><content type='html'>When working in a dysfunctional environment, I think there are two ways to react.  The first is to go with the flow and stay under the radar.  The second, usually used when you actually care about your work, is to try and improve the situation.  I have seen a lot of both, but the second scenario is the most interesting.  A person will sit thinking and worrying about the state of things, and come up with things that they think are wrong and try to think of ways to improve them.  This can lead to formation of an idea and a plan to fix things.  After thinking long enough, a person will gain confidence in their idea, and propose it, often in a long email.  This is what I will call idea dumping.&lt;br /&gt;&lt;br /&gt;Idea dumping has a noble cause; the person has identified a problem and spent a significant amount of time thinking about it.  This leads them to come up with a solution which they think is ideal.  Unfortunately, there is a lot of decision making that goes on in someone's head, most of which is not expressed within the solution.  This decision making process is hidden from the other stakeholders, so the solution may make no sense at all, outside of the context of the factors involved.  The result of the idea dumping depends on various factors, but it can be a source of conflict between coworkers, especially if said coworkers have also been formulating differing solutions in their heads.&lt;br /&gt;&lt;br /&gt;So, the whole situation amounts to a major communication problem, which is really pretty simple.  My proposal for a way to solve it is to stop whenever visions start to form in your head and pull in the involved parties to a discussion.  If that is not practical, it might make sense to record some sort of blog or similar thing in order to document the things you are thinking about, so that your thought process is more documented and people will understand the why better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7000512344692994241?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7000512344692994241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7000512344692994241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7000512344692994241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7000512344692994241'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/05/idea-dumping.html' title='Idea dumping'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-7163208510770653706</id><published>2007-05-24T00:44:00.000-07:00</published><updated>2007-05-24T15:12:12.566-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>End of the road</title><content type='html'>Today is the last day of my employment at Trimble Navigation.  I have been involved with the &lt;a href="http://www.trimbleoutdoors.com/"&gt;Trimble Outdoors&lt;/a&gt; product since pretty much the very beginning.  I started contracting in July of 2004 or so, and started working there permanently in early 2005.  It has been a hectic three years, and I think it is a very prudent time to move on.  The location based services industry is pretty cutting edge and interesting, but it is also very immature and the business prospects seem pretty erratic.&lt;br /&gt;&lt;br /&gt;One of the main reasons for my departure was the style in which things were managed.  I don't have that wide of a range of jobs to compare it to, but the way I would describe it is that there was too much separation of roles.  With my personality, I am pretty passionate about my work, and I like to be able to contribute to the direction that product development goes.  I felt that I had a very limited capacity to affect change there.&lt;br /&gt;&lt;br /&gt;I am optimistic about the future, but I have had an impending feeling of being at the end of the road in terms of my career as a software developer.  At my previous job, there was definitely little to no potential to advance.  With that in mind, especially considering the convenience of working at ASU, I have been considering some education options.  One option is to do an MBA, which would be useful to advance to a more managerial role.  Another is to get a Ph.D. in Computer Science, which would open up opportunities for teaching, research, etc.  The MBA would be easy to do while working, but expensive.  The Ph.D. would be really intense and I don't even know if I could do it while working.  It's really pretty difficult to decide which I would do if I decide to pursue something further.  I guess I will see how things go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-7163208510770653706?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/7163208510770653706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=7163208510770653706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7163208510770653706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/7163208510770653706'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/05/end-of-road.html' title='End of the road'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-8855482503682974595</id><published>2007-05-08T15:43:00.000-07:00</published><updated>2007-05-08T15:52:11.030-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>The Motorola ic502 "Bugs"</title><content type='html'>So one of the steps taken to navigate the chaos that was created by the Sprint-Nextel merger was to introduce Hybrid iDEN/CDMA phones.  Apparently people love the terrible annoying push-to-talk functionality that works so well on iDEN, but CDMA is an all-around better and more modern solution.  This resulted in the bastard child phones, the ic402 and ic502 by Motorola.  These phones combine the worst of both worlds to create perhaps some of the most awful phones I've ever seen.  They have horrible tiny washed out screens with below-par resolution, the GPS is of the Qualcomm variety (which doesn't work out of cell coverage), and the design is the ugly, bulky Nextel style.&lt;br /&gt;&lt;br /&gt;Anyway, today I am tasked with fixing a problem with our app displaying things on the external display of the ic502, which was dubbed the "Buzz" after they apparently realized that ic502 is a stupid name.  The solution is one of the worst workarounds I have ever crafted, and I encountered several other bugs on the path to fixing it.  I am, therefore, going to call it the "Bugs" from now on instead of the "Buzz".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-8855482503682974595?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/8855482503682974595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=8855482503682974595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8855482503682974595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8855482503682974595'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/05/motorola-ic502-bugs.html' title='The Motorola ic502 &quot;Bugs&quot;'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5647576692363567644</id><published>2007-04-18T14:18:00.000-07:00</published><updated>2007-04-18T14:23:48.474-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>The scientific method and cell phones</title><content type='html'>Cell phone bugs are like human illnesses.  As we all know, the architecture of the human body was never documented by its engineer and we can't run questions by the Creator to figure out why something is happening.  Cell phone vendors are secretive about their bugs and don't like to admit them or help to work around them.  The medical world has clinical trials to determine how to work around a disease.  We have something similar in cell phone development.  In order to identify and characterize suspected bugs, we need to run various experiments using the scientific method we learned in elementary school.  Make sure all the variables are controlled, form a hypothesis and procedure, and collect data.  When you are done, if you are lucky you will know how the bug works and how to fix your software to deal with it.  There is never any hope of a bug on a released phone being fixed, so this is what we have to do.&lt;br /&gt;&lt;br /&gt;So, if you didn't like science class in school, you may want to steer clear of cell phone development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5647576692363567644?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5647576692363567644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5647576692363567644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5647576692363567644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5647576692363567644'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/04/scientific-method-and-cell-phones.html' title='The scientific method and cell phones'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2009109800501943932</id><published>2007-04-17T16:36:00.000-07:00</published><updated>2007-04-17T16:36:15.416-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Performance vs. Maintenance</title><content type='html'>I've been writing software as a job for a few years now, and I think there is one common theme that seems to recur.  There is never enough time to get everything done.   The proper solution to this problem is one or a combination of three basic ideas: bring in more resources, come to a compromise, or increase productivity.  The first two alternatives are not very appealing because businesses generally want to offer a good product and not spend a lot of money building it.  Increasing productivity, therefore, seems to always be a good goal to keep in mind.&lt;br /&gt;&lt;br /&gt;When writing software, one of the things we are all taught to do is pay attention to performance.  We analyze algorithms, figure out their big-O complexity in terms of computing and memory usage and pick the best one.  I always hated that part of school with a passion.  Perhaps that makes me biased.  I agree, however, that you need to keep performance in mind.&lt;br /&gt;&lt;br /&gt;For me, performance has always been just that.  Something on my mind, but not usually directly applied.  I prefer to pay attention to elegance and the architecture that supports the code.  I think, in general, if you pay attention to the architecture and keep things simple, the performance works itself out.  You do have to think about performance, but don't let it compromise the elegance of your code.  Once the application is deployed and/or load tested (depending on the flexibility of redeployment), you can fix any performance problems, and sacrifice elegance if it comes down to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2009109800501943932?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2009109800501943932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2009109800501943932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2009109800501943932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2009109800501943932'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/04/performance-vs-maintenance.html' title='Performance vs. Maintenance'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-1379296365865416031</id><published>2007-04-13T17:42:00.000-07:00</published><updated>2007-04-13T18:51:32.930-07:00</updated><title type='text'>Security</title><content type='html'>So, it is tax season and I have been taking care of some housekeeping items with my personal finances.  If you have messed around with banks and online and even telephone access, you probably noticed that there are some seriously draconian security measures in place these days.  In most cases it seems like there is some combination of impossible requirements for the password combined with a requirement that you change it frequently and don't use a password you have used before. &lt;br /&gt;&lt;br /&gt;The end result of all this is that it is impossible to come up with passwords that you can actually remember.  With that in mind, you have two choices.  You can write down your password (which pretty much destroys the purported security being enforced) or you can call up their support line and have them reset your password each time you need to access whatever obscure service it is they are providing.  In other words, the situation is a mess.&lt;br /&gt;&lt;br /&gt;Various technical solutions exist for this problem, and sometimes they are used.  For example, the place I work uses SecurID for VPN access sometimes.  The problem is, they generally cost a lot of money and aren't standardized.  Anyway, I think there's a lot of opportunity in this field, but I think it would make sense to approach it in an innovative way.  Instead of trying to capitalize on it immediately, I think it makes sense to build something everyone can use, maybe making it free, standardized or open source.  Once a standard takes hold, then there will be opportunity to provide enhancement for profit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-1379296365865416031?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/1379296365865416031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=1379296365865416031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1379296365865416031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/1379296365865416031'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/04/security.html' title='Security'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5668640030197855079</id><published>2007-03-27T22:20:00.000-07:00</published><updated>2007-03-28T00:40:38.366-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>The tangled web of JSF</title><content type='html'>Despite the fact that all of the web apps at my current job are .NET, I have spent a lot of time working with web apps in the Java world.  I have experimented a bit with some of the web frameworks and never really found anything I really like that much.  My preferred method has been to just generate XML in the app and use XSL to transform it, but there is still not an ideal separation of logic and presentation.  Since JSF is (was) kind of a new thing and seems to try to copy some of the neat things about ASP.NET, I decided to do a little side project in it at work.  This really would have been an ideal candidate for Ruby on Rails, but I think Ruby is a little out there in terms of having other people maintain it.&lt;br /&gt;&lt;br /&gt;Anyway, I spent a few hours reading up on JSF in my idle time.  It seemed really complicated, and nobody really explained it very well.  I eventually just dived in, and ran into a bunch of problems.  Eventually, I got a page to list a bunch of entries out of a database.  The problem is, the DAO needs to be pretty much a pure Java Bean which means you can't really manage connections very well.  I used Hibernate to do the data access, so you need to handle creation and closing of the session object.  Listing rows is simple enough to just open, list, close, but updating will get hairy.  Apparently, "the way" to solve this is by using Spring Framework.  I'm not really sure how it works, but apparently spring handles all the session management for you.  I have been interested in Spring since first hearing about it a couple years ago, so I guess this is an opportunity to learn that as well.  In any case, I am now about 3 days into the project with no real results.  Way to go Java, always overcomplicating things.  I hope it is worth it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5668640030197855079?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5668640030197855079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5668640030197855079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5668640030197855079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5668640030197855079'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/03/tangled-web-of-jsf.html' title='The tangled web of JSF'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-5677087745156948779</id><published>2007-03-06T09:22:00.000-07:00</published><updated>2007-03-06T09:26:26.201-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Java 1.6 sucks</title><content type='html'>Today I got to work and discovered that my ant build for our J2ME app is failing randomly.  After a long debugging sequence, I discovered that some Java 1.6 update has installed java.exe in c:\windows\system32.  This particular version of java.exe is for the JRE and sets java.home to the JRE home directory.  Since that path is high in priority in my system path, eclipse took it as its  runtime environment, resulting in me having a neutered JRE (no JDK tools).  Thus, jar.exe was missing from my java home and nothing would build.&lt;br /&gt;&lt;br /&gt;Sun, if you are reading this, please don't try to succumb to the crappy Windows way of doing things.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-5677087745156948779?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/5677087745156948779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=5677087745156948779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5677087745156948779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/5677087745156948779'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/03/java-16-sucks.html' title='Java 1.6 sucks'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-8940393187336546150</id><published>2007-02-07T13:37:00.000-07:00</published><updated>2007-02-07T13:43:20.338-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>BREW Logger on Sprint</title><content type='html'>So, for a while I have lamented about the lack of a way to read System.out.println() output on Sprint CDMA phones.  Today I had a random idea and it turned out to work well.  For BREW, Qualcomm has a function called DBGPRINTF that prints stuff out.  In the simulator, it just shows up in a little windows.  On real phones, you can connect to the phone with a tool called BREW Logger and view the output.  Since Sprint CDMA phones are based on BREW under the hood, I decided to give it a try.  Samson was having some problems with a hang, so he brough in his KRZR K1m and we hooked it up.  It spits out a lot of garbage, but the println() output is indeed there when you use the BREW Logger.  So, for all of you Sprint CDMA developers out there, this is an awesome resource.  It might not work on all phones, but it does work on the KRZR, and probably related phones like RAZR and SLVR.  The only problem is, you need to be an "authenticated" BREW developer to download the tool, which costs quite a bit.  Perhaps someone at Sprint can find an arrangement for us to get this tool for free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-8940393187336546150?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/8940393187336546150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=8940393187336546150' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8940393187336546150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/8940393187336546150'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/02/brew-logger-on-sprint.html' title='BREW Logger on Sprint'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-2225542630982790373</id><published>2007-01-12T11:11:00.000-07:00</published><updated>2007-01-12T15:57:25.884-07:00</updated><title type='text'>The Daily WTF</title><content type='html'>In my boredom at work, I am constantly looking for sources of entertainment.  Web sites that have daily updates are perfect because I can check them all the time for new stuff.  I think it was Samson that first sent me a link to &lt;a href="http://thedailywtf.com"&gt;thedailywtf.com&lt;/a&gt;.  I didn't start reading it then, but I have been lately, and it's great.  It seems like there are very few programmers out there that really understand what is good and bad and why, but this site exemplifies an understanding.  It is also hilarious, so if you are a nerd you should check it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-2225542630982790373?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/2225542630982790373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=2225542630982790373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2225542630982790373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/2225542630982790373'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2007/01/daily-wtf.html' title='The Daily WTF'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8824498.post-60997209492686982</id><published>2006-12-26T22:54:00.000-07:00</published><updated>2006-12-26T23:00:02.058-07:00</updated><title type='text'>Boredom</title><content type='html'>So, this week I don't have to go to work.  I have a long list of productive things to do, so I have plenty to keep me busy.  I just find trouble convincing myself to spend my day doing things like applying caulk to my newly installed moldings.  So, in a way, I am terribly bored.   Sometimes it is cool to enjoy the benefits of being an "adult" and having my own place and all that stuff, but I really find it pretty boring sometimes.  I kind of wish I was a kid again and could get into trouble.  With all of my peers getting into their careers and serious relationships and stuff, I feel kind of like I don't fit in.  I don't really look forward to being grown up.  I just wish I could still have fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8824498-60997209492686982?l=alwold.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwold.blogspot.com/feeds/60997209492686982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8824498&amp;postID=60997209492686982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/60997209492686982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8824498/posts/default/60997209492686982'/><link rel='alternate' type='text/html' href='http://alwold.blogspot.com/2006/12/boredom.html' title='Boredom'/><author><name>Al Wold</name><uri>http://www.blogger.com/profile/11958505448084469140</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
