<?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-7256432</id><updated>2012-02-16T01:53:10.237-05:00</updated><title type='text'>The Frustrated Programmer</title><subtitle type='html'>The problems I encounter on a daily basis, blogged for posterity. All content will be original, contain poor grammar and a few mispellings.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://frustratedprogrammer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7256432.post-4679233315140354964</id><published>2012-01-29T21:16:00.006-05:00</published><updated>2012-01-29T21:25:30.509-05:00</updated><title type='text'>Generate Swim TCX files for TrainingPeaks or Garmin Connect from Swim Data</title><summary type='text'>I like to keep the data around from my Swimmovate PoolMate and entering the details into TrainingPeaks is very cumbersome. So I wrote a quick script to generate TCX files that can be uploaded. Its very simple:#!/bin/bashfunction do_lap() { LAP_TIME=`expr $LAP_MINUTES \* 60` LAP_TIME=`expr $LAP_TIME + $LAP_SECONDS` echo "        &lt;Lap StartTime=\"$LAP_START\"&gt;" &gt;&gt; $START_DATE.tcx echo "          &lt;</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/4679233315140354964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/4679233315140354964'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2012/01/generate-swim-tcx-files-for.html' title='Generate Swim TCX files for TrainingPeaks or Garmin Connect from Swim Data'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-911688591747151625</id><published>2006-12-26T23:03:00.000-05:00</published><updated>2007-12-02T17:30:54.540-05:00</updated><title type='text'>Fixing Napster Album Art</title><summary type='text'>UPDATE: Added more diagnostics to the code. If you were having issues, run it again and post the output to in a comment.UPDATE2: Changed the second regular expression to be a little more loose. Hopefully this will resolve some of the problems.UPDATE3:  Blogger was removing some code that it thought was HTML causing an endless loop in the script. If you tried the script and it was just hanging, </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/911688591747151625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/911688591747151625'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2006/12/fixing-napster-album-art.html' title='Fixing Napster Album Art'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-110046056647370788</id><published>2004-11-14T14:27:00.000-05:00</published><updated>2004-11-14T14:29:26.473-05:00</updated><title type='text'>Promiscuous Performance Monitoring</title><summary type='text'>At work we have a lot of issues with monitoring and logging. We run a lot of different services as EJBs in Weblogic clusters. They get a lot of use, so much so, that logging can actually make a real performance problem. The main issues are:   The logs are not aggregated in any one place.   There are a lot of ad-hoc scripts to do remote greps via ssh.   Any type of central aggregation will cause </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/110046056647370788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/110046056647370788'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/11/promiscuous-performance-monitoring.html' title='Promiscuous Performance Monitoring'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-110040909410797162</id><published>2004-11-13T23:44:00.000-05:00</published><updated>2004-11-14T00:11:34.106-05:00</updated><title type='text'>Interesting Browser Trend...</title><summary type='text'>For the first 6 months of this blogs life, the browser usage of my visitors looked something like this:IEs: 15%Mozillas 79%Others: 6%Now that things have slowed down, their browser usings looks like this:IEs: 42%Mozillas 52%Others: 6%What is happening to Mozilla's market share? Nothing really. My analysis goes like this; When I used to post several times a week, my visitors were </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/110040909410797162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/110040909410797162'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/11/interesting-browser-trend.html' title='Interesting Browser Trend...'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109681301788929208</id><published>2004-10-03T09:57:00.000-04:00</published><updated>2004-10-03T10:16:57.890-04:00</updated><title type='text'>On the road again...</title><summary type='text'>I started a new job last month, which is why I haven't blogged in a while. I enjoyed working at a small Java consulting company, but the margins are too small, and life is a little too uncertain for me.I'll never forget two quotes from the most recent project I worked on:Early on in the project, a new developer was reporting on his progress of creating XML config files for Jasper reports. He </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109681301788929208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109681301788929208'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/10/on-road-again.html' title='On the road again...'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109374794886171466</id><published>2004-08-28T19:32:00.000-04:00</published><updated>2004-08-28T22:52:28.863-04:00</updated><title type='text'>C/C++ access to remote EJBs</title><summary type='text'>Last year you wrote some middleware using EJBs. This year your boss tells you that a C++ client needs to talk to those beans. You consider SOAP, but are dicouraged by reading about its performace. Papers showing http://www.sc2000.org/techpapr/papers/pap.pap261.pdf"&gt;SOAP is 100 to 1000 times slower than RMI are all over the place. Even with the newest pull parsers it still can't meet your </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109374794886171466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109374794886171466'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/cc-access-to-remote-ejbs.html' title='C/C++ access to remote EJBs'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109340052481456555</id><published>2004-08-24T21:44:00.000-04:00</published><updated>2004-08-24T22:23:45.696-04:00</updated><title type='text'>Why use an IDE?</title><summary type='text'>Kelly was a hard-core emacs user, while I used vi. We went our separate ways when Fusura.com imploded. In the last year I've fallen in love with IDEA, but the reasons I use it are common to most IDEs. Now that we are working at the same company again, I've tried to explain these reasons to Kelly with no results. This is an open letter to him in an attempt to explain why spending a few hours up </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109340052481456555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109340052481456555'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/why-use-ide.html' title='Why use an IDE?'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109297862290887748</id><published>2004-08-19T23:53:00.000-04:00</published><updated>2004-08-20T01:16:35.136-04:00</updated><title type='text'>Null-less Java</title><summary type='text'>I was reading about Null Pointer Exceptions today, and finally read up on Nice. They had this to say about NullPointer exceptions:To prevent [a NullPointerException], a reference must be tested before use. However it is easy to forget to do so. Furthermore, there are references that are never null, or rather that should never be. Testing such references clutters the code.Nice provides the </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109297862290887748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109297862290887748'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/null-less-java.html' title='Null-less Java'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109224658556999543</id><published>2004-08-13T00:12:00.000-04:00</published><updated>2004-08-13T02:19:41.993-04:00</updated><title type='text'>Java's Most Wanted</title><summary type='text'>With 50% more votes than its nearest enhancement request, Bug #4977599 , "Provide documentation in Chinese" is the most requested out there. The author of the original request posted his thoughts on a chinese technical bulliten board. Sun's response to this request is:Thanks for the comments and support. Currently, we only localize documents into Japanese due to business requirement. We will </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109224658556999543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109224658556999543'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/javas-most-wanted.html' title='Java&apos;s Most Wanted'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109208570027509326</id><published>2004-08-09T22:14:00.000-04:00</published><updated>2004-08-10T09:17:42.806-04:00</updated><title type='text'>Oracle's TO_DATE()  v. Java's Calendar - WEEK_OF_YEAR</title><summary type='text'>I hit an interesting bug in java.util.GregorianCalendar today. I was writing some reporting code that needed to find the number of widgets sold for each week of the year. I found the current week of the year from Calendar using get(WEEK_OF_YEAR), then selected the sum of selected the sum of widgets sold where TO_DATE( sale_date, 'WW' ) = ?. The documentation for each week of year calculation is </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109208570027509326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109208570027509326'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/oracles-todate-v-javas-calendar.html' title='Oracle&apos;s TO_DATE()  v. Java&apos;s Calendar - WEEK_OF_YEAR'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109172044796814888</id><published>2004-08-07T22:11:00.000-04:00</published><updated>2004-08-07T22:44:49.350-04:00</updated><title type='text'>An Analysis of Struts's Dependency Injection</title><summary type='text'>Inversion of Control/Dependency Injection are still big buzz words. Popularity continues to grow for  IoC "containers", notably:SpringframeworkPicocontainerIn general these reduce couplings between components, letting the IoC container piece your objects together. Struts has some built-in functionality for supporting IoC on data sources, form beans and actions.Data SourcesA data source </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109172044796814888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109172044796814888'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/analysis-of-strutss-dependency.html' title='An Analysis of Struts&apos;s Dependency Injection'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109171668816599947</id><published>2004-08-05T10:09:00.000-04:00</published><updated>2004-08-05T10:39:55.656-04:00</updated><title type='text'>XHTML - Not your father's HTML</title><summary type='text'>Dan Cederholm, web design guru, recently posted another quiz on his site. He was asking how to represent an address in HTML. The most popular was this:&lt;address&gt;  ABC Widgets, Inc.&lt;br /&gt;  100 - 1234 West Main Street&lt;br /&gt;  Anytown, State&lt;br /&gt;  Zip&lt;br /&gt;  Ph: 555-555-1234&lt;br /&gt;  Fax: 555-555-1234&lt;br /&gt;&lt;/address&gt;This is great if your looking for a compact solution to display a simple </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109171668816599947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109171668816599947'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/xhtml-not-your-fathers-html.html' title='XHTML - Not your father&apos;s HTML'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109164078803257804</id><published>2004-08-04T13:26:00.000-04:00</published><updated>2004-08-05T01:08:43.673-04:00</updated><title type='text'>Blogger.com wish list</title><summary type='text'>I don't want this to turn into 'The Frustrated Blogger', but here are a list of the wish list items I've submitted to blogger. If you use blogger, please let them know you want these too.   Use an Open support system. Something like bugzilla, where I can see what is happening to my trouble tickets and enhancement requests. Bugzilla also supports voting, picking off new features to implement </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109164078803257804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109164078803257804'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/bloggercom-wish-list.html' title='Blogger.com wish list'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109159235078785071</id><published>2004-08-03T23:56:00.000-04:00</published><updated>2004-08-04T22:00:00.630-04:00</updated><title type='text'>Blogger.com preview bug</title><summary type='text'>This posting is used to describe a bug in Blogger.com's preview mode to their customer support.When publishing a Post in Blogger.com, the Post is converted into a single line in HTML. Whitespace doesn't matter in HTML, so its really not a big deal. Unless of course, you use the &lt;pre&gt; tag, like I do in this blog in almost every post. Fortunately, I also use 'Convert line breaks', which converts </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109159235078785071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109159235078785071'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/bloggercom-preview-bug.html' title='Blogger.com preview bug'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109150725670909360</id><published>2004-08-03T00:04:00.000-04:00</published><updated>2004-08-03T00:27:36.710-04:00</updated><title type='text'>Another Warning About Session Scoped Struts Forms</title><summary type='text'>This blog entry talked about some great issues with session scoped struts forms. I found another one the hard way today:When I added some properties to my session scope form in struts today, I modified my action to pass those properties to the business logic, recompiled, redeployed. But I ended up with:StandardWrapperValve[action]: Servlet.service() for servlet action threw exception</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109150725670909360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109150725670909360'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/another-warning-about-session-scoped.html' title='Another Warning About Session Scoped Struts Forms'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109141041248791222</id><published>2004-08-01T21:24:00.000-04:00</published><updated>2004-08-02T13:04:49.216-04:00</updated><title type='text'>Handy Tip for Profiling JSP Tags</title><summary type='text'>I was profiling our application with optimizeIt looking for memory leaks when I noticed that the tag library DisplayTag was holding on to my lists of objects. I looked in the source and it was letting go of the list in the release() method, just like it should. I couldn't figure it out, so I called a friend who had done his homework and read the specs. He explained the behavior a lot better than </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109141041248791222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109141041248791222'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/handy-tip-for-profiling-jsp-tags.html' title='Handy Tip for Profiling JSP Tags'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109035001121457079</id><published>2004-08-01T02:16:00.000-04:00</published><updated>2004-08-01T18:03:05.416-04:00</updated><title type='text'>How do you serialize and deserialize object graphs in your UI framework?</title><summary type='text'>One of the beautiful features of Hibernate is that you can finally work with objects in your persistence layer. Once your mappings are setup, you can keep playing with object oriented code. Why don't we have anything like this with UI frameworks? Currently if I have the following classes in my object model. Cat is a nomal object/table, and gender is an enumeration/lookup table.public class </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109035001121457079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109035001121457079'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/08/how-do-you-serialize-and-deserialize.html' title='How do you serialize and deserialize object graphs in your UI framework?'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109026160770518587</id><published>2004-07-30T00:03:00.000-04:00</published><updated>2004-08-05T11:48:49.493-04:00</updated><title type='text'>Email address obfuscation, who are we kidding?</title><summary type='text'>So picture it, as a last resort you've taken a job for your local spam house. Your task is to harvest email addresses. They need a programmer to come up with some new ways to populate their database of known addreses. What is the first thing you do?I'd go after:      foo AT bar DOT com 'obfuscated' addresses    Hex encoded addresses    JavaScript 'encoded'  addresses   foo@REMOVEbar.com </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109026160770518587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109026160770518587'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/email-address-obfuscation-who-are-we.html' title='Email address obfuscation, who are we kidding?'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109095017550905239</id><published>2004-07-27T13:42:00.000-04:00</published><updated>2004-07-27T23:33:42.663-04:00</updated><title type='text'>Anatomy of a Regex</title><summary type='text'>In a recent post by Jason Bell, he asks for some help with a regex for validating email addresses. A commenter suggested this:^[a-zA-Z0-9][_\\-\\.\\w]*@[\\w\\.\\-]+\\.[a-zA-Z]{2,4}$If it makes sense I'm going to break it down into its pieces:1) [a-zA-Z0-9] - Match 1 letter or number2) [_\\-\\.\\w]* - Match 0 or more of: _ - . or a letter or number3) @ - The @ character4) [\\w\\.\\-]+ - </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109095017550905239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109095017550905239'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/anatomy-of-regex.html' title='Anatomy of a Regex'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109059213790378704</id><published>2004-07-23T10:15:00.000-04:00</published><updated>2004-07-23T20:45:05.413-04:00</updated><title type='text'>Still no Dynamic Forwards in Struts 1.2.1?</title><summary type='text'>It not pretty, but in large web applications, you need to pass around data in the URL from time to time. Usually it has to do with passing something about the state of the application. Its either this or put it in the session. I don't like the session because:    Everything you put in the session can bog down performance if you need to replicate your session for failover.   Its too hard to keep </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109059213790378704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109059213790378704'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/still-no-dynamic-forwards-in-struts.html' title='Still no Dynamic Forwards in Struts 1.2.1?'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108929183191461223</id><published>2004-07-22T11:44:00.000-04:00</published><updated>2004-07-22T11:52:27.813-04:00</updated><title type='text'>An idea for Struts that didn't quite work</title><summary type='text'>For some reason I'm always tempted to cram as much as I can into a single action definition in the struts-config.xml. Its mostly due to laziness. But I also like grouping related features together like CRUD (create, read, update, delete). The thing about CRUD is, three of the four pieces (create, update and delete) can produce errors. This conflicts with my goal in two ways:1 - You can only </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108929183191461223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108929183191461223'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/idea-for-struts-that-didnt-quite-work.html' title='An idea for Struts that didn&apos;t quite work'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108974495431635088</id><published>2004-07-19T23:54:00.000-04:00</published><updated>2004-07-19T23:59:02.146-04:00</updated><title type='text'>Caching in web application -- A real comparison</title><summary type='text'>To be honest, all the web applications I've written so far have always disabled page caching. But even though this application has multiple users that access the same data concurrently, they business owners wanted to turn on page caching. I agree that the back button warning from IE is really annoying, but I let them know some of the issues that go along with caching, and we agreed to give it a </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108974495431635088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108974495431635088'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/caching-in-web-application-real.html' title='Caching in web application -- A real comparison'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109011575688342027</id><published>2004-07-19T22:55:00.000-04:00</published><updated>2004-07-19T23:07:05.273-04:00</updated><title type='text'>IE Bug and Struts -- Forms with one input and DispatchAction</title><summary type='text'>Ever have a form with multiple submit buttons? Well, if you hit enter in one of the text inputs, browsers will act like the first button on the form was pressed. Unless, of course, the form only has one text input. Then it doesn't matter if you have several other types of inputs or none at all, IE will not send any button related information to the server. Its very consistent about this across </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109011575688342027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109011575688342027'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/ie-bug-and-struts-forms-with-one-input.html' title='IE Bug and Struts -- Forms with one input and DispatchAction'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-109026317519177998</id><published>2004-07-19T14:49:00.000-04:00</published><updated>2004-07-19T22:27:42.820-04:00</updated><title type='text'>Java for loop syntax for Iterators</title><summary type='text'>Recently I found myself writing for loops that use Iterators a little differently. I used to write loops like this:  Iterator fooIter = bar.getFoos();  Foo foo;  while( fooIter.hasNext() ) {    foo = (Foo)fooIter.next();    [...]  }And now I've moved to this:  for( Iterator fooIter = bar.getFoos().iterator(); fooIter.hasNext(); ) {    Foo foo = (Foo)fooIter.next();    [...]  }</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109026317519177998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/109026317519177998'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/java-for-loop-syntax-for-iterators.html' title='Java for loop syntax for Iterators'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108974072662380372</id><published>2004-07-18T03:54:00.000-04:00</published><updated>2004-07-19T14:38:05.003-04:00</updated><title type='text'>Struts 1.2.1 MappingDispatchAction</title><summary type='text'>As noted in my last blog entry,  Struts's DispatchAction never really integrated with other pieces of the framework. That entry talked about canceling validation, this entry covers kicking off validation. We'll take a look at the MappingDispatchAction introduced in Struts 1.2.1, but lets first look at the problem it was introduced to fix.Say we have the following forms:=========buddyList.jsp=</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108974072662380372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108974072662380372'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/struts-121-mappingdispatchaction.html' title='Struts 1.2.1 MappingDispatchAction'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108974075852023257</id><published>2004-07-17T00:10:00.000-04:00</published><updated>2004-07-17T00:38:03.720-04:00</updated><title type='text'>Struts 1.2.1 Cancel Handlers</title><summary type='text'>When Struts introduced the DispatchAction, people initially thought it was a great idea, until it started to break down in the real world. One of those points of break down is canceling a form (and bypassing validation). See, Struts normally only looks for the parameter org.apache.struts.actoin.CANCEL to indicate cancellation of a form. But if a form has multiple buttons and uses DispatchAction </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108974075852023257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108974075852023257'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/struts-121-cancel-handlers.html' title='Struts 1.2.1 Cancel Handlers'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108981835727659216</id><published>2004-07-16T17:26:00.000-04:00</published><updated>2004-07-16T17:27:14.606-04:00</updated><title type='text'>Always use ${basedir} in your Ant paths with Anthill</title><summary type='text'>Like most build servers,  Anthill's current working directory is the directory you kicked off your build server in, not nessesarily the directory your build.xml is located in. So don't use relative paths in your build.xml, always prepend ${basedir} to the begining.  &lt;property name="web.home" value="web/WEB_INF"/&gt;  should be  &lt;property name="web.home" value="${basedir}/web/WEB_INF"/&gt; Note:</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108981835727659216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108981835727659216'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/always-use-basedir-in-your-ant-paths.html' title='Always use ${basedir} in your Ant paths with Anthill'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108973208259988995</id><published>2004-07-16T14:13:00.000-04:00</published><updated>2004-07-16T14:15:57.470-04:00</updated><title type='text'>JSP page precompiling in Tomcat5</title><summary type='text'>JSP precompilation is a good thing for a couple reasons:-Better error checking - Errors can be caught at compile-time rather than run-time.-Faster - Compiling pages is slow. Compiling pages during your build process means a user will never have to wait for a page to compile.For our project, speed was one of the main drivers for implmenting precompiling. At our current stage we give a lot of </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108973208259988995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108973208259988995'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/jsp-page-precompiling-in-tomcat5.html' title='JSP page precompiling in Tomcat5'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108999446187619542</id><published>2004-07-16T12:02:00.000-04:00</published><updated>2004-07-16T12:14:21.876-04:00</updated><title type='text'>Performance problems...</title><summary type='text'>"The app is slow in QA, can you take a look?""Sure..."-It turns out it takes 10 seconds to load one key page in the system.-Telnet to the box, and look at the load average, vmstat and io stat - Everything is ok.-Telnet to the database, do the same - Everything is ok.-Turn on P6Spy in the hibernate.proeprties  -Look at the log files - 10 queries are taking over .5 seconds. Most are related</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108999446187619542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108999446187619542'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/performance-problems.html' title='Performance problems...'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108921697536669003</id><published>2004-07-16T01:55:00.000-04:00</published><updated>2004-07-16T01:56:55.276-04:00</updated><title type='text'>Round trip modeling tools</title><summary type='text'>This is a rehash of ideas from the original extreme programming book, but the question came up again today at work. A new engineer at the company sent out a mail asking people which tools they prefer and why. Most people responded with Visio since its easy. Personally, my preferences is GML. For small designs (which is 90% of the time) I just want enough to get feedback from my peers, nothing </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108921697536669003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108921697536669003'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/round-trip-modeling-tools.html' title='Round trip modeling tools'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108983205427302144</id><published>2004-07-14T15:06:00.000-04:00</published><updated>2004-07-15T08:48:58.446-04:00</updated><title type='text'>Time to find a new web-based RSS aggregator</title><summary type='text'>I've been using FastBuzz for a few months now. It had almost everything I wanted, but now its now longer giving me new content. I'm pretty bummed, so I'm searching for a new tool.Update: Fastbuzz is working again! It still has its short comings, see below, but its still better than the competition.Update: I mailed FastBuzz about this matrix and got a good response including "Thank you for the </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108983205427302144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108983205427302144'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/time-to-find-new-web-based-rss.html' title='Time to find a new web-based RSS aggregator'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108917680192730772</id><published>2004-07-13T22:23:00.000-04:00</published><updated>2004-07-13T00:30:06.930-04:00</updated><title type='text'>Why I don't really like Aspect Oriented Programming (AOP)</title><summary type='text'>-Untyped - In all the Aspect languages I've seen, when you ccode and compile your aspect, there is no type checking to ensure the generated code will run. Strong type checking is one of my favorite pieces of Java, I don't like the idea of loosing this.-Hard to test - How can you unit test an aspect in isolation? If I can't test it in isolation, I have to system test it. This opens it up for more</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108917680192730772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108917680192730772'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/why-i-dont-really-like-aspect-oriented.html' title='Why I don&apos;t really like Aspect Oriented Programming (AOP)'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108929122955061157</id><published>2004-07-08T08:53:00.000-04:00</published><updated>2004-07-13T13:48:48.366-04:00</updated><title type='text'>Struts forms with multiple buttons</title><summary type='text'>If you have a form with multiple buttons on it, when your action is invoked you need to find out which button was pressed. Usually this is done by each button passing the same parameter with a different value. Something like this:  &lt;html:form action="/foo.do"&gt;    [...]    &lt;html:submit name="method" value="Add"&gt;    &lt;html:submit name="method" value="Delete"&gt;  &lt;/html:form&gt;You could use a </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108929122955061157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108929122955061157'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/struts-forms-with-multiple-buttons.html' title='Struts forms with multiple buttons'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108929060116044716</id><published>2004-07-08T08:37:00.000-04:00</published><updated>2004-07-12T23:33:25.500-04:00</updated><title type='text'>Backporting Java APIs</title><summary type='text'>Problems like this are common in opensource projects because they want to work in as many JDK version as possible, but want to use decent APIs. I've also been on two projects now where we've had to implement a wrapper to simulate the JDK1.4 Regex APIs in JDK1.3 using the Jakarta regex package. This is slowly becoming a non-issue as people migrate past JDK1.3, but has anyone seen an opensource </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108929060116044716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108929060116044716'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/backporting-java-apis.html' title='Backporting Java APIs'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108923770597024964</id><published>2004-07-07T14:16:00.000-04:00</published><updated>2004-07-12T23:59:26.500-04:00</updated><title type='text'>Passwords in the Database</title><summary type='text'>I was recently tasked with adding authentication to our application. We had a database filled with users and passwords, but the old middleware vendor we were using was reluctant to give us the algorithm used to encrypt the passwords. Well, they did tell us it was DES, but refused to give us the key, or the ascii encoding algorithm used to store the binary data as a string in the database.This </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108923770597024964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108923770597024964'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/passwords-in-database.html' title='Passwords in the Database'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108916694250658218</id><published>2004-07-06T22:16:00.000-04:00</published><updated>2004-07-07T13:18:25.596-04:00</updated><title type='text'>Mozilla makes a (relatively) big dent in IEs market share</title><summary type='text'>http://www.w3schools.com/browsers/browsers_stats.aspThis is great news for web standards. Maybe by this time next year, we'll actually have some browser wars again. Well, some crude (Excel trend lines) analysis says that it Mozilla won't overtake IE until March 2006. But, competition is, of course, a great thing. My only worry is will it be too late with technologies like XAML gaining steam.</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108916694250658218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108916694250658218'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/mozilla-makes-relatively-big-dent-in.html' title='Mozilla makes a (relatively) big dent in IEs market share'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108916070833586195</id><published>2004-07-06T20:05:00.000-04:00</published><updated>2004-07-10T22:42:56.036-04:00</updated><title type='text'>Database schema diff tool?</title><summary type='text'>Any takers from the 0 people who read this blog?Toad has a nice tool, but Toad is of course expensive. I have a shell script I hacked together a while back to solve this problem. Its oracle specific, but could be easily modified to work on another database.In a nutshell, it talks to sqlplus to get a list of tables, dumps the schema ('desc' output) to a file. It does this for each database, </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108916070833586195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108916070833586195'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/database-schema-diff-tool.html' title='Database schema diff tool?'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108878467987579788</id><published>2004-07-02T12:07:00.000-04:00</published><updated>2004-07-03T23:11:17.410-04:00</updated><title type='text'>Attn Java Devopers: Web standards have evolved!</title><summary type='text'>Good Java developers have done a great job of keep their skills up with respect to-Java APIs-Design Patterns-3rd Party Applications / ToolsBut man.. their UI skills are week. Most applications are still developing without CSS, with HTML instead of XHTML. This leads to sites that are less accessable and hard to render consistently across multiple browsers (amoung other things). If this is old</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108878467987579788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108878467987579788'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/attn-java-devopers-web-standards-have.html' title='Attn Java Devopers: Web standards have evolved!'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108878184857903968</id><published>2004-07-02T11:23:00.000-04:00</published><updated>2004-07-10T22:40:21.843-04:00</updated><title type='text'>JspException.getRootCause() is completely unrelated to Throwable.getCause()</title><summary type='text'>Are you kidding me?!?!?! What a waste of an hour!Man.. that is so lame.. whats worse is the contructor for JspException takes a cause, but assigns it to rootCause, and doesn't pass it to its parent class, so your left thinking your doing the right thing..grrrHere is the code in my error.jsp to display the exception.      ByteArrayOutputStream ostr = new ByteArrayOutputStream();    </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108878184857903968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108878184857903968'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/07/jspexceptiongetrootcause-is-completely.html' title='JspException.getRootCause() is completely unrelated to Throwable.getCause()'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108878178996646941</id><published>2004-06-30T12:28:00.000-04:00</published><updated>2004-07-07T13:23:41.406-04:00</updated><title type='text'>Struts page flow </title><summary type='text'>When you have a page that needs some data to display (like a list of items), you usually populate the request in your struts action. But if that page is also a form.. things start to break down.Here's what I mean:&lt;action path="/foo" type="FooAction" input="foo.jsp"&gt;  &lt;forward name="viewSuccess" path="foo.jsp"/&gt;  &lt;forward name="updateSuccess" path="next.jsp"/&gt;  &lt;forward name="updateFailure"</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108878178996646941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108878178996646941'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/06/struts-page-flow.html' title='Struts page flow '/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108853757965150545</id><published>2004-06-29T15:31:00.001-04:00</published><updated>2004-07-03T13:18:34.123-04:00</updated><title type='text'>OPML Export</title><summary type='text'>I use www.fastbuzz.com. Its a great site, but just in case it dies an unexpected death, here is my current reading list.&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;opml version="1.0"&gt;&lt;head&gt;&lt;title&gt;Fastbuzz Subscriptions&lt;/title&gt;&lt;dateCreated&gt;Tue Jun 29 12:30:42 PDT 2004&lt;/dateCreated&gt;&lt;ownerName&gt;paulkilroy&lt;/ownerName&gt;&lt;ownerEmail&gt;paulkilroy@yahoo.com&lt;/ownerEmail&gt;&lt;/head&gt;&lt;body&gt;&lt;outline text="</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108853757965150545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108853757965150545'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/06/opml-export.html' title='OPML Export'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108852294833822609</id><published>2004-06-29T11:28:00.000-04:00</published><updated>2004-07-03T14:21:27.053-04:00</updated><title type='text'>Required fields -- Presentation and Validation</title><summary type='text'>These are two different things in struts. Kinda silly really...Here's the I write jsp code for a form (yes, I'm still not fully converted to CSS, hopefully in the next web app):  &lt;tr&gt;    &lt;td class="reqlabel"&gt;*Name&lt;/td&gt;    &lt;td class="input"&gt;&lt;html:text property="name"/&gt;&lt;/td&gt;  &lt;/tr&gt;The problem is, in my validation.xml I also have this:  &lt;form name="NameForm"&gt;    &lt;field property="name" </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108852294833822609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108852294833822609'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/06/required-fields-presentation-and.html' title='Required fields -- Presentation and Validation'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108845375169507847</id><published>2004-06-28T14:52:00.000-04:00</published><updated>2004-07-03T23:05:58.626-04:00</updated><title type='text'>Blank Screens in Struts</title><summary type='text'>If an input is not configured correctly (typo or just non existent), the error is not propogated to the user. Instead just a blank screen is presented to the user.This bug is related.</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108845375169507847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108845375169507847'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/06/blank-screens-in-struts.html' title='Blank Screens in Struts'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108732808643033435</id><published>2004-06-15T15:24:00.000-04:00</published><updated>2004-06-15T15:34:46.430-04:00</updated><title type='text'>M&amp;M's Math</title><summary type='text'>So I grab a pack of M&amp;M's from the vending machine. I pour 5 of them into my hand and notice there are only two colors present. I do this again, with the same result. And finally a third time with the same result.In this bag of M&amp;M's there are 6 colors, Red, Blue, Yellow, Orange, Brown and Green.So the odds of this happening are??? </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108732808643033435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108732808643033435'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/06/mms-math.html' title='M&amp;M&apos;s Math'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108731703102121110</id><published>2004-06-15T12:23:00.000-04:00</published><updated>2004-07-07T01:07:44.000-04:00</updated><title type='text'>Dynamic HTML Forms and Struts</title><summary type='text'>Struts is an excellent framework for simple forms with a static number of fields on them, but when you need to present a fairly dynamic form, struts starts to stumble pretty quickly. Today the customer came to me with a change request to add text inputs next to what had previously just been a dynamic list of 'options' from the database:              (*new column*)[x] Option 1 ______________</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108731703102121110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108731703102121110'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/06/dynamic-html-forms-and-struts.html' title='Dynamic HTML Forms and Struts'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108688975042545075</id><published>2004-06-10T13:40:00.000-04:00</published><updated>2004-06-10T13:49:10.426-04:00</updated><title type='text'>Log Monitoring</title><summary type='text'>'We need to start monitoring our logs. There are errors we are missing and not filling as defects.'...I go on to explain the following:-Our current error log messages do not include enough state about the error. Things such as IDs of objects need to be included in the messages.-Logs files can first be monitored by hand, but later can be automated with log4j custom appenders. At my last job we</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108688975042545075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108688975042545075'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/06/log-monitoring.html' title='Log Monitoring'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108679545292653096</id><published>2004-06-09T11:28:00.000-04:00</published><updated>2004-06-15T12:34:07.880-04:00</updated><title type='text'>Struts 'Dyna' beans</title><summary type='text'>These beans seem less and less cool every day (Yeah, I know I'm the only one on the planet that is still using them). Today I get the following error:org.apache.commons.beanutils.ConversionException: Cannot assign value of type 'java.math.BigDecimal' to property 'foo' of type 'java.lang.String'	org.apache.struts.action.DynaActionForm.set(DynaActionForm.java:423)	</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108679545292653096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108679545292653096'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/06/struts-dyna-beans.html' title='Struts &apos;Dyna&apos; beans'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry><entry><id>tag:blogger.com,1999:blog-7256432.post-108679367423429938</id><published>2004-06-09T10:51:00.000-04:00</published><updated>2004-06-09T13:46:45.193-04:00</updated><title type='text'>Colors on a Print View</title><summary type='text'>'Your next task is to clean up the print view and add the servicable grid...''You know, these green and red symbols we are using for indicators don't really convey the same meaning in black and white printouts.''Its ok, just get it done'.Do I mention that 10% of men in the United States are green/red color blind? No, I'm too beat down and its only 10:00 AM.</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108679367423429938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7256432/posts/default/108679367423429938'/><link rel='alternate' type='text/html' href='http://frustratedprogrammer.blogspot.com/2004/06/colors-on-print-view.html' title='Colors on a Print View'/><author><name>Paul</name><uri>http://www.blogger.com/profile/07916365413214149753</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></entry></feed>
