<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Extra Hot</title>
	<atom:link href="http://xtrahot.chili-mango.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://xtrahot.chili-mango.net</link>
	<description>Extra spicy goodness</description>
	<lastBuildDate>Wed, 07 Nov 2012 13:22:22 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Installing Android Development Tools in Ubuntu 12.04 LTS 64-bit</title>
		<link>http://xtrahot.chili-mango.net/2012/09/installing-android-development-tools-in-ubuntu-1204-lts-64-bit/</link>
		<comments>http://xtrahot.chili-mango.net/2012/09/installing-android-development-tools-in-ubuntu-1204-lts-64-bit/#comments</comments>
		<pubDate>Mon, 17 Sep 2012 16:30:18 +0000</pubDate>
		<dc:creator>ChiliJoe</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://xtrahot.chili-mango.net/2012/09/installing-android-development-tools-in-ubuntu-1204-lts-64-bit/</guid>
		<description><![CDATA[First, install Eclipse with JDT sudo apt-get install eclipse-jdt Install ia32-libs as this is needed by the Android SDK when running in 64-bit Linux sudo apt-get install ia32-libs Download the Android SDK from http://developer.android.com/sdk/index.html Extract the SDK to your home &#8230; <a href="http://xtrahot.chili-mango.net/2012/09/installing-android-development-tools-in-ubuntu-1204-lts-64-bit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<ol>
<li>First, install Eclipse with JDT<br />
<code>sudo apt-get install eclipse-jdt</code></li>
<li>Install ia32-libs as this is needed by the Android SDK when running in 64-bit Linux<br />
<code>sudo apt-get install ia32-libs</code></li>
<li>Download the Android SDK from <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a>
<ul>
<li>Extract the SDK to your home directory (if you&#8217;re not sharing it with other users, otherwise, extract in a shared folder like /opt and open up the permissions)</li>
<li>Open a terminal and navigate to the tools/ directory in the Android SDK, then execute <code>./android sdk</code></li>
<li><a href="http://developer.android.com/sdk/installing/adding-packages.html">Download the platforms and packages</a> (this could take a while)</li>
</ul>
</li>
<li>Install the Eclipse ADT Plugin by following this <a href="http://developer.android.com/sdk/installing/installing-adt.html">instructions</a></li>
<li>To test, <a href="http://developer.android.com/training/basics/firstapp/creating-project.html">create a project</a> and <a href="http://developer.android.com/training/basics/firstapp/running-app.html">launch the default app</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://xtrahot.chili-mango.net/2012/09/installing-android-development-tools-in-ubuntu-1204-lts-64-bit/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Photosmart c4780 AIO in Ubuntu</title>
		<link>http://xtrahot.chili-mango.net/2012/09/photosmart-c4780-aio-in-ubuntu/</link>
		<comments>http://xtrahot.chili-mango.net/2012/09/photosmart-c4780-aio-in-ubuntu/#comments</comments>
		<pubDate>Sun, 16 Sep 2012 02:29:20 +0000</pubDate>
		<dc:creator>ChiliJoe</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://xtrahot.chili-mango.net/2012/09/photosmart-c4780-aio-in-ubuntu/</guid>
		<description><![CDATA[Although HPLIP is installed by default in Ubuntu, it wasn&#8217;t able to connect to my wireless printer immediately. To set up Photosmart c4780 All-in-One wireless printer in Ubuntu: Go to the following and follow instructions to install the HPLIP software: &#8230; <a href="http://xtrahot.chili-mango.net/2012/09/photosmart-c4780-aio-in-ubuntu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Although HPLIP is installed by default in Ubuntu, it wasn&#8217;t able to connect to my wireless printer immediately.</p>
<p>To set up Photosmart c4780 All-in-One wireless printer in Ubuntu:</p>
<ol>
<li>Go to the following and follow instructions to install the HPLIP software: <a href="http://www.hplip.net/">http://www.hplip.net/</a></li>
<li>When prompted, reinstall HPLIP.</li>
<li>Restart Ubuntu. I find that I can&#8217;t connect to the printer immediately after the installation.</li>
<li>Execute the following:<br />
<code>sudo hp-setup</code></p>
<p>Follow the steps in the wizard.
</li>
</ol>
<p>HP Device Manager will also added to the system tray.</p>
]]></content:encoded>
			<wfw:commentRss>http://xtrahot.chili-mango.net/2012/09/photosmart-c4780-aio-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Look at the Standalone Rowset&#8217;s Fill Method</title>
		<link>http://xtrahot.chili-mango.net/2010/04/look-at-rowset-fill/</link>
		<comments>http://xtrahot.chili-mango.net/2010/04/look-at-rowset-fill/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 17:20:24 +0000</pubDate>
		<dc:creator>ChiliJoe</dc:creator>
				<category><![CDATA[PeopleCode]]></category>

		<guid isPermaLink="false">http://xtrahot.chili-mango.net/2010/04/look-at-rowset-fill/</guid>
		<description><![CDATA[A standalone rowset can be populated with rows directly from the database by using the Fill method. PeopleBooks describes the syntax of the Fill method as follows: Fill([wherestring [, bindvalue] . . .]); Data is read from the database table &#8230; <a href="http://xtrahot.chili-mango.net/2010/04/look-at-rowset-fill/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>A standalone rowset can be populated with rows directly from the database by using the Fill method. PeopleBooks describes the syntax of the Fill method as follows:</p>
<pre>
Fill([<i>wherestring [, bindvalue] . . .]</i>);
</pre>
<p>Data is read from the database table corresponding to the primary database record of the rowset. It&#8217;s also stated in PeopleBooks that:</p>
<blockquote><p>The Fill method uses a correlation ID of FILL for the table it reads. You must use the correlation ID if you want to refer to the rowset table name as part of the wherestring. You receive a runtime error if you use the table name as a column prefix instead of the correlation ID.</p></blockquote>
<p>It&#8217;s quite common to see wherestrings in the Fill method to reference the FILL correlation ID inside subqueries to limit the resultset. For example, something like the following:</p>
<pre><code class="PeopleCode">
Local Rowset &#038;rs = CreateRowset(Record.RF_INST_PROD);

&#038;rs.Fill("WHERE RBTACCTID = :1 AND EXISTS (SELECT 1 FROM PS_RF_INST_PROD_ST WHERE SETID = FILL.SETID AND INST_PROD_ID = FILL.INST_PROD_ID AND INST_PROD_STATUS = 'INS')", &#038;acctid);
</code></pre>
<p>or</p>
<pre><code class="PeopleCode">
&#038;rs.Fill("WHERE RBTACCTID = :1 AND INST_PROD_ID IN (SELECT INST_PROD_ID FROM PS_RF_INST_PROD_ST WHERE SETID = FILL.SETID AND INST_PROD_ID = FILL.INST_PROD_ID AND INST_PROD_STATUS = 'INS')", &#038;acctid);
</code></pre>
<p>However, if you observe it closely (ignoring related-language processing), the Fill method would basically just generate a SQL statement in the following manner:</p>
<pre>
SELECT {list of fields from primary record} FROM %TABLE({primary record}) FILL {wherestring}
</pre>
<p>and push the resultset to the target rowset.</p>
<p>With this in mind, it&#8217;s possible to pull data from a join query instead. For example, the previous Fill call can be rewritten as:</p>
<pre><code class="PeopleCode">
&#038;rs.Fill("INNER JOIN PS_RF_INST_PROD_ST ST ON ST.SETID = FILL.SETID AND ST.INST_PROD_ID = FILL.INST_PROD_ID WHERE FILL.RBTACCTID = :1 AND ST.INST_PROD_STATUS = 'INS')", &#038;acctid);
</code></pre>
<p>Interestingly, it also means you could fill a rowset with data not coming from the primary record by using a UNION. For example (notice the fields doesn&#8217;t even have to match the primary record):</p>
<pre><code class="PeopleCode">
Local Rowset &#038;rs = CreateRowset(Record.PSOPRCLS); /* Fields: OPRID, OPRCLASS */

&#038;rs.Fill("WHERE 1=0 UNION SELECT OPRID, ROWSECCLASS FROM PS_ABS_DEPT2_VW WHERE EMPLID = :1", &#038;emplid);
</code></pre>
<p>This latter example is more for academic discussion, as I can&#8217;t vouch for the database efficiency in using this technique. Also, when the fields of the primary record is updated, there is a need to manually adjust the code to match the primary record definition. However, it might be handy for quick prototypes and filling message rowsets with data directly without the need for new SQL Views and CopyTo operation.</p>
<p><b>Postscript:</b> A quick googling shows that this concept has already been presented by Todd Kummer <a href="http://rockridgesolutions.com/rockridge/entry/rowset_fill_method_and_the" title="Rowset Fill Method and the JOIN Keyword">here</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://xtrahot.chili-mango.net/2010/04/look-at-rowset-fill/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using MsgGetText to Concatenate Strings</title>
		<link>http://xtrahot.chili-mango.net/2007/08/using-msggettext-to-concatenate-strings/</link>
		<comments>http://xtrahot.chili-mango.net/2007/08/using-msggettext-to-concatenate-strings/#comments</comments>
		<pubDate>Mon, 20 Aug 2007 16:04:23 +0000</pubDate>
		<dc:creator>ChiliJoe</dc:creator>
				<category><![CDATA[PeopleCode]]></category>
		<category><![CDATA[PeopleSoft]]></category>
		<category><![CDATA[Tips & Techniques]]></category>

		<guid isPermaLink="false">http://xtrahot.chili-mango.net/2007/08/using-msggettext-to-concatenate-strings/</guid>
		<description><![CDATA[Lately, I&#8217;ve been using the MsgGetText() built-in function to concatenate adhoc strings in PeopleCode. For example, instead of the following: Local string &#038;TEXTLINE = "Value of " &#124; &#038;fld1name &#124; " is " &#124; &#038;fld1value &#124; "."; Using MsgGetText, it &#8230; <a href="http://xtrahot.chili-mango.net/2007/08/using-msggettext-to-concatenate-strings/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Lately, I&#8217;ve been using the <code>MsgGetText()</code> built-in function to concatenate adhoc strings in PeopleCode. For example, instead of the following:</p>
<pre><code class="PeopleCode">
Local string &#038;TEXTLINE = "Value of " | &#038;fld1name | " is " | &#038;fld1value | ".";
</code></pre>
<p>Using MsgGetText, it can be re-written as follows:</p>
<pre><code class="PeopleCode">
Local string &#038;TEXTLINE = MsgGetText(0, 0, "Value of %1 is %2.", &#038;fld1name, &#038;fld1value);
</code></pre>
<p>I find that the latter is easier to read and modify compared to the first, especially if there are a lot of values being concatenated.</p>
<p>What about performance? Wouldn&#8217;t the MsgGetText code needlessly query the database for message (0, 0)? Fortunately, I think not. Some tests with SQL trace turned on &mdash; and the cache freshly cleared &mdash; show that a query to the message catalog for message (0, 0) is never performed by the application server. A wonderful optimization.</p>
]]></content:encoded>
			<wfw:commentRss>http://xtrahot.chili-mango.net/2007/08/using-msggettext-to-concatenate-strings/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A Couple of Must-have PeopleCode Coding Standards</title>
		<link>http://xtrahot.chili-mango.net/2007/08/a-couple-of-must-have-peoplecode-coding-standards/</link>
		<comments>http://xtrahot.chili-mango.net/2007/08/a-couple-of-must-have-peoplecode-coding-standards/#comments</comments>
		<pubDate>Sat, 18 Aug 2007 14:59:34 +0000</pubDate>
		<dc:creator>ChiliJoe</dc:creator>
				<category><![CDATA[PeopleCode]]></category>
		<category><![CDATA[PeopleSoft]]></category>
		<category><![CDATA[Recommendation]]></category>

		<guid isPermaLink="false">http://xtrahot.chili-mango.net/2007/08/a-couple-of-must-have-peoplecode-coding-standards/</guid>
		<description><![CDATA[The following are a couple of I believe not well-known coding standards for PeopleCode that I strictly adhere to. These are something I don&#8217;t see most people or teams are adapting, but something I really recommend looking into for the &#8230; <a href="http://xtrahot.chili-mango.net/2007/08/a-couple-of-must-have-peoplecode-coding-standards/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The following are a couple of I believe not well-known coding standards for PeopleCode that I strictly adhere to. These are something I don&#8217;t see most people or teams are adapting, but something I really recommend looking into for the benefits that they offer.<br />
<span id="more-144"></span></p>
<ol>
<li><a href="#200708standard1">Declaring Local Variables</a></li>
<li><a href="#200708standard2">Usage of the %Table() meta-SQL When Writing SQL Statements</a></li>
</ol>
<p><a  name="200708standard1"><br />
<h3>I. Declaring Local Variables</h3>
<p></a></p>
<p class="gapper">&nbsp;</p>
<h4>Background</h4>
<p>Except for Application Package PeopleCode, the PeopleCode compiler/editor does not require that local variables used by programs are declared. Undeclared variables are automatically allocated the type of Any.</p>
<h4>Coding Standard</h4>
<p>When writing PeopleCode, declare ALL local variables that will be used.</p>
<h4>Benefits</h4>
<ol>
<li>Declaring the specific type of variable needed improves performance, in contrast with the interpreter always assuming a type of Any. Even if the variable to be declared requires being an Any type, declare it nonetheless (see 4th item below).</li>
<li>Compile-time validation.
<ul>
<li>When variables are declared, the PeopleCode editor can check the compatibility of variables used in an operation, or passed as function arguments.</li>
<li>For variables pointing to objects, the names of methods and properties can be validated at save time.</li>
</ul>
</li>
<li>Convenience. For built-in buffer classes (Rowset, Row, and Record), shorthand notation is only allowed for declared variables.</li>
<li>For programming languages that allow dynamic allocation of variables, it is a common programming error to misspell variable names. However, on the PeopleCode editor, when all variables are consciously declared, it is easy to check for misspelled variable names (see the following illustration). Thus, with this standard in place, this type of coding error would be eliminated.</li>
</ol>
<p class="gapper">&nbsp;</p>
<h4>Illustration</h4>
<p>Take a moment to look at the following PeopleCode example:<br />
<img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/08/pcode_example.gif' alt='PeopleCode Example' /></p>
<p>This code has 2 misspelled variables. How long did it take you to find them?</p>
<p>The code could be modified to enforce the rule that all variables are consciously declared; resulting in the following (changes are highlighted):<br />
<img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/08/pcode_example_revised.gif' alt='Revised PeopleCode Example' /></p>
<p>Now, when this PeopleCode is saved, or when the Validate Syntax action (<img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/08/pcode_validate_btn.gif' alt='Validate Button' />) is invoked. The following messages would be displayed in the Output window:<br />
<img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/08/pcode_example_errors.gif' alt='PeopleCode Validation Warnings' /></p>
<p>Double-clicking these messages would bring you to the offending line in the code.</p>
<p><strong>NOTE:</strong> As shown in the example above, it is NOT necessary to always declare the variable at the top of the program. Declaring them on the first time they are used is sufficient to achieve the said benefits.</p>
<p><a name="200708standard2"><br />
<h3>II. Usage of the %Table() meta-SQL When Writing SQL Statements</h3>
<p></a></p>
<p class="gapper">&nbsp;</p>
<h4>Background</h4>
<p>When writing SQLExec statements, the common practice is to hard-code table/view names. For example:</p>
<pre><code class="PeopleCode">
SQLExec("Select FIELD1, FIELD2 From PS_RECORD_TBL Where CRITER1 = :1 AND CRITER2 > :2", &#038;IN1, &#038;IN2, &#038;OUT1, &#038;OUT2);
</code></pre>
<p>A problem with the above code is that information in the PeopleCode string literals cannot be classified by the compiler and saved into the PeopleTools reference tables.</p>
<h4>Coding Standard</h4>
<p>Use the meta-SQL <code>%Table()</code> in SQL statements to refer to SQL tables or views.</p>
<p>With a little effort, the above code can be transformed into the following (changes are highlighted):</p>
<pre><code class="PeopleCode">
SQLExec("Select FIELD1, FIELD2 From [b]%Table(:1)[/b] Where CRITER1 = [b]:2[/b] AND CRITER2 > [b]:3[/b]", [b]Record.RECORD_TBL[/b], &#038;IN1, &#038;IN2, &#038;OUT1, &#038;OUT2);
</code></pre>
<h4>Benefits</h4>
<p>The consequence of this change is that <em>Record.RECORD_TBL</em> is saved as a reference in the appropriate PeopleTools reference table (PSPCMNAME). This brings the following maintenance advantages:</p>
<ol>
<li>A <em>Find Definition Reference</em> for RECORD_TBL record will include the above SQLExec line in the results.</li>
<li>Renaming RECORD_TBL will automatically propagate to the PeopleCode references (App Designer automation).  No coding change is required.</li>
<li>For more complex SQL, like ones that need effective-dated logic, you can reference the record name only once. For example, if RECORD_TBL is effective-dated, you could write the following:
<pre><code class="PeopleCode">
SQLExec("Select FIELD1, FIELD2 From %Table(:1) A Where CRITER1 = :2 AND CRITER2 > :3 [b]And EFFDT = (SELECT MAX(EFFDT) FROM %Table(:1) WHERE KEY1 = A.KEY1 AND EFFDT <= %CurrentDateIn)[/b]", Record.RECORD_TBL, &#038;IN1, &#038;IN2, &#038;OUT1, &#038;OUT2);
</code></pre>
</li>
<li>At a glance, the number of tables/views being referenced by the SQLExec can be easily identified.</li>
</ol>
<p class="gapper">&nbsp;</p>
<p><strong>NOTE:</strong> Unfortunately, currently the criteria parameter of the <code>Select()</code> method of the rowset class does not properly handle the <code>%Table()</code> meta-SQL, therefore this is one case where you cannot use this standard. Although fortunately, the need to reference a table in the <code>Select()</code> criteria seldom happens.</p>
]]></content:encoded>
			<wfw:commentRss>http://xtrahot.chili-mango.net/2007/08/a-couple-of-must-have-peoplecode-coding-standards/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Set Processing 101</title>
		<link>http://xtrahot.chili-mango.net/2007/08/set-processing-101/</link>
		<comments>http://xtrahot.chili-mango.net/2007/08/set-processing-101/#comments</comments>
		<pubDate>Sat, 18 Aug 2007 09:56:44 +0000</pubDate>
		<dc:creator>ChiliJoe</dc:creator>
				<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[PeopleSoft]]></category>

		<guid isPermaLink="false">http://xtrahot.chili-mango.net/2007/08/set-processing-101/</guid>
		<description><![CDATA[When I was reading the What&#8217;s New with Batch Processing in PeopleSoft Enterprise Oracle OpenWorld presentation some time ago, the following slide caught my attention: What are the Problems with AppEngine These programs can be complicated â€“ and for a &#8230; <a href="http://xtrahot.chili-mango.net/2007/08/set-processing-101/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>When I was reading the <a title="Oracle OpenWorld Content Catalog" href="http://www28.cplan.com/cc139/catalog.jsp?ilc=139-1&#038;ilg=english&#038;isort_sessions=&#038;isort_demos=&#038;isort_exhibitors=&#038;is=yes&#038;ip=%3C%2Fipresentations%3E&#038;search_sessions=yes&#038;icriteria5=S283329">What&#8217;s New with Batch Processing in PeopleSoft Enterprise</a> Oracle OpenWorld presentation some time ago, the following slide caught my attention:</p>
<blockquote><p><strong>What are the Problems with AppEngine</strong></p>
<ul>
<li>These programs can be complicated â€“ and for a programmer theyâ€™re different</li>
<li>Same logic can be used Batch and Online â€“ Really?
<ul>
<li>Different transactional model</li>
<li>Temp table behavior is very different</li>
<li>No restartability</li>
</ul>
<li>Easy to write a poor performing App Engine Program
<ul>
<li>Since the introduction of PeopleCode, <u>poor performing programs are the norm</u></li>
</ul>
</blockquote>
<p>&nbsp;</p>
<p>Admittedly, I don&#8217;t have a lot of experience writing batch programs on Application Engine. But I believe the primary reason it is so easy to write poor-performing AE programs is that AE batch programs are better suited to be programmed using set processing. Set processing requires a different mind set to what procedural programmers are used to. I am new to it as well, so I find that <a title="Performance - SQR vs App Engine - use Set Processsing" href="http://peoplesoft.ittoolbox.com/groups/technical-functional/peopletools-l/performance-sqr-vs-app-engine-use-set-processsing-1492775">this discussion</a> in ITToolbox, and <a title="Set Processing - How to do Seq No and Running totals" href="http://peoplesoft.ittoolbox.com/groups/technical-functional/peopletools-l/set-processing-how-to-do-seq-no-and-running-totals-1508958">this followup</a> provides valuable insights on how to perform set processing. Steve&#8217;s technique of what he calls <em>partial cartesian joins</em> is quite useful as well, especially for those not running an Oracle database.</p>
]]></content:encoded>
			<wfw:commentRss>http://xtrahot.chili-mango.net/2007/08/set-processing-101/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prettify Those Code Listings</title>
		<link>http://xtrahot.chili-mango.net/2007/07/prettify-those-code-listings/</link>
		<comments>http://xtrahot.chili-mango.net/2007/07/prettify-those-code-listings/#comments</comments>
		<pubDate>Sun, 29 Jul 2007 14:16:09 +0000</pubDate>
		<dc:creator>ChiliJoe</dc:creator>
				<category><![CDATA[PeopleSoft]]></category>
		<category><![CDATA[Tips & Techniques]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://xtrahot.chili-mango.net/2007/07/prettify-those-code-listings/</guid>
		<description><![CDATA[I often find it neat and helpful to paste syntax-highlighted code listings to my documents and email communications. In addition to the aesthetics, the syntax highlighting allows for more readable code. Of the many powerful text editors out there, PSPad &#8230; <a href="http://xtrahot.chili-mango.net/2007/07/prettify-those-code-listings/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I often find it neat and helpful to paste syntax-highlighted code listings to my documents and email communications. In addition to the aesthetics, the syntax highlighting allows for more readable code. Of the many powerful text editors out there, PSPad provides a feature for generating syntax-highlighted rich text.<br />
<span id="more-135"></span></p>
<h3>Setup</h3>
<ol>
<li>Download and install the latest version of PSPad from <a href="http://www.pspad.com">http://www.pspad.com</a></li>
<li>Save the file PeopleCode.INI below into the Syntax folder inside PSPad install location. By default, this would be <u>C:\Program Files\PSPad editor\Syntax\</u>.</li>
<li>Launch PSPad and from the menu select <em>Settings > Highlighters Settingsâ€¦</em><br />
<a class="thickbox" href='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/setup03.png' title='Highlighter Settings menu'><img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/setup03.thumbnail.png' alt='Highlighter Settings menu' /></a></li>
<li>On the left pane, select and put a checkmark on the first <b>&lt;not assigned&gt;</b> item.<br />
<a class="thickbox" href='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/setup04.png' title='Highlighter Settings'><img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/setup04.thumbnail.png' alt='Highlighter Settings' /></a></li>
<li>Then on the <em>User Highlighters</em> list on the right pane, select <strong>PeopleCode</strong>.<br />
<a class="thickbox" class="thickbox" href='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/setup05.png' title='Highlighter Settings'><img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/setup05.thumbnail.png' alt='Highlighter Settings' /></a></li>
<li>Go to the <em>Colors</em> tab. Here the color preferences to be used for syntax highlighting is set. To match the way the PeopleCode editor does highlighting, choose green for the comment; blue for Key, Key words 2, Key words 3 and Reserved Word; and red for String.<br />
<a class="thickbox" href='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/setup06.png' title='Highlighter Settings colors'><img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/setup06.thumbnail.png' alt='Highlighter Settings colors' /></a></li>
</ol>
<h3>Usage</h3>
<ol>
<li>Create a new document,  from the menu File > New fileâ€¦ or using the following button:<br />
<a class="thickbox" href='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/usage01.png' title='New PeopleCode file'><img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/usage01.thumbnail.png' alt='New PeopleCode file' /></a></li>
<li>Paste the PeopleCode to the document:<br />
<a class="thickbox" href='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/usage02.png' title='PeopleCode Syntax Highlighted'><img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/usage02.thumbnail.png' alt='PeopleCode Syntax Highlighted' /></a></li>
<li>Select the text you want to copy. From the menu select File > Export > Export to Clipboard as RTF:<br />
<a href='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/usage03.png' title='Export to RTF'><img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/usage03.thumbnail.png' alt='Export to RTF' /></a></li>
<li>Now, you can paste to an Office document and the formatting would be preserved.</li>
</ol>
<p>&nbsp;</p>
<h3>Files</h3>
<p><a href="http://xtrahot.chili-mango.net/files/PeopleCode.INI">PeopleCode.INI</a></p>
<p>For SQR users, here&#8217;s a <a href="http://xtrahot.chili-mango.net/files/SQR.INI">SQR.INI</a> syntax file for PSPad.</p>
]]></content:encoded>
			<wfw:commentRss>http://xtrahot.chili-mango.net/2007/07/prettify-those-code-listings/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>PeopleSoft Search</title>
		<link>http://xtrahot.chili-mango.net/2007/07/peoplesoft-search/</link>
		<comments>http://xtrahot.chili-mango.net/2007/07/peoplesoft-search/#comments</comments>
		<pubDate>Sat, 14 Jul 2007 06:54:20 +0000</pubDate>
		<dc:creator>ChiliJoe</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[PeopleSoft]]></category>

		<guid isPermaLink="false">http://xtrahot.chili-mango.net/2007/07/peoplesoft-search/</guid>
		<description><![CDATA[If you&#8217;ve been browsing my blog directly, you may have already noticed the PeopleSoft Search link on the site&#8217;s header. This is simply a Google Custom search engine pointing to sites containing relevant PeopleSoft technical content. This includes mostly forums &#8230; <a href="http://xtrahot.chili-mango.net/2007/07/peoplesoft-search/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>If you&#8217;ve been browsing my blog directly, you may have already noticed the <a href="http://www.google.com/coop/cse?cx=010187701398539861071%3Awacydyklyvc">PeopleSoft Search</a> link on the site&#8217;s header. This is simply a <a href="http://www.google.com/coop/cse/?hl=en">Google Custom search engine</a> pointing to sites containing relevant PeopleSoft technical content. This includes mostly forums and blogs.</p>
<p>I find this useful when I need to search for keywords that are not specifically related to PeopleSoft. Following is an example result when searching for &#8220;excel&#8221;:<br />
<a class="thickbox" href='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/pssearch-sample.png' title='Sample Search result'><img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/pssearch-sample.thumbnail.png' alt='Sample Search result' /></a></p>
<p>I still have trouble filtering out RSS from the results, if anyone can help me with that.</p>
<p>Now, if you&#8217;re browsing my site using Firefox 2, you may also notice the following auto-discovered <strong>PeopleSoft Search</strong> item on your search bar:<br />
<img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/pssearch.png' alt='Firefox Search Engines' /></p>
<p>Following is how the auto-discovered search would like it IE7:<br />
<img src='http://xtrahot.chili-mango.net/wp-content/uploads/2007/07/pssearch-ie71.png' alt='IE7 Search Engines' /></p>
<p>This plugin is packaged using the OpenSearch standard, as described in this <a href="http://developer.mozilla.org/en/docs/Creating_OpenSearch_plugins_for_Firefox">Mozilla article</a>.</p>
<p>The plugin can also be installed by clicking the following link:</p>
<p><a href="#" onclick="installPSSearchEngine();return false;">Install PeopleSoft Search</a></p>
]]></content:encoded>
			<wfw:commentRss>http://xtrahot.chili-mango.net/2007/07/peoplesoft-search/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PeopleCode Array class&#8217; generic sort?</title>
		<link>http://xtrahot.chili-mango.net/2007/07/peoplecode-array-class-generic-sort/</link>
		<comments>http://xtrahot.chili-mango.net/2007/07/peoplecode-array-class-generic-sort/#comments</comments>
		<pubDate>Mon, 02 Jul 2007 11:38:47 +0000</pubDate>
		<dc:creator>ChiliJoe</dc:creator>
				<category><![CDATA[PeopleCode]]></category>
		<category><![CDATA[PeopleSoft]]></category>

		<guid isPermaLink="false">http://xtrahot.chili-mango.net/2007/07/peoplecode-array-class-generic-sort/</guid>
		<description><![CDATA[I&#8217;ve come across the following statement on PeopleBooks (PeopleCode API Reference > Application Classes > When Would You Use Application Classes?). This statement can be found in PeopleBooks for PeopleTools versions 8.45 to 8.49: &#8230; suppose you want to provide &#8230; <a href="http://xtrahot.chili-mango.net/2007/07/peoplecode-array-class-generic-sort/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve come across the following statement on PeopleBooks (PeopleCode API Reference > Application Classes > When Would You Use Application Classes?). This statement can be found in PeopleBooks for PeopleTools versions 8.45 to 8.49:</p>
<blockquote><p>&#8230; suppose you want to provide a more generic sort, with comparison function at the end of it. You want to use the array class Sort method, but your process has to be generic: you arenâ€™t certain if youâ€™re comparing two records or two strings. You could define a class that had as its main method a comparison, and return a -1, 0, or 1. Then write your personalized sort, extending the array class method Sort.</p></blockquote>
<p>I find this statement very vague and lacking in details, that I am doubtful about its accuracy.</p>
<p>The statement seems to somewhat describe how one would define the ordering of objects in Java&#8217;s array and collection classes by creating an implementation of <a title="API reference" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Comparator.html">java.util.Comparator</a> interface. However, according to PeopleBooks, the Sort method of the Array class does not have any optional parameters where such a comparator object may be provided.</p>
<p>I couldn&#8217;t find anything else in PeopleBooks where it describes the implementation of array sorting in the manner described in the statement above. Can anyone shed some light into this, and if possible, provide additional details? Does the PeopleCode Array class Sort method have an undocumented feature similar Java Arrays&#8217; <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html#sort(java.lang.Object[], java.util.Comparator)">sort</a> method?</p>
]]></content:encoded>
			<wfw:commentRss>http://xtrahot.chili-mango.net/2007/07/peoplecode-array-class-generic-sort/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Access to Instance Variables within the same Class</title>
		<link>http://xtrahot.chili-mango.net/2007/07/access-to-instance-variables-within-the-same-class/</link>
		<comments>http://xtrahot.chili-mango.net/2007/07/access-to-instance-variables-within-the-same-class/#comments</comments>
		<pubDate>Mon, 02 Jul 2007 10:19:23 +0000</pubDate>
		<dc:creator>ChiliJoe</dc:creator>
				<category><![CDATA[Experiments]]></category>
		<category><![CDATA[PeopleCode]]></category>
		<category><![CDATA[PeopleSoft]]></category>

		<guid isPermaLink="false">http://xtrahot.chili-mango.net/2007/07/access-to-instance-variables-within-the-same-class/</guid>
		<description><![CDATA[In PeopleSoft application classes, instance variables are analogous to private variables in most object-oriented languages. This means that instance variables are inaccessible from PeopleCode outside the class where it is declared. I used to assume that a specific object (instance &#8230; <a href="http://xtrahot.chili-mango.net/2007/07/access-to-instance-variables-within-the-same-class/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>In PeopleSoft application classes, instance variables are analogous to private variables in most object-oriented languages. This means that instance variables are inaccessible from PeopleCode outside the class where it is declared. I used to assume that a specific object (instance of a class) would only have access to its own instance variables. This appears not to be the case, as the following paragraphs in PeopleBooks (PeopleCode API Reference > Application Class > Self-Reference) states:</p>
<blockquote><p>If you declare an instance variable as private you can still access it as a private property in another instance of the same class. For example, given the following declaration:</p>
<pre>class Example
  private
     instance number &Num;
end-class;</pre>
<p>A method of Example could reference another Example instanceâ€™s &#038;Num instance variable as follows:</p>
<pre>   &#038;X = &#038;SomeOtherExample.Num;</pre>
</blockquote>
<p><span id="more-124"></span><br />
To experiment with this, I created this simple application class:</p>
<pre><code class="PeopleCode">
class Example
   method CreateNewInstance();
   method IncrementNewInstanceNum() Returns number;
   method IncrementThisInstanceNum() Returns number;
   method IncrementPassedNum(&#038;passed As Example);
   property number ThisInstanceNum get;
private
   instance Example &#038;newInstance;
   instance number &Num;
end-class;

method CreateNewInstance
   &#038;newInstance = create Example();
end-method;

method IncrementNewInstanceNum
   /+ Returns Number +/
   &#038;newInstance.Num = &#038;newInstance.Num + 1;
   Return &#038;newInstance.Num;
end-method;

method IncrementThisInstanceNum
   /+ Returns Number +/
   &#038;Num = &#038;Num + 1;
   Return &Num;
end-method;

method IncrementPassedNum
   /+ &#038;passed as CJ:Example +/
   &#038;passed.Num = &#038;passed.Num + 1;
end-method;

get ThisInstanceNum
   /+ Returns Number +/
   Return &Num;
end-get;
</code></pre>
<p>Then referenced the class in the following manner:</p>
<pre><code class="PeopleCode">
Local Example &#038;test1 = create Example();
&#038;test1.CreateNewInstance();

MessageBox(0, "", 0, 0, "IncrementNewInstanceNum() returns %1", &#038;test1.IncrementNewInstanceNum());
MessageBox(0, "", 0, 0, "ThisInstanceNum returns %1", &#038;test1.ThisInstanceNum);
MessageBox(0, "", 0, 0, "IncrementThisInstanceNum() returns %1", &#038;test1.IncrementThisInstanceNum());
MessageBox(0, "", 0, 0, "IncrementNewInstanceNum() returns %1", &#038;test1.IncrementNewInstanceNum());

Local Example &#038;test2 = create Example();
MessageBox(0, "", 0, 0, "&#038;test2.ThisInstanceNum returns %1", &#038;test2.ThisInstanceNum);
&#038;test1.IncrementPassedNum(&#038;test2);
MessageBox(0, "", 0, 0, "&#038;test2.ThisInstanceNum returns %1", &#038;test2.ThisInstanceNum);
</code></pre>
<p>This yields the following result:</p>
<pre>IncrementNewInstanceNum() returns 1
ThisInstanceNum returns 0
IncrementThisInstanceNum() returns 1
IncrementNewInstanceNum() returns 2
&#038;test2.ThisInstanceNum returns 0
&#038;test2.ThisInstanceNum returns 1</pre>
<p>This shows that indeed, an object has unrestricted access to the private instance variables of another instance of the same class. However, one thing that I am not quite sure of is why is this allowed? When is this needed? Do any other programming languages out there has the same characteristic as this?</p>
<div class="post-update">
<p><strong>Update:</strong> Further down on the same PeopleBook, on the section <em>Declaring Private Instance Variables</em>, an example scenario was presented:</p>
<blockquote><p>A private instance variable is private to the class, not just to the object instance. For example, consider a linked-list class where one instance needs to update the pointer in another instance.</p></blockquote>
</div>
]]></content:encoded>
			<wfw:commentRss>http://xtrahot.chili-mango.net/2007/07/access-to-instance-variables-within-the-same-class/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
