<?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-4848054445359851090</id><updated>2011-10-04T09:06:11.961-07:00</updated><category term='xml'/><category term='communityone'/><category term='portlets'/><category term='thunderbird outlook'/><category term='javascript'/><category term='thunderbird imap'/><category term='REST'/><category term='Application Classes'/><category term='security'/><category term='programming'/><category term='dba'/><category term='xlst'/><category term='conference'/><category term='ajax peoplesoft jquery'/><category term='peoplesoft'/><category term='openoffice'/><category term='oracle'/><category term='lazy'/><category term='PeopleSoft logging'/><category term='encryption'/><category term='css'/><category term='groovy'/><category term='chat'/><category term='PeopleSoft 8.9'/><category term='portal'/><category term='revision control commenting'/><category term='windows'/><category term='peopletools'/><category term='oracle conference openworld'/><category term='xhtml'/><category term='xp'/><category term='vista'/><category term='ide'/><category term='design interfaces'/><title type='text'>University Software Development</title><subtitle type='html'>Blasting across the Alkaline Flats in jet-powered, monkey navigated....

But mostly a lot of PeopleSoft/Oracle, Java, Portal, Open Source, IT Architecture and other miscellaneous rantings.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>John Wagenleitner</name><uri>http://www.blogger.com/profile/00224676480093217330</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_QF1_bdfnFNo/SjWpOqDgSSI/AAAAAAAAAzM/n1aAWNMo98k/S220/johnwa.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>49</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-839245456009018596</id><published>2009-08-21T10:36:00.000-07:00</published><updated>2009-08-21T10:40:20.262-07:00</updated><title type='text'>PeopleCode Time formatting</title><content type='html'>Had a record with a Time field, took a little while to figure out how to format the value since you can't pass a Time value directly into the builtin DateTimeToLocalizedString function.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;/* &amp;time is a record field defined as Time */&lt;br /&gt;Local datetime &amp;dateTime = DateTime6(1900, 1, 1, Hour(&amp;time), Minute(&amp;time), Second(&amp;time));&lt;br /&gt;Local string &amp;formattedTime = DateTimeToLocalizedString(&amp;dateTime, "h:mm a");&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/4848054445359851090-839245456009018596?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/839245456009018596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=839245456009018596' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/839245456009018596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/839245456009018596'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2009/08/peoplecode-time-formatting.html' title='PeopleCode Time formatting'/><author><name>John Wagenleitner</name><uri>http://www.blogger.com/profile/00224676480093217330</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_QF1_bdfnFNo/SjWpOqDgSSI/AAAAAAAAAzM/n1aAWNMo98k/S220/johnwa.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-6896201894136841358</id><published>2009-06-25T21:53:00.000-07:00</published><updated>2009-06-25T22:07:28.118-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lazy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Groovy: Find files modified in the last X days</title><content type='html'>On a recent project there was a requirement to search a directory (and all sub-directories) for any files (all files were images) changed in the last 7 days and load them into a database table.  The code was being written in Groovy and being lazy I just used the *nix find command and processed the command output.  I wanted to avoid writing the code to recurse the directories thinking it would be easier to write, read and maintain if I just processed the find command output.&lt;br /&gt;&lt;br /&gt;I took a look today and found out how easy Groovy makes this, so when I have a chance I'll rewrite using the code below to make it pure Groovy and portable between *nix and Windows.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;File rootDir = new File("d:/temp")            // arg[0] == d:/temp&lt;br /&gt;long checkTime = new Date().minus(7).time    // arg[1] == 7&lt;br /&gt;rootDir.eachFileRecurse {&lt;br /&gt;    if (it.isFile() &amp;&amp; it.lastModified() &gt;= checkTime) {&lt;br /&gt;        println "${it} [${new Date(it.lastModified())}]"&lt;br /&gt;        // call the method to load this image file...&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/4848054445359851090-6896201894136841358?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/6896201894136841358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=6896201894136841358' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6896201894136841358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6896201894136841358'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2009/06/groovy-find-files-modified-in-last-x.html' title='Groovy: Find files modified in the last X days'/><author><name>John Wagenleitner</name><uri>http://www.blogger.com/profile/00224676480093217330</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_QF1_bdfnFNo/SjWpOqDgSSI/AAAAAAAAAzM/n1aAWNMo98k/S220/johnwa.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-8847931981016367267</id><published>2009-06-09T15:18:00.000-07:00</published><updated>2009-06-09T15:41:37.503-07:00</updated><title type='text'>Using Groovy to pad a file</title><content type='html'>The other day someone asked me if there was a quick way to right-pad lines in a file with spaces to a certain length.  I couldn't find a setting to do this in my favorite text editor &lt;a href="http://notepad-plus.sourceforge.net/"&gt;Notepad++&lt;/a&gt;, so I thought I'd see what it would take to do in &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Not a very exciting script, but I truly admire how much you can do with Groovy in just a few lines of code.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;def outfile = new File("out.txt")&lt;br /&gt;def infile = new File("in.txt")&lt;br /&gt;&lt;br /&gt;outfile.withWriter { output -&gt;&lt;br /&gt;  infile.eachLine { input -&gt;&lt;br /&gt;      output.writeLine(input.padRight(200, " "))&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/4848054445359851090-8847931981016367267?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/8847931981016367267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=8847931981016367267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8847931981016367267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8847931981016367267'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2009/06/using-groovy-to-pad-file.html' title='Using Groovy to pad a file'/><author><name>John Wagenleitner</name><uri>http://www.blogger.com/profile/00224676480093217330</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_QF1_bdfnFNo/SjWpOqDgSSI/AAAAAAAAAzM/n1aAWNMo98k/S220/johnwa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-4303263990637310121</id><published>2009-05-27T08:48:00.000-07:00</published><updated>2009-05-27T09:02:51.009-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='communityone'/><title type='text'>CommunityOne West 2009</title><content type='html'>Wow, last post to this blog is from September last year. We are really lagging. Been busy around here. But back to the topic of the post...&lt;br /&gt;&lt;br /&gt;The Sun CommunityOne West conference is this coming Monday, June 1, 2009 at the Moscone Center. This could be the last hurrah for the CommunityOne conference (at least as we know it). Hopefully Oracle will keep it rolling next year.&lt;br /&gt;&lt;br /&gt;For additional info on the conference: &lt;a href="http://developers.sun.com/events/communityone/2009/west/index.jsp"&gt;http://developers.sun.com/events/communityone/2009/west/index.jsp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are the sessions I am planning to attend next Monday:&lt;br /&gt;&lt;br /&gt;(S304328) Taking Advantage of Subversion's New Features&lt;br /&gt;(S304431) Apache Trinidad in Action&lt;br /&gt;(S304296) Sexier Software with Flex and Java™ Technology&lt;br /&gt;(S303767) RIAs Done Right: Grails, Flex, and Ext GWT&lt;br /&gt;(S304040) Social-Enable Your Web Apps with OpenSocial&lt;br /&gt;(S308519) Building Belonging&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-4303263990637310121?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/4303263990637310121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=4303263990637310121' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4303263990637310121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4303263990637310121'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2009/05/communityone-west-2009.html' title='CommunityOne West 2009'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-7559134853663025502</id><published>2008-09-22T08:59:00.000-07:00</published><updated>2009-06-09T15:54:37.213-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax peoplesoft jquery'/><title type='text'>Ajax autocomplete for PeopleSoft page field</title><content type='html'>I had to write a simple page recently where users would enter time spent on volunteer work.  One of the fields they would enter would be the name of the organization.  Since the organization could be anything there no requirement to build a setup table of valid organizations.  However, in order to try to keep consistent, it seemed like a good idea to provide an autocomplete feature.&lt;br /&gt;&lt;br /&gt;As the user types in the name of the organization (after the first 2 characters are entered), an ajax call is made in order to get a list of all organizations (up to 50) that exist already in the database that have the same first 2 characters.  The user can choose to select one of the suggested values or continue typing whatever they like.&lt;br /&gt;&lt;br /&gt;This feature was implemented by using the following:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;1. HTML Object&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;You first need to grab a copy of jquery and the jquery autocomplete libs (see google) and place them on the PIA web server.  The HTML object takes a couple bind parameters: 1) Page field name, 2) Ajax URL (a WEBLIB, see below) that returns suggestions for the autocomplete, 3) Ajax URL to post additional suggestions to (i.e., values changed in buffer), 4) Message Catalog message set number, 5) Message Catalog message number.&lt;br /&gt;&lt;br /&gt;A little more on some of these.  The addition Ajax call noted in #3 above is for those situations were the user may add values that only exist in the buffer.  Since the WEBLIB function in #2 only returns database values, there needs to be some way to capture values entered in the buffer so they too can be displayed as suggestions.  Items 4 and 5 need to point to a message catalog number that contains the sql statement the WEBLIB in #2 will use to return the list of suggestions.  For example:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt;select distinct org_name from ps_volunteer where org_name like :1 || '%'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The sql statement will receive a single bind parameter, and that parameter will be the first few characters of what was entered in the field on the page.&lt;br /&gt;&lt;br /&gt;Here is the HTML object code:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;/common/js/jquery.autocomplete.css&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/common/js/jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;  src=&amp;quot;/common/js/jquery.autocomplete.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;$(document).ready(function() {&lt;br /&gt; $('input[name^=&amp;quot;%BIND(:1)&amp;quot;]').autocomplete(&lt;br /&gt;&amp;quot;%BIND(:2)&amp;quot;,&lt;br /&gt;  {&lt;br /&gt;   delay:10,&lt;br /&gt;   minChars:2,&lt;br /&gt;   matchSubset:1,&lt;br /&gt;   matchContains:1,&lt;br /&gt;   cacheLength:10,&lt;br /&gt;   autoFill:true,&lt;br /&gt;   extraParams:{m1:%BIND(:4), m2:%BIND(:5)}&lt;br /&gt;  }&lt;br /&gt; );&lt;br /&gt;    $('input[name^=&amp;quot;%BIND(:1)&amp;quot;]').blur( function() { &lt;br /&gt;  $.post(&amp;quot;%BIND(:3)&amp;quot;, &lt;br /&gt;    { s: $(this).val() } );&lt;br /&gt;    } );&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;2. Add the HTML to the page&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Now it's time to add the HTML code above to the page that contains the field you want to add autocomplete to.  First, I added an HTML control to the bottom of the page in app designer.  Then, in order to make this somewhat reusable I created an application class that I call in page activate peoplecode to populate the HTML field.&lt;br /&gt;&lt;br /&gt;Here is the page activate code:&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;import FR_AJAX:Suggestion;&lt;br /&gt;&lt;br /&gt;Local FR_AJAX:Suggestion &amp;amp;ajax = create FR_AJAX:Suggestion();&lt;br /&gt;&lt;br /&gt;HR_LINK_WRK.HTMLAREA1.Value = &amp;amp;ajax.GetPageJavaScript(&amp;quot;ORG_NAME&amp;quot;, 31751, 12);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here is the app class code:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;class Suggestion&lt;br /&gt;   method GetPageJavaScript(&amp;amp;pageFieldName As string, &amp;amp;messageSet As number, &amp;amp;messageSetNbr As number) Returns string;&lt;br /&gt;end-class;&lt;br /&gt;&lt;br /&gt;method GetPageJavaScript&lt;br /&gt;   /+ &amp;amp;pageFieldName as String, +/&lt;br /&gt;   /+ &amp;amp;messageSet as Number, +/&lt;br /&gt;   /+ &amp;amp;messageSetNbr as Number +/&lt;br /&gt;   /+ Returns String +/&lt;br /&gt;   Local string &amp;amp;urlGetSuggestions = GenerateScriptContentRelURL(%Portal, %Node, Record.WEBLIB_FRAJAX, Field.ISCRIPT1, &amp;quot;FieldFormula&amp;quot;, &amp;quot;IScript_Suggest&amp;quot;);&lt;br /&gt;   Local string &amp;amp;urlAddSuggestion = GenerateScriptContentRelURL(%Portal, %Node, Record.WEBLIB_FRAJAX, Field.ISCRIPT1, &amp;quot;FieldFormula&amp;quot;, &amp;quot;IScript_AddToSuggestions&amp;quot;);&lt;br /&gt;   Local string &amp;amp;ajax = GetHTMLText(HTML.FR_AJAX_SUGGEST, &amp;amp;pageFieldName, &amp;amp;urlGetSuggestions, &amp;amp;urlAddSuggestion, &amp;amp;messageSet, &amp;amp;messageSetNbr);&lt;br /&gt;   Return &amp;amp;ajax;&lt;br /&gt;end-method;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;3. WEBLIB code for the Ajax calls&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Finally, here is the code that returns the suggestions for the autocomplete and also adds suggestions that aren't in the db to the list of suggestions.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Global array of string &amp;amp;fr_ajax_suggest_in_buffer;&lt;br /&gt;&lt;br /&gt;Function IScript_Suggest()&lt;br /&gt;   Local string &amp;amp;query = %Request.GetParameter(&amp;quot;q&amp;quot;);&lt;br /&gt;   Local string &amp;amp;message_set = %Request.GetParameter(&amp;quot;m1&amp;quot;);&lt;br /&gt;   Local string &amp;amp;message_nbr = %Request.GetParameter(&amp;quot;m2&amp;quot;);&lt;br /&gt;   &lt;br /&gt;   If None(&amp;amp;query, &amp;amp;message_set, &amp;amp;message_nbr) Then&lt;br /&gt;      Return;&lt;br /&gt;   End-If;&lt;br /&gt;   &lt;br /&gt;   %Response.SetContentType(&amp;quot;text/html&amp;quot;);&lt;br /&gt;   &lt;br /&gt;   If &amp;amp;fr_ajax_suggest_in_buffer &amp;lt;&amp;gt; Null Then&lt;br /&gt;      Local number &amp;amp;i;&lt;br /&gt;      For &amp;amp;i = 1 To &amp;amp;fr_ajax_suggest_in_buffer.Len&lt;br /&gt;         Local string &amp;amp;s = &amp;amp;fr_ajax_suggest_in_buffer.Get(&amp;amp;i);&lt;br /&gt;         If Lower(&amp;amp;s) &amp;lt;&amp;gt; Lower(&amp;amp;query) And&lt;br /&gt;               Find(Lower(&amp;amp;query), Lower(&amp;amp;s)) = 1 Then&lt;br /&gt;            %Response.WriteLine(&amp;amp;s);&lt;br /&gt;         End-If;&lt;br /&gt;      End-For;&lt;br /&gt;   End-If;&lt;br /&gt;   &lt;br /&gt;   Local string &amp;amp;sqlText = MsgGetExplainText(Value(&amp;amp;message_set), Value(&amp;amp;message_nbr), &amp;quot;&amp;quot;);&lt;br /&gt;   Local SQL &amp;amp;sql = CreateSQL(&amp;amp;sqlText, Lower(&amp;amp;query));&lt;br /&gt;   Local array of string &amp;amp;suggestions = CreateArrayRept(&amp;quot;&amp;quot;, 0);&lt;br /&gt;   Local string &amp;amp;suggestion;&lt;br /&gt;   While &amp;amp;sql.Fetch(&amp;amp;suggestion)&lt;br /&gt;      &amp;amp;suggestions.Push(&amp;amp;suggestion);&lt;br /&gt;   End-While;&lt;br /&gt;   &amp;amp;sql.Close();&lt;br /&gt;   &lt;br /&gt;   Local number &amp;amp;j;&lt;br /&gt;   For &amp;amp;j = 1 To &amp;amp;suggestions.Len&lt;br /&gt;      If &amp;amp;fr_ajax_suggest_in_buffer = Null Then&lt;br /&gt;         %Response.WriteLine(&amp;amp;suggestions.Get(&amp;amp;j));&lt;br /&gt;      Else&lt;br /&gt;         If &amp;amp;fr_ajax_suggest_in_buffer.Find(&amp;amp;suggestions.Get(&amp;amp;j)) = 0 Then&lt;br /&gt;            %Response.WriteLine(&amp;amp;suggestions.Get(&amp;amp;j));&lt;br /&gt;         End-If;&lt;br /&gt;      End-If;&lt;br /&gt;   End-For;&lt;br /&gt;   &lt;br /&gt;End-Function;&lt;br /&gt;&lt;br /&gt;Function IScript_AddToSuggestions()&lt;br /&gt;   Local string &amp;amp;suggestion = %Request.GetParameter(&amp;quot;s&amp;quot;);&lt;br /&gt;   If All(&amp;amp;suggestion) Then&lt;br /&gt;      If &amp;amp;fr_ajax_suggest_in_buffer = Null Then&lt;br /&gt;         &amp;amp;fr_ajax_suggest_in_buffer = CreateArrayRept(&amp;quot;&amp;quot;, 0);&lt;br /&gt;         &amp;amp;fr_ajax_suggest_in_buffer.Push(&amp;amp;suggestion);&lt;br /&gt;      Else&lt;br /&gt;         If &amp;amp;fr_ajax_suggest_in_buffer.Find(&amp;amp;suggestion) = 0 Then&lt;br /&gt;            &amp;amp;fr_ajax_suggest_in_buffer.Push(&amp;amp;suggestion);&lt;br /&gt;         End-If;&lt;br /&gt;      End-If;&lt;br /&gt;   End-If;&lt;br /&gt;End-Function;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QF1_bdfnFNo/SNfMMnUouhI/AAAAAAAAAWA/ko3sLdYs_50/s1600-h/ps_autocomplete.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_QF1_bdfnFNo/SNfMMnUouhI/AAAAAAAAAWA/ko3sLdYs_50/s320/ps_autocomplete.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5248888407809636882" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-7559134853663025502?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/7559134853663025502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=7559134853663025502' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/7559134853663025502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/7559134853663025502'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2008/09/ajax-autocomplete-for-peoplesoft-page.html' title='Ajax autocomplete for PeopleSoft page field'/><author><name>John Wagenleitner</name><uri>http://www.blogger.com/profile/00224676480093217330</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_QF1_bdfnFNo/SjWpOqDgSSI/AAAAAAAAAzM/n1aAWNMo98k/S220/johnwa.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QF1_bdfnFNo/SNfMMnUouhI/AAAAAAAAAWA/ko3sLdYs_50/s72-c/ps_autocomplete.JPG' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-5769854302680427008</id><published>2008-07-30T14:12:00.000-07:00</published><updated>2009-06-09T15:52:18.616-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='peopletools'/><title type='text'>PeopleTools Grid Controls and Subpages</title><content type='html'>&lt;span style="font-family: arial;"&gt;I had the situation today where I needed to change the column header in a grid on a subpage via PeopleCode. I tried adding the following to the PageActivate PeopleCode on the subpage:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;GetGrid(Page.PS_Subpage, "GridName").ColumnName.Label = "MyNewColumnName";&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;I kept receiving an error that the grid could not be found on the page. I thought that was interesting, double-checked my code to verify that I didn't have any typos and tried again. Same error. It then occurred to me that maybe the processor doesn't interpret subpages as a different page object. I changed my code to reference the page that was hosting the subpage...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;GetGrid(Page.PS_HostPage, "GridName(from subpage)").ColumnName.Label = "MyNewColumnName";&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;... and my code started working.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We still have the 8.46 toolset, so this might not be an issue with newer versions of PeopleTools.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-5769854302680427008?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/5769854302680427008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=5769854302680427008' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/5769854302680427008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/5769854302680427008'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2008/07/peopletools-grid-controls-and-subpages.html' title='PeopleTools Grid Controls and Subpages'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-8613449670440782374</id><published>2008-07-02T09:50:00.000-07:00</published><updated>2009-06-09T15:48:10.773-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='peopletools'/><title type='text'>PeopleTools: How-To rename table names on a page via SQL</title><content type='html'>I have frequently run into the situation when cloning a page where you want to rename a table on a page, but want to keep all field properties the same (ie, custom label, fieldname, etc.). In PeopleTools, when you change the record name on a field, all of the properties get wiped out, so you end up doing a lot of unnecessary cutting and pasting to reset all of the properties. A better way of doing this is to just update the page record directly via SQL:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="sql"&gt;update pspnlfield set recname = :newrec where pnlname = :pagename and recname = oldrec;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-8613449670440782374?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/8613449670440782374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=8613449670440782374' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8613449670440782374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8613449670440782374'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2008/07/peopletools-how-to-rename-table-names.html' title='PeopleTools: How-To rename table names on a page via SQL'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-1151266611201573099</id><published>2008-05-15T08:36:00.001-07:00</published><updated>2008-05-15T08:48:04.864-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='communityone'/><title type='text'>CommunityOne 2008 Recap</title><content type='html'>This was one of the best conferences I have ever attended. I am very interested in open-source software (for a myriad of reasons) and this conference was almost completely about open-source. The keynote from Ian Murdock covered both the business and philosophical aspects of open-source software. I found the keynote very enlightening and enjoyable. If you would like to watch the videos from the opening keynote, they are available &lt;a href="http://developers.sun.com/events/communityone/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;At best, I consider myself a Netbeans n00b, so all of the Netbeans sessions were really cool and very informative. I haven't seen all of the bells and whistles of Netbeans. We went to several of the Netbeans sessions.&lt;br /&gt;&lt;br /&gt;I also attended sessions on OpenESB/BPEL,Ubuntu and Web Services with Glassfish. All very cool to see what is possible with all of this open source software that is available.&lt;br /&gt;&lt;br /&gt;I was telling John Wa (other author on this blog) that I got the same feeling of excitement from this conference I used to get while I was in college, going to big shows like Comdex. You see all of the possibilities and it inspires and excites you, making you want to get home and try some of it out. I well definitely make every attempt to attend next year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-1151266611201573099?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/1151266611201573099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=1151266611201573099' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/1151266611201573099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/1151266611201573099'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2008/05/communityone-2008-recap.html' title='CommunityOne 2008 Recap'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-933032589680794294</id><published>2008-05-15T08:27:00.000-07:00</published><updated>2008-05-15T08:32:01.211-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Best Practice Center: PeopleSoft and Oracle Fusion Middleware</title><content type='html'>Here is a link to a site that Oracle recently brought up regarding best practices for integrating PeopleSoft and Oracle Fusion Middleware:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/tech/fmw4apps/peoplesoft/index.html?msgid=6476729"&gt;http://www.oracle.com/technology/tech/fmw4apps/peoplesoft/index.html?msgid=6476729&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-933032589680794294?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/933032589680794294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=933032589680794294' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/933032589680794294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/933032589680794294'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2008/05/best-practice-center-peoplesoft-and.html' title='Best Practice Center: PeopleSoft and Oracle Fusion Middleware'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-2486276079454676692</id><published>2008-05-15T08:17:00.000-07:00</published><updated>2008-05-15T08:26:28.327-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openoffice'/><title type='text'>Saving images out of an ODF (OpenOffice) Document</title><content type='html'>We recently had the need to extract some images out of a functional specification document that we received. In OpenOffice, when you right-click on an image, there is no option to "Save Image to File". In order to pull the images of the document, you need to save the document in the ODF (native OpenOffice) format. Open your favorite decompression tool (7-zip is our fav) and open the ODF file. When you open the file in your decompression tool, you will notice several folders, one of which is "Images". This is the folder that stores all of your images from your document.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-2486276079454676692?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/2486276079454676692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=2486276079454676692' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/2486276079454676692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/2486276079454676692'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2008/05/saving-images-out-of-odf-openoffice.html' title='Saving images out of an ODF (OpenOffice) Document'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-182742015971194595</id><published>2008-05-02T12:48:00.000-07:00</published><updated>2008-05-02T12:54:51.034-07:00</updated><title type='text'>Pre-JavaOne 2008 Conference: CommunityOne</title><content type='html'>Gary, John and I are heading up to San Francisco on Monday for the &lt;a href="http://developers.sun.com/events/communityone/"&gt;CommunityOne conference&lt;/a&gt;. I plan on blogging more about it Tuesday when we get back to the office. If you are planning on attending, drop a comment on this post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-182742015971194595?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/182742015971194595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=182742015971194595' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/182742015971194595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/182742015971194595'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2008/05/pre-javaone-2008-conference.html' title='Pre-JavaOne 2008 Conference: CommunityOne'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-2617531911035859061</id><published>2008-04-11T14:55:00.000-07:00</published><updated>2008-05-15T08:32:41.798-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>PeopleTools 8.46 and Microsoft Windows Vista SP1</title><content type='html'>As luck would have it, my Windows XP drive took a dive earlier this week. Rather than wasting a lot of time figuring out what the problem is, I thought it would be better to put my Windows Vista drive back into my laptop and keep working. I built a disk image of Windows Vista Enterprise a couple of months ago, but switched back to Windows XP around the end of January (for no reason... really...). With all of the recent hoopla about Service Pack 1 for Windows Vista, I thought it was a good time to give it another shot. I loaded the drive back into the laptop, fired it up, got all of the Windows Updates (20+), all of my open-source software was updated (Notepad++, Firefox, WinMerge, Tortoise SVN, Filezilla all had multiple releases since the end of January) and then I did Service Pack 1. It loaded without error, though the suggested load time message from Microsoft of an hour plus was more like 2 hours plus.&lt;br /&gt;&lt;br /&gt;We are still running PeopleTools 8.46 here and yes, I know 8.46 is not officially supported by Oracle on Windows Vista. That being said, I haven't run into any problems running 8.46 on Vista. There are the occasional crashes, which aren't any more or less frequent than they are in Windows XP. One thing I have noticed though since Vista SP1 is that the PeopleSoft Query window in two-tier (I am old-school and like the two-tier query interface) keeps crashing with a "Out Of Memory" error. I have checked each time and I still have about 900 megs of physical memory left, but the error is still showing up.&lt;br /&gt;&lt;br /&gt;Not that this is a huge issue, just wanted to document it somewhere. I might be the only person on the planet trying to write a query on PeopleTools 8.46 in two-tier mode on Windows Vista SP1. If there is someone else out there with the same issue, you are not alone... ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-2617531911035859061?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/2617531911035859061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=2617531911035859061' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/2617531911035859061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/2617531911035859061'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2008/04/peopletools-846-and-microsoft-windows.html' title='PeopleTools 8.46 and Microsoft Windows Vista SP1'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-3403684084575199290</id><published>2008-02-28T08:37:00.000-08:00</published><updated>2008-02-28T14:07:51.150-08:00</updated><title type='text'>Jonathan Coulton</title><content type='html'>This is quasi-technical.&lt;br /&gt;&lt;br /&gt;I am sure I am late to the party on this (as usual) but Yahoo ran a &lt;a href="http://potw.news.yahoo.com/s/potw/61785/how-to-become-a-rock-star;_ylt=AtVIOmPRjOJfC3KJq1LHW6MKwId4"&gt;story &lt;/a&gt;on Monday about Jonathan Coulton that caught my eye. Interesting story about him that I won't rehash here. I went to his &lt;a href="http://www.jonathancoulton.com.nyud.net/primer/listen"&gt;site&lt;/a&gt; and listened to a couple of his tunes. Very entertaining. If you are a developer, check out the "Code Monkey" tune.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-3403684084575199290?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/3403684084575199290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=3403684084575199290' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3403684084575199290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3403684084575199290'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2008/02/jonathon-coulton.html' title='Jonathan Coulton'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-3198075246473347333</id><published>2008-02-28T08:21:00.000-08:00</published><updated>2008-02-28T08:37:16.092-08:00</updated><title type='text'>Oracle Mix Idea</title><content type='html'>Good morning and Happy New Year (I can say that in this late February post as I am the first person from our team to post in 2008). Last week I posted an idea on &lt;a href="https://mix.oracle.com/"&gt;Oracle Mix &lt;/a&gt;(a very cool new Oracle site brought to you by the geniuses at Oracle &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Appslab&lt;/span&gt;) regarding converting Application Designer to a Java-based tool. App Designer is currently a Win32 app, requiring MS Windows. I would love to tell you I had great, altruistic means for the post, but truth be told, I just want to run App Designer in Linux. And I am sure that I am not the only one. I am sure there are several kindred spirits out there running Mac and Linux boxes that have at one time or another also wished App Designer was cross-platform.&lt;br /&gt;&lt;br /&gt;IMHO, making App Designer platform independent is a good business move. Having an IDE where the customer can decide what platform they want to run it on is a good thing. A company that is not necessarily a Windows shop wouldn't have to sink the extra cash on a virtualization solution or purchase unnecessary extra machines.&lt;br /&gt;&lt;br /&gt;Anyway, my $02. If you want to vote on my Mix idea, the url is: &lt;a href="https://mix.oracle.com/ideas/18401-make-peoplesoft-application-designer-java-based-and-platform-independent"&gt;https://mix.oracle.com/ideas/18401-make-peoplesoft-application-designer-java-based-and-platform-independent&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-3198075246473347333?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/3198075246473347333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=3198075246473347333' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3198075246473347333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3198075246473347333'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2008/02/oracle-mix-idea.html' title='Oracle Mix Idea'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-8461769407114373726</id><published>2007-11-20T13:09:00.000-08:00</published><updated>2007-11-20T13:23:04.209-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thunderbird imap'/><title type='text'>Thunderbird IMAP and attachment issues</title><content type='html'>We setup the scanner portion of our office printer/scanner/fax machine today. Upon scanning, the  printer/scanner/fax images the document, saves it as a PDF and emails out to whomever you picked to send the image to. I received the PDF in my email in my client of choice, Thunderbird (version 2.0.0.9 (20071031) using IMAP) and when attempting to open it, received the following error message from Adobe Acrobat reader:&lt;br /&gt;&lt;br /&gt;"The was an error opening this document. The file is damaged and could not be repaired"&lt;br /&gt;&lt;br /&gt;I downloaded an alternative Win32 PDF reader, Foxit Reader, and gave that a shot, only to receive a similar message. I contacted a colleague who also received the test message to find out she was able to open the PDF with no issues using Outlook. With that info, I went to my webmail client and was able to open the PDF file with no issue. So the problem was with Thunderbird.&lt;br /&gt;&lt;br /&gt;After a quick Google search, I found several postings from other folks with a similar predicament, mostly from attempting to hook Thunderbird to the new released Gmail IMAP ports. I came across the following nugget of information which immediately corrected my problem....&lt;br /&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/Gmail-Problem-solving/browse_thread/thread/28f5c7328725fa6e/cc5a3e62e40b4315%23cc5a3e62e40b4315"&gt;Original source thread&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the "about:config" section of Thunderbird (Tools &gt; Options &gt; Advanced &gt; Config Editor) look for the "mail.imap.fetch_by_chunks" and " mail.server.default.fetch_by_chunks" values and set them to "False".&lt;br /&gt;&lt;br /&gt;Mozillazine gives some more information about what this value actually does &lt;a href="http://kb.mozillazine.org/Entire_message_fetched_when_opening_a_IMAP_message"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-8461769407114373726?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/8461769407114373726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=8461769407114373726' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8461769407114373726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8461769407114373726'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/11/thunderbird-imap-and-attachment-issues.html' title='Thunderbird IMAP and attachment issues'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-7805038202467751207</id><published>2007-11-11T23:18:00.000-08:00</published><updated>2007-11-11T23:24:21.592-08:00</updated><title type='text'>Oracle Mix</title><content type='html'>Saw on the &lt;a href="http://oracleappslab.com/"&gt;Oracle AppsLab&lt;/a&gt; blog a reference to Oracle Mix.  I signed right up because I like the direction Oracle is taking with trying to encourage and foster a tighter sense of community among itself and its users.  I am hoping this is one step closer to creating an environment where the community (especially on the apps side) can share and contribute projects openly (i.e., sourceforge).&lt;br /&gt;&lt;br /&gt;So if you are interested, invite me to join your group in the Mix.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mix.oracle.com"&gt;http://mix.oracle.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-7805038202467751207?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/7805038202467751207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=7805038202467751207' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/7805038202467751207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/7805038202467751207'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/11/oracle-mix.html' title='Oracle Mix'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-6267301665893481176</id><published>2007-11-11T22:13:00.000-08:00</published><updated>2007-11-11T22:57:11.582-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><title type='text'>OpenWorld 2007 - Day 0</title><content type='html'>Great day for a drive to San Francisco.  Joe took me detour past the old Oracle headquarters in Belmont on Davis Drive where he used to work.  &lt;br /&gt;&lt;br /&gt;Check-in was a breeze cause we are alum.  Oracle doesn't give out much swag at all, go we got the usual book bag, notepad, umbrella and various adverts.&lt;br /&gt;&lt;br /&gt;We made it to the keynote at 5:45PM to hear Larry recount the history of Oracle.  He even showed a pic of the old offices in Belmont (the ones we toured earlier in the day).  Some of the ex-cast of Saturday Night Live (Kevin Nealon, Darrell Hammond, and I can't remember the other one) where there to add some humor to the mix.&lt;br /&gt;&lt;br /&gt;The reception after the keynote had the usual food and drink.  &lt;br /&gt;&lt;br /&gt;Up tomorrow...&lt;br /&gt;&lt;br /&gt;08:30-10:15 - Keynote Charles Phillips&lt;br /&gt;11:00-12:00 - Intro to Oracle BI Publisher&lt;br /&gt;12:30-13:30 - Oracle SOA Suite Best Practices&lt;br /&gt;14:00-14:45 - Keynote ?&lt;br /&gt;15:15-16:15 - Highlights of Agile PLM&lt;br /&gt;16:45-17:45 - Ready, Set, XML - Using Oracle XML Data&lt;br /&gt;18:00-19:00 - Keynote ?&lt;br /&gt;19:30-      - OTN Night&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-6267301665893481176?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/6267301665893481176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=6267301665893481176' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6267301665893481176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6267301665893481176'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/11/openworld-2007-day-0.html' title='OpenWorld 2007 - Day 0'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-3404106365446743550</id><published>2007-11-06T17:28:00.000-08:00</published><updated>2007-11-06T17:40:50.358-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oracle conference openworld'/><title type='text'>Oracle OpenWorld 2007</title><content type='html'>Been buried the last several weeks working on our HCM 8.9 Absence Manage implementation.  This project is quite a change from the usual since there hasn't been much technical work to date, most of the time has been focused on validating formulas and other setup data.&lt;br /&gt;&lt;br /&gt;I am scheduled to be at OpenWorld next week and am very excited to be attending.  There are lots of good sessions held by Oracle and I feel fortunate to be able to attend sessions held by big name folks like Tom Kyte, Jim Marion, Shay Shmeltzer, et al.  I also have a list of questions that I hope to get some potential answers too from the experts roaming in the exhibit hall.  &lt;br /&gt;&lt;br /&gt;The best thing about conferences like this is the energy.  You can't help but get excited and energized about technology and the potential it has.  Compare this to a typical morgue-like day at work, and I always come back wishing everyday was an OpenWorld day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-3404106365446743550?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/3404106365446743550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=3404106365446743550' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3404106365446743550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3404106365446743550'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/11/oracle-openworld-2007.html' title='Oracle OpenWorld 2007'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-2928706620467393624</id><published>2007-10-11T16:17:00.000-07:00</published><updated>2007-10-11T16:19:24.406-07:00</updated><title type='text'>PeopleTools 8.4x - Finding references to a particular record field</title><content type='html'>Found a feature today that I had never seen before (don't laugh if you've been using it for years).  If you bring up a record in Application Designer and right-click on a field there is an option to &lt;span style="font-weight:bold;"&gt;Find Definition References - Record Field&lt;/span&gt;.  In the past I had always just opened the field and from the Edit menu selected &lt;span style="font-weight:bold;"&gt;Find Definition References&lt;/span&gt;, which brings back usage of the field on any object (record, page, peoplecode, etc.).  The &lt;span style="font-weight:bold;"&gt;Find Definition References - Record Field&lt;/span&gt; limits the search to only the usage of that field on that particular record.&lt;br /&gt;&lt;br /&gt;It is always nice to find a feature like this when you really need it...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-2928706620467393624?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/2928706620467393624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=2928706620467393624' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/2928706620467393624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/2928706620467393624'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/10/peopletools-84x-finding-references-to.html' title='PeopleTools 8.4x - Finding references to a particular record field'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-3926926338072976782</id><published>2007-09-27T17:42:00.000-07:00</published><updated>2007-09-27T17:48:56.736-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chat'/><title type='text'>IRC still alive and well</title><content type='html'>It had been a long time since I'd been on Internet Relay Chat (the real IM), so the other night I fired up &lt;a href="http://chatzilla.hacksrus.com/"&gt;Chatzilla&lt;/a&gt; and checked out a few channels like #jquery, ##java, ##linux and saw quite a bit of conversations taking place.  If anyone reading this knows of good channels related to things like Java, general open source, portals, or enterprise development please drop a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-3926926338072976782?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/3926926338072976782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=3926926338072976782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3926926338072976782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3926926338072976782'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/irc-still-alive-and-well.html' title='IRC still alive and well'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-4412221342195181278</id><published>2007-09-26T19:34:00.000-07:00</published><updated>2007-09-26T19:43:38.629-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='revision control commenting'/><title type='text'>Commented out code...please use version control</title><content type='html'>I had to look through some code today to troubleshoot an issue.  The code had tons of comments.  You might say, wow that's a good thing right?  Wrong, the comments were not comments about what the code was doing (or trying to do).  Instead, the comments were commenting out old code dating back who knows how long.  This makes the code so difficult to read and understand when the lines of old junk outnumbers the lines of code that is actually live and doing something.&lt;br /&gt;&lt;br /&gt;There are so many great, free revision control systems available today (&lt;a href="http://subversion.tigris.org/"&gt;subversion&lt;/a&gt;, &lt;a href="http://git.or.cz/"&gt;git&lt;/a&gt;, &lt;a href="http://www.selenic.com/mercurial/wiki/"&gt;mercuial&lt;/a&gt;, &lt;a href="http://bazaar-vcs.org/"&gt;bazaar&lt;/a&gt;), old code belongs in a revision control system and not in current code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-4412221342195181278?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/4412221342195181278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=4412221342195181278' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4412221342195181278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4412221342195181278'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/commented-out-codeplease-use-version.html' title='Commented out code...please use version control'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-7712957698372663903</id><published>2007-09-25T18:41:00.000-07:00</published><updated>2009-06-09T15:55:54.447-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Application Classes'/><category scheme='http://www.blogger.com/atom/ns#' term='PeopleSoft 8.9'/><title type='text'>Dynamic Application Class loading in PeopleSoft</title><content type='html'>When Application Classes were first introduced in PeopleTools and they included interfaces, I knew that there had to be some way to dynamically load an application class.  A lot of my recent work has been in the HR Recruiting module (Candidate Gateway) that delivers hundreds of classes.&lt;br /&gt;&lt;br /&gt;Quite a few of the classes handle things like page layout and validation, things we definitely wanted to modify.  They even delivered a lot of "factory" like classes that their code calls and all it does is return an object of a certain type.  It seemed like a perfect setup for being able to customize the look and feel and behavior by simply supplying custom application classes.  However, the implementation classes are hardcoded in the factory methods.  So while there is a way to substitute the implementation of a certain class it still requires a modification to delivered code.&lt;br /&gt;&lt;br /&gt;The Approvals Framework, on the other hand, is a perfect example of how application classes should be used.  It is completely built around the concepts of dynamically loading classes at runtime based on values entered in setup tables.  No code modifications are required, you just create your class and enter the fully qualified name in a setup table.  The framework looks up the class you specify, loads it up dynamically at runtime and then calls the methods on it.&lt;br /&gt;&lt;br /&gt;An example (code changed to protect the innocent):&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;class MyEventHandler extends BaseEventHandler&lt;br /&gt;   method onApprove();&lt;br /&gt;   method onDeny();&lt;br /&gt;   ...&lt;br /&gt;   ...&lt;br /&gt;end-class;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The framework can then lookup the class name in a setup table and call the methods it provides.  It knows what methods it can call based on the fact that my class must extend a class they know about (BaseEventHandler).&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Local string &amp;clazz = /* sql lookup here */;&lt;br /&gt;Local BaseEventHandler &amp;object;&lt;br /&gt;&amp;object = CreateObject(&amp;clazz) as BaseEventHandler;&lt;br /&gt;&amp;object.onApprove();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;PeopleSoft, which knows nothing about my custom class, is able to load it up and use it.  This is a very powerful and elegant way to provide custom functionality without requiring anything more than an entry in a setup table.  Unfortunately, I haven't yet seen many places where this type of extensibility is used in PeopleSoft 8.9.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-7712957698372663903?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/7712957698372663903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=7712957698372663903' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/7712957698372663903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/7712957698372663903'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/dynamic-application-class-loading-in.html' title='Dynamic Application Class loading in PeopleSoft'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-82625404940240870</id><published>2007-09-23T20:31:00.000-07:00</published><updated>2007-09-23T20:35:04.588-07:00</updated><title type='text'>Notepad++ 4.3 released</title><content type='html'>&lt;a href="http://notepad-plus.sourceforge.net"&gt;Notepad++&lt;/a&gt;, my favorite text editor, released version 4.3 this week.  Looks like mostly bug fixes and a few new features.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-82625404940240870?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/82625404940240870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=82625404940240870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/82625404940240870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/82625404940240870'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/notepad-43-released.html' title='Notepad++ 4.3 released'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-8799928807070982208</id><published>2007-09-23T19:16:00.000-07:00</published><updated>2009-06-09T15:58:30.394-07:00</updated><title type='text'>AJAX and PeopleSoft</title><content type='html'>After Ethan sent me the link to the &lt;a href="http://wiki.ittoolbox.com/index.php/PeopleSoft_Auto-Save_with_Ajax"&gt;PeopleSoft Auto-Save with Ajax&lt;/a&gt; post on the ITToolbox site I was inspired to try AJAX on a PeopleSoft page (and excited to try the &lt;a href="http://jquery.com/"&gt;jQuery &lt;/a&gt;library for the first time as it looked very cool).  The blog post on the ITToolbox site had some great javascript code, but offered no details on how the whole thing was put together.  Below are the exact steps I took to add AJAX to a page in PeopleSoft.&lt;br /&gt;&lt;br /&gt;Before I get started I want to point out that I decided against trying the auto-save feature.  While I think that this type of feature would be extremely useful in some use cases, I feel the Component you implement it with must be designed for it.  Auto-saves should be saved as drafts and should not effect the current data stored in the tables.  When the user actually clicks some sort of Save button, only then should the auto-saved data replace the data that existed before.&lt;br /&gt;&lt;br /&gt;To simply my AJAX/PeopleSoft experience I decided to just create a dynamic DIV on an existing page.  The DIV is updated periodically by sending an AJAX request to an IScript function which returns HTML that is placed directly into the DIV.  This was done with PeopleTools 8.46.17.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I opened the Page I wanted to AJAX-ify and added an HTML Area control to the top of the page (specifically I added DERIVED_PTP.HTMLAREA).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I downloaded &lt;a href="http://jquery.com/"&gt;jQuery 1.2.1&lt;/a&gt;.  I grabbed the "packed" version which is the smallest weighing in at only 26kb.  As the ITToolbox entry hinted at, I tried adding the downloaded contents to an HTML object.  However, when I tried to save the object in Application Designer I got the following error:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;font-family:courier new;font-size:85%;"  &gt;Object size exceeds 32K limit.  Proceed with Save? &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It let me save it anyway so I named the HTML object FR_JQUERY.  When I opened up the page I received several javascript errors and when I looked at the cache javascript file that was created I found it was truncated.  This happened when I used the code from the ITToolbox site:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&amp;lt;script src="%JavaScript(FR_JQUERY)"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In order to make it work I added the contents of the packed jquery.js to a Message Catalog Entry (more details below).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I created an HTML object named FR_ISSUE_LOG_SRCH_DHTML with my code and a bind variable that I would later replace with the jQuery library.  Here's the HTML object code:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;FR_ISSUE_LOG_SRCH_DHTML HTML Object&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;&amp;lt;div id="new-issues"&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;%Bind(:1)&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var pollInterval = 15000;&lt;br /&gt;function getIssues()&lt;br /&gt;{&lt;br /&gt;$("#new-issues").load("/psc/pshome/.../WEBLIB_..IScript_...");&lt;br /&gt;setTimeout("getIssues()", pollInterval);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;getIssues();&lt;br /&gt;&lt;br /&gt;$("#new-issues").css({&lt;br /&gt;left:"600px",&lt;br /&gt;position: "absolute",&lt;br /&gt;width: "250px",&lt;br /&gt;fontSize: "9px",&lt;br /&gt;padding: "2px",&lt;br /&gt;}); &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On the Page Activate event I added the following code to populate the HTMLAREA field I had previously added to the Page.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Local string &amp;amp;jquery = MsgGetExplainText(31000, 3, "message not found");&lt;br /&gt;DERIVED_PTP.HTMLAREA.Value = GetHTMLText(HTML.FR_ISSUE_LOG_SRCH_DHTML, &amp;amp;jquery);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;What is noteable here is that the entire contents of the jquery.js file are stored in the Message Catalog and placed in the HTMLAREA using the %bind(:1) substitution variable.  In our environment we can not easily added files to the webserver directory, so this provided a nice solution that did not require me to add any files to the webserver.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finally, I created an IScript function that simply does a SQL Fetch for all rows entered in our custom table for the particular user viewing the page.&lt;br /&gt;&lt;br /&gt;This was just an experiment on my part and only rates a 1 out of 10 on the coolness meter.  My primary motivation was just to see how feasible it was to use AJAX on a PeopleSoft page.  I was quite happy to find that it was easier than I expected (save for my little issue with placing the jquery.js code on the page).  Also, I was able to dabble a lot with jQuery and find that it makes DOM manipulation and AJAX very easy and I will find a use for it in my next project.&lt;br /&gt;&lt;br /&gt;Unlike the ITToolbox post, I was not attempting to interact with the component processor.  Trying to involve actions by submitting the form information to the component processor and doing partial page updates is fairly complex and in my opinion looks like it can be prone to error.  For the next couple of projects I think I'll stick to IScript type page refreshes to build my comfort level until a point when I am ready to do field validation and auto-saves.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-8799928807070982208?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/8799928807070982208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=8799928807070982208' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8799928807070982208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8799928807070982208'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/ajax-and-peoplesoft.html' title='AJAX and PeopleSoft'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-5979509099677328434</id><published>2007-09-13T21:20:00.001-07:00</published><updated>2009-06-09T15:56:47.573-07:00</updated><title type='text'></title><content type='html'>Just wanted to follow-up my previous post about &lt;a href="http://campus-codemonkeys.blogspot.com/2007/09/log4j-in-peoplecode.html"&gt;Log4j in PeopleCode&lt;/a&gt; and post the actual log4j.properties file that I used.  Using this file along with the code posted previously is all you would need to get started.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;log4j.rootLogger=WARN, rolling&lt;br /&gt;&lt;br /&gt;log4j.appender.screen=org.apache.log4j.ConsoleAppender&lt;br /&gt;log4j.appender.screen.layout=org.apache.log4j.PatternLayout&lt;br /&gt;log4j.appender.screen.layout.ConversionPattern=%d %-4r [%t] %-5p %c %x - %m%n&lt;br /&gt;&lt;br /&gt;log4j.appender.rolling=org.apache.log4j.RollingFileAppender&lt;br /&gt;log4j.appender.rolling.Threshold=DEBUG&lt;br /&gt;log4j.appender.rolling.File=/some/directory/log4j.log&lt;br /&gt;log4j.appender.rolling.MaxFileSize=20480KB&lt;br /&gt;log4j.appender.rolling.MaxBackupIndex=5&lt;br /&gt;log4j.appender.rolling.layout=org.apache.log4j.PatternLayout&lt;br /&gt;log4j.appender.rolling.layout.ConversionPattern=%d %p [%c{4}] %M %m%n&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/4848054445359851090-5979509099677328434?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/5979509099677328434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=5979509099677328434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/5979509099677328434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/5979509099677328434'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/just-wanted-to-follow-up-my-previous.html' title=''/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-1461433869277997756</id><published>2007-09-07T22:28:00.000-07:00</published><updated>2009-06-09T15:57:19.464-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PeopleSoft logging'/><title type='text'>Log4j in PeopleCode</title><content type='html'>&lt;a href="http://jjmpsj.blogspot.com/"&gt;Jim's PeopleSoft Journal&lt;/a&gt; had a good entry on using &lt;a href="http://jjmpsj.blogspot.com/2006/09/logging-peoplecode_15.html"&gt;Log4j in PeopleCode&lt;/a&gt;.  This first article assumed that you would have control over the log4j.properties file in your environment.  Jim also posted a follow-up on &lt;a href="http://jjmpsj.blogspot.com/2006/11/log4j-and-peoplecode-part-ii.html"&gt;Log4j and Peoplecode Part II&lt;/a&gt; where he discussed how to programmatically configure the logging.  This is nice for those, like me, that do not have access to modify the $PS_HOME/appserv/classes/log4j.properties file.&lt;br /&gt;&lt;br /&gt;The programmatic approach works well, but I didn't want to hardcode all that information in each event I want to log information in.  You can point log4j to an alternative logging file using the code below, that way you can keep control of the logging level and setup of the appenders in a file that is easy to modify.  Of course, this assumes that in your environment you have some access to a directory where you can store the file and grant write access to it for the daemon that runs the application server.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Local JavaObject &amp;log4jConfig = GetJavaClass("org.apache.log4j.PropertyConfigurator");&lt;br /&gt;&lt;br /&gt;&amp;log4jConfig.configure("/some/directory/log4j.properties");&lt;br /&gt;&lt;br /&gt;Local JavaObject &amp;log = GetJavaClass("org.apache.log4j.Logger").getLogger("edu.csufresno.cis.HRS_CE_RESUME.PageActivate");&lt;br /&gt;&lt;br /&gt;&amp;log.info("hi from peoplecode");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note: I got tripped up initially because I didn't read Jim's code closely enough and tried using CreateJavaObject out of habit instead of GetJavaClass.  Since both methods are static (i.e., can't create an instance of a Logger) it blew up with an error.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-1461433869277997756?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/1461433869277997756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=1461433869277997756' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/1461433869277997756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/1461433869277997756'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/log4j-in-peoplecode.html' title='Log4j in PeopleCode'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-5948669244313378209</id><published>2007-09-07T15:59:00.000-07:00</published><updated>2009-06-09T16:02:23.929-07:00</updated><title type='text'>Pouring through logs</title><content type='html'>Been doing an inordinate amount of tracing and debugging lately.  Our ERP system dumps a lot of junk to the logs.  The following command is my friend.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;tail -f trace.log |tee $HOME/mylog.log&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I like to be able to follow the file as lines are added and also like to send the output to a log file that I can open in an editor so I can so more regex type searches.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-5948669244313378209?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/5948669244313378209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=5948669244313378209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/5948669244313378209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/5948669244313378209'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/pouring-through-logs.html' title='Pouring through logs'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-6594936982393562794</id><published>2007-09-04T20:11:00.000-07:00</published><updated>2009-06-09T16:02:59.423-07:00</updated><title type='text'>Log4J - email notification of production errors</title><content type='html'>There are a couple of things I try to do before I sit down to write Java code for even the smallest project (cause they always grow).  One is creating an ant build script and the other is creating a log4j configuration file and adding log4j to my library path.  I used to sprinkle System.out.println's throughout my code and now I've gotten in the habit of using the logging library.&lt;br /&gt;&lt;br /&gt;I hadn't used the SMTPAppender, but recent issues with production code got me thinking about it so I'd have a heads up before users starting yelling.  Below is the log4j.properties file that's worked well so far.  The code is all custom so I have total control of all log.error and log.fatal statements, so when I get an email I know exactly what the issues is.  Wouldn't be possible if I still used System.out.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;log4j.rootLogger=ERROR, SMTPAPPENDER, rolling&lt;br /&gt;&lt;br /&gt;log4j.appender.screen=org.apache.log4j.ConsoleAppender&lt;br /&gt;log4j.appender.screen.layout=org.apache.log4j.PatternLayout&lt;br /&gt;log4j.appender.screen.layout.ConversionPattern=%d %-4r [%t] %-5p %c %x - %m%n&lt;br /&gt;&lt;br /&gt;log4j.appender.rolling=org.apache.log4j.RollingFileAppender&lt;br /&gt;log4j.appender.rolling.Threshold=DEBUG&lt;br /&gt;log4j.appender.rolling.File=/tmp/csufresno-hrsrecruit-cnv.log&lt;br /&gt;log4j.appender.rolling.MaxFileSize=20480KB&lt;br /&gt;log4j.appender.rolling.MaxBackupIndex=5&lt;br /&gt;log4j.appender.rolling.layout=org.apache.log4j.PatternLayout&lt;br /&gt;log4j.appender.rolling.layout.ConversionPattern=%d %p [%c{4}] %M %m%n&lt;br /&gt;&lt;br /&gt;log4j.appender.SMTPAPPENDER.To=me@myaddress.com&lt;br /&gt;log4j.appender.SMTPAPPENDER.layout=org.apache.log4j.PatternLayout&lt;br /&gt;log4j.appender.SMTPAPPENDER=org.apache.log4j.net.SMTPAppender&lt;br /&gt;log4j.appender.SMTPAPPENDER.Subject=[hrsrecruit] ERROR&lt;br /&gt;log4j.appender.SMTPAPPENDER.BufferSize=512&lt;br /&gt;log4j.appender.SMTPAPPENDER.From=myapp@myserver.com&lt;br /&gt;log4j.appender.SMTPAPPENDER.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n&lt;br /&gt;log4j.appender.SMTPAPPENDER.SMTPHost=mysmtp.server.com&lt;br /&gt;&lt;br /&gt;log4j.logger.edu.csufresno.cis=INFO&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Just a note, took me a few runs to figure out that I needed mail.jar and activation.jar in my classpath.  After that, smooth sailing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-6594936982393562794?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/6594936982393562794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=6594936982393562794' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6594936982393562794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6594936982393562794'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/log4j-email-notification-of-production.html' title='Log4J - email notification of production errors'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-6263607609081632777</id><published>2007-09-02T22:47:00.000-07:00</published><updated>2007-09-02T23:19:36.130-07:00</updated><title type='text'>Vista, no thanks</title><content type='html'>In early August we received new laptops at work, some very nice dual core Dell Latitudes with a couple gigs of RAM.  Now I can finally have &lt;a href="http://www.oracle.com/technology/products/jdev/index.html"&gt;JDeveloper &lt;/a&gt;and &lt;a href="http://www.oracle.com/technology/products/database/sql_developer/index.html"&gt;SQLDeveloper &lt;/a&gt;open at the same time.  I have forgone installing Microsoft Office and instead am rolling with &lt;a href="http://www.openoffice.org"&gt;OpenOffice 2.2&lt;/a&gt;, no regrets.  Still a &lt;a href="http://www.mozilla.com/thunderbird/"&gt;Thunderbird &lt;/a&gt;fan, what's Outlook?  The main Microsoft software I rely on is the OS, Windows XP.&lt;br /&gt;&lt;br /&gt;In a year we are supposed to upgrade to Vista and MS Office 2007.  Based on what I've seen of Vista so far I think that will be the time to move to Linux.  Many in IT where I work have moved to MacOS and while I admire the BSD-like OS under the covers, I'd just be trading one corporate vendor for another.  In addition, most of the software that I need to run in order to do my job is either not available on the Mac or is in beta.  There is not one tool I use that requires MacOS.  There are quite a few tools I use that are available for both Windows and Linux.  For those cases where a Linux version is not available I can use &lt;a href="http://www.winehq.org/"&gt;Wine &lt;/a&gt;or an XP guest OS in &lt;a href="http://www.vmware.com/products/server/"&gt;VMWare Server&lt;/a&gt;&lt;a href="http://www.vmware.com/products/server/"&gt;.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So I have one year to decide what distro to run.  I've been running &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu &lt;/a&gt;on my home laptop for about the last 8 months.  It's a nice distribution, very easy to setup and use.  It has given me a great appreciation for the &lt;a href="http://www.debian.org"&gt;Debian &lt;/a&gt;packaging system.  I have it narrowed down to either a &lt;a href="http://www.debian.org"&gt;Debian &lt;/a&gt;or &lt;a href="http://www.redhat.com"&gt;Redhat &lt;/a&gt;distribution.  Redhat would be a good choice because it'll likely replace our Sun Solaris boxes in the near future.  I've been working with &lt;a href="http://www.centos.org"&gt;CentOS &lt;/a&gt;in a VMWare image for a little while and found I really like both the workstation and server installs.  As for a Debian distro I think I would go with plain old Debian.  While Ubuntu does have a large user base, I need very few of the features that are Ubuntu specific.  I dislike some the configuration changes I've seen lately in Ubuntu (i.e., their choice of replacing the inittab with event.d).   I want my Linux system to be as standard as possible if I go with Debian and I think Ubuntu is starting to stray away from Debian a little too much and I don't want to end up running a distro that forks from Debian.&lt;br /&gt;&lt;br /&gt;I think the main decision will depend heavily on package management, I know Debian's apt-get is excellent.  For now I need to continue playing with CentOS to see how Yum stacks up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-6263607609081632777?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/6263607609081632777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=6263607609081632777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6263607609081632777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6263607609081632777'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/vista-no-thanks.html' title='Vista, no thanks'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-4811338411625142744</id><published>2007-09-02T22:43:00.000-07:00</published><updated>2007-09-02T22:47:06.083-07:00</updated><title type='text'>Podcasts</title><content type='html'>I am trying to make up for lost time since I haven't posted in a long, long, long time.  Here my list of podcasts that I regularly listen to....&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;bsdtalk&lt;/li&gt;&lt;li&gt;Casting from the Server Room&lt;/li&gt;&lt;li&gt;FLOSS Weekly&lt;/li&gt;&lt;li&gt;Google Developer Podcast&lt;/li&gt;&lt;li&gt;In the Trenches&lt;/li&gt;&lt;li&gt;The Java Posse&lt;/li&gt;&lt;li&gt;Linux Reality&lt;/li&gt;&lt;li&gt;OnSoftware&lt;/li&gt;&lt;li&gt;Oracle TechCasts&lt;/li&gt;&lt;li&gt;Perlcast&lt;/li&gt;&lt;li&gt;Software Engineering Radio&lt;/li&gt;&lt;li&gt;SourceTrunk&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/4848054445359851090-4811338411625142744?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/4811338411625142744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=4811338411625142744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4811338411625142744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4811338411625142744'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/podcasts.html' title='Podcasts'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-3831710319247714721</id><published>2007-09-02T21:21:00.000-07:00</published><updated>2007-09-02T22:29:46.658-07:00</updated><title type='text'>iText - Java PDF library</title><content type='html'>I recently had to do some tuning on a project I had done that involves converting and merging documents into PDF format.  The main performance issue turned out to be poor performing sql and a function-based index fixed it.  I decided to try tuning a few other pieces of code and that brought me to try an newer version of the&lt;a href="http://www.lowagie.com/iText/"&gt; iText library&lt;/a&gt;...wow was I pleasantly surprised.&lt;br /&gt;&lt;br /&gt;In the project I use &lt;a href="http://www.lowagie.com/iText/"&gt;iText &lt;/a&gt;to merge PDF documents into a single document and also use it to convert TIF and JPG files to PDF format.  The ERP system this project was going to be a part of shipped with iText 1.02 so that is why I initially decided to use that library for the PDF manipulation.  As part of my tuning effort I decided to try the latest version, 2.0.4.  On average performance improved over 40%.   As an added bonus some TIF files that failed to convert in the prior 1.02 version were handled flawlessly by the newer release.&lt;br /&gt;&lt;br /&gt;In the near future I would like to compare the performance against other Java PDF libraries (such as &lt;a href="http://www.pdfbox.org/"&gt;PDFBox&lt;/a&gt;) to see how iText compares.  The code that handles the PDF manipulation is isolated from the rest of the logic and implements an interface so it shouldn't be too difficult to try the test since the implementing class is plugable.&lt;br /&gt;&lt;br /&gt;Couple lessons learned for me are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Write classes that do one thing and do it really well.  I was lucky here, my project is relatively small and the code was well isolated making the upgrade in versions easy to test side by side.&lt;/li&gt;&lt;li&gt;For sourceforge projects that I rely on I will sign up for the release mailing list and try out new versions.  Open source projects like iText are continually evolving.  I made a huge mistake of thinking that the art of PDF manipulation would not have advanced much since the release of 1.02 (which I think was sometime in 2004).&lt;/li&gt;&lt;li&gt;iText is a great PDF library for Java.  I had never used this library before this project but had heard a lot about it.  What really impresses me the most about the project is the documentation and the fantastic examples on the site.  I was able to use a lot of code from the examples and that left me to focus more on my program's logic rather than on the details of merging PDF files or converting images to PDF.&lt;/li&gt;&lt;/ol&gt;One last thing I want to mention was how painless the transition was from release 1.02 (circa 2004) to the latest release of 2.0.4.  Just had to change 2 method calls from deprecated methods to new ones that were direct replacements.  Great library, fast, stable API, well documented, definitely recommend it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-3831710319247714721?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/3831710319247714721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=3831710319247714721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3831710319247714721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3831710319247714721'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/09/itext-java-pdf-library.html' title='iText - Java PDF library'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-6030320140539391748</id><published>2007-06-22T16:03:00.000-07:00</published><updated>2007-06-22T16:15:36.529-07:00</updated><title type='text'>All Derived, All The Time (I wish...)</title><content type='html'>I have been working on a PeopleSoft inquiry page a bit this week. I was looking at the specifications for the page and saw I didn't need to create any physical objects in the database (tables or views) to do what I needed to do. I was planning on just using derived tables and values and just loading up a rowset with data from PeopleCode and pushing the rowset to the grid. I was using an existing derived table at row level 0 and created an additional derived table with all of the fields I needed for row level 1 (the grid). Everything derived. I added my fields at row level 0, added my grid object, added the fields I needed for the grid from the derived record and attempted to save. Error message of no data found in row level 1. What? I went back and looked, verifying that I had added the fields. Tried to save again. Same error. I went and showed one of my colleagues who also theorized that what I was trying to do should work. He got the same error. He added a field from a table that physically exists in the database and it saved. So the moral of the story is that in a PeopleSoft page, you can have all derived field at row level 0, but you must have at least one field that physically exists in the database in row level 1 for the page to work.&lt;br /&gt;&lt;br /&gt;This posting probably is rambling and doesn't flow well, but hey, it's late on a Friday...&lt;br /&gt;&lt;br /&gt;-E&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-6030320140539391748?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/6030320140539391748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=6030320140539391748' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6030320140539391748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6030320140539391748'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/06/all-derived-all-time-i-wish.html' title='All Derived, All The Time (I wish...)'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-2469294704005663521</id><published>2007-06-21T11:37:00.000-07:00</published><updated>2007-06-21T11:41:19.051-07:00</updated><title type='text'>PeopleSoft and Firefox, Part One</title><content type='html'>I wanted to leave the door open for part two, if ever need be...&lt;br /&gt;&lt;br /&gt;One ongoing gripe I have with Firefox is the speed of the browser in PeopleSoft. IE is hands down faster and I have yet to figure out why. Does IE cache more of the HTTPS pages where Firefox does not? Does the IE Trident rendering engine just work better with PeopleSoft than the Gecko rendering engine in Firefox? Did a very un-thorough Google search with nothing much to show for it. If anyone has an ideas or opinions, please post a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-2469294704005663521?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/2469294704005663521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=2469294704005663521' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/2469294704005663521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/2469294704005663521'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/06/peoplesoft-and-firefox-part-one.html' title='PeopleSoft and Firefox, Part One'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-1525687608383566656</id><published>2007-06-20T14:45:00.000-07:00</published><updated>2007-06-20T14:50:42.225-07:00</updated><title type='text'>NotePad++</title><content type='html'>We have been test-driving Notepad++ around here for the past couple of days. With the recent release of Textpad 5, we have been looking to see what else is available out there that is open source. We have been big Textpad fans for the last several years and have been looking forward to the changes that were coming with release 5, but the load time to open the app is huge. We have been conditioned for software to be lightning fast, so Textpad 5 left us wanting. I tried to revert back to Textpad 4, but had all kinds of little registry gremlins that caused me grief.&lt;br /&gt;&lt;br /&gt;We have PSPad in the running too, but it has the same app load delay as Textpad 5 (but it has a ton of cool features).&lt;br /&gt;&lt;br /&gt;Anyway, we will be using Notepad++ here, probably until next week until another text editor draws our attention.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-1525687608383566656?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/1525687608383566656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=1525687608383566656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/1525687608383566656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/1525687608383566656'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/06/notepad.html' title='NotePad++'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-908206650911980141</id><published>2007-06-20T14:02:00.000-07:00</published><updated>2007-06-20T14:45:25.107-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='encryption'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Open Source Desktop Encryption Solutions</title><content type='html'>Let me throw out a couple of scenarios:&lt;br /&gt;&lt;br /&gt;1.) You get a call from a user who needs a data extract of "XYZ" data. You run the extract, export the data to a spreadsheet and send the data back to the requester.&lt;br /&gt;&lt;br /&gt;2.) You have 10 databases you work in, all with different passwords.&lt;br /&gt;&lt;br /&gt;Consider these questions:&lt;br /&gt;In scenario 1, what if the extract had some sensitive information in it? Where is that extract, in your local temporary folder? Is that temp folder under your profile (probably not) and who has access to it? What if it is sitting in your local temp folder and your laptop grows legs...&lt;br /&gt;&lt;br /&gt;In scenario 2, do you remember all of you passwords or do you store you passwords in text docs locally, in a wiki, post-it note on your desk, etc. to make it easier to access the userid/ passwords?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.truecrypt.org/"&gt;TrueCrypt&lt;/a&gt;: This software allows you to create a encrypted partition in a file (yes, a file) on your harddisk that you can mount as a volume in the OS. Save anything you want to it.This is perfect for using as a temp directory. Provides a solution for scenario 1. If your laptop does take up jogging, the file is a bunch of gibberish without the passphrase.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://keepass.info/"&gt;KeePass&lt;/a&gt;: This software fixes the problem presented in scenario 2. The software basically keeps an encrypted database of your any userid/passwords you want to store. Add as many as you want. You only need to remember the single, encrypted passphrase to access the database.&lt;br /&gt;&lt;br /&gt;Both of these products are available on multiple platforms. I can only vouch for the effectiveness on Windows XP.&lt;br /&gt;&lt;br /&gt;Just to have one less thing to remember, save your KeePass database inside of your TrueCrypt partition.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-908206650911980141?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/908206650911980141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=908206650911980141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/908206650911980141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/908206650911980141'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/06/open-source-desktop-encryption.html' title='Open Source Desktop Encryption Solutions'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-6697737947224825204</id><published>2007-05-23T09:48:00.000-07:00</published><updated>2007-05-23T09:52:55.356-07:00</updated><title type='text'>OSAlt - Open Source Alternative Software</title><content type='html'>I came across this site this morning while looking through my LifeHacker RSS feed. &lt;a href="http://www.osalt.com/"&gt;OSAlt &lt;/a&gt;is a very cool site where you can enter what type of application (business, communications, etc), or a specific application and find any open source alternatives to it. I am frequently looking for open source alternatives to commercial applications and I am definetely going to be adding this site as one of my first places to search (along with sourceforge.net).&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-weight: bold;"&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/4848054445359851090-6697737947224825204?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/6697737947224825204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=6697737947224825204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6697737947224825204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6697737947224825204'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/05/osalt-open-source-alternative-software.html' title='OSAlt - Open Source Alternative Software'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-8253857608026496579</id><published>2007-05-06T22:52:00.000-07:00</published><updated>2009-06-09T16:03:56.894-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design interfaces'/><title type='text'></title><content type='html'>Recently while working in our HR system I came across some interesting OO design.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;&amp;someobject.ShopForEmployees();&lt;br /&gt;....&lt;br /&gt;....&lt;br /&gt;&amp;someobject.CopyShoppingCartToRowset(&amp;amp;RS_Employees); &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I would expect this kind of terminology from an HR person (employees being just commodities that can be thrown in a shopping cart), but what developer with any self respect would write up code like this?  They, after all, are just an employee.&lt;br /&gt;&lt;br /&gt;Besides the method naming, the code had a lot of problems and didn't work as documented.  That I expected, but would have been easier to take if the naming wasn't so offensive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-8253857608026496579?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/8253857608026496579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=8253857608026496579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8253857608026496579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8253857608026496579'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/05/recently-while-working-in-our-hr-system.html' title=''/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-4403205442878925945</id><published>2007-03-20T15:30:00.001-07:00</published><updated>2007-03-20T15:30:45.620-07:00</updated><title type='text'>We are still here</title><content type='html'>We have been very busy with a couple of projects. Will post more soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-4403205442878925945?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/4403205442878925945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=4403205442878925945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4403205442878925945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4403205442878925945'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/03/we-are-still-here.html' title='We are still here'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-683878058202740711</id><published>2007-01-05T13:55:00.000-08:00</published><updated>2007-01-05T16:07:39.775-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thunderbird outlook'/><title type='text'>Thunderbird 1.5.09 vs Outlook 2003: Can O' Spam</title><content type='html'>I find myself constantly battling between my desire to use standardized business software (ie Microsoft products) and the desire to have software make me more productive and make my life easier. I gave Outlook another shot today (I was feeling guilty about using Thunderbird) and quickly kicked myself. We have a listserv at work that spammers seem to really enjoy flooding with spam. Unfortunately, it is a listserv which we need and frequently use. Thunderbird utilizes a Bayesian filter, so it learns what a spam email looks like based on what you have told it is spam. In contrast, Outlook allows you to whitelist/blacklist senders, so any known spammers get filtered. The downside to Outlook (and upside to Thunderbird) is that when you are getting spam and good email from a sender, you can't just filter the messages you don't want. It's all or nothing. Thunderbird doesn't care who it is from, only what the content of the message is. With all of the communication that we get through email and with the regularity that listservs and email accounts get compromised by spammers, Thunderbird's Bayesian filter wins hand down.&lt;br /&gt;&lt;br /&gt;I should be getting a copy of Office 2007 in the near future and will give Outlook 2007 a shot to see if any improvements on the spam filtering have been made. I will blog another posting with my results.&lt;br /&gt;&lt;br /&gt;Please don't interpret this as being a Microsoft hater. I think Outlook is an very capable email client, in certain situations, preferable to Thunderbird regardless of the spam issue. If you use Microsoft Exchange or POP3 email, Outlook is the best, hands down. If you use IMAP for your email, Thunderbird has the edge. Outlook 2003's handling of the IMAP protocol is "clunky". I use IMAP for my work email, so there is little incentive to stay using Outlook 2003, for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-683878058202740711?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/683878058202740711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=683878058202740711' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/683878058202740711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/683878058202740711'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/01/thunderbird-1509-vs-outlook-2003-can-o.html' title='Thunderbird 1.5.09 vs Outlook 2003: Can O&apos; Spam'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-6875812528342240394</id><published>2007-01-04T11:12:00.000-08:00</published><updated>2007-01-04T11:23:54.646-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ide'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Cross Platform Open Source (Javascript, HTML, CSS) IDE</title><content type='html'>Ran across a very nice plugin for &lt;a href="http://www.eclipse.org"&gt;Eclipse &lt;/a&gt;over the holiday break named &lt;a href="http://www.aptana.com"&gt;Aptana&lt;/a&gt;.  I already had the latest version of Eclipse installed so I just installed it as a plugin.  Did a quick test using the &lt;a href="http://developer.yahoo.com/yui/"&gt;Yahoo! User Interface (YUI) library&lt;/a&gt; to do a quick and dirty AJAX page that automatically updated weather info (from &lt;a href="http://developer.yahoo.com/weather/"&gt;Yahoo Weather rss feeds&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;I had been searching for a good open source tool to aid in developing xhtml/css/javascript pages and was mainly interested in command completion/suggestion.  This one was the best of all I checked out.  The code assist features worked great and I found the help features to be great, especially when dealing with css/javascript.  I didn't try out the javascript debugger.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.aptana.com"&gt;http://www.aptana.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-6875812528342240394?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/6875812528342240394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=6875812528342240394' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6875812528342240394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/6875812528342240394'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/01/cross-platform-open-source-javascript.html' title='Cross Platform Open Source (Javascript, HTML, CSS) IDE'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-4865518232997342403</id><published>2007-01-04T09:04:00.000-08:00</published><updated>2009-06-09T16:08:03.666-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dba'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Killing an oracle session to remove a lock</title><content type='html'>I always have to search around for the right commands in order to remove table locks in Oracle.  Thought I'd post and hopefully will remember I can look her for it in the future.  Below seems to work at least in 8/9i.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Identifying the locks:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt;SELECT  l.inst_id,&lt;br /&gt;SUBSTR(L.ORACLE_USERNAME,1,8) ORA_USER, &lt;br /&gt;SUBSTR(L.SESSION_ID,1,3) SID,&lt;br /&gt;S.serial#,&lt;br /&gt;SUBSTR(O.OWNER||'.'||O.OBJECT_NAME,1,40) OBJECT, P.SPID OS_PID,&lt;br /&gt;DECODE(L.LOCKED_MODE,   0,'NONE',&lt;br /&gt;1,'NULL',&lt;br /&gt;2,'ROW SHARE',&lt;br /&gt;3,'ROW EXCLUSIVE',&lt;br /&gt;4,'SHARE',&lt;br /&gt;5,'SHARE ROW EXCLUSIVE',&lt;br /&gt;6,'EXCLUSIVE',&lt;br /&gt;NULL) LOCK_MODE&lt;br /&gt;FROM    sys.GV_$LOCKED_OBJECT L&lt;br /&gt;, DBA_OBJECTS O&lt;br /&gt;, sys.GV_$SESSION S&lt;br /&gt;, sys.GV_$PROCESS P&lt;br /&gt;WHERE     L.OBJECT_ID = O.OBJECT_ID&lt;br /&gt;  and     l.inst_id = s.inst_id&lt;br /&gt;  AND     L.SESSION_ID = S.SID&lt;br /&gt;  and     s.inst_id = p.inst_id&lt;br /&gt;  AND     S.PADDR = P.ADDR(+)&lt;br /&gt;order by l.inst_id&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Deep Six the session:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The SID and the SERIAL# fields can then be used to issue the kill command:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt;ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Using this combo I almost never have to resort to a "kill -9 OS_PID" on the database server itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-4865518232997342403?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/4865518232997342403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=4865518232997342403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4865518232997342403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4865518232997342403'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2007/01/killing-oracle-session-to-remove-lock.html' title='Killing an oracle session to remove a lock'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-7901744562638690026</id><published>2006-12-28T22:51:00.000-08:00</published><updated>2006-12-28T22:58:32.661-08:00</updated><title type='text'>Reviewing the W3 basics</title><content type='html'>Some nice basic tutorials at &lt;a href="http://www.w3schools.com/"&gt;http://www.w3schools.com/&lt;/a&gt;.  Each tutorial only takes 10-15 minutes and they provide a quiz at the end.  I found the XSL-FO and XLink/XPointer information to be a good introduction.  Only bad thing about the site is that it seems to favor .NET (in ads and some tutorial paths) over Java.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-7901744562638690026?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/7901744562638690026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=7901744562638690026' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/7901744562638690026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/7901744562638690026'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2006/12/reviewing-w3-basics.html' title='Reviewing the W3 basics'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-3119391692636266598</id><published>2006-12-25T11:37:00.000-08:00</published><updated>2006-12-25T12:13:11.039-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='portal'/><title type='text'>Liferay vs Stringbeans open source portals</title><content type='html'>Took a quick peek today at open source enterprise portals &lt;a href="http://www.liferay.com/"&gt;Liferay 4.2&lt;/a&gt; and &lt;a href="http://www.nabh.com/projects/sbportal"&gt;Stringbeans 3.2&lt;/a&gt;.  Also wanted to try out &lt;a href="http://www.uportal.org/"&gt;uPortal 2.5.3&lt;/a&gt; quick start but had no success (page not found).  Below are my 5 minute reactions (5 minutes to download the software bundled with tomcat, start it up, log on and poke around).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;Liferay 4.2 impressions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Very polished looking with nice animations when loading portlets (showing off the multi-threaded rendering).  Very disappointed with user management features and lack of portlet configuration support in the admin portlets.  When assigning roles to portlets or users it was just free-form typing (i.e., you are given an edit box and asked to type in each role name on a new line).  Web services were also not readily visible while logged in as an administrator.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153); font-weight: bold;"&gt;Stringbeans 3.2 impressions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;While less polished looking (Liferay seems to have better graphic artists on the project) I was impressed with the admin portlets.  You can configure new portlets online without editing the various xml files that are normally involved in plumbing a portlet.  It also had nice stats portlets that displayed portlet and web service usage.  Besides the ability to configure portlets online it also had a portlet dedicated to web services, though I didn't test any out at least you can tell they put some thought into it.  It was going good until I tried to add multiple roles to a user.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;Summary...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I realize that in an enterprise setting there is probably (has to be) some way to hook up these portals to a directory, but I found their lack of built-in user administration features a show stopper.  I also did a quick 5 minute review of the source code for each and in my uneducated opinion found the Stringbeans source to be easier to read and seemed to make more logical sense in terms of classes/interfaces used.  For now, if I wanted to setup a quick portlet test or test WSRP production/consumption I think I'd go with Stringbeans.&lt;br /&gt;&lt;br /&gt;I also wanted to try out the open source Sun Java portal server, but thought otherwise when the system requirements listed 1.5Gb as the required RAM.  Maybe when I have time for a 5-day instead of 5-minute test...(why can't BEA, Sun, Oracle and IBM put quick start packages together).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-3119391692636266598?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/3119391692636266598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=3119391692636266598' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3119391692636266598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3119391692636266598'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2006/12/liferay-vs-stringbeans-open-source.html' title='Liferay vs Stringbeans open source portals'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-3071177351494813506</id><published>2006-12-24T12:31:00.000-08:00</published><updated>2006-12-24T20:55:36.383-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='portlets'/><category scheme='http://www.blogger.com/atom/ns#' term='portal'/><title type='text'>JSR-168 portlet and PeopleTools 8.46</title><content type='html'>Today I tried installing an open source JSR-168 portlet in our PeopleTools 8.46 development environment just to get a feel for how much work it takes to integrate a standards based portlet with PeopleSoft.  I used the NotepadPortlet from the Java.net repo of free portlets:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://portlet-repository.dev.java.net/public/Portlets.html"&gt;https://portlet-repository.dev.java.net/public/Portlets.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First hurdle was that it required a CVS client so I had to download &lt;a href="http://www.wincvs.org/"&gt;WinCVS &lt;/a&gt;which is a nice GUI frontend for CVSNT (but SVN still beats CVS hands down).  Second hurdle was that I wasn't able to do "maven war" on the project to build because it failed to download some jar dependencies.  I personally don't like &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; (much prefer plain old &lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt;) so I just fired up &lt;a href="http://www.oracle.com/technology/products/jdev/index.html"&gt;JDeveloper &lt;/a&gt;to build the war file.  Both issues of course were due strictly to the project I was trying to use and had nothing to do with PeopleSoft, but does illustrate that there are still many different ways in which software is distributed and each can present its own challenges even before you start the real work.&lt;br /&gt;&lt;br /&gt;The installation in our PIA environment running WebLogic 8.1 was pretty straightforward following the PeopleBooks steps and the delivered helloportletapp example.  There are several xml files that need to be created/edited, so it's pretty old-school compared to most PeopleTools setup.&lt;br /&gt;&lt;br /&gt;For now, I think my feeling is that writing JSR-168 portlets is probably best when developing a general utility application that you may at some point want to use in another portal project.  The drawbacks I see currently to using portlets (besides the required knowledge of Java) are with database access and security.  I'm still pretty fuzzy on the persistence mechanism that portlets use and how best to integrate security into portlet applications.  It's kind of cool to be able to write a portlet and run it on any compliant portal container, but for now PeopleTools still offers the best RAD environment for developing applications.&lt;br /&gt;&lt;br /&gt;Now to produce my newly added portlet using WSRP...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-3071177351494813506?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/3071177351494813506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=3071177351494813506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3071177351494813506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/3071177351494813506'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2006/12/jsr-168-portlet-and-peopletools-846.html' title='JSR-168 portlet and PeopleTools 8.46'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-7013793892885578145</id><published>2006-12-21T10:23:00.000-08:00</published><updated>2006-12-21T10:36:31.087-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='xlst'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>Reporting with REST webservices</title><content type='html'>The Collegenet  R25 application our campus runs now provides REST style webservices that look promising for developing reports.  XML.com has a brief but decent article on &lt;a href="http://www.xml.com/pub/a/2005/02/16/rest-report.html"&gt;REST Reporting&lt;/a&gt; that I think provides a decent overview.&lt;br /&gt;&lt;br /&gt;I like the idea of using standard XML along with XSLT in order to produce web-based reports and is definitely an improvement over non-standard reporting tools like Crystal Reports.  The best is that XSLT can be applied in other areas so learning it will be applicable in a wider range of applications (as opposed to being a Crystal Reports guru).  Found a decent &lt;a href="http://www.w3schools.com/xsl/default.asp"&gt;XSLT tutorial&lt;/a&gt; article also at XML.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-7013793892885578145?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/7013793892885578145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=7013793892885578145' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/7013793892885578145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/7013793892885578145'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2006/12/reporting-with-rest-webservices.html' title='Reporting with REST webservices'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-8196230205492605498</id><published>2006-12-20T17:06:00.000-08:00</published><updated>2006-12-20T17:24:50.015-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Program to the extreme!</title><content type='html'>One philosophy that I'm beginning to really appreciate from Extreme Programming is to not try to code features not requested.  You still have to code what's required and have to code in a way that will be flexible enough to handle future requirements, but don't try to anticipate and code features that aren't asked for.  It's still sometimes very tempting to throw in a cool feature not requested but that you know would be fun to develop.  But I sometimes find that one cool feature eats up the bulk of development time and takes away from time that could be spent testing the features requested.&lt;br /&gt;&lt;br /&gt;That's where test-driven development comes it, you should code only so you can test.  If you don't have good mock data to test with in an environment you will never be able to validate how well your coding is going.  So I've been trying to practice coding just enough so I have something to test and repeating that process until the development is complete.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-8196230205492605498?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/8196230205492605498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=8196230205492605498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8196230205492605498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/8196230205492605498'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2006/12/program-to-extreme.html' title='Program to the extreme!'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-2589003088465182707</id><published>2006-12-20T09:34:00.000-08:00</published><updated>2006-12-20T09:36:19.838-08:00</updated><title type='text'>Oracle SQL Developer 1.1 out of beta</title><content type='html'>This happened last Friday, but we didn't have the blog up yet, so.....&lt;br /&gt;&lt;br /&gt;Get the software &lt;a href="http://www.oracle.com/technology/software/products/sql/index.html"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you haven't heard of this software and use Oracle products, think of it like Toad, but free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-2589003088465182707?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/2589003088465182707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=2589003088465182707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/2589003088465182707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/2589003088465182707'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2006/12/oracle-sql-developer-11-out-of-beta.html' title='Oracle SQL Developer 1.1 out of beta'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-4120584187954983104</id><published>2006-12-20T09:13:00.000-08:00</published><updated>2006-12-20T09:23:58.021-08:00</updated><title type='text'>Making Firefox more like Opera (what!?)</title><content type='html'>After playing around a little with the latest version of Opera (it was a weak moment) I decided I had to have an extension that would do the tab previews. After fumbling around awhile, I came upon Tab Preview (http://ted.mielczarek.org/code/mozilla/tabpreview/). This extension will display a quick thumbnail of what is on a tab when you hover your cursor over it. While searching for that extension, I also came upon Colorful Tabs (https://addons.mozilla.org/firefox/1368/), another cool extension that breaks up the monotony of the Firefox color scheme. I know, I know, why not theme the browser? I have yet to find one I like and that is consistent enough across the tabs and toolbars to continue to use. The one that I do like a little is macfoxIIgraphite, but it is a Mac theme and I will get tarred and feathered by my fellow contributors for using that theme.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-4120584187954983104?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/4120584187954983104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=4120584187954983104' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4120584187954983104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4120584187954983104'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2006/12/making-firefox-more-like-opera-what.html' title='Making Firefox more like Opera (what!?)'/><author><name>Ethan Jones</name><uri>http://www.blogger.com/profile/02896133996410409433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4848054445359851090.post-4693654783652402885</id><published>2006-12-19T14:46:00.000-08:00</published><updated>2006-12-19T15:25:02.735-08:00</updated><title type='text'>Document Conversion: Open Source saves the day</title><content type='html'>I am currently working on a project that requires converting documents in various formats (but mostly MS Word) to &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;PDF&lt;/span&gt;.  I reviewed several commercial offerings, but most were several thousand dollars.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.openoffice.org"&gt;Open Office 2.1&lt;/a&gt; and the &lt;a href="http://sourceforge.net/projects/joott"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;JOOConverter&lt;/span&gt; &lt;/a&gt;open source projects saved the day.  While I was hoping to accomplish the conversion completely in Java without having to run an extra service somewhere, the cost savings were well worth it.  The &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;JOOConverter&lt;/span&gt; project walks you through the steps of setting up &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;OpenOffice&lt;/span&gt; to run as a service and provide Java classes that allow you to interact with the service either locally or via TCP.  And best of all it delivered a quasi-&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;webservice&lt;/span&gt; that would run on any &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;servlet&lt;/span&gt; container (such as tomcat) as well as a &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;webapp&lt;/span&gt; that can be deployed to allow users to upload a file and convert it to various formats.&lt;br /&gt;&lt;br /&gt;More on my document conversion project later...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4848054445359851090-4693654783652402885?l=campus-codemonkeys.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://campus-codemonkeys.blogspot.com/feeds/4693654783652402885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4848054445359851090&amp;postID=4693654783652402885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4693654783652402885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4848054445359851090/posts/default/4693654783652402885'/><link rel='alternate' type='text/html' href='http://campus-codemonkeys.blogspot.com/2006/12/document-conversion-open-source-saves.html' title='Document Conversion: Open Source saves the day'/><author><name>John Wagenleitner</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
