<?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-17192448</id><updated>2011-10-15T08:07:53.668-05:00</updated><category term='ruby'/><category term='linux'/><category term='xml'/><category term='google app engine'/><category term='jokes'/><category term='xsl'/><category term='futurama'/><category term='scala'/><category term='SEAM'/><category term='java'/><category term='vacation'/><category term='san francisco'/><category term='programming'/><category term='memorial'/><category term='junit'/><category term='bourbon'/><category term='rants'/><category term='geek'/><category term='photos'/><category term='oracle'/><category term='comergent training'/><category term='wtf?'/><category term='sql'/><category term='osb'/><category term='python'/><category term='groovy'/><category term='ipod'/><category term='tips'/><category term='easyb'/><category term='bowling'/><category term='xpath'/><category term='chickens'/><category term='hunting'/><category term='fishing'/><category term='weblogic'/><category term='offroad'/><category term='pets'/><category term='redneck'/><category term='bsh'/><category term='Bookmarks Launcher+'/><category term='recipes'/><category term='Jeep'/><category term='jmx'/><category term='truck'/><category term='wildlife'/><title type='text'>Redneck Programmer</title><subtitle type='html'>&amp;lt;hunting/&amp;gt; &amp;lt;fishing/&amp;gt; &amp;lt;raising chickens/&amp;gt; &amp;lt;programming/&amp;gt; &amp;lt;java/&amp;gt; &amp;lt;j2ee/&amp;gt; &amp;lt;oracle/&amp;gt; &amp;lt;sql/&amp;gt; &amp;lt;ruby/&amp;gt; &amp;lt;xml/&amp;gt; &amp;lt;xslt/&amp;gt; &amp;lt;4x4/&amp;gt; &amp;lt;*nix/&amp;gt; &amp;lt;humor/&amp;gt; &amp;lt;groovy/&amp;gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default?start-index=101&amp;max-results=100'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>323</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17192448.post-831324143353985481</id><published>2011-07-07T10:19:00.000-05:00</published><updated>2011-07-07T10:19:59.060-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Java 7 Launch - Hits and Misses</title><content type='html'>Java 7 will be "launched" today with all sorts of hype and gala. After reviewing the presentation materials Oracle sent out, I figured I would throw in my 2 cents on &lt;i&gt;Hits, Misses, &lt;/i&gt;and &lt;i&gt;Who Cares Anyways?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hits&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;The new try/catch - In Java, it's cool that you can catch individual Exception types. You may want to treat different Exception types differently. But let's be realistic: a good percentage of the time you end up treating all the Exceptions in the same way. And while it is considered bad form to just catch a superclass, I also don't like repeating those same lines of code in each catch block. As part of the &lt;i&gt;COIN &lt;/i&gt;JSR, Java 7 introduces an "or" operator in the catch block, so you can have one catch block that catches, for example, IOException OR FileNotFoundException.&lt;/li&gt;&lt;li&gt;The "Diamond Operator" - This will make for easier to read code and a few less keystrokes. No need to explicitly tell the parameterized types on both side of an assignment. &lt;/li&gt;&lt;li&gt;Try with resources - Tell try which resources need to be closed before you user them. Could be a timesaver and help save some coding mistakes, since you won't have to use a finally block to close things like DB connections.&lt;/li&gt;&lt;li&gt;The NIO updates - I guess that is cool and eagerly awaited. I don't think it will drastically change my life for what I do on a daily basis though. The filesystem provider for ZIP and JAR has a lot of potential though.&lt;/li&gt;&lt;li&gt;Security updates are always welcome. Not sure how far behind the curve they are - this is the sort of thing that should be updated more often than major Java releases, IMHO.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Misses&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"Cloud" - Everything today is about the "cloud". But what does that really mean? Nobody knows. It's still a "nebulous" (pun intended) set of ideas, ideals, and technologies. It means everything, it means nothing. But instead of leading the charge to define how Java is all about the cloud, Oracle takes a back seat and gets their butt handed to them by Google, VMWare, Red Hat, etc.&lt;/li&gt;&lt;li&gt;Closures - It's on the bill, but not for Java 7, it's destined (as of now) for Java 8. Too little, too late. The developers who are loving to hate Java right now, in favor of the newer languages like Ruby, Scala, Groovy, etc., aren't going come flocking back in a few years just because Java &lt;i&gt;finally &lt;/i&gt;has closures.&lt;/li&gt;&lt;li&gt;Consurrency and Collections Updates - According to Oracle docs, it's a "good start". But it's a few years behind languages like Scala that make concurrency a central issue.&amp;nbsp; &lt;/li&gt;&lt;li&gt;Modularization -&amp;nbsp; it's on the roadmap for the future. What about OSGi? Isn't that already here and fairly well accepted?&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;And Who Cares Anyways? &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Invoke Dynamic - From what I can tell, average Joe Java Dev gets nothing from this. It is for dynamic languages running on the JVM. But languages like Groovy, JRuby, Jython, etc. are already thriving on the JVM, so not sure what the point is.&lt;/li&gt;&lt;li&gt;Strings in switch statements - who cares? I tend to not use switch statements often. One time I thought I wanted to use Strings in a switch, but enums were the better choice anyways. This one has potential to get abused and end up with very un-OO code.&lt;/li&gt;&lt;li&gt;Underscores in literals - thanks, because I know I was really hoping for this. On wait, no I wasn't.&lt;/li&gt;&lt;li&gt;Unicode 6,&lt;!--[if !mso]&gt; &lt;style&gt;v\:* {behavior:url(#default#VML);}o\:* {behavior:url(#default#VML);}p\:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}v\:textbox {display:none;}&lt;/style&gt; &lt;![endif]--&gt;&lt;!--[if !ppt]--&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 12pt; mso-hansi-font-family: Arial;"&gt; IETF BCP47 and UTR35 &lt;/span&gt;  - yawn! But then again I'm a stupid American who only cares about English ;-)&lt;/li&gt;&lt;li&gt;The Swing and graphics enhancements - &lt;i&gt;Java is still used on desktops!?&lt;/i&gt; Thought everything was server-side nowadays?&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/17192448-831324143353985481?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/831324143353985481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=831324143353985481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/831324143353985481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/831324143353985481'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2011/07/java-7-launch-hits-and-misses.html' title='Java 7 Launch - Hits and Misses'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7338538554454220280</id><published>2011-06-01T14:00:00.001-05:00</published><updated>2011-06-01T14:01:24.465-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='junit'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Groovy's Built-in Mock and Stub Support</title><content type='html'>Just when I was ready to bite the bullet and learn a new mocking framework like EasyMock, I find out Groovy has built-in support for creating dynamic stubs and mocks.&lt;br /&gt;&lt;br /&gt;After seeing an &lt;a href="http://mrhaki.blogspot.com/2010/01/groovy-goodness-create-stubs-for.html"&gt;example&lt;/a&gt; on the web and perusing the &lt;a href="http://groovy.codehaus.org/gapi/index.html"&gt;Groovy API&lt;/a&gt; docs, I was up and running with my own sample test in about 30 minutes. Even though it is very similar to the example I found,  I threw it up on Github anyways so I can find it later.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1003004.js?file=StubTest.groovy"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-7338538554454220280?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7338538554454220280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7338538554454220280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7338538554454220280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7338538554454220280'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2011/06/just-when-i-was-ready-to-bite-bullet.html' title='Groovy&apos;s Built-in Mock and Stub Support'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-9082141987781201711</id><published>2011-05-16T21:33:00.000-05:00</published><updated>2011-05-16T21:33:35.485-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>What's JUnit?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-SImyhO4mD9w/TdHeHVqhYeI/AAAAAAAAAxY/_MYIMYIMMNE/s1600/i-dont-always-test-my-code-but-when-i-do-i-do-it-in-production-stay-on-call-my-friends.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-SImyhO4mD9w/TdHeHVqhYeI/AAAAAAAAAxY/_MYIMYIMMNE/s320/i-dont-always-test-my-code-but-when-i-do-i-do-it-in-production-stay-on-call-my-friends.jpg" width="255" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-9082141987781201711?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/9082141987781201711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=9082141987781201711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/9082141987781201711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/9082141987781201711'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2011/05/whats-junit.html' title='What&apos;s JUnit?'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-SImyhO4mD9w/TdHeHVqhYeI/AAAAAAAAAxY/_MYIMYIMMNE/s72-c/i-dont-always-test-my-code-but-when-i-do-i-do-it-in-production-stay-on-call-my-friends.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2772398020844032913</id><published>2011-05-16T21:31:00.000-05:00</published><updated>2011-05-16T21:31:06.318-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Did You Get the Email From the CI Server?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-464dPNIKDjE/TdHdaG99iFI/AAAAAAAAAxU/5anVfEBNwOA/s1600/i-dont-always-break-the-build-but-when-i-do-i-dont-care-to-fix-it.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-464dPNIKDjE/TdHdaG99iFI/AAAAAAAAAxU/5anVfEBNwOA/s320/i-dont-always-break-the-build-but-when-i-do-i-dont-care-to-fix-it.jpg" width="255" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://troll.me/category/the-most-interesting-man-in-the-world/"&gt;http://troll.me/category/the-most-interesting-man-in-the-world/&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2772398020844032913?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2772398020844032913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2772398020844032913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2772398020844032913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2772398020844032913'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2011/05/did-you-get-email-from-ci-server.html' title='Did You Get the Email From the CI Server?'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-464dPNIKDjE/TdHdaG99iFI/AAAAAAAAAxU/5anVfEBNwOA/s72-c/i-dont-always-break-the-build-but-when-i-do-i-dont-care-to-fix-it.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1334830526228241846</id><published>2011-05-10T21:43:00.000-05:00</published><updated>2011-05-10T21:43:46.791-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><category scheme='http://www.blogger.com/atom/ns#' term='fishing'/><title type='text'>Just Showin' Off</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;There's really no point to this post other than to show off the one decent fish I've caught in the past few years. I don't catch many worthy of taking pictures, or many period, so I'm entitled.....&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;17-1/2" bass, Honeoye Lake, NY - April 2011&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Caught on a silver, blue, and purple Rapala diver&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-0Q6kI3d-gtk/Tcn28tLxm5I/AAAAAAAAAw8/z9PyZoA_xBI/s1600/-big%2Bbass%2Bhoneoye%2Blake%2B4-23-2011.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-0Q6kI3d-gtk/Tcn28tLxm5I/AAAAAAAAAw8/z9PyZoA_xBI/s320/-big%2Bbass%2Bhoneoye%2Blake%2B4-23-2011.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1334830526228241846?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1334830526228241846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1334830526228241846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1334830526228241846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1334830526228241846'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2011/05/just-showin-off.html' title='Just Showin&apos; Off'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-0Q6kI3d-gtk/Tcn28tLxm5I/AAAAAAAAAw8/z9PyZoA_xBI/s72-c/-big%2Bbass%2Bhoneoye%2Blake%2B4-23-2011.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-6455996035593563266</id><published>2011-05-10T18:16:00.000-05:00</published><updated>2011-05-10T18:16:53.841-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='junit'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='easyb'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Using Groovy and Easyb to Unit Test PL/SQL</title><content type='html'>&lt;p&gt;I'm not sure if PL/SQL developers just haven't embraced automated unit testing, or if the frameworks out there just suck for some other reason (maybe because PL/SQL itself blows goat). What I found was either abandoned, had a lack of user base, and/or was overly complicated for what it needs to do. Some frameworks require a bunch of PL/SQL code to be loaded into the database to be tested, others only run from GUI's (so much for automation), and some - GASP! - you need to &lt;i&gt;pay for!?&lt;/i&gt;&lt;br /&gt;&lt;p&gt;So how about good old JUnit? It would work, and work well, but with all the messy baggage that comes along with the JDBC API's. No on to my next step, use JUnit test cases written in Groovy instead of Java, to gain the groovy.sql.Sql convenience. Even farther in the evolution is use a behavior-driven approach using Easyb. &lt;br /&gt;&lt;p&gt;Below are sample tests for a simple PL/SQL procedure that writes messages to a log table. The first example is a JUnit test written in Groovy. The other is the same test using Easyb.&lt;br /&gt;&lt;p&gt;Other than a JDK, Groovy, Easyb, and your JDBC driver, this technique requires no additional libraries or frameworks. And it can be run in a CI environment like Hudson/Jenkins like any other JUnit tests (the Easyb tests can be run from a JUnit suite with a simple "bridge" class).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Unit Testing PL/SQL Using JUnit and Groovy&lt;/b&gt;&lt;br /&gt;&lt;p&gt;Using Groovy's Sql object makes it very convenient to test PL/SQL, because you get to avoid all the messy JDBC overhead.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:groovy"&gt;package com.XXXXX.XXX.plsql&lt;br /&gt;&lt;br /&gt;import static org.junit.Assert.*&lt;br /&gt;import org.junit.After&lt;br /&gt;import org.junit.Before&lt;br /&gt;import org.junit.Test&lt;br /&gt;import groovy.sql.Sql&lt;br /&gt;&lt;br /&gt;class XXXWriteApplLogTest {&lt;br /&gt;&lt;br /&gt; Sql sql&lt;br /&gt; &lt;br /&gt; @Before&lt;br /&gt; public void setUp() throws Exception {&lt;br /&gt;  def db = [url:'jdbc:oracle:thin:@XXXdev2.XXXXX.com:1521:XXXd10g', &lt;br /&gt;              user:'XXX', &lt;br /&gt;              password:'XXX', &lt;br /&gt;              driver:'oracle.jdbc.driver.OracleDriver']&lt;br /&gt;  &lt;br /&gt;  sql = Sql.newInstance(db.url, db.user, db.password, db.driver)&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; @After&lt;br /&gt; public void tearDown() throws Exception {&lt;br /&gt;  sql.call "DELETE FROM XXX.APPL_LOG WHERE SOURCE = 'UT' and CORRELATION_ID = 'UT-101'"&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; @Test&lt;br /&gt; public void testWriteApplLog() {&lt;br /&gt;  println "Calling procedure..."&lt;br /&gt;  def plsqlCall = "{ call XXX.WRITE_APPL_LOG(?,?,?,?) }"&lt;br /&gt;  def params = [ 'UT','INFO','Test message from automated test suite','UT-101' ]&lt;br /&gt;  sql.call(plsqlCall, params)&lt;br /&gt;  &lt;br /&gt;  def verify = "SELECT * FROM XXX.APPL_LOG WHERE SOURCE = 'UT' and CORRELATION_ID = 'UT-101'"&lt;br /&gt;  def results = sql.rows(verify)&lt;br /&gt;  results.each { r -&gt; println r }   &lt;br /&gt;  &lt;br /&gt;  assertEquals(results.size, 1)&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;hr/&gt;&lt;b&gt;Unit Testing PL/SQL Using Easyb&lt;/b&gt;&lt;br /&gt;&lt;p&gt;For more information on Easyb take a look at the &lt;a href="http://www.easyb.org/"&gt;Easyb website (http://www.easyb.org/)&lt;/a&gt;. You can be up and running with Easyb in minutes, which will make you feel really smart.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:groovy"&gt;package com.XXXXX.XXX.plsql&lt;br /&gt;&lt;br /&gt;import groovy.sql.Sql&lt;br /&gt;&lt;br /&gt;description """&lt;br /&gt;  Prototype of PL/SQL unit testing using Easyb.&lt;br /&gt;  Have full access to the Groovy libraries so we can avoid the messy JDBC baggage.&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;scenario "Writing log message to APPL_LOG table via XXX.WRITE_APPL_LOG procedure",{&lt;br /&gt;    given "XXX.WRITE_APPL_LOG procedure written in PL/SQL", {&lt;br /&gt;        println "Setting up database connection..."&lt;br /&gt;        db = [url:'jdbc:oracle:thin:@XXXdev2.XXXXX.com:1521:XXXd10g', &lt;br /&gt;              user:'XXX', &lt;br /&gt;              password:'XXX', &lt;br /&gt;              driver:'oracle.jdbc.driver.OracleDriver']&lt;br /&gt;        sql = Sql.newInstance(db.url, db.user, db.password, db.driver)&lt;br /&gt;    }&lt;br /&gt;    when "procedure is invoked", {&lt;br /&gt;        println "Calling procedure..."&lt;br /&gt;        plsqlCall = "{ call XXX.WRITE_APPL_LOG(?,?,?,?) }"&lt;br /&gt;        params = [ 'UT','INFO','Test message from automated test suite','UT-101' ]&lt;br /&gt;        sql.call(plsqlCall, params)&lt;br /&gt;    }&lt;br /&gt;    then "The log entry should be written to XXX.APPL_LOG table", {        &lt;br /&gt;        verify = "SELECT * FROM XXX.APPL_LOG WHERE SOURCE = 'UT' and CORRELATION_ID = 'UT-101'"&lt;br /&gt;            results = sql.rows(verify)&lt;br /&gt;            results.each { r -&gt;&lt;br /&gt;                println r&lt;br /&gt;            }   &lt;br /&gt;        results.size.shouldBe(1)&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;println "Clean up after test run - delete the record we added..."&lt;br /&gt;sql.call "DELETE FROM XXX.APPL_LOG WHERE SOURCE = 'UT' and CORRELATION_ID = 'UT-101'"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;And the bridge class&lt;/b&gt;&lt;br /&gt;&lt;p&gt;Drop this in with your other JUnit test classes so Easyb stories and specs can be run from JUnit. See the Easyb site for more information.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;package com.XXXX.XXX;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import org.easyb.junit.EasybSuite;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * This class provides the "bridge" to allow easyb behaviors to be run from a&lt;br /&gt; * Junit test suite. Allows Junit reports to be generated for easyb stories.&lt;br /&gt; */&lt;br /&gt;@VersionId("@(#) EasybTest.java [@@/main/cr0000000/1]&gt;")&lt;br /&gt;public class EasybTest extends EasybSuite {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * tell easyb-junit where to find the easyb stories/sepcs&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    protected File baseDir() {&lt;br /&gt;        return new File("test/behaviors");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    protected String description() {&lt;br /&gt;        return "Project behaviors (stories, specifications)";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * See http://code.google.com/p/easyb-junit/ for reasoning. This ensures&lt;br /&gt;     * time will be tracked when run from Junit.&lt;br /&gt;     * &lt;br /&gt;     * @see org.easyb.junit.EasybSuite#trackTime()&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    protected boolean trackTime() {&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-6455996035593563266?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/6455996035593563266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=6455996035593563266' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6455996035593563266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6455996035593563266'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2011/05/using-groovy-and-easyb-to-unit-test.html' title='Using Groovy and Easyb to Unit Test PL/SQL'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1146499210136530629</id><published>2011-04-01T15:22:00.005-05:00</published><updated>2011-04-01T15:38:57.460-05:00</updated><title type='text'>Testing SyntaxHighlighter Script</title><content type='html'>Just testing the &lt;a href="http://alexgorbatchev.com/"&gt;Syntax Highlighter&lt;/a&gt; script....&lt;br /&gt;&lt;br /&gt;Please disregard. There's nothing to see here, move along....&lt;br /&gt;&lt;br /&gt;Some links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://alexgorbatchev.com/SyntaxHighlighter/"&gt;http://alexgorbatchev.com/SyntaxHighlighter/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cyberack.com/2007/07/adding-syntax-highlighter-to-blogger.html"&gt;http://www.cyberack.com/2007/07/adding-syntax-highlighter-to-blogger.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://accessify.com/tools-and-wizards/developer-tools/quick-escape/"&gt;http://accessify.com/tools-and-wizards/developer-tools/quick-escape/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:ruby"&gt;#!/usr/bin/env ruby&lt;br /&gt;&lt;br /&gt;class SyntaxHighLighterTest&lt;br /&gt;&lt;br /&gt;$max_column_chars = 4000&lt;br /&gt;&lt;br /&gt;attr_accessor :numRecords&lt;br /&gt;&lt;br /&gt;def initialize(numEach=1000)&lt;br /&gt; @numRecords = numEach&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def do_nothing&lt;br /&gt; tstamp = Time.new&lt;br /&gt; puts "The time is now #{tstamp}"&lt;br /&gt;&lt;br /&gt; @numRecords.to_i.times do&lt;br /&gt;  puts "going...."&lt;br /&gt; end&lt;br /&gt;&lt;br /&gt; puts "gone"&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if __FILE__ == $0 &lt;br /&gt; numRecs = ARGV.first&lt;br /&gt; fn = SyntaxHighLighterTest.new numRecs&lt;br /&gt; fn.do_nothing&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1146499210136530629?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1146499210136530629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1146499210136530629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1146499210136530629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1146499210136530629'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2011/04/testing-syntaxhighlighter-script.html' title='Testing SyntaxHighlighter Script'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-6132450686426135306</id><published>2010-12-03T19:51:00.007-05:00</published><updated>2010-12-03T20:26:02.458-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='weblogic'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>WebLogic Annotation For MDB WorkManager</title><content type='html'>If you are like me, you have been searching the web for 2 hours looking for a way to tie your WebLogic 10g message-driven bean to a WLS WorkManager using the nice EJB3 annotations. But since you aren't me, let me save you some time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;It ain't there. Not gonna do it. Not happening for you today, my friend.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You have to do a bastardized mutt application using a combo of annotations and XML deployment descriptors (&lt;span style="font-style: italic;"&gt;remember those&lt;/span&gt;?).&lt;br /&gt;&lt;br /&gt;Allow me to save you more time by showing a more concise example, so you don't have to take a time machine back to a time when EJB2.1 and XML roamed together in dinosaur-like bliss and figure out what the descriptor should look like.&lt;br /&gt;&lt;br /&gt;Here's an example:&lt;br /&gt;&lt;br /&gt;My MDB class signature looks something like this....&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;@MessageDriven(activationConfig = {&lt;br /&gt;  @ActivationConfigProperty(&lt;br /&gt;    propertyName = "destinationType",&lt;br /&gt;    propertyValue = "javax.jms.Queue") },&lt;br /&gt;  mappedName = "jms.ens.yes943processing.queue")&lt;br /&gt;public class YearEndProcessingMdb implements MessageListener {&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And so on, with your onMessage() and all the other crap you would put in an MDB.&lt;br /&gt;Then my &lt;span style="font-family: courier new;"&gt;weblogic-ejb-jar.xml &lt;/span&gt;file looks a bit like this....&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; &amp;lt;wls:weblogic-enterprise-bean&amp;gt;&lt;br /&gt;      &amp;lt;wls:ejb-name&amp;gt;YearEndProcessingMdb&amp;lt;/wls:ejb-name&amp;gt;&lt;br /&gt;   &amp;lt;wls:dispatch-policy&amp;gt;Ens943WorkMgr&amp;lt;/wls:dispatch-policy&amp;gt;&lt;br /&gt;  &amp;lt;/wls:weblogic-enterprise-bean&amp;gt;&lt;br /&gt;    &lt;br /&gt;  &amp;lt;wls:work-manager&amp;gt;&lt;br /&gt;      &amp;lt;wls:name&amp;gt;Ens943WorkMgr&amp;lt;/wls:name&amp;gt;&lt;br /&gt;      &amp;lt;wls:max-threads-constraint&amp;gt;&lt;br /&gt;          &amp;lt;wls:name&amp;gt;Ens943MaxThreadLimiter&amp;lt;/wls:name&amp;gt;&lt;br /&gt;          &amp;lt;wls:count&amp;gt;10&amp;lt;/wls:count&amp;gt;&lt;br /&gt;      &amp;lt;/wls:max-threads-constraint&amp;gt;&lt;br /&gt;      &amp;lt;wls:ignore-stuck-threads&amp;gt;true&amp;lt;/wls:ignore-stuck-threads&amp;gt;&lt;br /&gt;  &amp;lt;/wls:work-manager&amp;gt;&lt;br /&gt;&amp;lt;/wls:weblogic-ejb-jar&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can tell if the thread limiter is working by deploying, chucking a bunch of messages on thequeue, and checking the WLS console.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Go to deployments&lt;/li&gt;&lt;li&gt;Click to expand your EAR&lt;/li&gt;&lt;li&gt;Click on the MDB name.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Then go to the Monitoring tab.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Under that click on the Workload tab.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Here you should see your work manager and thread constraints with the number of messages they are processing.&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/17192448-6132450686426135306?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/6132450686426135306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=6132450686426135306' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6132450686426135306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6132450686426135306'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/12/weblogic-annotation-for-mdb-workmanager.html' title='WebLogic Annotation For MDB WorkManager'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-4981343891319952474</id><published>2010-11-10T19:52:00.002-05:00</published><updated>2010-11-10T20:00:47.796-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jmx'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><title type='text'>JMS Queue Depth</title><content type='html'>You know it seems like a glaring omission (IMHO) for the JMS API to not have a standard method for getting queue depth. It seems like such an obvious thing to want, esp. for monitoring production systems. Maybe I was spoiled using Websphere MQ (a.k.a. MQ Series) all these years, but it is the first thing I think of when dealing with queues -- &lt;i&gt;how many messages are on it? Is it getting backed up? Are messages actively getting pulled?&lt;/i&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sure there's a way to get queue depth, but it seems like such a hack to have to write code to do it --  create a QueueBrowser to iterate through the messages on the queue, counting them as you loop. Then of course the extra step would usually be to expose that "depth getter" code via JMX so you can monitor it. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wouldn't it just be great to have a method on javax.jms.Queue class called "getDepth()"? C'MON!!!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-4981343891319952474?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/4981343891319952474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=4981343891319952474' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4981343891319952474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4981343891319952474'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/11/jms-queue-depth.html' title='JMS Queue Depth'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-3518027698543972991</id><published>2010-11-01T14:57:00.002-05:00</published><updated>2010-11-01T16:28:21.846-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osb'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='xpath'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='xsl'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle Service Bus - Getting XML Out of Table Column</title><content type='html'>&lt;div class="nodeTitle"&gt; This took me a while to figure out, and ended up being pretty simple once I knew which XQuery functions were available.&lt;/div&gt; &lt;p&gt;Let's say you have a table you need to query from the OSB. The result  set you get back from the JCA DB adapters gets turned into XML for you.  If one of the columns is a LOB containing XML, then it gets escaped  using CDATA. Anything in CDATA is basically ignored by XML, XSL, XPath,  etc.&lt;/p&gt; &lt;p&gt;It is a 2 step process to extract that value and make it usable XML:&lt;/p&gt; &lt;ol&gt;&lt;li&gt;Use the &lt;strong&gt;fn:string()&lt;/strong&gt; function to turn the value into a string. In this case, it strips off the CDATA wrapper and gives you a &lt;em&gt;string that looks like XML&lt;/em&gt;.&lt;/li&gt;&lt;li&gt;Use the&lt;strong&gt; fn-bea:inlinedXML() &lt;/strong&gt;function to parse that string into XML.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;You can use an ASSIGNMENT task to jam that XML into a variable, and  then run any XSL, XPath, etc on it. You can also use INSERT or REPLACE  tasks to embed it back into your original XML.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-3518027698543972991?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/3518027698543972991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=3518027698543972991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/3518027698543972991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/3518027698543972991'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/11/osb-getting-xml-out-of-table-column.html' title='Oracle Service Bus - Getting XML Out of Table Column'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-707029650808580272</id><published>2010-11-01T14:24:00.002-05:00</published><updated>2010-11-01T16:28:59.761-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Enabling Oracle Trace For WLS Connection Pools</title><content type='html'>We recently had the need to run an Oracle trace to catch some database diagnostics for an OSB call flow. To enable the trace only for the sessions coming from WebLogic, I added the following to the "initSql" field in the connection pool setup screens (in the WLS console). Just remove it and save the pool settings when you're done collecting your *.trc files. Works like a charm.&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left: 40px;"&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;SQL BEGIN DBMS_MONITOR.session_trace_enable(waits=&amp;gt;TRUE, binds=&amp;gt;TRUE); END;&lt;/span&gt;&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/17192448-707029650808580272?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/707029650808580272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=707029650808580272' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/707029650808580272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/707029650808580272'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/11/enabling-oracle-trace-for-wls.html' title='Enabling Oracle Trace For WLS Connection Pools'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8676813771027243858</id><published>2010-10-13T22:40:00.004-05:00</published><updated>2010-10-13T23:02:44.460-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osb'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle Service Bus and JCA Adapters</title><content type='html'>If you've spent any time using Oracle's SOA suite, the first thing you will notice is their toolset kind of blows donkey. It's a half-baked patchwork of crap - some of it written by them, some of it bought from other companies and bastardized. And chock full of interesting bugs and random crashes.&lt;br /&gt;&lt;br /&gt;So the first thing I noticed when working with the OSB for the first time (Oracle Service Bus, a.k.a. BEA Aqualogic service bus, or ALSB) is that the "Workshop" tooling lumps everything as either a "business service" or a "proxy service". That's all fine and good, but when I first started reading about integration patterns, SOA, and service buses years ago, a lot of what I learned about was JCA adapters. Where are the JCA adapters!?&lt;br /&gt;&lt;br /&gt;If "Workshop for Weblogic 10g" is your only Oracle SOA IDE, then you might think JCA doesn't exist anymore. Oh, but it does. And chances are you need it. So here comes that patchwork - that menagerie of mismatched pieces. You need to use Oracle JDeveloper as well as Workshop for Weblogic - 2 IDE's to accomplish your 1 task.&lt;br /&gt;&lt;br /&gt;Ugh, seriously?&lt;br /&gt;&lt;br /&gt;This &lt;a href="http://www.oracle.com/technology/sample_code/products/osb/samples/OSB-DB-ADAPTER.zip"&gt;tutorial and sample, &lt;/a&gt;while well written, confirms it in all it's ridiculous glory. You need to launch JDeveloper to create the JCA adapter. Then you launch Workshop for Weblogic and create a business service or proxy service in your OSB project. Within that service, you have to import the WSDL that you generated from JDeveloper (as well as any XSD's and TopLink mappings).&lt;br /&gt;&lt;br /&gt;Maybe next time Oracle will put all that into one tool? Though since they bought Sun, they have  aquired even more application servers and tools, so next time you'll probably have to launch JDeveloper, Workshop, and NetBeans to get a simple service working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-8676813771027243858?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8676813771027243858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8676813771027243858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8676813771027243858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8676813771027243858'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/10/oracle-service-bus-and-jca-adapters.html' title='Oracle Service Bus and JCA Adapters'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1724543293615347911</id><published>2010-10-13T22:02:00.003-05:00</published><updated>2010-10-13T22:33:54.978-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='SEAM'/><title type='text'>A Few More SEAM Nuggets</title><content type='html'>I just came across some stuff that was supposed to be a blog post with some more SEAM tips and tricks. Since then, I've moved on to a new job, and haven't been using SEAM in my new position.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Showing Number of Matched Records in List View&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When you generate a SEAM application from a database, you end up with a set of components for each table - for example a list view, record view, and record edit. When you are displaying a list of records, it is common to want to show how many records match the current query (or the total records if you went to list view without a search criteria).&lt;br /&gt;&lt;br /&gt;You can easily get this function by accessing the "resultCount" attribute on your view, like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="color: rgb(0, 0, 153);"&gt;&amp;lt;h:outputtext value="#{yourTableList.resultCount} rows found." rendered="#{not empty yourTableList.searchResults}"&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Change Default Sort Order, But Still Allow Click-To-Sort&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One requirement we ran into on one of my SEAM projects was to change the default sort order for some of the list views. However, the views that the SEAM gen tool creates allows the user to click on the column headers to change sorting as well. To achieve a default sort order on initial load, and still allow clickable headers, override the getOrder() method in your &lt;tablename&gt;List.java source like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;@Override&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public String getOrder() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;  String order = super.getOrder();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;  if ("".equals(order) || order == null)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;    order = "col1 asc,col2 desc";//your default sort columns here&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;  return order;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tablename&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1724543293615347911?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1724543293615347911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1724543293615347911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1724543293615347911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1724543293615347911'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/10/few-more-seam-nuggets.html' title='A Few More SEAM Nuggets'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2100524629185550943</id><published>2010-08-18T16:39:00.005-05:00</published><updated>2010-08-18T16:50:37.290-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xpath'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='xsl'/><title type='text'>Good XSL And  XPath Advice</title><content type='html'>A few months ago I came across a post that I've gotten a lot of mileage out of while working on the Oracle Service Bus (OSB). I can't remember where I saw it or who said it, otherwise I would cite it, but to paraphrase:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;If your XPath query is not returning any results (and you think it should), it is almost always a namespace issue. &lt;/blockquote&gt;&lt;br /&gt;OK, so maybe it is common knowledge, common sense, or whatever for everyone else, but for me,  remembering that one statement makes XSL, XPath, and XQuery much less frustrating to deal with.&lt;br /&gt;&lt;br /&gt;Take that statement along with the issues with the default namespace, and it can be a lifesaver.&lt;br /&gt;&lt;br /&gt;If you have an XML with a default namespace and try searching for, say "//somenode", it won't be found, because "//somenode" will only match &lt;span style="font-style: italic;"&gt;somenode&lt;/span&gt;'s&lt;span style="font-style: italic;"&gt; &lt;/span&gt;without any namespace. The &lt;span style="font-style: italic;"&gt;somenode&lt;/span&gt;'s in an XML doc with a default namespace does have a namespace.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2100524629185550943?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2100524629185550943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2100524629185550943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2100524629185550943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2100524629185550943'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/08/good-xsl-xpath-advice.html' title='Good XSL And  XPath Advice'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2223353832216382718</id><published>2010-08-18T16:33:00.003-05:00</published><updated>2010-08-18T16:38:45.436-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle Sorting of NULL Values</title><content type='html'>Speaking of Oracle crap, a few weeks ago while working on this project, the question came up of how Oracle sorts NULL values in an ORDER BY clause. I looked it up, and learned something new. Hooray for learning new stuff. I didn't realize you can specify how to sort NULL's in your ORDER BY clause. You add "NULLS FIRST" or "NULLS LAST" like this....&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;SELECT * FROM &lt;span style="font-style: italic;"&gt;sometable &lt;/span&gt;ORDER BY &lt;span style="font-style: italic;"&gt;col1 &lt;/span&gt;ASC NULLS FIRST&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2223353832216382718?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2223353832216382718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2223353832216382718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2223353832216382718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2223353832216382718'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/08/oracle-sorting-of-null-values.html' title='Oracle Sorting of NULL Values'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8801672057631946705</id><published>2010-08-18T16:22:00.004-05:00</published><updated>2010-08-18T16:37:56.281-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osb'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>ORA-24777 When Using XA Driver</title><content type='html'>Here's something we came across this past week, and after some searching, it appears to be a fairly common issue.&lt;br /&gt;&lt;br /&gt;We are calling some PL/SQL stored procedures through JCA adapters on the Oracle Service Bus (OSB). Our connection pool on WebLogic is setup using the XA JDBC driver.&lt;br /&gt;&lt;br /&gt;Everything was great until we called a stored procedure that queries across a database link. Then we got the dreaded &lt;a href="http://ora-24777.ora-code.com/"&gt;ORA-24777&lt;/a&gt; - use of non-migratable database link not allowed.&lt;br /&gt;&lt;br /&gt;Turns out there are at least 3 ways to rectify this issue....&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Set up Oracle to use multi-threaded server, a.k.a. shared server. There are ups and downs, and depending on who you talk to, mostly downs, especially concerning performance. We haven't tried this, but it does come up often as a fix.&lt;/li&gt;&lt;li&gt;Create a "shared" database link. The syntax is a little different than a "normal" link. This is what we did, and it worked fine.&lt;/li&gt;&lt;li&gt;Third option, though not right for everyone, would be to use the non-XA driver.&lt;/li&gt;&lt;/ol&gt;Creating a shared link....&lt;br /&gt;&lt;blockquote&gt;&lt;pre space="preserve" class="oac_no_warn"&gt;CREATE SHARED DATABASE LINK &lt;link-name&gt;&lt;br /&gt;CONNECT TO &lt;user&gt; IDENTIFIED BY &lt;password&gt;&lt;br /&gt;AUTHENTICATED BY &lt;linkuser&gt; IDENTIFIED BY &lt;password&gt;&lt;br /&gt;USING &lt;sid&gt;;&lt;br /&gt;&lt;/sid&gt;&lt;/password&gt;&lt;/linkuser&gt;&lt;/password&gt;&lt;/user&gt;&lt;/link-name&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-8801672057631946705?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8801672057631946705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8801672057631946705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8801672057631946705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8801672057631946705'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/08/ora-24777-when-using-xa-driver.html' title='ORA-24777 When Using XA Driver'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-192825483417953364</id><published>2010-07-07T22:42:00.003-05:00</published><updated>2010-08-18T16:33:41.429-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Groovy SQL</title><content type='html'>I've been playing with Groovy a lot lately, and I'm really digging the simplicity as well as the fact that it runs on the JVM and can seamlessly use Java classes and libraries without resorting to arcane syntax that feels "tacked on".&lt;br /&gt;&lt;br /&gt;I recently used it to build a quick SQL query script to dump the contents of a logging table in a nice readable format.&lt;br /&gt;&lt;br /&gt;Reckon I oughta share:&lt;br /&gt;&lt;pre&gt;&lt;/pre&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/env groovy&lt;br /&gt;import groovy.sql.Sql&lt;br /&gt;&lt;br /&gt;db = Sql.newInstance ("jdbc:oracle:thin:@server.company.com:1521:instance","user", "password", "oracle.jdbc.driver.OracleDriver")&lt;br /&gt;&lt;br /&gt;query = "SELECT * FROM XXX.APPL_LOG ORDER BY log_id DESC"&lt;br /&gt;&lt;br /&gt;db.eachRow query, { row -&gt;&lt;br /&gt;println "$row.create_date [$row.severity]\t$row.source --&gt; $row.message ($row.correlation_id)"&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;That's it. It's nicely formatted, can be dumped to a file, can be run anywhere there's a JVM and Groovy. And I don't have to launch TOAD, SQuirreL, SQL-Developer, etc. On the unix servers, I just use that Groovy script. On Windows, I also built this simple batch file to call it:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;@echo off&lt;br /&gt;set CLASSPATH=%CLASSPATH%;./ojdbc5.jar&lt;br /&gt;DdsApplLogQuery.groovy&lt;/blockquote&gt;&lt;br /&gt;&lt;/pre&gt;If you're interested in Groovy at all, I would also recommend the &lt;a href="http://refcardz.dzone.com/refcardz/groovy"&gt;free Groovy RefCard &lt;/a&gt;from &lt;a href="http://refcardz.dzone.com/"&gt;DZone&lt;/a&gt;. That's where I found this simple SQL trick. It saves writing a lot of JDBC code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-192825483417953364?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/192825483417953364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=192825483417953364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/192825483417953364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/192825483417953364'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/07/groovy-sql.html' title='Groovy SQL'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-57947913131053460</id><published>2010-07-02T06:12:00.003-05:00</published><updated>2010-07-02T06:22:03.356-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jmx'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>CLASSPATH Woes, JWhich, and Groovy Invoking JMX</title><content type='html'>Yesterday I had an interesting experience that ended up being a CLASSPATH issue (&lt;span style="font-style: italic;"&gt;I know, imagine that!&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;I developed a Java application using JDK6 using Eclipse on my PC. I ended up putting my generated JAX-WS connector code into a separate JAR file, partly because it looked cleaner, and partly so I didn't have to check each file into ClearCase.&lt;br /&gt;&lt;br /&gt;This system built and ran great on my PC, so I ran the ANT target to create the installer for the unix system it will run on. After verifying everything was bundled up properly, I sent the app to the unix box to run it. It launched OK, and then seemed to just stop at the point where it launchs a TimerTask. According to JConsole, the thread is WAITING for the TaskQueue, but it never went beyond that point, even after an hour.&lt;br /&gt;&lt;br /&gt;Here's where I got my first clue. I had exposed a lot of my application's functionality through JMX, so I tried to invoke the same task using a Groovy* script. I immediately got a NoClassDefFoundError for one of the files in my connector JAR file. Funny, that JAR is on my CLASSPATH, and that class is in the JAR. &lt;span style="font-style: italic;"&gt;WTF!?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After much pain and misery, I found a tool called &lt;a href="http://www.javaworld.com/javaworld/javatips/jw-javatip105.html?page=1"&gt;JWhich&lt;/a&gt;, which is deceptively simple, yet oh-so-awesome for tracking down issues with classpath. Give it a fully qualified class name, and it will look it up on it's classloader's CLASSPATH. It will either tell you exactly where the first occurrence is, or tell you it's not found.&lt;br /&gt;&lt;br /&gt;Running JWhich stand-alone produced the results I expected, my class is on the CLASSPATH, in my JAR file. Crap!&lt;br /&gt;&lt;br /&gt;But then I looked at the source for JWhich, and decided it was a no-brainer to cut and paste that code into my application's main class. No I try it again, and BAMM! Class not found!&lt;br /&gt;&lt;br /&gt;After a few minutes on Google, I came to realize that Java will ignore your supplied CLASSPATH when you launch a JAR instead of a class. My shell script was launching something like&lt;br /&gt;&lt;blockquote&gt;java -cp $CLASSPATH -jar MyJar.jar&lt;/blockquote&gt;&lt;br /&gt;instead of&lt;br /&gt;&lt;blockquote&gt;java -cp $CLASSPATH com.somecompany.SomeClass&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So my conclusions:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;JWhich - extremely simple yet powerful, embeddable, and free tool that Java developers should have. I'm embarrassed I just found it when the article was written almost 10 years ago.&lt;/li&gt;&lt;li&gt;It still boggles my mind that the classloader just kind of hung up instead of immediately throwing an exception when it could find that class. Esp. when calling the same code via JMX did produce an immediate exception.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;* Invoking JMX Operations Via Groovy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I briefly mentioned that I had invoked a JMX operation using a Groovy script. It's worth mentioning how easy that is as well. Sometimes you want to invoke JMX operations via command line script, or cron, or ???.&lt;br /&gt;&lt;br /&gt;Here's a sample Groovy script, assuming I have an Mbean registered as "com.somecompany.Scheduler", which has a method "runTaskNow" exposed.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;#!/usr/bin/env groovy&lt;br /&gt;import java.lang.management.*&lt;br /&gt;import javax.management.ObjectName&lt;br /&gt;import javax.management.remote.JMXConnectorFactory as JmxFactory&lt;br /&gt;import javax.management.remote.JMXServiceURL as JmxUrl&lt;br /&gt;&lt;br /&gt;def serverUrl = 'service:jmx:rmi:///jndi/rmi://localhost:9987/jmxrmi'&lt;br /&gt;String beanName = "com.somecompany.Scheduler:k=ScheduledTasks"&lt;br /&gt;def server = JmxFactory.connect(new JmxUrl(serverUrl)).MBeanServerConnection&lt;br /&gt;def gmxb = new GroovyMBean(server, beanName)&lt;br /&gt;&lt;br /&gt;println "Connected to:\n$gmxb\n"&lt;br /&gt;println "Executing runTaskNow()"&lt;br /&gt;gmxb.runTaskNow()&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-57947913131053460?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/57947913131053460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=57947913131053460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/57947913131053460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/57947913131053460'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/07/classpath-woes-jwhich-and-groovy.html' title='CLASSPATH Woes, JWhich, and Groovy Invoking JMX'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1824470100200523786</id><published>2010-03-27T19:18:00.004-05:00</published><updated>2010-03-27T19:26:06.434-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><category scheme='http://www.blogger.com/atom/ns#' term='wildlife'/><category scheme='http://www.blogger.com/atom/ns#' term='hunting'/><title type='text'>Stealth Cam - First (good) Batch</title><content type='html'>I just checked my new Stealth Cam tonight, and actually got a few good  deer pictures. Of course I got a lot of pictures of "nothing" -- must be  branches moving in the wind, small critters that got out of the frame  before the picture snapped, sun glare, etc. And of course, the requisite  picture of me walking down the trail to check the camera.&lt;br /&gt;&lt;br /&gt;These  are from the Stealth Cam "Sniper Pro". Nice thing about it (and probably  most others as well) is it has date and time stamp, temperature, and  moon phase clearly marked on each picture. It will also take video, but I  haven't tried that yet.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qV5JTOe-h_k/S66hzMwMt2I/AAAAAAAAAgk/zBDTSQrUn5Y/s1600/SUNP0019.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qV5JTOe-h_k/S66hyzK5SeI/AAAAAAAAAgc/BRDas1JboMI/s1600/SUNP0017.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_qV5JTOe-h_k/S66hyzK5SeI/AAAAAAAAAgc/BRDas1JboMI/s400/SUNP0017.JPG" alt="" id="BLOGGER_PHOTO_ID_5453474092893686242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qV5JTOe-h_k/S66hyfcWV4I/AAAAAAAAAgU/1ZACsysxI40/s1600/SUNP0016.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_qV5JTOe-h_k/S66hyfcWV4I/AAAAAAAAAgU/1ZACsysxI40/s400/SUNP0016.JPG" alt="" id="BLOGGER_PHOTO_ID_5453474087598184322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qV5JTOe-h_k/S66hx4nPRJI/AAAAAAAAAgM/G_fHgQI8nUA/s1600/SUNP0013.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_qV5JTOe-h_k/S66hx4nPRJI/AAAAAAAAAgM/G_fHgQI8nUA/s400/SUNP0013.JPG" alt="" id="BLOGGER_PHOTO_ID_5453474077174875282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qV5JTOe-h_k/S66hzMwMt2I/AAAAAAAAAgk/zBDTSQrUn5Y/s1600/SUNP0019.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_qV5JTOe-h_k/S66hzMwMt2I/AAAAAAAAAgk/zBDTSQrUn5Y/s400/SUNP0019.JPG" alt="" id="BLOGGER_PHOTO_ID_5453474099761035106" 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/17192448-1824470100200523786?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1824470100200523786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1824470100200523786' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1824470100200523786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1824470100200523786'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/03/stealth-cam-first-good-batch.html' title='Stealth Cam - First (good) Batch'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qV5JTOe-h_k/S66hyzK5SeI/AAAAAAAAAgc/BRDas1JboMI/s72-c/SUNP0017.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-523055180539375729</id><published>2010-03-16T18:04:00.000-05:00</published><updated>2010-03-16T18:04:00.083-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Some Football Humor for the Offseason</title><content type='html'>&lt;span style="font-style: italic;"&gt;I got this email from a Bills fan, but most of these would work with any team that's been sucking recently.....&lt;/span&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;The New York Police are cracking down on speeders heading into Buffalo.&lt;br /&gt;For the first offense, they give you two Buffalo Bills tickets.&lt;br /&gt;If you get stopped a second time, they make you use them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Q. What do you call 47 millionaires around a TV watching the Super Bowl?&lt;br /&gt;A. The Buffalo Bills&lt;br /&gt;&lt;br /&gt;Q. What do the Buffalo Bills and Billy Graham have in common?&lt;br /&gt;A. They both can make 70,000 people stand up and yell "Jesus Christ."&lt;br /&gt;&lt;br /&gt;Q. How do you keep a Buffalo Bill out of your yard?&lt;br /&gt;A. Put up a goal post.&lt;br /&gt;&lt;br /&gt;Q. Where do you go in Buffalo in case of a tornado?&lt;br /&gt;A. To Buffalo Bills Stadium - they never get a touchdown there!&lt;br /&gt;&lt;br /&gt;Q. What do you call a Buffalo Bill with a Super Bowl ring?&lt;br /&gt;A. A thief.&lt;br /&gt;&lt;br /&gt;Q. What's the difference between the Buffalo Bills and a dollar bill?&lt;br /&gt;A. You can still get four quarters out of a dollar bill.&lt;br /&gt;&lt;br /&gt;Q. How many Buffalo Bills does it take to win a Super Bowl?&lt;br /&gt;A. Nobody knows and we may never find out!&lt;br /&gt;&lt;br /&gt;Q. What do the Bills and a possum have in common?&lt;br /&gt;A. Both play dead at home and get killed on the road&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-523055180539375729?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/523055180539375729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=523055180539375729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/523055180539375729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/523055180539375729'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/03/some-football-humor-for-offseason.html' title='Some Football Humor for the Offseason'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-5596411283574268924</id><published>2010-02-11T17:05:00.000-05:00</published><updated>2010-02-11T17:05:00.363-05:00</updated><title type='text'>Quote of the Week</title><content type='html'>Someone actually said this on a status call this morning at work. He wasn't joking.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;blockquote&gt;"&lt;span style="font-style: italic;"&gt;It would be less manual if it was automated.&lt;/span&gt;"&lt;/blockquote&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Thank God for the mute button on my phone, because I'm still laughing about it.&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/17192448-5596411283574268924?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/5596411283574268924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=5596411283574268924' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/5596411283574268924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/5596411283574268924'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2010/02/quote-of-week.html' title='Quote of the Week'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2855693560191061512</id><published>2009-12-08T08:38:00.002-05:00</published><updated>2009-12-08T08:42:01.088-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Red Hat Virtual Experience</title><content type='html'>&lt;a href="http://www-2.virtualevents365.com/rhexp/register.php"&gt;&lt;img style="border: medium none ;" src="http://www-2.virtualevents365.com/rhexp/images/RHVE_widget.png" width="120" height="240" /&gt;&lt;/a&gt; Red Hat Virtual Experience is tomorrow, and it's free. Go Sign up. The Jboss Virtual Experience was packed with lots of good info, not sure if this one will be as relevant to my job, but did I mention it's FREE!? Since many companies are cutting way back on travel and training budgets, this might be all you get....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2855693560191061512?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2855693560191061512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2855693560191061512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2855693560191061512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2855693560191061512'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/12/red-hat-virtual-experience.html' title='Red Hat Virtual Experience'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-123194735582584393</id><published>2009-10-21T10:00:00.000-05:00</published><updated>2009-10-21T10:00:00.861-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Running Multiple Versions of Oracle JDBC Driver on same JBoss server</title><content type='html'>&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;We ran into an issue recently where we need 2 different versions of the Oracle JDBC driver on the same app server, because one application needs to talk to Oracle 8.0.6 (&lt;span style="font-style: italic;"&gt;pre-8i even&lt;/span&gt;) and everything else talks to newer (&lt;span style="font-style: italic;"&gt;9i &lt;/span&gt;and &lt;span style="font-style: italic;"&gt;10g&lt;/span&gt;) databases. &lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With the newer JDBC driver out in the Jboss server's lib/ directory, the legacy application fails to connect because of the dreaded ORA-604 that you get when trying to connect to a really early DB with a driver that doesn't go back that far. &lt;span style="font-style: italic;"&gt;See the links below for &lt;a href="http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html#02_02"&gt;Oracle's list of what drivers support what versions of Oracle&lt;/a&gt;. &lt;/span&gt;The exception is shown below in case you haven't seen it before.&lt;br /&gt;&lt;br /&gt;&lt;blockquote  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;Throwable while attempting to get a new connection: null&lt;br /&gt;org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1&lt;br /&gt;ORA-02248: invalid option for ALTER SESSION&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Putting the old driver out in lib/ means that the newer datasources won't deploy properly.&lt;br /&gt;&lt;br /&gt;After a few hours of Google searches and pouring through the Jboss.org wiki and forums, we just couldn't find the answer. We finally made this &lt;a href="http://www.jboss.org/index.html?module=bb&amp;amp;op=viewtopic&amp;amp;t=162701"&gt;post to the Jboss forums&lt;/a&gt;:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="postbody"&gt;&lt;blockquote&gt;We are using Jboss AS 4.2.2-GA and have hit a snag. One application needs to connect to an older Oracle 8 database, so we need to use the older Oracle JDBC driver. For all of our other applications, we need to use the newer Oracle JDBC driver.&lt;br /&gt;&lt;br /&gt;But the classnames for the drivers are the same, so we can't figure a way to tell one *-ds.xml file to deploy under the early driver and everything else to use the newer driver.&lt;br /&gt;&lt;br /&gt;We tried adding the older driver JAR file and the *-ds.xml file right in our application EAR file, but when deploying it picked up the newer Oracle driver from the server's lib directory anyways. This puzzled me as we are using ear-scoped classloaders.&lt;br /&gt;&lt;br /&gt;Both applications are SEAM applications using EJB3/Hibernate. We can get one or the other to work depending on which Oracle driver we put in lib/ but can't get both to work at once.&lt;br /&gt;&lt;br /&gt;I've been searching Google and the Jboss forums and wiki for the past 2 hours, and find lots of newbie "this is how to deploy a datasource" stuff, but nothing on 2 conflicting versions of a vendor's driver. HELP!&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;We got the response the next morning, and it turns out we were on the right path by putting the datasource file and classes12.zip in the application EAR file, but because of JDBC classloader issues, we had to also include a few other files and some extra application.xml config. &lt;a href="http://www.jboss.org/community/wiki/IWantToDeployMyOwnJdbcDriverInAScopedClassloader"&gt;Here is the complete article&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;Links:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family: arial;font-family:arial;" &gt;My post to Jboss forums asking the question:&lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.jboss.org/index.html?module=bb&amp;amp;op=viewtopic&amp;amp;t=162701"&gt; http://www.jboss.org/index.html?module=bb&amp;amp;op=viewtopic&amp;amp;t=162701&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family: arial;font-family:arial;" &gt;The wiki article that answers the question &lt;/span&gt;&lt;span style="text-decoration: underline; font-family: arial;font-family:arial;" &gt;&lt;a href="http://www.jboss.org/community/wiki/IWantToDeployMyOwnJdbcDriverInAScopedClassloader"&gt;http://www.jboss.org/community/wiki/IWantToDeployMyOwnJdbcDriverInAScopedClassloader&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-family: arial;font-family:arial;" &gt;Which Oracle JDBC Drivers support which versions of Oracle RDBMS? &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html#02_02"&gt;http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html#02_02&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;Jaikiran Pai's blog - gotta give props to the guy who answered our question: &lt;/span&gt;&lt;a style="font-family: arial;" href="http://jaitechwriteups.blogspot.com/"&gt;http://jaitechwriteups.blogspot.com/&lt;/a&gt;&lt;/span&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/17192448-123194735582584393?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/123194735582584393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=123194735582584393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/123194735582584393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/123194735582584393'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/10/running-multiple-versions-of-oracle.html' title='Running Multiple Versions of Oracle JDBC Driver on same JBoss server'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-548306591973450088</id><published>2009-10-21T07:37:00.002-05:00</published><updated>2009-10-21T07:40:48.378-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Love Dress</title><content type='html'>&lt;span style="font-style: italic;"&gt;I have a few technical posts to put up here when I get a few minutes, but until then I'll share a joke I just got via email:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt;A woman stopped by,  unannounced, at her son's house.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt;She knocked on the  door, then immediately walked in. She was shocked to see her daughter-in-law  lying on the couch, totally naked!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt;"What on earth are you  doing?" she asked.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt;"I'm waiting for my  husband to get home from work," the daughter-in-law  answered.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;  &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt;"But you're naked!"  the mother-in-law exclaimed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;  &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt;"This is my love  dress," the daughter-in-law explained.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;  &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt;"Love dress??? But  you're NAKED!" said mommy dearest.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;  &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt;"He loves me to wear  this dress," the young lady said. "Every time he sees me in this dress, he  instantly becomes romantic &amp;amp; ravages me for hours."&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt;The mother-in-law  left. When she got home she undressed, showered, put on her best perfume, dimmed  the lights, put on a romantic CD, and lay on the couch waiting for her husband  to come home.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;  &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt;Finally, her husband  came home. He walked in &amp;amp; saw her lying there so provocatively and asked,  "What are you doing?"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt; "This is my love  dress," she whispered sensually.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:black;"&gt;&lt;span style="font-size: 10pt; color: black; font-family: Arial;"&gt; "Needs ironing," he  said, "what's for dinner?"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&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/17192448-548306591973450088?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/548306591973450088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=548306591973450088' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/548306591973450088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/548306591973450088'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/10/love-dress.html' title='Love Dress'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8342410561030657413</id><published>2009-08-18T18:00:00.000-05:00</published><updated>2009-08-18T18:00:01.844-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Multiple Column Subqueries (Oracle)</title><content type='html'>I recently had to do something like this in an application, and I had to look it up to see if it was even possible. I knew you could do this with a single value, but was skeptical if multiple columns could be done this easily.&lt;br /&gt;&lt;br /&gt;For my own benefit, I am posting the basic syntax for next time I need to do it. Replace your table names where t1 and t2 are, column names for c1, c2, c3, etc. I did this in Oracle, but it may work the same or very similar in other databases.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SELECT *&lt;br /&gt;FROM t1&lt;br /&gt;WHERE (c1,c2,c3)&lt;br /&gt;IN (&lt;br /&gt;  SELECT t2.c1,t2.c2,t2.c3&lt;br /&gt;  FROM t2&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;For reference, I found my answer at: &lt;a href="http://www.java2s.com/Code/Oracle/Subquery/WritingMultipleColumnSubquerieswithtablejoin.htm"&gt;http://www.java2s.com/Code/Oracle/Subquery/WritingMultipleColumnSubquerieswithtablejoin.htm&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-8342410561030657413?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8342410561030657413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8342410561030657413' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8342410561030657413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8342410561030657413'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/08/multiple-column-subqueries-oracle.html' title='Multiple Column Subqueries (Oracle)'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-5537526889034759651</id><published>2009-07-15T18:05:00.001-05:00</published><updated>2009-07-15T18:05:00.685-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='SEAM'/><title type='text'>More Jboss SEAM Nuggets</title><content type='html'>As I dig farther into the Jboss SEAM world, I figured I would share a few nuggets of info as I find them. It's more notes than tutorial, so don't expect too much....&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;ORACLE TIMESTAMP ISSUES&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;If you are using Oracle, more specifically Oracle 9i and newer, you will probably have issues with date fields. There was a change in Oracle's JDBC driver somewhere between 8i and 9i that changes how the driver reports a DATE field in the metadata. Anyways, running seamgen gets you entities with Date objects with annotations like @Temporal(TemporalType.DATE). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When you go to deploy though, The validation fails because it is expecting a TIMESTAMP field, but gets a DATE field. That keeps the EJB from deploying and keeps the EntityManager from being bound. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Luckily, there is an easier fix than manually updating the data types and annotations in all your generated entities. You can add the following JVM argument to your startup to force the Oracle driver to report DATE fields based on the Oracle 8 driver behavior instead of the 9i+ driver:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;-Doracle.jdbc.V8Compatible=true&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;RENDERING ISSUES ON SERVER&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Speaking of JVM args, I noticed on my dev box (Windows), my SEAM app rendered beautifully. When I deployed to the Linux server, some of the fancy "3d" type components suddenly looked flat. There were exceptions in the log for some Swing classes (sorry I don't have the exact exception or stack trace, it was a while ago). Why is it using Swing to render page elements? Don't know, and at this point, don't care, as long as there is a simple fix. And alas, there is...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I added the following JVM argument to my Jboss startup to let it know it's a headless server. Seems to have fixed my issue.&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;-Djava.awt.headless=true&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;MULTIPLE PAGE DEFINITIONS FOR ONE PAGE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;When you build out a new application using seamgen, you will notice that for each entity, you will have several view components. For example, you will have a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;TableName.xhtml&lt;/span&gt; and a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;TableName.page.xml&lt;/span&gt; file. The &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;*.page.xml&lt;/span&gt; contains your&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &amp;lt;page&amp;gt;&lt;/span&gt; definition, that will define the view id, parameters, conversation settings, etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You will also notice that the SEAM &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;pages.xml&lt;/span&gt; file also has (or can have) &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&amp;lt;page&amp;gt;&lt;/span&gt; &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;page&gt;&lt;/page&gt;&lt;/span&gt; definitions. Guess what, the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;pages.xml&lt;/span&gt; definition for a given page, if it exists, overrules the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;*.page.xml&lt;/span&gt; version. Remember that when changes you make to *&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;.page.xml&lt;/span&gt; don't seem to take effect, or other odd behavior where those values seem to be ignored. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;It's not a hierarchy, it's not an inheritance, it's a one-or-the-other situation&lt;/i&gt;. It caused me quite a bit of grief until I figured that out. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;USING SEAM COMPONENTS FROM SERVLETS&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So you need to throw in some regular old-school Servlet's into the mix? But you want your SEAM goodies too? Damn, you just want the best of everything.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are a few ways to do it, and I found the easier way is to "wrap" your Servlet(s) in the SEAM filter. Add a line something like this to your SEAM &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;components.xml &lt;/span&gt;file (make sure to change your URL pattern appropriately. In my case my Servlet is to download a CSV file).&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&amp;lt;web:context-filter pattern="/csv"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;And then in your Servlet code, you can get your SEAM stuff from the Components object like the sample below:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;UnmappedAccount unMapAcct = (UnmappedAccount)Component.getInstance("unmappedAcct");&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;In this example, UnmappedAccount is a class in my EJB module annotated as a SEAM component.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;import org.jboss.seam.annotations.Name;&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;@Name("unmappedAcct")&lt;/div&gt;&lt;div&gt;public class UnmappedAccount { ... }&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;CASCADING EJB'S&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;Allow me to throw out a minor warning on the generated SEAM code. The default CascadeType in the generated EJB's is "ALL", as seen in the annotation below.&lt;pre&gt;&lt;blockquote&gt;@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "...")&lt;/blockquote&gt;&lt;/pre&gt;It's not devastating, it's not a bug, but it is something you should be aware of in case you don't want cascading (&lt;span style="font-style: italic;"&gt;or worse, aren't aware of cascading and what it really means, and just happily go with the defaults&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://java.sun.com/javaee/5/docs/api/javax/persistence/CascadeType.html"&gt;http://java.sun.com/javaee/5/docs/api/javax/persistence/CascadeType.html&lt;/a&gt;  for more information on the various CascadeTypes, in case you don't already know. If you don't want cascading, remove the "cascade = CascadeType.ALL" portion of the generated annotation.&lt;br /&gt;&lt;br /&gt;Let's say you try to delete a record that has children records attached to it. You might expect to get an error back saying you can't delete a record that has children attached. That's what you would get from, say TOAD or Squirrel or SQL-Plus, or even from applications written using plain old ODBC or JDBC statements. But with cascading, that delete will happily take care of those children for you without complaining ;-)&lt;br /&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;NAMED QUERY DEFINED IN COMPONENTS.XML&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I just found this one, and it seems to be a good fit with what I have to do right now. I haven't finished it yet, so not much to share here yet. Once I get that working, it might be worth mentioning in my next nuggets post.&lt;/div&gt;&lt;div&gt;&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/17192448-5537526889034759651?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/5537526889034759651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=5537526889034759651' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/5537526889034759651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/5537526889034759651'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/07/more-jboss-seam-nuggets.html' title='More Jboss SEAM Nuggets'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1200723475613244215</id><published>2009-05-28T19:27:00.004-05:00</published><updated>2009-07-16T10:58:31.441-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='SEAM'/><title type='text'>Emergency Startup CD for Windows</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;BartPE, because sometimes you actually have to run Windows.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;If you have Windows and your system did not come with a "rescue", "restore", or "emergency startup" type CD (&lt;span style="font-style: italic;"&gt;yes, I'm talking to the cheap bastards at Dell who don't include the Windows CD&lt;/span&gt;), then you NEED to follow the instructions at &lt;a href="http://www.howtohaven.com/system/live-windows-rescue-cd.shtml"&gt;http://www.howtohaven.com/system/live-windows-rescue-cd.shtml&lt;/a&gt;.  This creates a bootable "BartPE" CD with all the right utilities for fixin' what ails ye.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Do it now&lt;/span&gt;! &lt;span style="font-style: italic;"&gt;Before &lt;/span&gt;you need it, not &lt;span style="font-style: italic;"&gt;after&lt;/span&gt;. I learned the hard way, and after this past week, I can't sing the praises of BartPE enough. It was a life saver.&lt;br /&gt;&lt;br /&gt;My wife's laptop booted to a BSOD when I was trying to VPN in to work. Oh well, a night off....but then it kept doing it, over and over. I couldn't get Windows to start for the life of me.&lt;br /&gt;&lt;br /&gt;Since I didn't have a bootable Windows CD, I was left trying to boot FreeDOS from my thumbdrive (using LiveUSB Creator) . I made sure to have a copy of NTFS4DOS installed on there as well, and ran through some exercises where I got a command prompt to manually copy registry files around. That was painful, but it actually worked enough to get the machine to boot into XP. But it was a version of XP that had all sorts of issues, error messages, drivers crashing, no USB support, no CD recording, no network, etc. Without USB, network, or CD burning, I couldn't get our important files off the machine. &lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Anyway, to make a long story short, the FreeDOS/ntfs4dos route was crappy and painful with no real reward.&lt;br /&gt;&lt;br /&gt;The BartPE rocks the house! It boots into a minimal XP interface with all the right utilities for fixing your issues, and USB drives are recognized, so I can copy important files off the machine in case I feel the need to wipe it clean.&lt;br /&gt;&lt;br /&gt;I guess I really should do regular backups, but what fun is that? Preventing problems is boring, solving problems is heroic....&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1200723475613244215?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1200723475613244215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1200723475613244215' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1200723475613244215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1200723475613244215'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/05/emergency-startup-cd-for-windows.html' title='Emergency Startup CD for Windows'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7283556754447966871</id><published>2009-04-08T17:25:00.000-05:00</published><updated>2009-04-08T17:25:00.819-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='google app engine'/><title type='text'>Google App Engine And Java</title><content type='html'>I recently posted about my experience playing with the Google App Engine and the Python language, in which I wrote:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;For now, the only supported language is Python....I wouldn't mind seeing other languages supported in GAE, though not sure it really matters or if it is worth Google's time, money, and effort to expand support to other languages. I'm sure if they asked 100 developers they would get 100 different answers of what languages should be supported.&lt;/blockquote&gt;Well, just when I was getting used to the idiosyncrasies of the Python language, I went to look something up on &lt;a href="http://code.google.com/appengine/"&gt;http://code.google.com/appengine/&lt;/a&gt; and found that they have an early preview of Java running on the engine. Here's the &lt;a href="http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html"&gt;blog posting&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;If I were one of the 100 developers mentioned above, my first answer would have been Java. I signed up as soon as I saw it, but alas, I'm on a waiting list. Looks like I'll be flirting with Python a little longer while I wait for my true love....&lt;br /&gt;&lt;br /&gt;The really cool part of getting Java running in the engine is that should bring the other languages that run on the JVM as well, e.g. Scala, Groovy, JRuby, BeanShell, and, yes, even Jython.&lt;br /&gt;&lt;br /&gt;Oh the fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-7283556754447966871?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7283556754447966871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7283556754447966871' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7283556754447966871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7283556754447966871'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/04/google-app-engine-and-java.html' title='Google App Engine And Java'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2153951329990825924</id><published>2009-03-31T23:23:00.004-05:00</published><updated>2009-03-31T23:52:27.767-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='google app engine'/><title type='text'>Google App Engine &amp; Python</title><content type='html'>I finally took the dive into the Google App Engine last week. It's free to get started (&lt;span style="font-style: italic;"&gt;up to 10 applications per Google account&lt;/span&gt;) and gets my feet wet for this whole "cloud computing" crapfest. Here are my first impressions of Google App Engine and Python. &lt;span style="font-style: italic;"&gt;I won't go into my issues with cloud computing in general and all the hype surrounding it, and how it will magically solve all of our scalability and maintenance issues.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I was surprised at how well done the Google App Engine is, and how quickly I could get started. Downloading and installing the local development environment was quick and  painless, and walking through the tutorial, I had a very basic "guest book" application written and deployed out in the vast Google cloud for the world to see. The local development server was up and running within minutes of downloading and installing, and making changes to the Python scripts didn't require any redeployment or restarts. Uploading to the Google servers was a matter of running a single script and entering your user id and password. There is even an admin console where you can see stats on your page visits, bandwidth used, performance, etc.&lt;br /&gt;&lt;br /&gt;I like that the Google users and authentication is pretty much built in, as well as the simple "webapp" MVC framework, and that you can use any pure Python library or framework you want to use (as long as there aren't any extensions written in C). The data access layer and GQL query language is interesting -- one big free-form data store where you aren't dealing with individual tables so much as just defining your entities in your code's data structures, and reading and writing from them as if they are tables.&lt;br /&gt;&lt;br /&gt;For now, the only supported language is Python, which I have never dealt with. That really wasn't much of a hurdle since the syntax is pretty straight forward and easy to learn. I wouldn't mind seeing other languages supported in GAE, though not sure it really matters or if it is worth Google's time, money,  and effort to expand support to other languages. I'm sure if they asked 100 developers they would get 100 different answers of what languages should be supported.&lt;br /&gt;&lt;br /&gt;I'm a little more ambivalent toward Python. I didn't dislike it, but it just didn't grab me by the balls and make me exclaim it's superiority either.  I can say I'm not a fan of the whole "indentation exception" crap.  As a guy with more of a C and Java background, I like my curly brackets instead of relying on indentation levels, which remind me too much of COBOL, &lt;span style="font-style: italic;"&gt;yuck!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Anyway, here's my &lt;a href="http://ran488.appspot.com/"&gt;trivial little application&lt;/a&gt;. It's all "tutorial-ware", straight out of the book with a few CSS enhancements and a simple "about" page. It's not useful, but not bad considering how little time it took to write.&lt;br /&gt;&lt;br /&gt;Next step.... write something useful. I definitely want to get into this more and add it to my development toolbox.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2153951329990825924?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2153951329990825924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2153951329990825924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2153951329990825924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2153951329990825924'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/03/google-app-engine-python.html' title='Google App Engine &amp; Python'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8803917005451528687</id><published>2009-03-31T17:00:00.000-05:00</published><updated>2009-03-31T17:00:00.144-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><category scheme='http://www.blogger.com/atom/ns#' term='wildlife'/><title type='text'>So Tempting....</title><content type='html'>Eleven turkeys recently found themselves really lucky they weren't in season....&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qV5JTOe-h_k/SdI4rUFAH6I/AAAAAAAAAfs/l93Zozkp5Tk/s1600-h/wildturkeys.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_qV5JTOe-h_k/SdI4rUFAH6I/AAAAAAAAAfs/l93Zozkp5Tk/s400/wildturkeys.jpg" alt="" id="BLOGGER_PHOTO_ID_5319376426653196194" 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/17192448-8803917005451528687?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8803917005451528687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8803917005451528687' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8803917005451528687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8803917005451528687'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/03/so-tempting.html' title='So Tempting....'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qV5JTOe-h_k/SdI4rUFAH6I/AAAAAAAAAfs/l93Zozkp5Tk/s72-c/wildturkeys.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7857703216855435419</id><published>2009-03-03T17:05:00.000-05:00</published><updated>2009-03-03T17:05:00.998-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='SEAM'/><title type='text'>An Overzealous SEAM Validation</title><content type='html'>I am using the Jboss SEAM framework for the project I am currently working on. The first thing that really bit me was a validation on single character fields that seems a bit "too stringent". I'm sure I'm not the first to run into this. In fact it may be fixed by now in a newer version of SEAM, but figured it's worth a post anyways.&lt;br /&gt;&lt;br /&gt;When you use Jboss Developer Studio (JBDS) to reverse engineer your database (&lt;span style="font-style: italic;"&gt;I imagine the &lt;/span&gt;&lt;span style="font-style: italic;"&gt;seam-gen tools do the same since JBDS uses them&lt;/span&gt;), the getter method on the EJB looks something like this...&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; @Column(name = "DEFAULT_REMAP_IND", length = 1)&lt;br /&gt; @Length(max = 1)&lt;br /&gt; public Character getDefaultRemapInd() {&lt;br /&gt;  return this.defaultRemapInd;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;Looks fine, looks reasonable. Single character fields are often used for flags or indicators, as this one above is -- it's a simple Y/N field. So in my XHTML I use a radio button control instead of a free form text field.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;h:selectOneRadio id="defaultRemapInd" value="#{ocamCustTypeDfltHome.instance.defaultRemapInd}" required="true"&amp;gt;&lt;br /&gt;        &amp;lt;f:selectItem itemValue="Y" itemLabel="Yes" /&amp;gt;&lt;br /&gt;        &amp;lt;f:selectItem itemValue="N" itemLabel="No" /&amp;gt;&lt;br /&gt;         &amp;lt;a:support event="onblur" reRender="defaultRemapIndDecoration"/&amp;gt;&lt;br /&gt;  &amp;lt;/h:selectOneRadio&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qV5JTOe-h_k/Sa2auOgW-5I/AAAAAAAAAfk/1ItsCB7sotk/s1600-h/seam-val-error.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 120px;" src="http://2.bp.blogspot.com/_qV5JTOe-h_k/Sa2auOgW-5I/AAAAAAAAAfk/1ItsCB7sotk/s320/seam-val-error.JPG" alt="" id="BLOGGER_PHOTO_ID_5309069654698163090" border="0" /&gt;&lt;/a&gt;The SEAM framework will use that @Length annotation to perform some field validations for you automagically, which is pretty cool as it can be a real time-saver.  But the funny thing is that when this "max length of 1" validation fires, you get the lovely message shown in this partial screen shot ....&lt;br /&gt;&lt;br /&gt;Not sure how to get a single character with a length greater than 0 but less than 1, but I do know that the easiest thing to do in this case is remove the @Length annotation for that field. I had to do that for a few different tables. Luckily they were all flags that could be replaced with radio buttons, but in the case where you had to allow free input, you might have to get more creative (you can always put a max length on the input text field).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;For reference, I am using Jboss 4.2.2, SEAM 1.2GA, Jboss's EJB3 implementation (which is Hibernate under the hood), &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;XHTML and &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Facelets for the views. Like I said, this might be fixed in a later release of SEAM.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-7857703216855435419?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7857703216855435419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7857703216855435419' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7857703216855435419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7857703216855435419'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/03/overzealous-seam-validation.html' title='An Overzealous SEAM Validation'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qV5JTOe-h_k/Sa2auOgW-5I/AAAAAAAAAfk/1ItsCB7sotk/s72-c/seam-val-error.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-4734592490756111689</id><published>2009-02-17T17:06:00.002-05:00</published><updated>2009-02-17T17:06:00.806-05:00</updated><title type='text'>A Lesson In Tracking</title><content type='html'>I took my daughters for a walk in the woods behind our house Sunday. In the patches of snow and mud, I showed them various animal tracks and we worked on identifying deer, foxes, raccoons, etc.  I showed them "deer beans", which they had a lot of fun finding and pointing out. We even kicked up 3 deer as we came around the creek bend.&lt;br /&gt;&lt;br /&gt;When we turned to come back, I explained that we should be able to find the tracks we made on the way in, and follow them to get back the same way we came in. I told them this was called '&lt;span style="font-style: italic;"&gt;tracking&lt;/span&gt;'. To this, Raina responded with Sid the Sloth's line from the "Ice Age" movie -- "&lt;span style="font-style: italic;"&gt;I see a tree, I eat a leaf, that's my tracking.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;I love the way kids will pick up what you are telling them, and make associations to stuff they already know. I also love that they show an interest in the outdoors, at least for now. They will probably "turn into girls" at some point, and not want to hunt, fish, camp, etc., so I am enjoying it while I can.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-4734592490756111689?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/4734592490756111689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=4734592490756111689' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4734592490756111689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4734592490756111689'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/02/lesson-in-tracking.html' title='A Lesson In Tracking'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8346011308585141536</id><published>2009-01-20T16:59:00.000-05:00</published><updated>2009-01-20T16:59:01.039-05:00</updated><title type='text'>My RAZR Woes</title><content type='html'>My Motorola RAZR v3m phone I have had for a year and half suddenly started acting strange last week. I noticed every time I went to use it, it was turned off, but the battery had a full charge. Then I started paying more attention, and noticed that it would suddenly lose all signal and the screen would go all white for split second and come back, but then the keypad seemed to be frozen -- I couldn't get it to do anything. From there, it would either turn itself off or "reboot" itself (went back to main screen and was OK for a while.&lt;br /&gt;&lt;br /&gt;Also, while trying to save pictures in anticipation of the phone either being replaced or flashed, the phone would completely lock up when I inserted the micro-SD card. I had been using this same micro-SD card for almost a year with no issue. Another thing I noticed was now all my contacts show a group of a single, solid "block" character instead of "family", "work", etc.&lt;br /&gt;&lt;br /&gt;The phone has not been wet and has not been dropped or otherwise abused. The battery is holding it's charge just fine. The strangest part is that we haved the same model phones at work for our on-call phones. My group's on-call phone started having the same symptoms around the same time mine did. And now I am hearing of at least one other group here having the same issues with their RAZR. From that, I concluded this has to be a more widespread problem, but the lady at the Verizon store refused to even look into it. The phone is out of warranty, so wouldn't do any troubleshooting -- just the offer to buy a new one or wait a month until my contract is eligible to upgrade.&lt;br /&gt;&lt;br /&gt;If I were more paranoid and prone to believing conspiracy theories, I might think Motorola put in some sort of "upgrade timer" to break right around the time people are eligible to upgrade their phones. It's probably more likely that there is a Zune-type "leap second" bug in the firmware.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Model: v3m&lt;br /&gt;s/w: NEWC_01.09.02&lt;br /&gt;Date code: 1407&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/17192448-8346011308585141536?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8346011308585141536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8346011308585141536' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8346011308585141536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8346011308585141536'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2009/01/my-razr-woes.html' title='My RAZR Woes'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1391914402796052283</id><published>2008-11-14T12:30:00.000-05:00</published><updated>2008-11-14T12:30:00.778-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='hunting'/><title type='text'>Easy Duck or Goose Butchering</title><content type='html'>Here's my step-by step to make it relatively quick and easy to butcher ducks and geese. For the pictures, this is one of the domestic geese we raised this year, but I learned the technique from my neighbor Dave after hunting Canadian Geese a few years back.&lt;br /&gt;&lt;br /&gt;This process is quick because you don't have to pluck feathers or even skin the whole bird. You don't even have to remove the entrails. What you are left with is 2 big boneless, skinless breast halves, and the leg/thigh quarters.&lt;br /&gt;&lt;br /&gt;Anyone who complains about duck or goose being greasy or fatty has probably tried roasting the whole thing with the skin on, without puncturing the skin first. All the fat is in a thick layer right under the skin. Since I remove the skin, the fat comes with it, and you're left with lean meat.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qV5JTOe-h_k/SR18Fuqm-KI/AAAAAAAAAeY/7z97pphbU64/s1600-h/110508_19471.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 256px;" src="http://4.bp.blogspot.com/_qV5JTOe-h_k/SR18Fuqm-KI/AAAAAAAAAeY/7z97pphbU64/s320/110508_19471.jpg" alt="" id="BLOGGER_PHOTO_ID_5268503576961284258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1:&lt;/span&gt; Turn the (&lt;span style="font-style: italic;"&gt;dead&lt;/span&gt;) bird over on it's back, breast side up. Cut through the skin right in middle of the chest, being careful to not cut through anything but skin (&lt;span style="font-style: italic;"&gt;just like the first cut when field dressing a deer&lt;/span&gt;). Use your skinning knife to peel the skin back, exposing the breast meat.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;right, skin pulled back, breast exposed&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;Note:&lt;/span&gt;&lt;span style="font-style: italic;"&gt; This is actually a variation on what I was shown. Dave starts by pulling the downy feathers off the breast, and then skipping to step 2 right through the skin. Then he peels the skin off the breast meat as the last step. I find my way to be a little easier.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qV5JTOe-h_k/SR18GMaU2kI/AAAAAAAAAeg/FHIdlFIItNs/s1600-h/110508_19501.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 256px;" src="http://4.bp.blogspot.com/_qV5JTOe-h_k/SR18GMaU2kI/AAAAAAAAAeg/FHIdlFIItNs/s320/110508_19501.jpg" alt="" id="BLOGGER_PHOTO_ID_5268503584946051650" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Step 2: &lt;/span&gt;Find the ridge bone right down the middle, separating the 2 breast halves. Here I switch from a skinning knife to a fillet or boning knife, with a long thin and somewhat flexible blade. Cut straight down on one side of that ridge bone, cutting as close to the bone as possible. The blade will only cut so far until you hit breast bone again, but this is where the thin flexible blade comes in.&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;right, first cut along ridge bone&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Once you hit the breast bone, kind of curve the tip of you knife and keep it right along&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qV5JTOe-h_k/SR18GiHvpFI/AAAAAAAAAeo/JZkmAIz7TDs/s1600-h/110508_19511.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_qV5JTOe-h_k/SR18GiHvpFI/AAAAAAAAAeo/JZkmAIz7TDs/s320/110508_19511.jpg" alt="" id="BLOGGER_PHOTO_ID_5268503590773695570" border="0" /&gt;&lt;/a&gt; the bone the whole time, while gently pulling the meat away with your other hand. If you keep your knife blade following the contour of the bone, you will end up with one big chunk of breast meat.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;Here you can see the meat pulled away from the bone, at this point, I am about 50-60% done with this side.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3:&lt;/span&gt; When you are finished with one side, you will have a nice big "fillet" of breast meat, clean it off and do the same on the other side. Wash off any feathers or blood, and either cook the meat or package it for&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qV5JTOe-h_k/SR18G8lQstI/AAAAAAAAAew/QCKsA7sB__g/s1600-h/110508_19531.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 256px;" src="http://3.bp.blogspot.com/_qV5JTOe-h_k/SR18G8lQstI/AAAAAAAAAew/QCKsA7sB__g/s320/110508_19531.jpg" alt="" id="BLOGGER_PHOTO_ID_5268503597876818642" border="0" /&gt;&lt;/a&gt; the freezer.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt; &lt;span style="font-style: italic;font-size:78%;" &gt;right, one half the breast meat, ready for packaging.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Note:&lt;/span&gt; &lt;span style="font-style: italic;"&gt;This is a big, lean chunk of meat that is more similar to beef in texture than chicken. Use it in any duck or goose recipe you may have, or substitute for beef in other recipes. You can cut into cubes for kabobs, cut in strips for a stir fry, roast it, smoke it, barbecue it, etc.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;: At this point, I'll pull the skin off the legs and thighs so I can cut them off at the joint. The legs and thighs of waterfowl aren't the greatest cuts of meat in my opinion, but they are great for grinding (&lt;span style="font-style: italic;"&gt;I recently used mine in chili, alongside other game I had in the freezer&lt;/span&gt;). You could even slow cook and shred it off the bone to cook in BBQ sauce, kind of like pulled pork (&lt;span style="font-style: italic;"&gt;pulled goose&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;Last, but definitely not least.... Enjoy eating your duck or goose.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&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/17192448-1391914402796052283?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1391914402796052283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1391914402796052283' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1391914402796052283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1391914402796052283'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/11/easy-duck-or-goose-butchering.html' title='Easy Duck or Goose Butchering'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qV5JTOe-h_k/SR18Fuqm-KI/AAAAAAAAAeY/7z97pphbU64/s72-c/110508_19471.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-354116027780843646</id><published>2008-10-22T12:15:00.000-05:00</published><updated>2008-10-27T09:45:29.311-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><category scheme='http://www.blogger.com/atom/ns#' term='hunting'/><title type='text'>A Much Needed Day Off</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qV5JTOe-h_k/SP9SC0wQa8I/AAAAAAAAAeQ/um2lRa7XiYc/s1600-h/3squirrels_10202008.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_qV5JTOe-h_k/SP9SC0wQa8I/AAAAAAAAAeQ/um2lRa7XiYc/s320/3squirrels_10202008.jpg" alt="" id="BLOGGER_PHOTO_ID_5260013098266291138" border="0" /&gt;&lt;/a&gt;When I saw my brother-in-law, Phil, last Saturday, I asked him why he wasn't out turkey hunting, after all, it's opening day. We both had other things going on all weekend, but it didn't take long for us to conclude we just had to go hunting Monday. I'm at that point where I just need a day off work anyways (or 2, or 3, or...), and this was a perfect excuse.&lt;br /&gt;&lt;br /&gt;Phil is all gung-ho for turkey hunting, but I never got too crazy over them. Plus it was cold, and I wasn't dressed for sitting in one spot. Squirrels, rabbits, grouse, and pheasants are all in season as well, so I grabbed my orange vest and decided to do some walking. &lt;br /&gt;&lt;br /&gt;The place we were hunting had some bean fields that had already been harvested, surrounded by lots of hardwoods, and with a few hedgerows here and there. I decided to walk along the edges of the woods and hedgerows trying to kick something up. In the first field, I got a few glimpses of gray squirrels, but no shots. In the corner of the second field, I shot one gray, and as I watched him fall to the ground, I caught the movement of a second squirrel sitting in the V of a tree trunk, just a few feet away from where the first was. A second shot had him hitting the forest floor, and then I saw yet a third bushy tail scampering away, and never got a shot at him. A few minutes later and I was scooping two bushy tails into the game pouch on my vest.&lt;br /&gt;&lt;br /&gt;I worked my way back to the truck to shed a layer, as it was starting to warm up a bit. I ate my apple and headed back into the woods, and saw a small deer slowly crossing the path in front of me. If that deer had been closer, it would have been a great picture.&lt;br /&gt;&lt;br /&gt;I was heading down a wide grassy path when I saw a big bushy tail jumping around in the trees above me. There were several nests in the area, so I decided to sit down and see if I could get him or his friends to come back. While I was sitting there, I heard something coming through the woods right behind me. Within a few seconds, I had a small button buck standing about 10 yards from me, wanting to cross that path I was sitting next to. He was staring right at me, probably thinking "&lt;span style="font-style: italic;"&gt;something ain't right, but I'm not really sure what it is&lt;/span&gt;." I stayed as still as I could hoping he would cross and I could get a good broadside picture of him in the open. But he stared at me, he stomped his hooves on the ground, he snorted, he pretended to eat, he circled me, anything and everything to get me to give myself up.&lt;br /&gt;&lt;br /&gt;As this stand-off between me and the small buck went on, I noticed something about a foot away that would normally have me screaming like a school girl. A snake! Yes, the burly outdoorsman is petrified of snakes. I know it's "&lt;span style="font-style: italic;"&gt;just a garter snake&lt;/span&gt;" and that it won't hurt me and all that, &lt;span style="font-weight: bold;"&gt;but logic and phobias don't mix&lt;/span&gt;. It took everything in me, and some praying, to keep me from panicking. I needed to stay calm to get the deer to come out. Although I am proud of myself for not completely losing it, in hindsight it was silly because it isn't even deer season. I forced myself to be calm sitting right next to a snake for 10-15 minutes, just so a deer &lt;span style="font-style: italic;"&gt;might &lt;/span&gt;walk in front of me and I &lt;span style="font-style: italic;"&gt;might &lt;/span&gt;get a picture!? In the end, the deer ended up taking off and I never got a picture. The snake, the deer, and I all went separate directions.&lt;br /&gt;&lt;br /&gt;After some more still hunting, I got a third squirrel, and had a few more slip away out of shooting range. Phil had only planned to hunt until noon, so we packed up and left by about 1:00.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-354116027780843646?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/354116027780843646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=354116027780843646' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/354116027780843646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/354116027780843646'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/10/much-needed-day-off.html' title='A Much Needed Day Off'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qV5JTOe-h_k/SP9SC0wQa8I/AAAAAAAAAeQ/um2lRa7XiYc/s72-c/3squirrels_10202008.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7870021509660265457</id><published>2008-10-17T09:00:00.001-05:00</published><updated>2008-10-17T09:19:54.098-05:00</updated><title type='text'>A Website For Everything</title><content type='html'>I don't care what you're looking for, there's a website for just about everything and anything. Case in point, &lt;a style="font-weight: bold;" href="http://www.monkeys-for-sale.com/"&gt;http://www.monkeys-for-sale.com&lt;/a&gt;. The internet's not just for porn anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-7870021509660265457?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7870021509660265457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7870021509660265457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7870021509660265457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7870021509660265457'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/10/website-for-everything.html' title='A Website For Everything'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1304713536497006588</id><published>2008-10-16T15:34:00.001-05:00</published><updated>2008-10-16T15:35:53.522-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Effects of Gas Prices On Batman</title><content type='html'>My wife sent me this email a few months back when gas was still over $4/gal. Still funny with gas hovering at $3.40.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qV5JTOe-h_k/SPela29TXTI/AAAAAAAAAeI/CtF1e8PHJcw/s1600-h/batman-gas-prices.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qV5JTOe-h_k/SPela29TXTI/AAAAAAAAAeI/CtF1e8PHJcw/s400/batman-gas-prices.bmp" alt="" id="BLOGGER_PHOTO_ID_5257852970826161458" 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/17192448-1304713536497006588?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1304713536497006588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1304713536497006588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1304713536497006588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1304713536497006588'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/10/effects-of-gas-prices-on-batman.html' title='Effects of Gas Prices On Batman'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qV5JTOe-h_k/SPela29TXTI/AAAAAAAAAeI/CtF1e8PHJcw/s72-c/batman-gas-prices.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-5682290779367296475</id><published>2008-09-29T08:25:00.007-05:00</published><updated>2008-09-29T08:58:14.539-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chickens'/><title type='text'>The Chicken Nest Boxes Are Finally Done</title><content type='html'>The chicken nest boxes Are finally done.....and just in time! As I was working on the finishing touches, I went out to give the birds some fresh water and found a a brown egg on the ground.&lt;br /&gt;&lt;br /&gt;Below is a photo of the completed nest box right inside the coop. It's a double-seater, which should be plenty since I only have 4 hens left. I put a hook on the bottom to hand the waterer from as well. I'm hoping the water won't get as nasty if it's hanging instead of sitting on the ground.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qV5JTOe-h_k/SODX2c3ZraI/AAAAAAAAAd4/mdd9v66FPzE/s1600-h/completed+nest+box+in+coop.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qV5JTOe-h_k/SODX2c3ZraI/AAAAAAAAAd4/mdd9v66FPzE/s400/completed+nest+box+in+coop.jpg" alt="" id="BLOGGER_PHOTO_ID_5251434495975468450" border="0" /&gt;&lt;/a&gt;The design is fairly basic -- 2 nests with a perch on the front and a hinged top to ease egg gathering. I built the whole thing from various wood I had laying around the barn: some 2x3's, 2x2's, 1x12's, and a half-sheet of plywood. The only thing I purchased especially for this box was the set of hinges.&lt;br /&gt;&lt;br /&gt;Below is a picture of the nearly completed nest box in my workshop. Here I'm demonstrating the hinged top and making sure the sizing is right -- &lt;span style="font-style: italic;"&gt;notice the Blue Araucana hanging out in there trying tofigure out what's going on.&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qV5JTOe-h_k/SODX2VKs-FI/AAAAAAAAAeA/ankv84kamKI/s1600-h/nest+box+hinged+blue+aracauna.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qV5JTOe-h_k/SODX2VKs-FI/AAAAAAAAAeA/ankv84kamKI/s400/nest+box+hinged+blue+aracauna.jpg" alt="" id="BLOGGER_PHOTO_ID_5251434493908940882" border="0" /&gt;&lt;/a&gt;Once I moved this into the coop, I placed a small smooth rock in one side hoping it would look enough like an egg to let them know what the thing is for.&lt;br /&gt;&lt;br /&gt;Yesterday I went in to check, and the rock was moved aside, and a nice brown egg was laying there.&lt;br /&gt;&lt;br /&gt;Overall I would have to say I am pleased with the nest box. It took longer to build than I was hoping, but that's mostly because other things kept coming up. I could have purchased pre-built nest boxes, but what fun is that? This was a lot of fun to build, and finding my first egg in there made it all worthwhile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-5682290779367296475?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/5682290779367296475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=5682290779367296475' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/5682290779367296475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/5682290779367296475'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/09/chicken-nest-boxes-are-finally-done.html' title='The Chicken Nest Boxes Are Finally Done'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qV5JTOe-h_k/SODX2c3ZraI/AAAAAAAAAd4/mdd9v66FPzE/s72-c/completed+nest+box+in+coop.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-529637724133095869</id><published>2008-09-17T14:47:00.001-05:00</published><updated>2008-09-17T14:50:05.462-05:00</updated><title type='text'>You've Got Mail</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qV5JTOe-h_k/SNFe3l0ABbI/AAAAAAAAAdw/A-B1FYzmbAg/s1600-h/got+a+letter-sept2008.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qV5JTOe-h_k/SNFe3l0ABbI/AAAAAAAAAdw/A-B1FYzmbAg/s400/got+a+letter-sept2008.jpg" alt="" id="BLOGGER_PHOTO_ID_5247079349999371698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Just a silly dude I drew while coloring with my daughter the other day. Sometimes you gotta break out the crayons....&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-529637724133095869?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/529637724133095869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=529637724133095869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/529637724133095869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/529637724133095869'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/09/youve-got-mail.html' title='You&apos;ve Got Mail'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qV5JTOe-h_k/SNFe3l0ABbI/AAAAAAAAAdw/A-B1FYzmbAg/s72-c/got+a+letter-sept2008.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1517532940923363681</id><published>2008-09-12T13:00:00.000-05:00</published><updated>2008-09-12T13:00:00.985-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hunting'/><title type='text'>Early Season Bushy Tails</title><content type='html'>For the first time this year, I went out squirrel hunting after work yesterday.  I pulled on my camo pants and shirt, grabbed my 12 ga. and small game vest, and even strapped on my 9mm -- &lt;span class="Apple-style-span" style="font-style: italic;"&gt;might be an interesting challenge if I get a standing still sho&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;t&lt;/span&gt;.&lt;div&gt;&lt;br /&gt;&lt;div&gt;I was quickly reminded how tough early season is. Everything is still green, the leaves haven't falled yet, and all the unbrush is still full. On one hand, that makes it easy for predators (me) to get around without being noticed. On that other hand, it also makes it easy for the prey (squirrels) to go unnoticed. Also, mosquitoes everywhere, annoying ones. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I decided to still hunt instead of sitting and waiting. I came around one bend in the path, and saw a small rabbit -- 2 weeks too early to pop him. &lt;span class="Apple-style-span" style="font-style: italic; "&gt;It's your lucky day little bunny!&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another bend in the path and I see movement in a big walnut tree. Ends up being a small red squirrel -- not a shooter. Red squirrels are too small to bother with, by the time you skin them there's just isn't enough meat to make it worthwhile. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I cross the creek and walk past the edge of the apple orchard -- hearing movement but not seeing a damn thing through all the brush. Maybe 50 yards later, I jump a deer. Not deer season yet, but my heart is still thumping.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;About 4 more steps and I see a big old gray squirrel in a tree right where the deer had been standing. He disappeared before I could get a shot, and never came back or reappeared. So I kept moving.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the other side of the orchard,  I could again hear all sorts of movement, but didn't see anything. I jumped another deer when I stomped into some brush to get a better look at what I thought was blueberries (&lt;span class="Apple-style-span" style="font-style: italic;"&gt;they weren't&lt;/span&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At the end of the day, I went home empty-handed, but I got a nice walk out of it and got to see some wildlife. That's a good day hunting, even if it was only about an hour.&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/17192448-1517532940923363681?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1517532940923363681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1517532940923363681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1517532940923363681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1517532940923363681'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/09/early-season-bushy-tails.html' title='Early Season Bushy Tails'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2243267844805054040</id><published>2008-09-11T18:00:00.002-05:00</published><updated>2008-09-11T18:00:01.047-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Google Chrome Inspector</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qV5JTOe-h_k/SMlUYMlbOuI/AAAAAAAAAdo/JhxF1fUclSU/s1600-h/chrome-inspector.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_qV5JTOe-h_k/SMlUYMlbOuI/AAAAAAAAAdo/JhxF1fUclSU/s320/chrome-inspector.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5244816015721446114" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;I&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;n my&lt;a href="http://redneckprogrammer.blogspot.com/2008/09/google-chrome-versus-hype.html"&gt; first impressions post&lt;/a&gt; about Chrome, I lamented about Firefox add-ons that I can't live without, such as Firebug. Well, turns out Chrome has something very similar, and it's built-in. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Right-click on anything on a page and select "Inspect element". You get a very Firebug-like screen allowing you to see the source DOM tree and a panel with the CSS styles, metrics, resources, etc. Nice and clean interface, too. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;screenshot to right&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are lots of other hidden gems as well, as you'll find in the various articles and blog posts. For example, type "&lt;a href="about:internets"&gt;about:internets&lt;/a&gt;" for an interesting effect. Not sure if it was purely for fun, or if it's a proof-of-concept for something bigger coming down the pike.  Then there's "&lt;a href="about:stats"&gt;about:stats&lt;/a&gt;", which tells you that the page is secret before dumping all sorts of timings&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-size: 11px; "&gt;. &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;And&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-size: 11px; "&gt; "&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-size: 16px; "&gt;&lt;a href="about:network"&gt;about:network&lt;/a&gt;" seems promising if I could get it to do anything. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I know I seemed to be complaining about all the hype around Chrome, and now I'm spreading my own, but it's growing on me like a bad haircut.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2243267844805054040?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2243267844805054040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2243267844805054040' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2243267844805054040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2243267844805054040'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/09/google-chrome-inspector.html' title='Google Chrome Inspector'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qV5JTOe-h_k/SMlUYMlbOuI/AAAAAAAAAdo/JhxF1fUclSU/s72-c/chrome-inspector.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-4745085673998717740</id><published>2008-09-09T18:00:00.001-05:00</published><updated>2008-09-09T18:00:00.316-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Chrome Revisited</title><content type='html'>I have to admit: T&lt;span class="Apple-style-span" style="font-style: italic;"&gt;he more I use Chrome, the more I like it&lt;/span&gt;. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At work anyways. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At home, I hate it, because of the "unknown error" on almost every page I try to visit. I see a lot of people complaining about the error, but not a lot of people saying what is really wrong or how to fix. I did finally find one blurb that said something about Chrome not playing well with proxies, so I have been messing with my CA security software and making &lt;span class="Apple-style-span" style="font-style: italic; "&gt;some&lt;/span&gt; progress, but still not flawless.&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After some bugs are fixed, features are added, and support for OS X and Linux happens, I might even be inclined to change my opinion about this thing either fading away or becoming a niche player. If all it took was "buzz" to make a product succeed, this would be the king of browsers already.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;div&gt;Speaking of buzz, "what's the deal" with those Micro$oft/Seinfeld commercials? Terrible. Nothing to do with Windows or even computing, and making a lame attempt to replicate the "show about nothing" quirkiness of the Seinfield show. Too bad nobody ever told Jerry he was the worst part of his own show. Commercial suffers from being too long, not funny, not thought-provoking, and not even promoting Windows or Microsoft brands. Simply not going to make me plunk down cash on Vista (not that I would anyways).&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/17192448-4745085673998717740?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/4745085673998717740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=4745085673998717740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4745085673998717740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4745085673998717740'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/09/chrome-revisited.html' title='Chrome Revisited'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7195338746891424041</id><published>2008-09-09T13:11:00.002-05:00</published><updated>2008-09-09T13:15:21.006-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>I Appreciate Your Opinion, But....</title><content type='html'>&lt;div&gt;There's a time for wit and subtlety, but this isn't it, as this email demonstrates....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qV5JTOe-h_k/SMa8cRBKMKI/AAAAAAAAAdg/3Vbje719gB8/s1600-h/ATT00085.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_qV5JTOe-h_k/SMa8cRBKMKI/AAAAAAAAAdg/3Vbje719gB8/s400/ATT00085.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5244086009910145186" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-7195338746891424041?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7195338746891424041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7195338746891424041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7195338746891424041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7195338746891424041'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/09/i-appreciate-your-opinion-but.html' title='I Appreciate Your Opinion, But....'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qV5JTOe-h_k/SMa8cRBKMKI/AAAAAAAAAdg/3Vbje719gB8/s72-c/ATT00085.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1176389839543971531</id><published>2008-09-04T20:00:00.002-05:00</published><updated>2008-09-04T20:11:55.244-05:00</updated><title type='text'>Error 2 (net::ERR_FAILED): Unknown error.</title><content type='html'>Well, so much for Google Chrome, at home at least. I installed at work yesterday (XP Pro) and used it all day. Started to kind of like it, albeit some features I am used to are not there, &lt;span style="font-style: italic;"&gt;yet&lt;/span&gt;.  &lt;span style="font-style: italic;"&gt;(See yesterday's post for my first impressions.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But once I got home and installed it on my laptop (XP home), every page I go to gives me an error saying the webpage is not available. Firefox and IE work fine, my firewall settings are to allow Chrome to access, everythign looks good. I reinstalled with no luck, I disabled my firewall, no luck.&lt;br /&gt;&lt;br /&gt;So I installed on my desktop (XP as well), and same thing. I can get to the main Google page but cannot search. I got to Microsoft's homepage, but can't go anywhere from there. Same thing, where Firefox and IE work fine.&lt;br /&gt;&lt;br /&gt;Several issues we posted on Google Code site for this error so it's not just in my imagination, here are a few samples (search for error msg, there were about 10-12 when I posted this).... &lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/chromium/issues/detail?id=89"&gt;http://code.google.com/p/chromium/issues/detail?id=89&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/chromium/issues/detail?id=503"&gt;http://code.google.com/p/chromium/issues/detail?id=503&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I guess it &lt;span style="font-style: italic;"&gt;is&lt;/span&gt; a beta, so instead of whining I will just stop using it until the next version comes out.&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;div style="padding: 0.5em 1em; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); font-family: arial,sans-serif; font-size: 83%; line-height: 120%; max-width: 35em;"&gt;&lt;h1 jscontent="heading" style="font-size: 1.5em; margin-bottom: 1.5em;"&gt;&lt;/h1&gt;&lt;/div&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;div style="padding: 0.5em 1em; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); font-family: arial,sans-serif; font-size: 83%; line-height: 120%; max-width: 35em;"&gt;&lt;h1 jscontent="heading" style="font-size: 1.5em; margin-bottom: 1.5em;"&gt;This webpage is not available.&lt;/h1&gt;&lt;div id="errorSummary" jsselect="summary" style="margin-bottom: 2.5em;"&gt;&lt;p jseval="this.innerHTML = $this.msg;"&gt;The webpage at&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;strong jscontent="failedUrl"&gt;http://www.google.com/chrome&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;might be temporarily down or it may have moved permanently to a new web address.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="javascript:void(0);" onclick="toggleDiv('zipInfo')" style="text-decoration: none; color: rgb(0, 0, 204);"&gt;&lt;img id="plus" src="data:image/png;base64,R0lGODlhDAAMAMQAAAAAzOjp7lVmrezt8Zmlztja4c/R2Gx9te/x9srN1PHz9+7w9Ofp7eHj5/f4+vDx89bZ3t3g5eTn6/P19/v8+/////39/fj4+P///wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABgALAAAAAAMAAwAAAVFYEUIZEkSolCt7CocKgsALdnOrGXLdEVdJMdsOHyQJkTigLRAKBQzxWIQIDGugRlD0miQIoXwDEKGCEaGhHqdeKVMJVQIADs=" style="border-width: 0px; cursor: pointer; vertical-align: baseline;" /&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;span id="errorExpander" jscontent="detailsLink" style="text-decoration: underline;"&gt;More information on this error&lt;/span&gt;&lt;/a&gt;&lt;div id="zipInfo" style="display: none; padding-left: 16px;"&gt;&lt;p jscontent="detailsHeading"&gt;Below is the original error message&lt;/p&gt;&lt;div id="details" jscontent="details" style="padding: 1em; background-color: rgb(224, 224, 224); max-width: 30em;"&gt;Error 2 (net::ERR_FAILED): Unknown error.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 15px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;p jscontent="detailsHeading"&gt;Below is the original error message&lt;/p&gt;&lt;div id="details" jscontent="details" style="padding: 1em; background-color: rgb(224, 224, 224); max-width: 30em;"&gt;Error 2 (net::ERR_FAILED): Unknown error.&lt;/div&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 15px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;div id="details" jscontent="details" style="padding: 1em; background-color: rgb(224, 224, 224); max-width: 30em;"&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1176389839543971531?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1176389839543971531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1176389839543971531' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1176389839543971531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1176389839543971531'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/09/error-2-neterrfailed-unknown-error.html' title='Error 2 (net::ERR_FAILED): Unknown error.'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8310926325573696387</id><published>2008-09-03T15:32:00.005-05:00</published><updated>2008-09-03T16:17:37.491-05:00</updated><title type='text'>Google Chrome versus Hype</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qV5JTOe-h_k/SL759ASmnHI/AAAAAAAAAV0/6QI0JFNsjKE/s1600-h/chrome.JPG"&gt;&lt;/a&gt;&lt;br /&gt;Well, everybody in the online world seems to be writing about Google Chrome browser. Lots of hype, both good and bad. It's going to kill of Firefox and Internet Explorer, it's the final nail in the coffin for Microsoft, it's buggy, it's evil, it's great, it's just a beta, it's the next big thing, it will fizzle out and nobody will care about it, etc. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, I jumped on the bandwagon. I am currently using it to write this post. I used it off and on throughout the day alongside Firefox and Explorer. Here are my thoughts, as if anybody asked....&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;It has some nice features, some of which are admittedly borrowed from other browsers. They are nice, but not enough to make me switch, not nice enough to make Microsoft tremble in fear.&lt;/li&gt;&lt;li&gt;It is lacking some features of other browsers that I have come to rely on, and for that reason it's not "replacing" my other browsers any time soon (or ever).&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Viewing XML and XSL files -- they show up blank or with some text here and there. Basically it tries to treat them like HTML and ignores most of the tags.&lt;/li&gt;&lt;li&gt;Sidebar - I have been using sidebar for the menu panel of my Bookmarks Launcher+ app. (&lt;span style="font-style: italic;"&gt;shameless plug&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;RSS support, e.g. Firefox's live bookmarks feature&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Plugins, especially 'Firebug'.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;It seems pretty zippy, but speed wasn't an issue with my other browsers, so not sure this one will make it "win".&lt;/li&gt;&lt;li&gt;Some of the stuff was a little odd to get used to at first, e.g. lack of menu bar or title bar,lack of bookmarks menu (unless you check the  "Always show bookmarks bar" option under the wrench icon. &lt;/li&gt;&lt;li&gt;The "New Tab" window is kind of neat once you get used to it -- the lack of bookmarks menu above is actually right there when you open a new tab, along side thumbnails of most often visited sites, and a list of recently closed tabs, and ability to search your history.&lt;/li&gt;&lt;li&gt;Read some reports of the back button not working. It's been working for me. Even still, it is a beta, there will be bugs.&lt;/li&gt;&lt;li&gt;I like the idea of each tab being a separate process in case one gets hung up. I have had that problem a lot with Firefox, especially when trying to open PDF's or long loading pages. To that end, the Task Manager window and the info for nerds link is kind of cool.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;img src="http://3.bp.blogspot.com/_qV5JTOe-h_k/SL759ASmnHI/AAAAAAAAAV0/6QI0JFNsjKE/s400/chrome.JPG" alt="" id="BLOGGER_PHOTO_ID_5241901842751200370" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;My impression, it's a browser. Pure and simple. For some reason Google felt the need to reinvent the browser with lots of mature fully featured browsers already out there. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Chrome isn't bad, but it's not worth all the hype either. It will be interesting to see if it carves out a small niche, takes huge chunks of market share, or just fizzles out comepletly. My guess if either niche or fizzle at this point.&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/17192448-8310926325573696387?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8310926325573696387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8310926325573696387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8310926325573696387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8310926325573696387'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/09/google-chrome-versus-hype.html' title='Google Chrome versus Hype'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qV5JTOe-h_k/SL759ASmnHI/AAAAAAAAAV0/6QI0JFNsjKE/s72-c/chrome.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7220680055210616140</id><published>2008-08-18T17:15:00.000-05:00</published><updated>2008-08-18T17:15:00.665-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Simple JSP To List Java JVM Environment</title><content type='html'>Here's a simple JSP to list out all the JVM environment keys and values. Very simple, but occasionally useful. For example, a few weeks ago I needed to see which SSL keystore (&lt;span style="font-style: italic;"&gt;javax.net.ssl.trustStore&lt;/span&gt;) our test servers were using.&lt;br /&gt;&lt;br /&gt;I'm sure every  Java developer has written similar code at some point, so I won't claim it's original, unique, or ingenious. But if you find it useful, go ahead and use it instead of writing another.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.frontiernet.net/%7Enicholson150/envdbx.html" height="750" width="100%"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-7220680055210616140?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7220680055210616140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7220680055210616140' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7220680055210616140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7220680055210616140'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/08/simple-jsp-to-list-java-jvm-environment.html' title='Simple JSP To List Java JVM Environment'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-4228998414390596751</id><published>2008-08-01T07:52:00.001-05:00</published><updated>2008-08-01T07:53:31.586-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Now That's A Funny Sign</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_qV5JTOe-h_k/SJMHGc2EyGI/AAAAAAAAAVs/-DLIyknTxLs/s1600-h/sharpsign.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_qV5JTOe-h_k/SJMHGc2EyGI/AAAAAAAAAVs/-DLIyknTxLs/s400/sharpsign.jpg" alt="" id="BLOGGER_PHOTO_ID_5229531399710885986" 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/17192448-4228998414390596751?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/4228998414390596751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=4228998414390596751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4228998414390596751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4228998414390596751'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/08/now-thats-funny-sign.html' title='Now That&apos;s A Funny Sign'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_qV5JTOe-h_k/SJMHGc2EyGI/AAAAAAAAAVs/-DLIyknTxLs/s72-c/sharpsign.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-4307492271705452034</id><published>2008-07-30T07:59:00.002-05:00</published><updated>2008-07-30T08:06:04.572-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='truck'/><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Dodge Trucks Exposed</title><content type='html'>An email from my father-in-law...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_qV5JTOe-h_k/SJBlxoPZs3I/AAAAAAAAAVk/333CMTyH4fw/s1600-h/dodge-exposed.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_qV5JTOe-h_k/SJBlxoPZs3I/AAAAAAAAAVk/333CMTyH4fw/s320/dodge-exposed.bmp" alt="" id="BLOGGER_PHOTO_ID_5228791070667158386" border="0" /&gt;&lt;/a&gt;And yes, I drive a Dodge truck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-4307492271705452034?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/4307492271705452034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=4307492271705452034' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4307492271705452034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4307492271705452034'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/07/dodge-trucks-exposed.html' title='Dodge Trucks Exposed'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_qV5JTOe-h_k/SJBlxoPZs3I/AAAAAAAAAVk/333CMTyH4fw/s72-c/dodge-exposed.bmp' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8888007168813864641</id><published>2008-07-20T21:03:00.003-05:00</published><updated>2008-07-20T21:07:52.374-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Liberal Slinky</title><content type='html'>&lt;span style="font-style: italic;"&gt;Election year just wouldn't be the same without some bad political jokes, so here goes one I heard recently....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How are liberals like &lt;a href="http://en.wikipedia.org/wiki/Slinky"&gt;Slinky's&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;They're both pretty useless, but you can't help but smile when you see one tumble down the stairs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-8888007168813864641?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8888007168813864641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8888007168813864641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8888007168813864641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8888007168813864641'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/07/liberal-slinky.html' title='Liberal Slinky'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8809991644847575678</id><published>2008-07-20T20:57:00.003-05:00</published><updated>2008-07-20T21:02:38.700-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>How Canada Got It's Name</title><content type='html'>&lt;span style="font-style: italic;"&gt;Overheard this one at a restaurant a few weeks ago. Really has to be heard to be appreciated, especially when told by someone who does  a decent Canadian accent...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One day some Canadians were talking about how the United States has that cool 3 letter acronym, U.S.A. They agreed they needed a cool three letter acronym too, so they put a bunch of letters in a hat. One guy would draw a letter and another would write down what he said.&lt;br /&gt;&lt;br /&gt;He pulled the first letter and said, "C, eh". On to the second letter, "N, eh". And the third, "D, eh".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-8809991644847575678?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8809991644847575678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8809991644847575678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8809991644847575678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8809991644847575678'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/07/how-canada-got-its-name.html' title='How Canada Got It&apos;s Name'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2315524616281555093</id><published>2008-07-16T12:20:00.004-05:00</published><updated>2008-07-16T12:38:24.331-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Making Your JVM Trust Those SSL Certificates</title><content type='html'>Guess I should follow-up with a "part 2" on &lt;a href="http://redneckprogrammer.blogspot.com/2008/07/saving-ssl-certificates-from-website.html"&gt;yesterday's post about saving off SSL certificates&lt;/a&gt;. The whole point of me going through the exercise was that one of the web services we consume is SSL and the certificate expired. The new certificate was self-signed, so our Java code threw exceptions saying a trusted certificate was not found.&lt;br /&gt;&lt;br /&gt;So the second step for me was to import them so my JVM(s) would recognize the certificate as "trusted".&lt;br /&gt;&lt;br /&gt;To get your JVM to trust the certificate, you import it into your keystore using the &lt;span style="font-family:courier new;"&gt;keytool &lt;/span&gt;executable (&lt;span style="font-style: italic;"&gt;found in your JDK &lt;span style="font-family:courier new;"&gt;bin &lt;/span&gt;directory&lt;/span&gt;):&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;blockquote&gt;[jboss@j2apptest01 bin]$ ./keytool -import -alias SomeWebserviceName -file ~/SomeCertificateFileName.CER&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;If the keystore does not exist yet, the tool will prompt you to enter a keystore password. &lt;span style="font-style: italic;"&gt;Remember that password, as you will need to use it to import new certificates or export or view current ones.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It will then display all the keys and other  info about the certificate and ask you to confirm that you really want to import. You will want to verify the keys match up to what you think you are importing, of course. Then type "yes" and it should tell you the certificate was added.&lt;br /&gt;&lt;br /&gt;After that, our calls to the web service started to ork again, like magic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2315524616281555093?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2315524616281555093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2315524616281555093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2315524616281555093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2315524616281555093'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/07/making-you-jvm-trust-those-ssl.html' title='Making Your JVM Trust Those SSL Certificates'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7400491549892105348</id><published>2008-07-15T10:41:00.002-05:00</published><updated>2008-07-15T10:46:38.410-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Saving SSL Certificates From A Website</title><content type='html'>These instructions saved by butt recently, so I have to post so I don't lose them. I was able to figure out how to save the certificate OK, I just didn't know how to get the actual *.CER file so I could import to my JVM's keystore. I didn't know about the Windows app "certmgr.msc"... &lt;a href="http://balajiramesh.wordpress.com/2007/12/28/save-ssl-certificate-to-cer-file/"&gt;http://balajiramesh.wordpress.com/2007/12/28/save-ssl-certificate-to-cer-file/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-7400491549892105348?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7400491549892105348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7400491549892105348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7400491549892105348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7400491549892105348'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/07/saving-ssl-certificates-from-website.html' title='Saving SSL Certificates From A Website'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-718102573102255351</id><published>2008-06-25T18:15:00.003-05:00</published><updated>2008-06-25T18:15:01.307-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fishing'/><title type='text'>Skunked, a.k.a. A Bad Day Fishing Is Better Than A Good Day Working</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dfw.state.or.us/warm_water_fishing/Walleye.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.dfw.state.or.us/warm_water_fishing/Walleye.gif" alt="" border="0" /&gt;&lt;/a&gt;This past weekend was our big walleye fishing trip to Erie, PA. One thing is for sure, we won't be getting our pictures posted on the &lt;a href="http://www.windjammersportfishingcharters.com/"&gt;Windjammer &lt;/a&gt;website this time. It was a slow day on the water.&lt;br /&gt;&lt;br /&gt;Captain Todd told us ahead of time that the storms all week have the lake all torn up, and that every trip he had booked for the past week had been canceled. He even offered to move our trip out another week. In the end, we opted to keep our plans and go out Saturday.&lt;br /&gt;&lt;br /&gt;After some trolling, we hooked up with 3 walleye and some throw-away fish (&lt;span style="font-style: italic;"&gt;a sheephead and a bunch of those white bass&lt;/span&gt;). We also had a few jump off before we got them in. According to what we were hearing on the marine radio, none of the other captains were having any luck either. We were on fish all day according to the fish finders, but they just wouldn't bite. So we opted to drift fish for a while, jugging for them. Nothing. We ended up coming back in about 1-1/2 hours earlier than normal.&lt;br /&gt;&lt;br /&gt;The Captain felt really bad and would have let us walk out of there without paying a damn thing. He told us to pay "what we think is fair." Sure, we go out with him every summer and he wants us to keep coming back, but he ran his boat all day (&lt;span style="font-style: italic;"&gt;at $4.50/gallon&lt;/span&gt;), and he and his first mate worked their butts off all day trying to get us fish. It's not like he was doing something wrong or failing to try; the fish just weren't feeding. I'm sure a lot of other guys would blame him and start complaining, but that's the nature of fishing. You can use all the gadgets in the world to find them and pass fancy lures in front of them, but even the best fisherman can't force a fish to bite.&lt;br /&gt;&lt;br /&gt;So we got skunked this time. But it was a day out on the water nonetheless. And a bad day fishing is better than a good day working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-718102573102255351?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/718102573102255351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=718102573102255351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/718102573102255351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/718102573102255351'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/06/skunked-aka-bad-day-fishing-is-better.html' title='Skunked, a.k.a. A Bad Day Fishing Is Better Than A Good Day Working'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1251597802860870583</id><published>2008-06-18T19:56:00.005-05:00</published><updated>2008-06-19T19:30:14.634-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>First Impressions of Sun xVM "VirtualBox" And OpenSolaris</title><content type='html'>A couple of tech-savvy sales droids from Sun stopped by a few weeks ago to host a lunch-n-learn at work. The point was to go over some of their open source initiatives and try to pimp MySQL on us.  They piqued my interest when they started talking about their xVM "VirtualBox" virtualization and the OpenSolaris operating system. &lt;span style="font-style: italic;"&gt;Hmmm, something to play with in a nice clean sandbox, completely separated from my real development environment&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;So here are some first impressions....&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://www.sun.com/software/products/virtualbox/index.jsp"&gt;xVM VirtualBox&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What can be said about xVM VirtualBox? If you have ever used VMWare or other similar VM products, the concept is familiar to you. Your host operating system sees an application running, but that application is mimicking an entire machine, with it's own OS and apps running on it.&lt;br /&gt;&lt;br /&gt;The advantage of the Sun version? Price. As in "free". I like free, fits my budget well. And it turns out it is easy to install, configure, and run. Seems pretty stable so far as well.&lt;br /&gt;&lt;br /&gt;Within minutes I had OpenSolaris booted up inside a window on my XP desktop. A few minutes later and I had Fedora 9 running as well. Yesterday I even installed "&lt;a href="http://www.freedos.org/"&gt;FreeDOS&lt;/a&gt;" for nostalgia' sake. If you have an installer CD or ISO image for an x86 operating system, you should be good to go.&lt;br /&gt;&lt;br /&gt;The first time you "boot" your new machine, a wizards runs you through settings like how much memory and disk to use, and which installer disk or image you want to use to boot from. From there you are running through the installer as if you are running on a fresh bare-bones PC.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://opensolaris.org/index.html"&gt;OpenSolaris&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSolaris, the free open-source bastard brother to Solaris, the rebranded SunOS. If you are familiar with any other "*nix" OS then you will be able to find your way around Solaris. SunOS was my first non-MS-DOS operating system I ever worked with, so I have a soft spot for that crap.&lt;br /&gt;&lt;br /&gt;Once I got it installed, I was staring at the same Gnome desktop I would be looking at on a Linux system. First thing I noticed -- the expected apps just weren't there. Call me naive, but as a product supported by Sun, I kind of expected OpenOffice, a Java JDK (not just a JRE), and possibly NetBeans and Glassfish to be pre-installed. &lt;span style="font-style: italic;"&gt;Wrong&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;What's worse is how difficult they were to install. I downloaded the OpenOffice installer and it would not run. Since the installer was a shell script, I debugged it and found that there was a bug that caused it to not recognize the 1.6 JRE that was installed, so I had to hack the script a bit to get OpenOffice to install.&lt;br /&gt;&lt;br /&gt;I also had to run as root, which meant a simple "&lt;span style="font-family:courier new;"&gt;su&lt;/span&gt;" command, but then the script complained my X "DISPLAY" was not set. OK, so "&lt;span style="font-family:courier new;"&gt;export DISPLAY=:0.0&lt;/span&gt;" and still same error. Took me a few minutes to remember to type "&lt;span style="font-family:courier new;"&gt;xhost +&lt;/span&gt;" as the original user, so other users could connect to the display.&lt;br /&gt;&lt;br /&gt;That's not a huge deal after all and much of it is just that I haven't dealt with X in a while, since I usually SSH into our Linux servers using Putty. &lt;span style="font-style: italic;"&gt;My opinion, however, is I shouldn't have to rewrite installation scripts for a Sun supported app to run on a Sun supported OS&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Next was the JDK. To Save time, I figured I would download the JDK package that came bundled with NetBeans. It wouldn't install. The script said it was about to launch a wizard, and then nothing. I tried running as root, I tried running as me, I even tried hacking the script, which finally told me the script was corrupt.&lt;br /&gt;&lt;br /&gt;Then I found out about the &lt;a href="http://pkg.opensolaris.org/status"&gt;Solaris package installer&lt;/a&gt;. So I have been a bone-head downloading installers in the first place, because I could have been running a simple command to download and install apps. For example, typing something like "&lt;span style="font-family:courier new;"&gt;pfexec pkg install SUNWnetbeans-ide&lt;/span&gt;" will go out and grab NetBeans and install it on your machine. It is kind of buggy, and it will complain about not finding some packages. Some of them I just tried a a few times and it finally worked.&lt;br /&gt;&lt;br /&gt;So using the package installer, I installed Ruby, then JDK 6 and NetBeans. Once NetBeans was installed, I could use it's own updater to install plugins and updates.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I like xVM -- it gives me a nice safe sandbox to experiment in. Whether it is trying a different OS without screwing around with partitions and bootloaders, or trying new langugages, IDE's, tools, etc. If I totally screw something up, I can wipe the VM and start over, leaving the host machine (where my real work gets done) in tact.&lt;br /&gt;&lt;br /&gt;OpenSolaris, well, I don't dislike it but I don't want to scream from the rooftops that you must have it either. I tend to not get all religious about operating systems like some people (&lt;span style="font-style: italic;"&gt;Google for "mac versus windows" or "linux versus windows" or some variant, you'll find plenty of people frothing at the mouth to convert infidels to their way of thinking&lt;/span&gt;). An operating system is an abstraction layer between the hardware and the applications. A tool. A means to an end. It shouldn't get in my way when I know what I want to do. OpenSolaris does a good job of not getting in my way, so I like it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1251597802860870583?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1251597802860870583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1251597802860870583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1251597802860870583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1251597802860870583'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/06/first-impressions-of-sun-xvm-virtualbox.html' title='First Impressions of Sun xVM &quot;VirtualBox&quot; And OpenSolaris'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-3901102506223044803</id><published>2008-06-17T20:10:00.003-05:00</published><updated>2008-06-17T20:29:56.823-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redneck'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Redneck Father's Day 2008</title><content type='html'>&lt;span style="font-size:130%;"&gt;Ahhh, Father's Day&lt;/span&gt;. If I were a Dad from one of those stupid sit-coms, it would be all about ugly neckties, tired cliche's, and some witty one-liners. But, no, I'm a Wayne County Dad. We roll a little differently out here.&lt;br /&gt;&lt;br /&gt;My father's day gift? 250 rounds of 9mm ammo. &lt;span style="font-style: italic;"&gt;Perfect&lt;/span&gt;!&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_qV5JTOe-h_k/SFhg296uj4I/AAAAAAAAAVE/Zq3sTuxYRWg/s1600-h/SAI+XD9+Flying+Brass.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_qV5JTOe-h_k/SFhg296uj4I/AAAAAAAAAVE/Zq3sTuxYRWg/s400/SAI+XD9+Flying+Brass.JPG" alt="" id="BLOGGER_PHOTO_ID_5213023066131435394" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;&lt;blockquote&gt;I have to give credit to my sister-in-law Jen for taking the picture. She got it just as I shot so there is a smoke cloud coming out the barrel, the action is still cycling, and if you look where I circled, the casing is flying through the air.&lt;/blockquote&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;The day starts off like any other Sunday, with a lovely breakfast (&lt;span style="font-style: italic;"&gt;Paula made the eggs and bacon, Raina made me toast--and lot's of it&lt;/span&gt;), and then going to &lt;a href="http://www.livingwordag.com/index.php"&gt;church&lt;/a&gt;. Then we go to Uncle Greg's house for some brunch.&lt;br /&gt;&lt;br /&gt;Then home so my brother-in-law and family could come over. He brought some clays, his 12 gauge and his 9mm. I brought out my XD-9 and Paula's 20 gauge Benelli. I'd say we probably only went through a few boxes of shotgun shells, but probably at least 300 rounds of 9mm.&lt;br /&gt;&lt;br /&gt;Then we came back to house to eat grilled deer meat and slow roasted prime rib, and had some beers.&lt;br /&gt;&lt;br /&gt;Many rounds of ammo were fired in the making of this Father's Day, and there was no shortage of meat either. &lt;span style="font-style: italic;"&gt;Let me show you where to put that ugly necktie!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-3901102506223044803?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/3901102506223044803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=3901102506223044803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/3901102506223044803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/3901102506223044803'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/06/redneck-fathers-day-2008.html' title='Redneck Father&apos;s Day 2008'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_qV5JTOe-h_k/SFhg296uj4I/AAAAAAAAAVE/Zq3sTuxYRWg/s72-c/SAI+XD9+Flying+Brass.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8728345216294559209</id><published>2008-06-10T13:12:00.002-05:00</published><updated>2008-06-10T13:16:48.763-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><category scheme='http://www.blogger.com/atom/ns#' term='chickens'/><title type='text'>Three Baby Geese</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_qV5JTOe-h_k/SE7ENn4s4wI/AAAAAAAAAU8/MWUMrNzmxRs/s1600-h/three+baby+geese.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_qV5JTOe-h_k/SE7ENn4s4wI/AAAAAAAAAU8/MWUMrNzmxRs/s320/three+baby+geese.jpg" alt="" id="BLOGGER_PHOTO_ID_5210317557238391554" border="0" /&gt;&lt;/a&gt;Here's a picture of our 3 baby geese (&lt;span style="font-style: italic;"&gt;about 2-1/2 weeks old&lt;/span&gt;) in the coop. Not sure what kind of geese they are yet. We also have 3 ducklings (&lt;span style="font-style: italic;"&gt;I think 2 are Khaki Campbelss and the other I think may be a Cayuga, but not sure yet on either&lt;/span&gt;) and about 10-11 chickens (&lt;span style="font-style: italic;"&gt;not sure of the types yet&lt;/span&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-8728345216294559209?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8728345216294559209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8728345216294559209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8728345216294559209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8728345216294559209'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/06/three-baby-geese.html' title='Three Baby Geese'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_qV5JTOe-h_k/SE7ENn4s4wI/AAAAAAAAAU8/MWUMrNzmxRs/s72-c/three+baby+geese.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1586731839494974095</id><published>2008-05-27T13:46:00.001-05:00</published><updated>2008-05-27T13:48:47.372-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>13</title><content type='html'>&lt;font face="Calibri" size="3"&gt;&lt;span  style="font-size: 12pt; font-family: Calibri;"&gt;&lt;small&gt;A joke I just received via email:&lt;/small&gt;&lt;br&gt; &lt;br&gt; &lt;/span&gt;&lt;/font&gt; &lt;blockquote&gt;&lt;font face="Calibri" size="3"&gt;&lt;span  style="font-size: 12pt; font-family: Calibri;"&gt;I was walking past the mental hospital the other day and all the patients were shouting, "13....13...&lt;wbr&gt;.13...".&lt;/span&gt;&lt;/font&gt;&lt;br&gt;   &lt;font face="Calibri" size="3"&gt;&lt;span  style="font-size: 12pt; font-family: Calibri;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;br&gt;   &lt;font face="Calibri" size="3"&gt;&lt;span  style="font-size: 12pt; font-family: Calibri;"&gt;The fence was too high to see over but I saw a little gap in the planks, so I looked through it to see what was going on. Some bastard poked me in the eye with a stick!&lt;/span&gt;&lt;/font&gt;&lt;br&gt;   &lt;font face="Calibri" size="3"&gt;&lt;span  style="font-size: 12pt; font-family: Calibri;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;br&gt;   &lt;font face="Calibri" size="3"&gt;&lt;span  style="font-size: 12pt; font-family: Calibri;"&gt;Then they all started shouting "14....14...&lt;wbr&gt;..14...."&lt;br&gt;   &lt;br&gt;   &lt;/span&gt;&lt;/font&gt;&lt;/blockquote&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1586731839494974095?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1586731839494974095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1586731839494974095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1586731839494974095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1586731839494974095'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/05/13.html' title='13'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-4182552876140931886</id><published>2008-05-18T21:57:00.005-05:00</published><updated>2009-06-29T13:36:57.086-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='bsh'/><title type='text'>Jboss SQL Deployer</title><content type='html'>I whipped up a fairly simple SQL deployer for Jboss this past week. It is currently fairly limited, but also very straight forward and should be easy to maintain.&lt;br /&gt;&lt;br /&gt;It consists of a class implementing &lt;span style="font-family:courier new;"&gt;java.lang.Runnable&lt;/span&gt; (a Thread) that wakes up every 20 seconds or so and scans a directory for any new SQL files. Of course there is also a class implementing&lt;span style="font-family:courier new;"&gt; java.io.FileFilter&lt;/span&gt; to look for just SQL scripts. To turn this into a JMX service, I wrote a simple BeanShell wrapper to drop into the deploy directory.&lt;br /&gt;&lt;br /&gt;Once a SQL file is found, the code assumes the first line will contain the DataSource JNDI name, so it knows what database to connect to. Then it currently assumes the rest of the file is one query. The query results are formatted and dumped to STDOUT.&lt;br /&gt;&lt;br /&gt;To make this truly useful, I will have to make it accept updates as well as queries, and parse the file looking for multiple SQL statements instead of assuming it is just one. Other than those limitations, it works great with the few tests I have done so far. I have been testing under Jboss 4.0.3, but this should work with any version of Jboss with the BSHDeployer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SqlFileScanner.java&lt;/span&gt;&lt;br /&gt;&lt;iframe src="http://www.frontiernet.net/%7Enicholson150/SqlFileScanner.html" width="100%" height="500"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SqlFileFilter.java&lt;br /&gt;&lt;iframe src="http://www.frontiernet.net/%7Enicholson150/SqlFileFilter.html" width="100%" height="300"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sqldeployer.bsh&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;iframe src="http://www.frontiernet.net/%7Enicholson150/sqldeployer.html" width="100%" height="500"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why would you use this? &lt;/span&gt;That's always a good question to ask, and this time I have an answer besides "because you can".&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Running ad hoc queries right from your app server, using the same Jboss DataSource bindings your applications are using, and from the same server your apps are running, can be very helpful in troubleshooting issues.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Let's say you use Realms instead of username/password in the DataSource XML descriptor, for security reasons. Now you can troubleshoot database issues as that user even without knowing the DB username and password.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Set up simple reporting jobs without needing an Oracle client installed on the machine -- run them right from Jboss.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Conslusion&lt;/span&gt;&lt;br /&gt;I think I may create a new open source project to house this as well as all the other Java "odds and ends" I have written over the years, like some of the code generators, MQ tools, servlet filters, JSP tags, etc. The hardest part will probably be coming up with a meaningful project name -- who wants to download and install "RobbsRandomJavaCrap.jar"?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-4182552876140931886?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/4182552876140931886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=4182552876140931886' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4182552876140931886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4182552876140931886'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/05/jboss-sql-deployer.html' title='Jboss SQL Deployer'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7392903880467098058</id><published>2008-05-13T21:52:00.002-05:00</published><updated>2008-05-13T22:10:58.633-05:00</updated><title type='text'>The Wait Is Over</title><content type='html'>We applied for our &lt;a href="http://redneckprogrammer.blogspot.com/2008/04/and-now-we-wait.html"&gt;pistol permits a few weeks ago&lt;/a&gt;, and finally got them this past Saturday. It took 2 days shy of 3 weeks from the time we turned the applications in to the time they arrived in the mail. That's the great thing about Wayne County. Just a few miles west, in Monroe County, it takes anywhere from 6 months to a year to get your permit. Our sister-in-law applied over 2 months ago. She's still waiting.&lt;br /&gt;&lt;br /&gt;So the first two days of having our Springfield XD-9, we fired about 170 rounds of ammo through it. That thing is really fun to shoot, but it could start to get expensive when you tear through a magazine in about 30-40 seconds.&lt;br /&gt;&lt;br /&gt;I'm loving the XD. I like the extra safety features like the grip safety and split trigger, the cocked indicator and the chambered round indicator. And on the range, the gun shoots very nicely-- comfortable to grip, low recoil, fast follow-up shots, no jamming or misfires. The XD is also extremely easy to take down and put back together without any tools. And while a lot of handguns have a reversible magazine release, the XD simply has a magazine release on both sides -- no need to change anything. It also has a built-in accessory rail for tactical flashlights or laser sights if you so choose.&lt;br /&gt;&lt;br /&gt;The XD came with a plastic carrying case, holster, 2 magazines, a speed loader, magazine holster that holds 2 magazines, cleaning brush, and a gun lock. Gander Mountain threw in another gun lock and a "gun sock".&lt;br /&gt;&lt;br /&gt;My decision came down between the Springfield XD or the Beretta PX4 Storm, and I can honestly say I don't regret my decision at all. The Beretta is a nice gun, but if I were to buy another handgun, I would get another XD in a heartbeat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-7392903880467098058?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7392903880467098058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7392903880467098058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7392903880467098058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7392903880467098058'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/05/wait-is-over.html' title='The Wait Is Over'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-6135164872358163040</id><published>2008-05-12T07:31:00.003-05:00</published><updated>2008-05-12T07:36:56.228-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chickens'/><title type='text'>Homesteader's Delight</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://image.mcmurrayhatchery.com/product/200/qgh_1_s.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://image.mcmurrayhatchery.com/product/200/qgh_1_s.jpg" alt="" border="0" /&gt;&lt;/a&gt;We ordered our chickens over the weekend from &lt;a href="http://www.mcmurrayhatchery.com"&gt;Murray McMurray&lt;/a&gt;, after having some poor luck getting birds locally this year. Instead of just getting chickens, we opted for the &lt;span style="font-style: italic;"&gt;Homesteader's Delight&lt;/span&gt;, which is described as such:&lt;br /&gt;&lt;span class="productdesc"&gt;&lt;blockquote style="font-style: italic;"&gt;If you are a small land holder and would like a small number of birds but a great variety, this is the assortment you've been waiting for. We will send you 10 Brown Egg Laying Chickens (female), 2 Ducklings (straight run), 2 Goslings (straight run), and 2 Turkeys (straight run). Our choice of variety of all the above.&lt;/blockquote&gt;The variety should be interesting. They should be arriving the week of May 19th. Time to get that coop cleaned out!&lt;br /&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/17192448-6135164872358163040?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/6135164872358163040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=6135164872358163040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6135164872358163040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6135164872358163040'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/05/homesteaders-delight.html' title='Homesteader&apos;s Delight'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1761258542442665450</id><published>2008-05-09T22:26:00.002-05:00</published><updated>2008-05-09T22:30:07.483-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Beer versus Cosmetics</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_qV5JTOe-h_k/SCUWCnJ0KGI/AAAAAAAAAUY/gf05OhDCEJw/s1600-h/n670381561_191671_3216.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_qV5JTOe-h_k/SCUWCnJ0KGI/AAAAAAAAAUY/gf05OhDCEJw/s400/n670381561_191671_3216.jpg" alt="" id="BLOGGER_PHOTO_ID_5198585578994804834" border="0" /&gt;&lt;/a&gt;I ripped this off from a Facebook group, but I don't feel bad because it looks like it was ripped off from a Miller ad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1761258542442665450?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1761258542442665450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1761258542442665450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1761258542442665450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1761258542442665450'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/05/beer-versus-cosmetics.html' title='Beer versus Cosmetics'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_qV5JTOe-h_k/SCUWCnJ0KGI/AAAAAAAAAUY/gf05OhDCEJw/s72-c/n670381561_191671_3216.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-4294860142287069070</id><published>2008-05-03T18:07:00.004-05:00</published><updated>2008-05-03T18:26:14.178-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hunting'/><title type='text'>Gobble Gobble Bang! Hold The Bang!</title><content type='html'>Today is was the first Saturday of the NY spring turkey season, so &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.jphuntinglodge.com/images/nwtf/turkey_calling.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.jphuntinglodge.com/images/nwtf/turkey_calling.jpg" alt="" border="0" /&gt;&lt;/a&gt;Phil and I went out turkey hunting this morning. We both came home empty handed, but it was a good day afield.&lt;br /&gt;&lt;br /&gt;Right after first light, I saw a small fox right across the creek from me. Then maybe an hour later I see a deer peek out and look right at me. Not sure if he thought I was turkey, or my calling was so bad he just had to see what was making the horrible noise.&lt;br /&gt;&lt;br /&gt;Later when I got up to move, I heard something rustle in the thicket to my left. When I looked over, I got to see a turkey flying away from me. I immediately sat down and tried to call him back, but nothing. Maybe my calling does suck. Or maybe he was just not going to fall for it today. A few minutes later, Phil came out onto the trail right near where the turkey had flown towards. I tried to get his attention but couldn't -- he disappeared into the orchard again. Neither one of us got another glimpse of that turkey (or any others for that matter).&lt;br /&gt;&lt;br /&gt;On the way out, we kicked up three mallards when we crossed the creek to go home.&lt;br /&gt;&lt;br /&gt;We had good weather, nobody got hurt, and we got to at least see some wildlife. That's a good day hunting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-4294860142287069070?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/4294860142287069070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=4294860142287069070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4294860142287069070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4294860142287069070'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/05/gobble-gobble-bang-hold-bang.html' title='Gobble Gobble Bang! Hold The Bang!'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2573074429684876123</id><published>2008-05-01T11:59:00.016-05:00</published><updated>2008-05-01T20:03:58.645-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Some Old-School JAM and JPL Tips</title><content type='html'>&lt;span style="font-weight: bold; color: rgb(102, 102, 102);font-size:130%;" &gt;The JAMster Speaks...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I was cleaning out the barn and found a CD of some old code and documents I had written at an old job, kind of a "portfolio" CD if you will. We used &lt;a href="http://www.jyacc.com/jam.htm"&gt;JAM&lt;/a&gt; to build Motif screens.&lt;br /&gt;&lt;br /&gt;JAM let you visually build your screens, and had it's own procedural programming language, JPL (JAM Programming Language). JAM came with the necessary C code to handle launching of the screens and handling events. You could write your own custom C code to be called from the screens, or write your code in the JPL file for the screen, or a combination of both. One nice thing is you could write SQL code right inline with the rest of your JPL (just prepend the keyword "sql") and everything was taken care of, even down to binding the result set to variables.&lt;br /&gt;&lt;br /&gt;It's not exactly cutting edge technology now, but I know it is still in use by at least a few companies. This is not a tutorial for non-JAMsters, but rather a collection of troubleshooting tips I had taken note of. Maybe this could be of use to someone just inheriting legacy apps, or who knows when I might run into JAM again. Yuck!&lt;br /&gt;&lt;br /&gt;For reference, these tips are mostly for JAM 5 and 7, but they may be applicable for other versions as well.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;table width="95%" border="1" cellpadding="2" cellspacing="2"&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;SELECT 1 FROM table...&lt;/td&gt;&lt;br /&gt;&lt;td&gt;This is often&lt;br /&gt;done to see if a record meeting your criteria (where clause) exists in&lt;br /&gt;the table.&lt;br /&gt;Doing this from a JAM screen (at least in Jam 5) will produce a&lt;br /&gt;@dmrowcount of&lt;br /&gt;0 (zero), even if there are records in the table meeting the criteria.&lt;br /&gt;There&lt;br /&gt;are two alternatives within JAM to get the same information:&lt;br /&gt;&lt;br /&gt;1.      SELECT&lt;br /&gt;COUNT(*)&lt;br /&gt;temp_var FROM table...&lt;br /&gt;&lt;br /&gt;2.      SELECT&lt;br /&gt;column temp_var FROM table...&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;SELECT column FROM&lt;br /&gt;table&lt;/td&gt;&lt;br /&gt;&lt;td&gt;This one can be tricky.&lt;br /&gt;If there is no JAM variable with the same name as the the selected&lt;br /&gt;columns,&lt;br /&gt;then JAM will create those variables and put the results of the query&lt;br /&gt;in those&lt;br /&gt;variables. If the variables do exist already, JAM will overwrite the&lt;br /&gt;values&lt;br /&gt;with the results of the query, even when the query returns nothing (it&lt;br /&gt;will essentially&lt;br /&gt;clear the variables).&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Mixed Case Variables&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Mixed case variables&lt;br /&gt;can be a real problem with JAM, and the error messages are not&lt;br /&gt;intuitive enough&lt;br /&gt;to let you know what the real problem is. Keep tihs in mind when you&lt;br /&gt;can’t&lt;br /&gt;figure out some quirky behaviour, and all the other logic and syntax is&lt;br /&gt;proper.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Changes in screen file don’t seem to take effect&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Check the local&lt;br /&gt;directory you are running from. JAM will use screen, JPL, and&lt;br /&gt;dictionary  files fro mthe current directory before&lt;br /&gt;checking in the SMPATH, regardless of what the SMPATH is set to.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Check the data&lt;br /&gt;dictionary. The screen fields and variables can be stored in here, as&lt;br /&gt;well as&lt;br /&gt;in the screen definition file. Data dictionary tends to overwrite&lt;br /&gt;local (screen) vars.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Some Useful environment Vars&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Most of the relevant environment variables&lt;br /&gt;start with SM, e.g. SMVARS, SMPATH&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Also worth noting is that while it might make sense that they would just make use of the underlying Motif widgets, in some cases that was not the case. Simple text boxes for instance would not work with bi-directional Hebrew whereas pure Motif screens did. We had to have JYACC / Prolifics issue a patch for us before we could release to an Israeli customer.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;There were also issues with some characters in the Turkish (ISO-8859-9) character set. Their database layer simply could handle it for some reason. Wouldn't bring back results, wouldn't update, and yet We ended up having to write our own generic database access layer using Pro-C, and replacing all the JPL "sql" statements with "call" statements into our library.&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/17192448-2573074429684876123?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2573074429684876123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2573074429684876123' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2573074429684876123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2573074429684876123'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/05/some-old-school-jam-and-jpl-tips.html' title='Some Old-School JAM and JPL Tips'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-5245058185356877891</id><published>2008-04-29T20:23:00.006-05:00</published><updated>2008-04-29T21:14:57.890-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Time To Learn A New Language</title><content type='html'>Now that I have written quite a few Ruby scripts for work-related projects, and have done a few projects and prototypes using Rails, I feel like Ruby is now a comfortable part of my programming arsenal. I wouldn't call myself a Ruby &lt;span style="font-style: italic;"&gt;expert&lt;/span&gt;, but I am at a proficiency where certain tasks jump off the page at me and say "&lt;span style="font-style: italic;"&gt;use Ruby for this&lt;/span&gt;", and I can implement them confidently and quickly.&lt;br /&gt;&lt;br /&gt;So it's time to start learning a new language. I have been reading a lot about functional programming recently, and reading about things like the MapReduce pattern that Google uses. I have also been reading a bit about &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;, which is a hybrid OO and Functional language that compiles down to byte code that runs on a JVM -- the compiled code becomes a .class file just like Java.&lt;br /&gt;&lt;br /&gt;Today I installed the Eclipse plug-in and the Scala SDK, and wrote the ever ubiquitous "hello world" application. For my next experiment I would like to try something like this (&lt;span style="font-style: italic;"&gt;and of course post the results&lt;/span&gt;).&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Write some Scala code.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Compile it to a .class file.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use DJ to decompile the .class file (which assumes the source should be Java) and see what happens.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Will I get the Java equivalent to the Scala code, or will DJ just blow chunks? If it's valid JVM byte code, then there has to be a way to write Java code that compiles down to it, at least that's what I would think.&lt;br /&gt;&lt;br /&gt;There have been times when I really hated what I was writing in Java, and knew there had to be a better, cleaner way to write it, but couldn't git-r-done without major refactoring and adding unnecessary complexity. Now I know what I was looking for at the time is called functional programming.  There are ways to make it happen in Java, but it ain't pretty, especially with the time constraints and project deadlines.&lt;br /&gt;&lt;br /&gt;Like bsh, Scala can take full advantage of existing Java libraries, which will increase the odds that the language will be useful for production coding instead of just academic BS.&lt;br /&gt;&lt;br /&gt;I'm sure I'll be posting more on the subject of functional programming as well as my Scala exploits in weeks to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-5245058185356877891?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/5245058185356877891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=5245058185356877891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/5245058185356877891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/5245058185356877891'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/04/time-to-learn-new-laguage.html' title='Time To Learn A New Language'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7055817044425248149</id><published>2008-04-29T18:13:00.011-05:00</published><updated>2008-04-29T21:16:02.198-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='bsh'/><title type='text'>Some Notes On The Jboss BeanShell Deployer</title><content type='html'>&lt;span style="font-weight: bold;"&gt;I've been playing a little with the &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://wiki.jboss.org/wiki/BSHDeployer"&gt;BeanShell Deployer&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; in Jboss lately&lt;/span&gt;. Technically, it's pretty cool. Drop a .bsh script in the deploy directory and the hot deployer picks it up just as if you dropped a .war/.ear/.sar file in there. If it's a simple script, the bsh deployer runs it immediately. Or you can implement any or all of the methods of the ScriptService interface (&lt;span style="font-style: italic;"&gt;below&lt;/span&gt;) and your script will be deployed as a service mbean.&lt;pre style="color: rgb(102, 102, 102);"&gt;&lt;blockquote&gt;public interface ScriptService&lt;br /&gt;extends org.jboss.system.Service&lt;br /&gt;{&lt;br /&gt;public String objectName ();&lt;br /&gt;public String[] dependsOn ();&lt;br /&gt;public Class[] getInterfaces ();&lt;br /&gt;&lt;br /&gt;public void setCtx (ServiceMBeanSupport wrapper);&lt;br /&gt;}&lt;/blockquote&gt;&lt;/pre&gt;&lt;br /&gt;It was extremely easy to write a few scripts and drop them in the deploy directory. Of course, you can start with the requisite "Hello World" script, which upon deployment, prints out to the console. A few more minutes of scripting (adding the above methods) yields a service mbean that can be managed via JMX.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;But then the obvious questions: &lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Why?&lt;/span&gt; Why would I write mbeans using bsh instead of Java? What do I gain? What do I lose? Is it really any quicker?&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;I don't really have good answers for the why question yet. I did write a few services using bsh. They were easy enough to implement, but nothing that couldn't have been done in a similar time frame using Java. You lose compile time error checking, but you avoid some of the plumbing regarding build scripts, deployment descriptors, and building .ear or .sar files.&lt;br /&gt;&lt;br /&gt;I did write a few services. One connected to a Websphere MQ (a.k.a. MQ Series) queue manager to get queue depths and print them to the Jboss console. I ripped most of the code right from an existing MQ tool I wrote a few years ago. So not the most useful thing in the world, but it proves out importing existing Java classes and the Java syntax. Another used JDBC to connect to an audit database and purge old transactions. Again, nothing that couldn't be done in regular old Java code in the same amount of time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Overall, I didn't &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;feel &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;like I was saving any time.&lt;/span&gt; For one, the syntax is Java. That's great for code re-use (&lt;span style="font-style: italic;"&gt;either cutting/pasting or importing libraries&lt;/span&gt;), but Java syntax doesn't have that "lightweight scripting" feel to it. Also, the lack of compile-time error checking doesn't save you much time if you have to run the script to find errors. Make a simple mistake like a type mismatch or failing to catch a specific exception, and your IDE and/or compiler will tell you about it. Do the same thing in a bsh script, and you find out after you deploy it and run it.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;I think this could prove useful in the future, as one more tool in my programming toolbox, but have to admit I don't have a lot of use for it right now&lt;/span&gt;. Maybe I'm just not seeing the big picture, or just haven't run across the scenario where this is the ideal way to solve a problem. If you are using the bsh deployer, please let me know what you are doing with, or what types of problems you are solving with it.&lt;br /&gt;&lt;br /&gt;Once I have a reason to use it, at least I know it is easy to do. And once the why question starts to have answers, maybe I'll explore writing a &lt;a href="http://jruby.codehaus.org/"&gt;JRuby &lt;/a&gt;or &lt;a href="http://groovy.codehaus.org/"&gt;Groovy &lt;/a&gt;deployer. Or actually, what would be really useful would be a SQL script deployer, so you could run ad-hoc queries against your Jboss DataSources without writing JDBC code or  having to launch a DB tool like Squirrel or TOAD. Since Jboss deployers are service mbeans, maybe I could write the SQL deployer in bsh...&lt;/span&gt;&lt;br /&gt;&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/17192448-7055817044425248149?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7055817044425248149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7055817044425248149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7055817044425248149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7055817044425248149'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/04/some-notes-on-jboss-beanshell-deployer.html' title='Some Notes On The Jboss BeanShell Deployer'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2976124350247650469</id><published>2008-04-29T17:52:00.006-05:00</published><updated>2008-04-29T18:11:08.708-05:00</updated><title type='text'>GoodSearch</title><content type='html'>If you're looking for a way to feel all warm and fuzzy inside, like you're making a difference in this world, but are just absolutely sick of all this "green" crap, check out the &lt;a href="http://www.goodsearch.com/"&gt;GoodSearch &lt;/a&gt;search engine. The underlying search engine is Yahoo, so you should still find what you're looking for. The difference is you choose a charity when you first go to the site, and when you search, half the advertising revenue &lt;a href="http://www.goodsearch.com/"&gt;GoodSearch &lt;/a&gt;makes from your search goes to the charity you designated. From what I read in the &lt;a href="http://www.senecazoo.org/"&gt;Seneca Park Zoo&lt;/a&gt; newsletter, it comes out to about a penny per search.&lt;br /&gt;&lt;br /&gt;You're giving back without opening your wallet or going out of your way. Anybody can do it, and it all just happens while you're doing what you would normally be doing anyways.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.goodsearch.com/" target="_top"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.goodsearch.com/?charityid=452577" target="_top"&gt;&lt;img src="http://www.goodsearch.com/_gfx/goodsearch-120x60.gif" alt="GoodSearch: You Search...We Give!" border="0" height="60" width="120" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2976124350247650469?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2976124350247650469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2976124350247650469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2976124350247650469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2976124350247650469'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/04/goodsearch.html' title='GoodSearch'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-6985729320668216435</id><published>2008-04-21T19:18:00.003-05:00</published><updated>2008-04-21T19:21:14.446-05:00</updated><title type='text'>And Now We Wait</title><content type='html'>We bought our SAI XD-9 this weekend and turned in our pistol permit applications today. Now we just wait, and wait, and wait some more, to get our permit so we can actually pick up the gun.&lt;br /&gt;&lt;br /&gt;I feel like a little kid waiting for Santa Claus to come. From what I keep hearing, the process does not take nearly as long for Wayne County as it does for other counties in NYS. We'll see.....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-6985729320668216435?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/6985729320668216435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=6985729320668216435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6985729320668216435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6985729320668216435'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/04/and-now-we-wait.html' title='And Now We Wait'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-3459726769055620592</id><published>2008-04-20T19:59:00.001-05:00</published><updated>2008-04-20T20:01:38.230-05:00</updated><title type='text'>Springfield Armory XD-9 9mm</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.springfield-armory.com/xd.php"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_qV5JTOe-h_k/SAvnJj3U5vI/AAAAAAAAAUQ/OXXZSMJAPTw/s400/xd9-1.JPG" alt="" id="BLOGGER_PHOTO_ID_5191497146906765042" 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/17192448-3459726769055620592?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/3459726769055620592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=3459726769055620592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/3459726769055620592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/3459726769055620592'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/04/springfield-armory-xd-9-9mm.html' title='Springfield Armory XD-9 9mm'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_qV5JTOe-h_k/SAvnJj3U5vI/AAAAAAAAAUQ/OXXZSMJAPTw/s72-c/xd9-1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7585016909033105842</id><published>2008-04-14T07:24:00.003-05:00</published><updated>2008-04-29T21:16:02.199-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='bsh'/><title type='text'>The BeanShell Servlet Filter Summary</title><content type='html'>&lt;span style="font-style: italic;"&gt;OK, now that I step back and look at &lt;/span&gt;&lt;a style="font-style: italic;" href="http://redneckprogrammer.blogspot.com/2008/04/dynamic-servlet-filters-using-jvm.html"&gt;this post I wrote a few days ago&lt;/a&gt;&lt;span style="font-style: italic;"&gt;, I realize I use too many words, tend to blather on and on and on.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So to summarize: &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;What's the point?&lt;/span&gt; It's a Java Servlet Filter that delegates to BeanShell scripts to do the actual Filter work.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Does it really work?&lt;/span&gt; Yes. I am currently running it in Glassfish, but should work in any Java servlet container. It's still just a proof-of -concept and needs to be cleaned up to make it production ready.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Where's the code?&lt;/span&gt; Of course, you still have to go to &lt;a href="http://redneckprogrammer.blogspot.com/2008/04/dynamic-servlet-filters-using-jvm.html"&gt;that post&lt;/a&gt; to see the code, but you can skip the blathering on and on and on.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;What's the point?&lt;/span&gt; Well, just because it can be done I guess. My theoretical ramblings on "why" are what made the post so long in the first place.&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/17192448-7585016909033105842?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7585016909033105842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7585016909033105842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7585016909033105842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7585016909033105842'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/04/beanshell-servlet-filter-summary.html' title='The BeanShell Servlet Filter Summary'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1664173789382777773</id><published>2008-04-12T17:47:00.009-05:00</published><updated>2008-04-29T21:16:02.200-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='bsh'/><title type='text'>Dynamic Servlet Filters Using JVM Scripting</title><content type='html'>What got me on the subject of Servlet Filters in the first place was an idea that occurred to me recently. Servlet Filters aren't the sort of thing that can be easily altered at runtime. They are mapped in the &lt;span style="font-family:courier new;"&gt;web.xml&lt;/span&gt; file, so if there are Filters you only want for development or test, but not production (like the &lt;a href="http://redneckprogrammer.blogspot.com/atom.xml"&gt;DebugFilter &lt;/a&gt;I presented in the last post), you have to jump through some hoops to make that happen. You could edit the &lt;span style="font-family:courier new;"&gt;web.xml&lt;/span&gt; before deployment, or have separate dev/test/prod &lt;span style="font-family:courier new;"&gt;web.xml&lt;/span&gt; files that ANT copies into place depending on the build, or have some sort of runtime flag (DB property, value bound in JNDI, etc.) that will either run the Filter logic, or just pass through to the next in chain.&lt;br /&gt;&lt;br /&gt;But what if you could not only enable or disable the Filter, but also change it's behavior, on the fly at runtime without special build or deploy steps. I was pondering this idea and came up with the concept of a Servlet Filter, that by itself, does nothing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Nothing&lt;/span&gt;? Well, &lt;span style="font-style: italic;"&gt;nothing&lt;/span&gt; &lt;span style="font-style: italic;"&gt;by itself. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"By itself" is the key phrase here. Instead of doing something in the Java code (getting timings, checking security, auditing calls, printing debug statements, etc.) it just instantiates a scripting engine, like BeanShell (BSH), JRuby, Groovy, etc. It starts up the scripting engine, passes the Request and/or Response objects, and runs a script that you have identified. That script does all the meat-n-potatoes work, and the Filter then calls next in chain like it normally would. And the best part is, the script could be changed at runtime, from a simple do-nothing-and-return to full blown screwing around with the Request and Response objects.&lt;br /&gt;&lt;br /&gt;I've developed a proof-of-concept (POC) and have it running under Glassfish v2 application server. I used BeanShell for the scripting engine in the POC, but as stated above, any of the scripting engines for the JVM should work. This isn't quite ready for primetime, but it fully works.&lt;br /&gt;&lt;br /&gt;There are actually 2 scripts called by this filter, one before the chain.doFilter() call is made, and one after. That way you have the flexibility to do operations either on the request, on the response, or both.&lt;br /&gt;&lt;br /&gt;First, the Java code for the Filter:&lt;br /&gt;&lt;iframe src="http://www.frontiernet.net/%7Enicholson150/BeanShellServletFilter.html" height="600" width="100%"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Then, the 2 BSH scripts:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;BSHServletFilter_PRE.bsh&lt;/span&gt;&lt;br /&gt;&lt;div style="background: rgb(192, 192, 192) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import java.servlet.*;&lt;br /&gt;import java.servlet.http.*;&lt;br /&gt;import java.util.*;&lt;br /&gt;&lt;br /&gt;System.out.println("This is the BSHServletFilter_PRE.bsh script!!!");&lt;br /&gt;&lt;br /&gt; StringBuffer output = new StringBuffer();&lt;br /&gt; output.append("\nRequest Attributes\n");&lt;br /&gt; Enumeration attrs = request.getAttributeNames();&lt;br /&gt; while (attrs.hasMoreElements()) {&lt;br /&gt;  String attr = (String) attrs.nextElement();&lt;br /&gt;  output.append(attr +" - " + request.getAttribute(attr));&lt;br /&gt;  output.append("\n");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; output.append("Request Parameters\n");&lt;br /&gt; Enumeration params = request.getParameterNames();&lt;br /&gt; while (params.hasMoreElements()) {&lt;br /&gt;  String param = (String) params.nextElement();&lt;br /&gt;  output.append(param +" - " + request.getParameter(param));&lt;br /&gt;  output.append("\n");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;System.out.println(output.toString());&lt;br /&gt;System.out.println("This consludes the BSHServletFilter_PRE.bsh script!!!");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;BSHServletFilter_POST.bsh&lt;/span&gt;&lt;br /&gt;&lt;div style="background: rgb(192, 192, 192) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;System.out.println("This is the BSHServletFilter_POST.bsh script!!!");&lt;br /&gt;System.out.println("About to alter the response...");&lt;br /&gt;response.getWriter().print("&amp;lt;h1&amp;gt;This response is from the BSH script&amp;lt;/h1&amp;gt;");&lt;br /&gt;response.getWriter().flush();&lt;br /&gt;System.out.println("Done altering the response");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And the browser screenshot...&lt;br /&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_qV5JTOe-h_k/SAF1eD3WY9I/AAAAAAAAAT4/QlMtUqlfDLQ/s1600-h/bsh_screenshot.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_qV5JTOe-h_k/SAF1eD3WY9I/AAAAAAAAAT4/QlMtUqlfDLQ/s320/bsh_screenshot.JPG" alt="" id="BLOGGER_PHOTO_ID_5188557405001507794" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This is currently just at the POC stage. It is working as-is, running under Glassfish. But as you will immediately notice, the filenames for the scripts are hard-coded, and there is definitely some more cleanup to make this production quality code. But, you can change the behaviors of the filter, for better or worse, at runtime without any compiling, deploying, or restarting of servers. You can even "disable" the filter by writing BSH scripts that do nothing.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1664173789382777773?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1664173789382777773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1664173789382777773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1664173789382777773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1664173789382777773'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/04/dynamic-servlet-filters-using-jvm.html' title='Dynamic Servlet Filters Using JVM Scripting'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_qV5JTOe-h_k/SAF1eD3WY9I/AAAAAAAAAT4/QlMtUqlfDLQ/s72-c/bsh_screenshot.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7432475795230958355</id><published>2008-04-10T20:30:00.004-05:00</published><updated>2008-04-10T20:39:54.413-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>A Servlet Filter For Easier Debugging</title><content type='html'>I whipped up this quick &lt;a href="http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/Filter.html"&gt;Java Servlet Filter (javax.servlet.Filter)&lt;/a&gt; to aid in development and debugging. This simply dumps all the HTTP request attributes and parameters and Session attributes to the log. Like any other Servlet filter, it can be chained with other filters like the timing filter, GZIP filter, etc.&lt;br /&gt;&lt;br /&gt;This isn't meant to be a tutorial on Servlet filters, I am assuming you either know (or know how to figure out) what filters are, and how to tie them into your application in the &lt;span style="font-family:courier new;"&gt;web.xml&lt;/span&gt; descriptor.&lt;br /&gt;&lt;br /&gt;I "printed" the source into a PDF to keep the formatting in tact. &lt;a href="http://www.frontiernet.net/%7Enicholson150/DebugFilter.pdf"&gt;Here is the link&lt;/a&gt;, or if your PDF plugin is working, it should appear in an &lt;span style="font-family:courier new;"&gt;iframe &lt;/span&gt;below....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.frontiernet.net/%7Enicholson150/DebugFilter.pdf" height="650" width="100%"&gt;&amp;amp;amp;amp;lt;br&amp;amp;amp;amp;gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-7432475795230958355?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7432475795230958355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7432475795230958355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7432475795230958355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7432475795230958355'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/04/servlet-filter-for-easier-debugging.html' title='A Servlet Filter For Easier Debugging'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-7553957093251763685</id><published>2008-04-09T13:29:00.005-05:00</published><updated>2008-04-09T20:10:57.331-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><title type='text'>Protesting The Olympics</title><content type='html'>So the Olympics will be held in China, and protests are all over the news. Why? Oh, China is bad, China is oppressive, "free Tibet", etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Right&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;Last time I drove by Best Buy, I saw lots of Chinese-made flat panel TV's rolling out the door, and yet no banners, signs, or protesters in sight. Sales fliers are full of Chinese merchandise (&lt;span style="font-style: italic;"&gt;DVD players, mp3 players, computers, TV's, phones, etc.&lt;/span&gt;) waiting for your tax rebate check to come.&lt;br /&gt;&lt;br /&gt;But that's somehow OK. We can support their economy and send all our money there, but the &lt;span style="font-style: italic;"&gt;Olympics are different&lt;/span&gt;, because the Olympics are supposed to promote &lt;span style="font-style: italic;"&gt;peace &lt;/span&gt;and &lt;span style="font-style: italic;"&gt;everyone getting along&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Does anyone really believe this crap? Is it just me, or this a bit hypocritical?&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt; &lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-7553957093251763685?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/7553957093251763685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=7553957093251763685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7553957093251763685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/7553957093251763685'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/04/protesting-olympics.html' title='Protesting The Olympics'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8251800875726277075</id><published>2008-04-06T21:34:00.002-05:00</published><updated>2008-04-06T21:41:58.033-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bowling'/><title type='text'>A Personal High</title><content type='html'>Tonight at bowling league I rolled my best game ever, a measly 152. The other two games were a 112 and 113. Pathetic, I know, but fun nonetheless.&lt;br /&gt;&lt;br /&gt;I'm definitely getting better now that I am using my new release technique to hook the ball in instead of rolling a straight ball.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-8251800875726277075?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8251800875726277075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8251800875726277075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8251800875726277075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8251800875726277075'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/04/personal-high.html' title='A Personal High'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2517925667673004088</id><published>2008-04-05T15:11:00.003-05:00</published><updated>2008-04-05T15:18:17.993-05:00</updated><title type='text'>Spring Has Sprung Again</title><content type='html'>&lt;a href="http://jduane.blogspot.com/"&gt;Grandpa Duane's funeral&lt;/a&gt; too a lot out of us this week, but now we're trying to get back to normal. And now it's becoming clear that Spring is rapidly approaching. The snow is melted and now the daffodils and tulips are coming up around the house. I haven't worn a jacket all week, and today we're doing "springy" things like pulling trees out of the ground with my truck (YEEEHAAWW!), cleaning up the yard, starting seeds for our herb garden, planning out our chicken purchase, rolling the lawn, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2517925667673004088?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2517925667673004088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2517925667673004088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2517925667673004088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2517925667673004088'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/04/spring-has-sprung-again.html' title='Spring Has Sprung Again'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-4817024610542887205</id><published>2008-03-28T19:33:00.010-05:00</published><updated>2008-03-29T12:58:04.248-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><title type='text'>Gun Control Is Naive And Even Dangerous</title><content type='html'>&lt;span style="font-size:180%;"&gt;W&lt;/span&gt;ell it's an election year and we have had several shootings hyped up in the media, plus the constitutionality of the Washington, DC gun ban being looked at by the Supreme Court, so the gun control advocates will be out in full force trying to scare us all into enacting yet more gun bans or other restrictions on our 2nd amendment rights.&lt;br /&gt;&lt;br /&gt;The naive Utopian story line goes something like this: &lt;span style="font-style: italic;"&gt;Let's ban all the guns and ammo out there, get all the guns off the street, and then there would be no more murder or other violent crime. Everyone lives happily ever after.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The criminal element reads that and starts drooling. Why? Because they are criminals. &lt;span style="font-style: italic;"&gt;So guns are now illegal, but I'm a criminal, definition being that I break laws. What's one more law to break? Plus, my job is now easier because I KNOW my victims are UNARMED and the police are way understaffed to even try to keep up with us now. The police are there as a general deterrent and to investigate crimes after they happen, but they can't be around-the-clock personal body guards to every unarmed citizen.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;That Utopian view break downs very quickly when you stop being naive, and even turns dangerous when you introduce a little dose of reality.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But "guns are dangerous", and we see so much violence because there are "so many guns", right? Not exactly. Allow me to exaggerate (a little) to make a point....&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I grew up in a small town in the backwoods of Pennsylvania, where everyone had guns (multiple) and nobody got shot.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Then I moved to the "big" city where nobody has guns, and lots of people are being shot.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Then I moved back out into the country, where, you guessed it, everyone has guns, and nobody gets shot.&lt;/li&gt;&lt;/ul&gt;Obviously that is exaggerated, but there's still lots of truth in there.  I don't know anyone in my family back home that didn't have at least three guns. And none of them ever committed armed burglary or murder or other violent crimes. &lt;span style="font-weight: bold;"&gt;Throws a wrench into the idea that guns cause violence, eh? &lt;/span&gt;&lt;span&gt;The gun is just a tool, it takes a criminal to pick it up and use it for evil. If it weren't a gun, it would be something else -- people commit murder with other weapons, but where's the media propaganda for the people getting stabbed, bludgeoned, poisoned, etc.&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;All the anti-gun legislation and bans and restrictions &lt;span style="font-style: italic;"&gt;feel&lt;/span&gt; &lt;span style="font-style: italic;"&gt;good &lt;/span&gt;and give us a warm fuzzy feeling, but let's be honest for a minute. &lt;span style="font-style: italic;"&gt;Will outlawing guns really take guns away from criminals&lt;/span&gt;? Yup, just like the war on drugs got all the drugs off the streets! Like I already stated, criminals break laws, so if guns are illegal, just add one more broken law to their list. One thing the media fails to mention is a lot of the guns used in murders are illegally obtained anyways.&lt;br /&gt;&lt;br /&gt;So if we are truly honest with ourselves, we know that we won't take guns away from the bad guys. They will always find a way, just like they do now with all the drugs and illegal guns out there. Banning guns only takes guns away from the law abiding citizens, leaving them defenseless against the armed criminals.&lt;br /&gt;&lt;br /&gt;The media likes to shock us by telling us how many millions of guns are out there "on the streets" as if that sheer number alone makes us unsafe. &lt;span style="font-weight: bold;"&gt;It's not the &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;number &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;of guns out there that pose a problem, it's the &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;ratio &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;of guns in bad guys' hands to those in good guys' hands. So what we really need to do is give &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;more &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;guns to &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;good&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; guys.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Quick Question: &lt;/span&gt;&lt;span style="font-style: italic;"&gt;If you are a criminal, are you going to choose a victim that is likely to be armed or  unarmed? &lt;/span&gt;Nobody (in their right mind) robs a Dunkin Donuts when there are 4 police cars parked out front. But they'll rob a bank where the security guards (&lt;span style="font-style: italic;"&gt;if there are any&lt;/span&gt;) carry only Mag-Lites.&lt;br /&gt;&lt;br /&gt;Look at all the media-hyped shootings in the past few years. They occur in schools or shopping centers or churches or other places where good guys don't have guns. In that scenario it only takes one moderately armed wacko to wreak complete devastation on the UNARMED crowds.&lt;br /&gt;&lt;br /&gt;In any given population, the number of good, honest, law-abiding citizens outnumbers the violent criminals by a lot, so it's silly for anyone to have to live in fear of dangerous criminals. Right now, crime is prevalent because the perceived reward (&lt;span style="font-style: italic;"&gt;the profit, revenge,  or other motivation for committing the crime&lt;/span&gt;) is greater than the perceived risk (&lt;span style="font-style: italic;"&gt;getting caught and prosecuted, or killed in the commission of the crime&lt;/span&gt;). If even 25% of the good, honest, law-abiding citizens were armed and knew how to safely use their firearms, the criminals' risk-to-reward ratio would be greatly altered, and they would start to fear their victims instead of the other way around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-4817024610542887205?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/4817024610542887205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=4817024610542887205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4817024610542887205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4817024610542887205'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/03/gun-control-is-naive-and-even-dangerous.html' title='Gun Control Is Naive And Even Dangerous'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1384493603469470726</id><published>2008-03-26T15:39:00.003-05:00</published><updated>2008-03-29T07:34:26.347-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Bookmarks Launcher+'/><title type='text'>Bookmarks Launcher+ User Guide</title><content type='html'>I included the link to the &lt;a href="http://www.frontiernet.net/~nicholson150/Bookmarks-Launcher-Guide.pdf"&gt;Bookmarks Launcher+ User Guide pdf&lt;/a&gt; on the Launchpad project, but figured I would inline it here as an iframe as well. Just because I can. &lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.frontiernet.net/%7Enicholson150/Bookmarks-Launcher-Guide.pdf" width="100%" height="800"&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1384493603469470726?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1384493603469470726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1384493603469470726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1384493603469470726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1384493603469470726'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/03/bookmarks-launcher-user-guide.html' title='Bookmarks Launcher+ User Guide'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2606956216511559997</id><published>2008-03-18T07:07:00.004-05:00</published><updated>2008-03-18T07:15:19.549-05:00</updated><title type='text'>Now I Really Do Feel Old</title><content type='html'>I was listening to "Hard Attack" channel 27 on Sirius satellite radio this morning on my way to the bus stop. Then the guy comes on and says they're about to play some classic metal from a long time ago,  and then they play &lt;span style="font-style: italic;"&gt;Vote With A Bullet &lt;/span&gt;by Corrosion of Conformity.&lt;br /&gt;&lt;br /&gt;I start thinking to myself, "c'mon, it wasn't &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; long ago!" I remember borrowing that CD from Greg Miller like it was yesterday. I must have listened to it a thousand times before begrudgingly giving it back to its rightful owner. But that wasn't yesterday, it was when we were in high school in the early 90's. In fact, that was way back when people borrowed CD's from friends instead of "sharing" them as mp3's over peer-to-peer networks. Since Greg wanted his back, I actually went out and &lt;span style="font-style: italic;"&gt;bought my own&lt;/span&gt; -- how many high school kids do &lt;span style="font-style: italic;"&gt;that &lt;/span&gt;anymore? &lt;span style="font-weight: bold;"&gt;Holy crap, I AM OLD&lt;/span&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2606956216511559997?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2606956216511559997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2606956216511559997' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2606956216511559997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2606956216511559997'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/03/now-i-really-do-feel-old.html' title='Now I Really Do Feel Old'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1337441685873917822</id><published>2008-03-17T07:57:00.004-05:00</published><updated>2008-03-17T08:53:06.417-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle on Windows Authentication Woes (And Solutions)</title><content type='html'>For my current project, I need to have my own development Oracle instance. Instead of carving out space on one of the servers, I figured it's a good time to just bite the bullet and install Oracle XE on my desktop (&lt;span style="font-style: italic;"&gt;Windows XP&lt;/span&gt;). For the most part, it has been a fairly painless experience.&lt;br /&gt;&lt;br /&gt;Except that several times already, when trying to run imports or simply connecting via SQL-Plus, I get the following crap:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-family:courier new;"&gt;C:\oraclexe\app\oracle\product\10.2.0\server\BIN&gt;sqlplus XXXXXX/XXXXX&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;SQL*Plus: Release 10.2.0.1.0 - Production on Mon Mar 17 08:50:29 2008&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;Copyright (c) 1982, 2005, Oracle.  All rights reserved.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ERROR:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORA-12638: Credential retrieval failed&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;The first time it happened, I simply restarted the &lt;span style="font-family:courier new;"&gt;OracelServiceXE &lt;/span&gt;and &lt;span style="font-family:courier new;"&gt;OracleXETNSListener &lt;/span&gt;services. Then it happened again today, and restarting services had no effect. And I am &lt;span style="font-style: italic;"&gt;NOT &lt;/span&gt;rebooting my whole machine just to get Oracle to work.&lt;br /&gt;&lt;br /&gt;But thanks to someone named &lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=332525"&gt;"babu george" on this forum&lt;/a&gt;, I fixed the issue quite simply by getting rid of NTS authentication.&lt;br /&gt;&lt;br /&gt;In your &lt;span style="font-family:courier new;"&gt;sqlnet.ora&lt;/span&gt; file, simply comment out the &lt;span style="font-family:courier new;"&gt;(NTS)&lt;/span&gt; line and create a new line with&lt;span style="font-family:courier new;"&gt; (NONE)&lt;/span&gt; in place of &lt;span style="font-family:courier new;"&gt;(NTS)&lt;/span&gt;.&lt;br /&gt;&lt;blockquote  style="color: rgb(0, 102, 0);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;#SQLNET.AUTHENTICATION_SERVICES = (NTS)&lt;br /&gt;SQLNET.AUTHENTICATION_SERVICES = (NONE)&lt;/span&gt;&lt;/blockquote&gt;Alas, don't get me started on how much I love Windows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1337441685873917822?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1337441685873917822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1337441685873917822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1337441685873917822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1337441685873917822'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/03/oracle-on-windows-authentication-woes.html' title='Oracle on Windows Authentication Woes (And Solutions)'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-6435271766020284225</id><published>2008-03-14T14:59:00.003-05:00</published><updated>2008-03-14T15:04:23.194-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Trashy Yet Effective Oracle Trick</title><content type='html'>&lt;p&gt;I need to post this so I can remember it next time I screw up...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;I was running an Oracle import (imp) on my local Oracle 10g XE instance today, and realized I did it incorrectly and imported everything into the SYSTEM schema. Oh crap, I can't just wipe everything out, it's my SYSTEM schema! I need surgical precision to only remove the crap and leave all the Oracle stuff unscathed.&lt;/p&gt;I could go through and drop each table I created, but there were hundreds.&lt;br /&gt;&lt;p&gt;Then, like a tornado in a trailerpark, it hit me. An idea that walks the fine line between genius and insanity. All the new table names started with a common prefix, which for sake of discussion I will call "BLAH_". So in Squirrel I run the following query:&lt;br /&gt;&lt;/p&gt;&lt;blockquote style="font-family: courier new; color: rgb(153, 0, 0);"&gt;select 'drop table system.' || table_name || ';' from all_tables where owner = 'SYSTEM' and table_name like 'BLAH_%'&lt;/blockquote&gt;&lt;p&gt;Then cut and paste the results back into the Squirrel query runner and run the results as a script.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I'm sure there's an "official" way to accomplish the same thing, but screw that, this was extremely quick and kind of fun.&lt;/p&gt;&lt;p style="text-align: center; font-style: italic;"&gt;Trashy yet effective.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-6435271766020284225?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/6435271766020284225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=6435271766020284225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6435271766020284225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6435271766020284225'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/03/trashy-yet-effective-oracle-trick.html' title='Trashy Yet Effective Oracle Trick'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1468727692525081857</id><published>2008-03-11T18:27:00.013-05:00</published><updated>2008-03-11T19:56:50.314-05:00</updated><title type='text'>Whores, Spitzer, Swallows</title><content type='html'>&lt;span style="font-style: italic;"&gt;I don't usually dive into politics on here, but everyone loves a good high profile prostitution sting....&lt;/span&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;With Gov. Spitzer, &lt;span style="font-style: italic;"&gt;a.k.a. Client #9&lt;/span&gt;, getting busted using the services of a high class prostitution ring, some serious questions need to be answered. I'm not talking about the normal political crap like &lt;span style="font-style: italic;"&gt;will he be impeached?&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;will he resign?, will he be arrested?, will other high-profile clients be outed?,&lt;/span&gt; etc. I'm mean questions like, &lt;span style="font-style: italic;"&gt;what is the difference between a high priced hooker and a regular street hooker, anyways?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Really, they both take money from strangers and then slide down the dudes' meat-poles. They collect more  DNA samples in a day than the CSI folks collect all year. &lt;span style="font-weight: bold;"&gt;That's a nasty, filthy whore, whether it costs $50 or $5000.&lt;/span&gt; &lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;So what does the extra cash buy?&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Is there such a thing as a higher class of venereal disease?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Does draining your man-goo feel better when you also drain your bank account? &lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Is it somehow less disgusting to think a thousand &lt;span style="font-style: italic;"&gt;rich &lt;/span&gt;dudes impaled the whore with their man-swords, as opposed to a thousand &lt;span style="font-style: italic;"&gt;regular &lt;/span&gt;dudes?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Do they share a glass of champagne with you after the deed, instead of hitting the crack pipe and watching Jerry Springer?&lt;/li&gt;&lt;li&gt;Do you get a souvenir hat or t-shirt or something? Like when you ride a roller coaster  and they snap your picture coming down the big drop off?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Hindsight being 20/20 and all,&lt;/span&gt; I'm guessing the soon-to-be-former-governor of New York is probably thinking a 6 pack of Corona, a bottle of hand lotion, and some adult pay-per-view might  have been the safer choice for a night out on the town.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-1468727692525081857?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1468727692525081857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1468727692525081857' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1468727692525081857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1468727692525081857'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/03/whores-spitzer-swallows.html' title='Whores, Spitzer, Swallows'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-690869556860369277</id><published>2008-03-02T14:51:00.006-05:00</published><updated>2008-03-29T07:47:59.294-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Bookmarks Launcher+'/><title type='text'>Procrastination Can Be A Good Thing Too</title><content type='html'>A few posts back I was beating myself up over procrastinating, as I was needlessly putting off my truck inspection and taxes. &lt;span style="font-weight: bold;"&gt;But procrastination can be a good thing too.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Take AJAX for instance&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;In case you have been living under a rock, AJAX stands for Asynchronous Javascript and XML. That's a fancy way  of saying that you are taking advantage of the &lt;span style="font-family: courier new;"&gt;XMLHttpRequest &lt;/span&gt;object in most modern day browsers. If you need to get a value from the server, instead of submitting a "full" request and then redrawing the entire page again, you submit a "mini" request and get back only the data that changed, then update the HTML DOM right in place. Seems simple enough, but for a guy like me that &lt;span style="font-style: italic;"&gt;HATES &lt;/span&gt;JavaScript, it can be a pain in the donkey's ass to build from scratch, especially when you figure how different browsers work differently when talking about client side scripting (among other things). Nobody likes to write the equivalent of "if browser in IE then...else if browser is Netscape 5....else if browser is....".&lt;br /&gt;&lt;br /&gt;So I read up on it, learned the concepts, thought about where it might be useful, pondered issues like server load and security, and then put that knowledge on a shelf, knowing full well that if AJAX were more than just flavor-of-the-month, then a myriad of toolkits, libraries, and frameworks would pop up to help avoid all the Javascript plumbing.&lt;br /&gt;&lt;br /&gt;And I was right.&lt;br /&gt;&lt;br /&gt;In fact, all this time screwing around with Rails in my free time, I failed to notice that one of the included JavaScript files that comes with Rails makes AJAX super easy. Somehow I came across &lt;a href="http://www.onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html"&gt;this article (http://www.onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html) &lt;/a&gt; when I was actually supposed to be looking for help on the Jboss 4.2.2 EJB3 deployer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Time for a break from the J2EE world while I see how this all works....&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;I read through that article, and within about 10-15 minutes, I had my &lt;a href="https://launchpad.net/bookmarkit/"&gt;Bookmarks Launcher+&lt;/a&gt; application fully utilizing AJAX to dynamically load the links when you click on a category, instead of loading all the links for all categories on initial page load. For the view, I added the line of code to include &lt;span style="font-family: courier new;"&gt;prototype.js&lt;/span&gt;, then added the AJAX call to the &lt;span style="font-family: courier new;"&gt;onclick &lt;/span&gt;handler for each category. That was effectively two lines of code for the view. Then in the controller, I added a new method that takes a &lt;span style="font-family: courier new;"&gt;category_id&lt;/span&gt;,, queries the links table for matches, and renders the HTML list of links. All told, it was perhaps 20 lines of code.&lt;br /&gt;&lt;br /&gt;And as far as browser compatibility goes, I tested in both Firefox and Internet Exploiter, and it seems to work like a charm. Not sure about other browsers, but if I get ambitious, maybe I'll fire up my G4 with OS X, and try it out on Safari.&lt;br /&gt;&lt;br /&gt;And now, I really need to get back to the Java world, since that is the world that pays my bills. One of my "new" projects is to convert an old SilverStream "classic" application over to our J2EE platform.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What the #$%&amp;amp; is SilverStream?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SilverStream is (&lt;span style="font-style: italic;"&gt;was&lt;/span&gt;) a Java based application server and development environment that was all integrated together, which let you build applications by dragging and dropping controls onto pages (&lt;span style="font-style: italic;"&gt;kind of a precursor to JSP or JSF&lt;/span&gt;) or forms (&lt;span style="font-style: italic;"&gt;graphical fat-client launched remotely, similar to running Swing applications from WebStart&lt;/span&gt;). Sounds like a good idea, and ahead of its time really, but it is all proprietary, not standards-based, and very unstable and fragile, and now unsupported since the company got bought out by Novell and dismantled. We inherited these applications over 6 years ago, and they refuse to go away. If this server poops its pants, or if one of the meta-databases gets corrupted, we are screwed.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-690869556860369277?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/690869556860369277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=690869556860369277' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/690869556860369277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/690869556860369277'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/03/procrastination-can-be-good-thing-too.html' title='Procrastination Can Be A Good Thing Too'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-5607936819314030313</id><published>2008-02-28T19:58:00.005-05:00</published><updated>2008-03-29T07:22:26.741-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Bookmarks Launcher+'/><title type='text'>Bookmarks Launcher+ (Bookmarkit)</title><content type='html'>Well, I finally took &lt;a href="http://redneckprogrammer.blogspot.com/2007/12/took-it-that-extra-step.html"&gt;that bookmarks launcher program&lt;/a&gt; and started an open source project. For project hosting, for some reason, I chose to use &lt;a href="https://launchpad.net/"&gt;Launchpad &lt;/a&gt;over Sourceforge, Google Code, etc. To be honest, I'm not sure why. I already had an account on Sourceforge,  and know how to use CVS and Subversion (svn). But instead I had to create a new account, learn a new site, and learn a new version control system, &lt;a href="http://bazaar-vcs.org/"&gt;Bazaar &lt;/a&gt;(bzr).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bazaar is pretty interesting.&lt;/span&gt; In a way, I kind of wish I had known about it earlier. Sometimes there are those personal side projects I don't want to put into my company's CVS or Subversion repositories, and that shouldn't be put out on a public project hosting site. For those, Bazaar is perfect, because you don't need to maintain a central server repository. You can create a Bazaar project right on your system, and do everything you would normally do with a VCS. When ready, the branch can be merged and pushed to a central server as well.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So Bookmarks Launcher+, what is it?&lt;/span&gt; It's the Rails app I wrote to manage my bookmarks at work. I use it everyday to launch all my crap at work. When I showed it to some coworkers, they wanted copies as well. So I decided to develop it a bit more and open source it. It's not perfect, it's not the next killer app, it's not finished, and it needs some work. But, I find it useful. I have about 15+ categories, and about 300-400 links, and about 20-25 notes.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The project homepage is &lt;a href="https://launchpad.net/bookmarkit"&gt;https://launchpad.net/bookmarkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The PDF documentation is at &lt;a href="http://www.frontiernet.net/%7Enicholson150/Bookmarks-Launcher-Guide.pdf"&gt;http://www.frontiernet.net/~nicholson150/Bookmarks-Launcher-Guide.pdf&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Downloads can be obtained from &lt;a href="https://edge.launchpad.net/bookmarkit/+download"&gt;https://edge.launchpad.net/bookmarkit/+download&lt;/a&gt;&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/17192448-5607936819314030313?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/5607936819314030313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=5607936819314030313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/5607936819314030313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/5607936819314030313'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/02/bookmarks-launcher-bookmarkit.html' title='Bookmarks Launcher+ (Bookmarkit)'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8496086006225338262</id><published>2008-02-28T07:57:00.002-05:00</published><updated>2008-02-28T08:06:07.940-05:00</updated><title type='text'>Anticipation is Worse Than Real Thing</title><content type='html'>Well, they say the anticipation and waiting is harder than the actual event, for example waiting for a dental procedure or something like that. They're right -- 2 of my recent stresses have been relieved in the past two days, and all the fretting has been for nothing.&lt;br /&gt;&lt;br /&gt;My truck passed NYS inspection without even needing so much as a windshield wiper blade. I was worried about the rear brakes, since the front ones were in such bad shape when I did them last month (&lt;span style="font-style: italic;"&gt;needed new pads, new rotors, and on one side I ended up replacing the whole caliper and shearing off a banjo bolt, but that's another story&lt;/span&gt;). Getting the brakes replaced would have cost a butt load of cash we just don't have right now.&lt;br /&gt;&lt;br /&gt;Then yesterday we finally got our act together and did our taxes. The big nagging fear, no matter how much math you do throughout the year, is that all of a sudden we owe the government butt loads of cash we don't have. Nope, we're still getting a return -- nothing too elaborate, but at least we're not paying.&lt;br /&gt;&lt;br /&gt;Goes to prove another saying right -- "&lt;span style="font-style: italic;"&gt;Procrastination is a lot like masturbation. It feels good while you're doing it, but in the end you just screw yourself&lt;/span&gt;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-8496086006225338262?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8496086006225338262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8496086006225338262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8496086006225338262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8496086006225338262'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/02/anticipation-is-worse-than-real-thing.html' title='Anticipation is Worse Than Real Thing'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-3292054211381835086</id><published>2008-02-25T21:44:00.006-05:00</published><updated>2008-02-25T22:06:01.502-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>FCKeditor - Embedded HTML Editor</title><content type='html'>For a recent project, I wanted something fancier than a regular HTML text area to allow user input with formatting. "&lt;span style="font-style: italic;"&gt;Something like the editor on Blogger&lt;/span&gt;", I thought.&lt;br /&gt;&lt;br /&gt;After hitting Google, I ran across &lt;a href="http://www.fckeditor.net/"&gt;FCKeditor&lt;/a&gt;. I had heard of it before, and even played with the demo once, but never did anything with it. Never had much of a reason to. Today that all changed.&lt;br /&gt;&lt;br /&gt;After reading through the &lt;a href="http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide"&gt;Developers Guide&lt;/a&gt;, I downloaded the ZIP, unpacked into my public web directory, and had it working in no time. In less than 30 minutes, I had the FCKeditor completely tied into an existing Rails form, replacing a boring old text area. After a few minutes of testing inserts and updates, and some cross-browser testing with Firefox and Internet Exploiter, I was happy.&lt;br /&gt;&lt;br /&gt;There were only a few lines of JavaScript code to add to the page, and those are all spelled out in the Developer's Guide, so I don't feel the need to repeat those here.&lt;br /&gt;&lt;br /&gt;Overall, I was pleasantly surprised. Unlike a lot of open source projects out there, this was extremely easy to get started with, easy to install and embed into existing applications, and the documentation was pretty good for a change. The quality so far has also been nothing short of impressive. (&lt;span style="font-style: italic;"&gt;the editor is more full-featured than the one Blogger uses.&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;It's licensed under the GPL, LGPL, or MPL (&lt;span style="font-style: italic;"&gt;your choice&lt;/span&gt;), and can be embedded in any project, open source or commercial. Also, in addition to the JavaScript version I used today, there are versions for JSP, ColdFusion, PHP, Python, etc.&lt;br /&gt;&lt;br /&gt;This project today was just a personal side project, but I think FCKeditor might find it's way into my arsenal for work projects as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-3292054211381835086?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/3292054211381835086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=3292054211381835086' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/3292054211381835086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/3292054211381835086'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/02/fckeditor-embedded-html-editor.html' title='FCKeditor - Embedded HTML Editor'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8729344219421321022</id><published>2008-02-07T13:54:00.000-05:00</published><updated>2008-02-07T14:59:41.183-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Reading And Writing Text Files in Ruby</title><content type='html'>&lt;span style="font-size:100%;"&gt;On a recent project, I had everything automated up to the point where I had to give feedback to the business analysts on what, if any, of their data had to be fixed and re-run.&lt;br /&gt;&lt;br /&gt;I ended up writing some Ruby scripts to run through a file of transaction responses, and sort out the various error types into separate files, and produce a summary report of the error counts in each category.&lt;/span&gt; Now the only manual part was cutting and pasting the summary into an email, and attaching the various sorted files.&lt;br /&gt;&lt;br /&gt;I was pleasantly surprised at how easy it was to read and write text files in Ruby.&lt;span style="font-weight: bold;"&gt;&lt;/span&gt; Let's say you just want to read a text file, line by line, and spit it back out, a la "cat"...&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;File.new(filename, "r").each { |line| puts line }&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Wow, that was easy, eh? Let's try reading that file into an array for use later...&lt;br /&gt;&lt;pre style="color: rgb(153, 0, 0);"&gt;results = []&lt;br /&gt;File.new(filename, "r").each { |line| results &lt;&lt; line }&lt;br /&gt;&lt;/pre&gt;Let's say you want to capitalize everything in the file, and spit it out to a new file...&lt;br /&gt;&lt;pre style="color: rgb(153, 0, 0);"&gt;out_file = File.new("upper_case.txt","w")&lt;br /&gt;results.each do |line|&lt;br /&gt;  out_file.puts line.upcase&lt;br /&gt;end&lt;/pre&gt;&lt;br /&gt;That was easy. It's probably obvious, but the first argument passed to the File constructor is the filename, and second is the read/write flag.&lt;br /&gt;&lt;br /&gt;For comparison' sake, let's read a file in Java and spit it out line for line...&lt;br /&gt;&lt;pre style="color: rgb(153, 0, 0);"&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.FileNotFoundException;&lt;br /&gt;import java.io.FileReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;...&lt;br /&gt;  BufferedReader is = new BufferedReader(new FileReader(fileName));&lt;br /&gt;  String line = "";&lt;br /&gt;&lt;br /&gt;  try {&lt;br /&gt;    while (line != null)&lt;br /&gt;    {&lt;br /&gt;       line = is.readLine();&lt;br /&gt;       System.out.println(line);&lt;br /&gt;    }&lt;br /&gt; catch (Exception e) { /* do nothing for now */ }&lt;br /&gt; finally&lt;br /&gt; {&lt;br /&gt;   try {is.close();}catch(Exception f) { }&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Definitely not "hard", but it is a bit more code. Writing a file is very similar, except of course you use FileWriter and BufferedWriter instead of FileReader and BufferedReader, and write to the file instead of reading from it.&lt;br /&gt;&lt;br /&gt;I'm not really trying to prove anything here -- Ruby isn't better than Java, Java isn't too hard or too verbose, etc. I like Java. I like Ruby. Against my better judgment, I even like Oracle, but that's another topic. I just found that working with files was easier than I expected, even for a Ruby beginner like myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-8729344219421321022?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8729344219421321022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8729344219421321022' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8729344219421321022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8729344219421321022'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/02/reading-and-writing-text-files-in-ruby.html' title='Reading And Writing Text Files in Ruby'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2785436545501638458</id><published>2008-02-05T21:43:00.000-05:00</published><updated>2008-02-05T21:44:48.637-05:00</updated><title type='text'>Funny Thing About Taxes</title><content type='html'>The other day &lt;a href="http://www.woot.com"&gt;Woot.com&lt;/a&gt;'s product description included a funny little rant about taxes....&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"&lt;span style="font-style: italic;"&gt;The worst thing about taxes is that you’re supposed to compute the total yourself. What if you ate at a restaurant and when you said hey, what do I owe you? They said you figure it out. And you thought about what you’d eaten and said well, I guess that’d be about $7.25, and they said no, it’s $11.40. Plus now we’re going to charge you an extra three bucks for trying to cheat us. If they knew what you owed them, what was the point of making you figure it out? Just to be jerks, probably. Or maybe in hopes you’d miss high, which is basically how taxes work.&lt;/span&gt;"&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2785436545501638458?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2785436545501638458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2785436545501638458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2785436545501638458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2785436545501638458'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/02/funny-thing-about-taxes.html' title='Funny Thing About Taxes'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2391634318246293633</id><published>2008-02-05T11:29:00.000-05:00</published><updated>2008-02-05T21:43:18.605-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='bourbon'/><category scheme='http://www.blogger.com/atom/ns#' term='truck'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Random Crap</title><content type='html'>&lt;p style="font-family: arial;"&gt;&lt;span style="font-size:100%;"&gt;Thanks to my wife, friends, and just about all of my coworkers, I'm starting to get a cold. What's worse, my bottle of Wild Turkey went dry last night. My time-tested home remedy of Nyquil and Bourbon, a.k.a. the 1-2 punch, can only be half as effective as it should be. &lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: arial;"&gt;&lt;span style="font-size:100%;"&gt;And of course this is an extra busy week at work, so I shouldn't take any time off. During the day I'll have to fill up on Dayquil and Diet Coke. Getting sick sucks, but I'd rather it be me than my kids. And it doesn't look like I'll be going to Jboss world next week, not that the request was &lt;/span&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;rejected&lt;/span&gt;&lt;span style="font-size:100%;"&gt;, it just hasn't been &lt;/span&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;approved&lt;/span&gt;&lt;span style="font-size:100%;"&gt;. Is there really much of a difference?&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr style="font-family: arial; height: 3px;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;A strange new math paradox has occurred where 1 is greater than 18. Patriots fans discovered it while looking at their record this year...18-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; font-family: arial;font-size:100%;" &gt;1 !&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;Did they really buy into all the media hype that there was no way they could lose, that it was destiny, that the Giants didn't even have a chance, that it would be a blowout, that all they had to do was show up for 60 minutes to make it official before they picked up their shiny new rings? No such thing as a given in football.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;hr style="font-family: arial; height: 3px;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family: arial;"&gt;I finally got a chance to look around at Google Code project hosting last night. I think I might give it a whirl with a smaller project to see how it works. Looks like it is a lot easier to get a project started, as it doesn't look like you have to write up a summary and justification and wait for approval like on Sourceforge. On the other hand, you are limited to 10 projects lifetime. That's plenty of room to pawn of cruddy code on the world. Think I'll package up my Ruby on Rails bookmarks launcher app, which has evolved considerably since last writing about it. I also still need to clean up the DAO generator I wrote in Java.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;hr style="font-family: arial; height: 3px;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family: arial;"&gt;And speaking of TODO lists, I need to get new tires on my truck and get it inspected by the end of the month. I already spent a day putting new brake pads and rotors (and a new caliper) on the front end a few weeks ago, which turned out to be an adventure.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;I also need to get working on cleaning out the barn, rearranging the workshop, and getting the chicken coop ready for spring. And get some seeds started so our garden doesn't totally suck again this year.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;And that's about it for random crap today. I'll stop whining and go take my Nyquil.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;p style="font-family: arial;"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2391634318246293633?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2391634318246293633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2391634318246293633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2391634318246293633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2391634318246293633'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/02/random-crap.html' title='Random Crap'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-4857971129025314277</id><published>2008-01-31T13:39:00.000-05:00</published><updated>2008-01-31T13:41:50.714-05:00</updated><title type='text'>Lucid Vending Dreams</title><content type='html'>They better have Twinkies, Ho-Ho's, and Doritos in this machine as well, or there might be a riot when the munchies kick in....&lt;br /&gt;&lt;a href="http://videos.howstuffworks.com/reuters/3905-marijuana-vending-machines-video.htm"&gt;http://videos.howstuffworks.com/reuters/3905-marijuana-vending-machines-video.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-4857971129025314277?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/4857971129025314277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=4857971129025314277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4857971129025314277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4857971129025314277'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/01/lucid-vending-dreams.html' title='Lucid Vending Dreams'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-6243203792677491104</id><published>2008-01-29T19:43:00.000-05:00</published><updated>2008-01-29T19:57:56.226-05:00</updated><title type='text'>More Childish Artwork</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_qV5JTOe-h_k/R5_JgireHPI/AAAAAAAAATE/__1C500BxVs/s1600-h/redneck.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_qV5JTOe-h_k/R5_JgireHPI/AAAAAAAAATE/__1C500BxVs/s400/redneck.jpg" alt="" id="BLOGGER_PHOTO_ID_5161065258892008690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My wife got a sweet scanner/copier/fax/printer/toaster for Christmas, so I got to scan a piece of "art" I did with my kids. I guess it's a redneck programmer, complete with bad teeth.&lt;br /&gt;&lt;br /&gt;And the other one is a duck....&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_qV5JTOe-h_k/R5_LZyreHQI/AAAAAAAAATM/2f6EOMF7Tpk/s1600-h/scan0001-1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_qV5JTOe-h_k/R5_LZyreHQI/AAAAAAAAATM/2f6EOMF7Tpk/s400/scan0001-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5161067341951147266" 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/17192448-6243203792677491104?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/6243203792677491104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=6243203792677491104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6243203792677491104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6243203792677491104'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/01/more-childish-artwork.html' title='More Childish Artwork'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_qV5JTOe-h_k/R5_JgireHPI/AAAAAAAAATE/__1C500BxVs/s72-c/redneck.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2139235210780286248</id><published>2008-01-29T15:38:00.000-05:00</published><updated>2008-01-29T15:39:42.892-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wtf?'/><title type='text'>Adventures in Absurdity</title><content type='html'>Something this absurd, I couldn't make up if I tried. This is, sadly, a very true story.&lt;br /&gt;&lt;br /&gt;Last week, we had lunch at Taco Bell. A new person was training at the cash register, and she didn't know how to ring in my order (tacos without lettuce). She fumbled around on the touchpad for a few seconds with a look of sheer panic on her face, and finally called a coworker over to help.&lt;br /&gt;&lt;br /&gt;The coworker took time away from assembling tacos to help the cashier enter the order. So the cashier finalized the order, took my money, and gave me my receipt.&lt;br /&gt;&lt;br /&gt;I glanced down at my receipt and was pleasantly surprised that the "- LET" (minus lettuce) was printed under the taco.&lt;br /&gt;&lt;br /&gt;Then I got to my table and unwrapped my taco...&lt;br /&gt;&lt;br /&gt;LETTUCE!!&lt;br /&gt;&lt;br /&gt;Seriously, the taco-assembler told the cashier how to key in a taco without lettuce, then took a few paces back to the assembly line AND PUT LETTUCE ON MY TACO!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2139235210780286248?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2139235210780286248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2139235210780286248' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2139235210780286248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2139235210780286248'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2008/01/adventures-in-absurdity.html' title='Adventures in Absurdity'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-6850375083806354360</id><published>2007-12-07T22:24:00.000-05:00</published><updated>2008-03-29T07:22:26.742-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Bookmarks Launcher+'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Took It That Extra Step</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_qV5JTOe-h_k/R1oPY2levpI/AAAAAAAAAS0/y1n1Mm41NUQ/s1600-h/ruby-on-rails-bookmarks-app.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_qV5JTOe-h_k/R1oPY2levpI/AAAAAAAAAS0/y1n1Mm41NUQ/s320/ruby-on-rails-bookmarks-app.jpg" alt="" id="BLOGGER_PHOTO_ID_5141438844240838290" border="0" /&gt;&lt;/a&gt;In my "&lt;a href="http://redneckprogrammer.blogspot.com/2007/11/always-take-it-step-farther.html"&gt;Always Take It A Step Farther&lt;/a&gt;" post, I talked about my lovely static HTML page I use as a launch pad for all the various links, tools, and apps I use at work. It's nothing the average 3rd grader couldn't hack together in a few minutes, but it does it's job in a simple and effective way.&lt;br /&gt;&lt;br /&gt;But as a developer, it just didn't feel right maintaining straight-up HTML by hand -- it &lt;span style="font-style: italic;"&gt;had &lt;/span&gt;to be database-driven, with admin screens to add new links. That, and I couldn't handle the peer pressure from &lt;a href="http://leapfrog.motd.org/"&gt;this fellow redneck&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Well, I threw it together in a few evenings using Ruby on Rails, MySQL, and of course some JavaScript, CSS, and plain-old HTML to make it "pretty" (&lt;span style="font-style: italic;"&gt;eye of the beholder, remember&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Now I know I am a major geek for doing this, and even a bigger geek for writing about it as if anyone cares. But I like it. So there. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There's a picture of the main screen to the upper-right. I used frames so the left-hand launch pad is always ready for action. There are two underlying tables in MySQL, &lt;span style="font-weight: bold;"&gt;links &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;link_categories&lt;/span&gt;. The categories show up as the colored tab's on the left, which you click to either expand or collapse. Once opened up, all the links mapped to that category show up.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_qV5JTOe-h_k/R1oQF2levqI/AAAAAAAAAS8/y_gBefZz2cc/s1600-h/ruby-on-rails-bookmarks-admin.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_qV5JTOe-h_k/R1oQF2levqI/AAAAAAAAAS8/y_gBefZz2cc/s320/ruby-on-rails-bookmarks-admin.jpg" alt="" id="BLOGGER_PHOTO_ID_5141439617334951586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;To the left is the categories admin screen. It's fairly simple, as I started with the default generated Ruby on Rails views for the admin screens, and added a custom layout RHTML template and did some things like showing the color in the list view.&lt;br /&gt;&lt;br /&gt;For deployment, I used the &lt;a href="http://instantrails.rubyforge.org/"&gt;InstantRails &lt;/a&gt;distribution, which comes with Apache, MySQL, phpMyAdmin, Ruby,Rails, Mongrel server for Rails, and some sample Rails apps. All in one neat package and you can run it on a thumb drive if you want.&lt;br /&gt;&lt;br /&gt;I removed the sample apps, added my app, configured Apache, created and pre-loaded the database with a bunch of work-related links, and then zipped the thing up again to share with my team.&lt;br /&gt;&lt;br /&gt;Next step is to put together a version with a fresh clean database and share the code outside of work. It's a very simple app, but demonstrates a few Rails concepts and techniques outwside of what you get in the boiler-plate vanilla tutorials.&lt;br /&gt;&lt;br /&gt;I guess it's worth noting that I am not much of a graphic designer, and I wouldn't have been able to come up with that "bookmarks" logo if it weren't for build-in Script-Fu scripts in GIMP. Also the color combinations of those categories in the left-menu are fairly obnoxious, but the colors are also DB driven so you could make all one color instead.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Here's a &lt;/span&gt;&lt;a style="color: rgb(204, 0, 0);" href="http://www.frontiernet.net/%7Enicholson150/bookmarks.zip"&gt;link to download the ZIP file &lt;/a&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;of the rails project. The table create SQL script is  in the "db" directory. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-6850375083806354360?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/6850375083806354360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=6850375083806354360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6850375083806354360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/6850375083806354360'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2007/12/took-it-that-extra-step.html' title='Took It That Extra Step'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_qV5JTOe-h_k/R1oPY2levpI/AAAAAAAAAS0/y1n1Mm41NUQ/s72-c/ruby-on-rails-bookmarks-app.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8708064478065774306</id><published>2007-12-04T15:02:00.000-05:00</published><updated>2007-12-04T15:14:15.916-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>'Kill switch' dropped from Vista</title><content type='html'>&lt;span style=";font-family:arial;font-size:100%;"  &gt;According to &lt;a href="http://news.bbc.co.uk/go/em/fr/-/2/hi/technology/7126902.stm"&gt;this article on BBC (&lt;/a&gt;&lt;a href="http://news.bbc.co.uk/go/em/fr/-/2/hi/technology/7126902.stm"&gt;http://news.bbc.co.uk/go/em/fr/-/2/hi/technology/7126902.stm&lt;/a&gt;) Microsoft had a kill switch mechanism in Vista that would render it useless if it detected it was not a legitimate paid-for copy. Legitmate customers complained so they had to disable it.&lt;br /&gt;&lt;br /&gt;The best part of the article however is this little tidbit:&lt;br /&gt;&lt;/span&gt;&lt;blockquote  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;"Microsoft has described the new approach as a "change of tactics". It said efforts to tackle piracy had seen numbers of fake copies of Vista at half the level of XP, the previous Windows operating system."&lt;/span&gt;&lt;/blockquote&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;Really, who are they kidding?&lt;br /&gt;&lt;br /&gt;First of all, XP has been out for years and Vista has not, so even if Vista were a decent OS that statement would be ridiculous. Of course there are more pirated versions of XP out there, it's been out a lot longer.&lt;br /&gt;&lt;br /&gt;And it's all over the media and the internet how people are not happy with Vista, and many people are choosing to either stay with XP, "downgrade" back to XP, or switch to Linux or Mac to avoid Vista.&lt;br /&gt;&lt;br /&gt;So if paying customers are choosing XP over Vista, why would hackers have any incentive to pirate an OS nobody wants?&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-8708064478065774306?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8708064478065774306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8708064478065774306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8708064478065774306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8708064478065774306'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2007/12/kill-switch-dropped-from-vista.html' title='&apos;Kill switch&apos; dropped from Vista'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-681236023075559038</id><published>2007-11-29T13:47:00.000-05:00</published><updated>2007-11-29T13:52:12.337-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Opening JAR/WAR/EAR With Windows XP 'Compressed Folders'</title><content type='html'>Why do I keep doing Google searches to find &lt;a href="http://www.nsftools.com/blog/blog-10-2004.htm#10-16-04"&gt;this site&lt;/a&gt;, when I can just post a&lt;a href="http://redneckprogrammer.blogspot.com/2007/11/opening-jarwarear-with-windows-xp.html"&gt; link here&lt;/a&gt;? I'm an idiot.&lt;br /&gt;&lt;br /&gt;More importantly, why do I really keep needing to look this up? I'm an idiot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-681236023075559038?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/681236023075559038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=681236023075559038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/681236023075559038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/681236023075559038'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2007/11/opening-jarwarear-with-windows-xp.html' title='Opening JAR/WAR/EAR With Windows XP &apos;Compressed Folders&apos;'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2886850373738443596</id><published>2007-11-28T11:04:00.000-05:00</published><updated>2007-11-28T11:25:25.220-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Splunkin' Like A Madman And Log Management</title><content type='html'>&lt;span style="font-size:130%;"&gt;Splunkin'&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;After playing with &lt;a href="http://www.splunk.com/"&gt;Splunk &lt;/a&gt;over a year ago (and liking what I saw) , we finally got the green light to go forward with an implementation at work. Splunk is a log aggregation and search tool. Basically it's a really fancy way of grep'ing through log files without logging in to each server and grep'ing through logs. One search will search logs across all the servers.&lt;br /&gt;&lt;br /&gt;Right now I am in the process of estimating our peak daily volume, which more of less means I am ssh'ing in to each app server and Apache server and looking at the file sizes for the various logfiles. The licensing for Splunk is tiered based on peak daily volume, with a free version that will index up to 500MB a day. Their pricing model seems like a real bargain when you compare it to other enterprise software vendors out there, especially when you see the license fee is a "perpetual license" -- you pay once and it is good forever. If your logging volume increases, you can upgrade the license without screwing around with the software installation, and the cost is prorated as the difference between the old and new.&lt;br /&gt;&lt;br /&gt;Everyone I have dealt with over at Splunk has been really cool to work with so far as well. Not a bunch of pushy sales-droid types, and they seem more than willing to work with you for unique configurations.&lt;br /&gt;&lt;br /&gt;This should make it a lot easier to find and pinpoint issues across our 3 Jboss clusters and the handful of stand-alone Jboss and Tomcat servers and multiple Apache servers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Apache Log File Management&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And speaking of logs, we had an issue where the &lt;span style="font-family: courier new;"&gt;mod_jk.log&lt;/span&gt; file hit the 2 gig limit (32 bit Linux) on one of our Apache servers the other day. That was fun to track down, since some stuff seemed to work and other stuff did not. Our web applications were working fine, but web services calls into our boxes were failing. According to our Jboss logs, we were processing the WS calls and returning valid responses, but the clients were getting errors about the connection being closed while reading the response, or null objects being returned, depending on which platform they were connecting from.&lt;br /&gt;&lt;br /&gt;So now I am working on getting &lt;span style="font-style: italic;"&gt;logrotate &lt;/span&gt;setup for our Apache installations. While I am in this mode, I think I'll whip up some Nagios checks to alert if the filesizes grow to say 1.5G (&lt;span style="font-style: italic;"&gt;which shouldn't happen with daily log rotation and compression&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Setting it up is pretty easy. I edited the&lt;span style="font-family:courier new;"&gt; /etc/logrotate/httpd&lt;/span&gt; file to add the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote  style="font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;/app/j2http/apache-2.0.55/logs/*log {&lt;br /&gt;   daily&lt;br /&gt;   rotate 10&lt;br /&gt;   copytruncate&lt;br /&gt;   notifempty&lt;br /&gt;   compress&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2886850373738443596?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2886850373738443596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2886850373738443596' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2886850373738443596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2886850373738443596'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2007/11/splunkin-like-madman-and-log-management.html' title='Splunkin&apos; Like A Madman And Log Management'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-2048298872693179518</id><published>2007-11-27T20:21:00.000-05:00</published><updated>2007-11-27T20:36:16.841-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ipod'/><category scheme='http://www.blogger.com/atom/ns#' term='hunting'/><category scheme='http://www.blogger.com/atom/ns#' term='fishing'/><title type='text'>Hunting Shows Kind of Suck, But Not This One</title><content type='html'>I love hunting and fishing. When I see a hunting or fishing show on TV, I feel compelled to watch it. Even though I know it will just be a big advertisement, and I'll get angry that you see 20 seconds worth of actual hunting or fishing, surrounded by 30 minutes of "helpful advice" that is really just a sales pitch. "&lt;span style="font-style: italic;"&gt;Well that's a beautiful buck, luckily my Weatherby rifle was up to the task, and my 150 grain Nosler Partition bullets hit their spot since I used my Bushnell range finder to get the exact yardage, and he never smelled me because of my Scent Lock clothes, and my Summit treestand never made a sound. Now it's time to drag him out with the help of my Polaris ATV&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;Give me a break!&lt;br /&gt;&lt;br /&gt;And where do these people hunt that they can sit there and watch 5 or 6 monster bucks walk by and they sit there saying, "&lt;span style="font-style: italic;"&gt;that one's not big enough&lt;/span&gt;" or "&lt;span style="font-style: italic;"&gt;we'll let that one mature and get bigger for next year&lt;/span&gt;"? If any one of those "inferior" deer stepped out into the open in public hunting grounds in NY or PA, you would hear 100 gun shots.&lt;br /&gt;&lt;br /&gt;But I did find a video podcast last night that I like. It's called "Huntin' Junky" -- you can find it on iTunes podcast section. It's just one guy, a regular guy, filming himself bowhunting. You get the good and the bad, as there are episodes I have seen so far where he missed easy shots (&lt;span style="font-style: italic;"&gt;sounds familiar to me&lt;/span&gt;) and just talks about the hunting instead of the gear. He hunts public land, doesn't blabber on about sponsors, and has real world issues -- like one episode where he could only hunt until 11 because he had to pick up his daughter. He's also just quirky enough that it's entertaining instead of boring.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-2048298872693179518?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/2048298872693179518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=2048298872693179518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2048298872693179518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/2048298872693179518'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2007/11/hunting-shows-kind-of-suck-but-not-this.html' title='Hunting Shows Kind of Suck, But Not This One'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8038009723850573589</id><published>2007-11-27T20:01:00.000-05:00</published><updated>2008-03-29T07:22:26.743-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Bookmarks Launcher+'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>Always Take It A Step Farther</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_qV5JTOe-h_k/R0zByFZZsSI/AAAAAAAAASs/15S8-5SC-I8/s1600-h/launchpad-html.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp3.blogger.com/_qV5JTOe-h_k/R0zByFZZsSI/AAAAAAAAASs/15S8-5SC-I8/s320/launchpad-html.JPG" alt="" id="BLOGGER_PHOTO_ID_5137694341109231906" border="0" /&gt;&lt;/a&gt;I have a "launch pad" HTML page on my thumb drive for work, which has all my work-related links I need -- links to company sites, web apps, tools, diagnostic pages, etc. It's really helpful since I don't have to screw around trying to sync up bookmarks files between PC's at home and work, and all my most-often used links are all in one uncluttered place. It's a simple concept, and one that works well for me.&lt;br /&gt;&lt;br /&gt;I did it in HTML (&lt;span style="font-style: italic;"&gt;with some CSS and JavaScript&lt;/span&gt;) because HTML is fast and easy to create. But "easy to create" only gets you so far because ongoing maintenance is a PITA (pain in the...). Adding a new link or changing an existing link is not difficult, just tedious.&lt;br /&gt;&lt;br /&gt;So as a programmer I feel the need to take it to the next obvious level. I've got MySQL and Instant Rails on my thumb drive, so it should be fairly easy to make this thing dynamic, with a nice admin screen to add, delete, or modify links. And a nice view page that looks just like the current page.&lt;br /&gt;&lt;br /&gt;Of course part of the convenience of this thing, as far as daily use goes, is the fact that it is a simple HTML file  I can double-click without running a DB or app server.  So I figure I will only run that stuff when I need to change something, then save off the updated launch page as a static HTML file. Best of both worlds.&lt;br /&gt;&lt;br /&gt;Is this really necessary? &lt;span style="font-style: italic;"&gt;No&lt;/span&gt;. Is it even worthy to mention here? &lt;span style="font-style: italic;"&gt;Probably not.&lt;/span&gt; Am I going to really do it? &lt;span style="font-style: italic;"&gt;Who knows?&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17192448-8038009723850573589?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8038009723850573589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8038009723850573589' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8038009723850573589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8038009723850573589'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2007/11/always-take-it-step-farther.html' title='Always Take It A Step Farther'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_qV5JTOe-h_k/R0zByFZZsSI/AAAAAAAAASs/15S8-5SC-I8/s72-c/launchpad-html.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-1067290910023632588</id><published>2007-11-27T19:46:00.000-05:00</published><updated>2007-11-27T19:59:05.187-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chickens'/><title type='text'>Chicken Farming Comes To An End</title><content type='html'>Our first experiment in raising chickens for food ended this past weekend. We had 5 Rhode Island Red hens left, and I really didn't want to take care of them through our harsh upstate winter. Since I was already spending my weekend butchering and packing my deer, making venison jerky, and grinding venison into burger, I figured I would go ahead and take care of the last 5. So now, with 5 chickens in the freezer and none in the coop, our first year as chicken farmers has officially ended.&lt;br /&gt;&lt;br /&gt;We learned a lot and had some fun raising chickens, and the neighbors didn't seem to mind too much. The meat and extra eggs were nice as well. This is definitely something we will do again in the spring, but there are a few things I will do differently.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Make the chicken run around the coop bigger. It was originally supposed to be bigger but I ran out of time and ran into big rocks on the one corner. So I let them free range a lot, which wasn't terrible, but led to some minor annoyances here and there.&lt;/li&gt;&lt;li&gt;Make a nest box. I meant to do this but again ran out of time. Then I read about chickens not laying until they are 6-8 months old, so figured they would all be gone by then anyways. Then my neighbor Dave started finding eggs in his flower garden, and we started finding eggs in our barn. If we start them with a nest box and minimize the free ranging, we should have to go on Easter egg hunts all the time.&lt;/li&gt;&lt;li&gt;Make the chicken run higher or put a top on it. Even when I closed the chickens in, they literally flew the coop and got out anyways.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Get some bigger meat chickens. The Buff Orpington's and Rhode Island Reds we got are known as dual purpose birds, good eating size plus good layers. It seemed to take forever for these birds to reach a good eating size, so next time I will get some Cornish X Rocks or other big meaty type birds as well as the Buff's and Red's.&lt;/li&gt;&lt;li&gt;Get an open watering trough. The watering jug I got is a pain, since you have to take it apart and turn it over to fill, then put it together and turn it back over. It would be so much easier (and drier) to just pour water into a trough instead of messing with that thing.&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/17192448-1067290910023632588?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/1067290910023632588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=1067290910023632588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1067290910023632588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/1067290910023632588'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2007/11/chicken-farming-comes-to-end.html' title='Chicken Farming Comes To An End'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-4585294379451676121</id><published>2007-11-23T13:18:00.000-05:00</published><updated>2007-11-27T19:45:39.533-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><category scheme='http://www.blogger.com/atom/ns#' term='hunting'/><title type='text'>2007 Hunting Notes - Part 2</title><content type='html'>God really wanted 2 deer in our freezer.&lt;br /&gt;&lt;br /&gt;I really believe that. The implications are a bit scary -- why do I need 2 deer in the freezer?&lt;span style="font-style: italic;"&gt; &lt;/span&gt;I don't know what God's master plan is, but know enough that I just have to trust in Him.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;So how do I know God wants 2 deer in our freezer?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Deer #1&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;It all started on Halloween. It was right in the middle of archery season here in upstate NY, and I came home from work to see a deer back in the apple orchard. I grabbed my bow, but couldn't get close enough for a good shot because I woluld have to stalk across an open yard. I fire off an arrow, and thud, way low, deer stood there. Hmm, that doesn't normally happen, I'll fire off a 2nd. Still too low. Deer stood there. Fire off my 3rd and final arrow and it buzzed right by the deer -- clean miss. Deer still stood there. In fact the deer didn't move until I walked out towards it to retrieve my arrows. Then it kind of trotted off nonchalantly. God wanted that deer in our freezer, and I just couldn't deliver on my end.&lt;br /&gt;&lt;br /&gt;That night, we went to a friend's house to see his big Halloween display -- he had turned his garage into Dracula's castle this year, which was pretty amazing. On the way back home, my wife nailed a big doe with her Caravan. I couldn't do it with my bow, so one jumped out in front of our car. And amazingly enough, there was hardly any bloodshot, bruised, or damaged meat in that deer, even with an instant-kill front-end hit with a minivan.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Deer #2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Opening day of regular gun season in the southern tier, I head out with my brother-in-law and&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_qV5JTOe-h_k/R0cqIFZZsRI/AAAAAAAAASk/1va5pc0BLGc/s1600-h/2007+Doe+-+Rattlesnake+Hill.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_qV5JTOe-h_k/R0cqIFZZsRI/AAAAAAAAASk/1va5pc0BLGc/s320/2007+Doe+-+Rattlesnake+Hill.jpg" alt="" id="BLOGGER_PHOTO_ID_5136120218415378706" border="0" /&gt;&lt;/a&gt; my wife's uncle and cousin. I have my Mossberg 695 bolt-action 12 gauge slug gun and 6 slugs.&lt;br /&gt;&lt;br /&gt;Around 9:15 am I heard a noise, looked over, and there was a big old gray squirrel. So I shouldered my shotgun and looked the other way. I heard a noise again, and looked over expecting to see the squirrel. Phil had kicked up a deer out of the pines and it crossed the creek about 50 yards below me. I took a shot at it, and it stopped and changed direction, ran up the hill and stood behind some thick brush where I couldn't take a follow-up. &lt;span style="font-style: italic;"&gt;Clean miss&lt;/span&gt;. I walked over to where I had shot at it, found the tracks and verified there was no blood. Down to 5 slugs and I've already seen (and shot at) more deer than I usually see all season. I figured I was done right there and then.&lt;br /&gt;&lt;br /&gt;I stopped by a big pine about 50 yards from where I started to get a slightly different perspective on the creek bed. A little after 11:00, 3 deer came walking up the creek bed along the pines. I couldn't believe my eyes! A second chance, and only a few hours after screwing up my first chance?&lt;br /&gt;&lt;br /&gt;I fired off a slug and one of the deer ran across the hill into the pines, the second ran up the hill into the pines, and the third just stood there behind some brush and branches. I scoped the area and didn't see any blood -- &lt;span style="font-style: italic;"&gt;another clean miss&lt;/span&gt;! I fired a 2nd shot at the deer that remained. It didn't move. A third shot, didn't move. WHAT IS GOING ON HERE!?! Fourth shot and click -- that gun only holds 3 slugs, dummy. The combination of being excited plus the branches between me and the deer was not a good combo.&lt;br /&gt;&lt;br /&gt;I fumbled through my pocket looking for a slug and loaded it into the chamber. I fiddled with my 1.5-9x scope trying to bring the deer in closer, but that only amplified the branches. Finally I started talking to myself, telling myself to calm down. &lt;span style="font-style: italic;"&gt;It stood there through 3 shots, calm down and make this one count&lt;/span&gt;. I steadied myself against the pine tree, put the cross hairs on the deer's chest, took a nice steady breath, hold, hold, squeeze, BOOM! The deer hobbled off awkwardly. I have 1 slug left in my pocket, which I quickly load up and closed the bolt.&lt;br /&gt;&lt;br /&gt;I tried to get Phil on the radio so he could come give me a couple slugs. If I tracked it and it jumped up, I would like to have more than 1 slug, especially given my recent track record. I waited about 10 minutes, then slowly headed down to where it stood when I shot. The way it hobbled off, I am really hoping I didn't blow it's leg off. I get down there and find tracks, kicked up leaves, a clump of hair, and some nice even bright red blood spray on the snow. I waited another 20 minutes but Phil never showed up (turns out he was a little bit lost). Finally I started tracking slowly. There was no green or black or yellow or any "parts" in the trail, just kicked up leaves and a 2 foot wide path of blood spray in the white snow. About 60-70 yards later, a dead deer lay between a couple of trees.&lt;br /&gt;&lt;br /&gt;2 deer in the freezer despite my inept shooting.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&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/17192448-4585294379451676121?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/4585294379451676121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=4585294379451676121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4585294379451676121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/4585294379451676121'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2007/11/2007-hunting-notes-part-2.html' title='2007 Hunting Notes - Part 2'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_qV5JTOe-h_k/R0cqIFZZsRI/AAAAAAAAASk/1va5pc0BLGc/s72-c/2007+Doe+-+Rattlesnake+Hill.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8526804983069327015</id><published>2007-11-16T14:44:00.000-05:00</published><updated>2007-11-16T14:51:55.920-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Night Before Project Is Due</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_qV5JTOe-h_k/Rz30xlZZsQI/AAAAAAAAASc/XLDqiKqLi3k/s1600-h/C8055639.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_qV5JTOe-h_k/Rz30xlZZsQI/AAAAAAAAASc/XLDqiKqLi3k/s320/C8055639.gif" alt="" id="BLOGGER_PHOTO_ID_5133528282961654018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;Click the image to watch me furiously code away with deadlines looming....&lt;/span&gt;&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/17192448-8526804983069327015?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8526804983069327015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8526804983069327015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8526804983069327015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8526804983069327015'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2007/11/night-before-project-is-due.html' title='Night Before Project Is Due'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_qV5JTOe-h_k/Rz30xlZZsQI/AAAAAAAAASc/XLDqiKqLi3k/s72-c/C8055639.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17192448.post-8742787237643597040</id><published>2007-11-13T08:13:00.000-05:00</published><updated>2007-11-13T08:16:30.925-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jokes'/><title type='text'>Preach It, Brother!</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-family: arial;"&gt;Got this in an email a few weeks ago. Makes we want to run home and assert my dominance....&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_qV5JTOe-h_k/RzmjN3Nx32I/AAAAAAAAARc/Ys_pRUVSTVU/s1600-h/manofthehouse.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_qV5JTOe-h_k/RzmjN3Nx32I/AAAAAAAAARc/Ys_pRUVSTVU/s320/manofthehouse.bmp" alt="" id="BLOGGER_PHOTO_ID_5132312708920762210" 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/17192448-8742787237643597040?l=redneckprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redneckprogrammer.blogspot.com/feeds/8742787237643597040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17192448&amp;postID=8742787237643597040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8742787237643597040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17192448/posts/default/8742787237643597040'/><link rel='alternate' type='text/html' href='http://redneckprogrammer.blogspot.com/2007/11/preach-it-brother.html' title='Preach It, Brother!'/><author><name>Robb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://photos1.blogger.com/blogger/5872/1651/320/squirrels.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_qV5JTOe-h_k/RzmjN3Nx32I/AAAAAAAAARc/Ys_pRUVSTVU/s72-c/manofthehouse.bmp' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
