<?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>.zugiart &#187; geeky</title>
	<atom:link href="http://www.zugiart.com/category/geeky/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zugiart.com</link>
	<description>Software Engineering, buddhism, and everything else in between.</description>
	<lastBuildDate>Fri, 03 Sep 2010 09:59:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<script type="text/javascript">

if (typeof Meebo == 'undefined') {

Meebo=function(){(Meebo._=Meebo._||[]).push(arguments)};
(function(q){

	var args = arguments;
	if (!document.body) { return setTimeout(function(){ args.callee.apply(this, args) }, 100); }
	var d=document, b=d.body, m=b.insertBefore(d.createElement('div'), b.firstChild); s=d.createElement('script');
	m.id='meebo'; m.style.display='none'; m.innerHTML='<iframe id="meebo-iframe"></iframe>';
	s.src='http'+(q.https?'s':'')+'://'+(q.stage?'stage-':'')+'cim.meebo.com/cim/cim.php?network='+q.network;
	b.insertBefore(s, b.firstChild);

})({network:'zugiartcom_se64ra'});	}</script>	<item>
		<title>Review &#8211; Logitech Illuminated Keyboard on Ubuntu</title>
		<link>http://www.zugiart.com/2010/09/logitech-illuminated-keyboard-review/</link>
		<comments>http://www.zugiart.com/2010/09/logitech-illuminated-keyboard-review/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 09:59:32 +0000</pubDate>
		<dc:creator>zen</dc:creator>
				<category><![CDATA[geeky]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[logitech]]></category>

		<guid isPermaLink="false">http://www.zugiart.com/2010/09/logitech-illuminated-keyboard-review/</guid>
		<description><![CDATA[Yesterday, my Apple keyboard&#8217;s L key just died on me. Today I went around trying all sort of keyboards and settled on this baby: The Logitech Illuminated Keyboard What&#8217;s so good about it? DesignPersonally I prefer something that is simple and not over the top. And the design of this keyboard is very elegant. I [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, my Apple keyboard&#8217;s L key just died on me. Today I went around trying all sort of keyboards and settled on this baby: The Logitech Illuminated Keyboard</p>
<p>What&#8217;s so good about it?
<ul>
<li><b>Design</b><br />Personally I prefer something that is simple and not over the top. And<br />
the design of this keyboard is very elegant. I would go one step further<br />
 to tout that this keyboard </p>
</li>
<li><b>Form Factor</b><br />It looked great. The key size feels right, the space between the keys is also good. The arrangement of the key is arguably one of the best I&#8217;ve used so far. (I&#8217;m a programmer, believe me I&#8217;ve used heaps of keyboard before).
</li>
<li><b>Comfort<br /></b>All in all, this is the most comfortable keyboard I have used so far.
</li>
<li><b>Backlighting<br /></b>Since this is the Logitech <b>Illuminated</b> keyboard, I thought I should touch on the backlighting. Logitech have done an awesome job here &#8211; the lighting on all keys are perfect, the etching on the keys are very precise and the letters are big and legible. On this department, I have nothing to complain about.
</li>
<li><b>Durability<br /></b>I will tell you in about 5 years whether this is a worthwhile investment or not <img src='http://www.zugiart.com/main/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </li>
</ul>
<p>What&#8217;s bad about it?
<ul>
<li><b>Price!</b><br />Let&#8217;s put it this way. I used to think that Apple&#8217;s keyboard is the<br />
winner in all department compared to other keyboard you find on the<br />
market these days. It&#8217;s comfortable, it looked good, and it&#8217;s got that<br />
USB port on the side (that I never really use because it&#8217;s slow). This<br />
keyboard is a big step forward from the Apple keyboard, it is<br />
comparatively better in every respect &#8211; unfortunately it&#8217;s also way more<br />
 expensive. </li>
</ul>
<p>Does it work with Ubuntu?</p>
<p>Yes it does. I plugged it in, and<br />
it worked, period. I am still on Ubuntu 9.10 &#8211; but I imagine the support<br />
 on 10.04 would be better still. </p>
<p>Conclusion</p>
<p>You do think about<br />
whether something so simple should cost so much or not. I used to be a bit of a skeptic too but once I used this, I can see where all my money went. Whether you splurge for something you type on everyday or not is really up to you <img src='http://www.zugiart.com/main/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img style='display:none' id="post-1382-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.zugiart.com/2010/09/logitech-illuminated-keyboard-review/',title:'Review &#8211; Logitech Illuminated Keyboard on Ubuntu',tweet:'Yesterday, my Apple keyboard&#8217;s L key just died on me. Today I went around trying all sort of k',description:'Yesterday, my Apple keyboard&#8217;s L key just died on me. Today I went around trying all sort of k'})"><script type='text/javascript'>document.getElementById("post-1382-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.zugiart.com/2010/09/logitech-illuminated-keyboard-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Handling Oracle cursors in JDBC</title>
		<link>http://www.zugiart.com/2010/08/handling-oracle-cursors-in-jdbc/</link>
		<comments>http://www.zugiart.com/2010/08/handling-oracle-cursors-in-jdbc/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 00:54:22 +0000</pubDate>
		<dc:creator>zen</dc:creator>
				<category><![CDATA[geeky]]></category>
		<category><![CDATA[cursor]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.zugiart.com/2010/08/handling-oracle-cursors-in-jdbc/</guid>
		<description><![CDATA[Summary It is common practice for Oracle stored procedure to pass cursors to calling client. The client then needs to guarantee that the cursors are handled and closed properly, otherwise overtime the open cursor will accumulate into an ORA-1000 error (&#8220;ORA-1000 Maximum Number of Cursors Exceeded&#8221;) In Java world, cursor translates as ResultSet. In the [...]]]></description>
			<content:encoded><![CDATA[<h2>Summary</h2>
<p>It is common practice for Oracle stored procedure to pass cursors to calling client. The client then needs to guarantee that the cursors are handled and closed properly, otherwise overtime the open cursor will accumulate into an <a href="http://www.google.com.au/search?q=ORA-1000">ORA-1000</a> error (&#8220;ORA-1000 Maximum Number of Cursors Exceeded&#8221;)</p>
<p>In Java world, cursor translates as ResultSet. In the case where an open cursor is passed from a stored procedure to a Java code (over JDBC), the code must work with the ResultSet and not forget to close() it after it&#8217;s done with it. However, this is often overlooked, because when ResultSet is garbage collected, the close() is not called and as a result, the open cursor remains open in the Oracle server.</p>
<p>This fault is surprisingly common amidst Java programmer &#8211; and the reason is because inexperienced Java programmers are usually spoiled by Garbage Collection, and many of them failed to develop the strict habit of clearing resource after they are used.</p>
<p>Therefore, Java programmers should always remember to explicitly close() any resource that is explicitly open such as file, and in this case, Oracle database cursors (ResultSet).</p>
<h2>Example</h2>
<p>This is an example of stored procedure using cursor:</p>
<pre class="code" lang="sql">PROCEDURE A_PROC(P_1 IN VARCHAR2, P_OUT_VAL OUT SYS_REFCURSOR) IS
    -- body of execution ---
    OPEN P_OUT_VAL ...
    -- exception handling --
    EXCEPTION WHEN OTHERS THEN
    -- don't forget to close cursor here
END A_PROC;
</pre>
<p>on stored procedures that passes cursor to the client, it is important to first agree on the way cursors will be handled on exception cases. The best case is usually for the stored procedure to close all open cursor that it can close in the case of exception. In the case where open cursor is successfully passed, the Java/JDBC code need to handle it like so:</p>
<pre class="code" lang="java">CallableStatement cstmt = conn.prepareCall("SQL...");
ResultSet rs = null;
try {
   rs = // obtain result set here
}catch(Exception ex){
   // handle exception here
}
finally{
   // ensure result set (cursors) are closed
   rs.close();
   // ensure statement is closed here
   cstmt.close();
}
</pre>
<h2>Offline ResultSet</h2>
<p>What if you need to use the result set outside the context of the operation? Then use <a href="http://download-llnw.oracle.com/javase/6/docs/api/javax/sql/rowset/CachedRowSet.html">CachedRowSet</a> &#8211; Oracle provide a concrete implementation that will work fine, called OracleCachedRowSet. Like so:</p>
<pre class="code" lang="java">// this is where the live cursor is
ResultSet rs;
// define offline container &amp; populate it.
CachedRowSet crs = new OracleCachedRowSet();
crs.populate(rs);
</pre>
<p>But beware:</p>
<ul>
<li>ResultSet can be huge, CachedRowSet is convenient but beware of extracting too many data into the cached rowset. That cache lives in memory, don&#8217;t blow it out.</li>
<li>ResultSet resource lifecycle still need to be maintained as per usual, close if when you&#8217;ve done reading.</li>
</ul>
<h2>Corner case: Cursor Spike</h2>
<p>It is also possible to encounter ORA-1000 error when a JDBC Connection (Oracle Session) is shared amongst multiple thread of execution. A cursor limit is usually imposed on a given Session &#8211; sometimes it is possible that due to high usage of the shared session, the cursor &#8216;spikes&#8217; and exceeded this limit.</p>
<p>This will give a false impression and could cause database developers and JDBC developers to go round chasing the cause for days, while in fact it is not a code problem, but rather <em>session capacity / provisioning</em> problem.</p>
<p>The solution to this is to implement good logging in both end (JDBC &amp; DB side) to isolate the cause, working with DBAs to categorically record session usage and seeing patterns in which the session is being used.</p>
<p>The ideal solution is to control the Connection sharing via Connection Pools.</p>
<div class="zemanta-pixie"></div>
<img style='display:none' id="post-1339-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.zugiart.com/2010/08/handling-oracle-cursors-in-jdbc/',title:'Handling Oracle cursors in JDBC',tweet:'Summary It is common practice for Oracle stored procedure to pass cursors to calling client. The cli',description:'Summary It is common practice for Oracle stored procedure to pass cursors to calling client. The cli'})"><script type='text/javascript'>document.getElementById("post-1339-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.zugiart.com/2010/08/handling-oracle-cursors-in-jdbc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Test post via my n900</title>
		<link>http://www.zugiart.com/2010/08/test-post-via-my-n900/</link>
		<comments>http://www.zugiart.com/2010/08/test-post-via-my-n900/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 08:06:53 +0000</pubDate>
		<dc:creator>zen</dc:creator>
				<category><![CDATA[geeky]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[n900]]></category>
		<category><![CDATA[notes]]></category>

		<guid isPermaLink="false">http://www.zugiart.com/2010/08/test-post-via-my-n900/</guid>
		<description><![CDATA[This is a test post using my nokia n900, let&#8217;s see how we go :p this is a very good way of capturing notes on the go. This is done through an application called MaStory. Seriously, is there anything this phone can&#8217;t do!? Btw I am gathering notes on n900 configuration. It will be one [...]]]></description>
			<content:encoded><![CDATA[<p>This is a test post using my nokia n900, let&#8217;s see how we go :p</p>
<p>this is a very good way of capturing notes on the go. This is done through an application called MaStory. Seriously, is there anything this phone can&#8217;t do!?</p>
<p>Btw I am gathering notes on n900 configuration. It will be one hell of a guide once it&#8217;s done. <img src='http://www.zugiart.com/main/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img style='display:none' id="post-1228-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.zugiart.com/2010/08/test-post-via-my-n900/',title:'Test post via my n900',tweet:'This is a test post using my nokia n900, let&#8217;s see how we go :p this is a very good way of cap',description:'This is a test post using my nokia n900, let&#8217;s see how we go :p this is a very good way of cap'})"><script type='text/javascript'>document.getElementById("post-1228-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.zugiart.com/2010/08/test-post-via-my-n900/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Life and Death of a software system</title>
		<link>http://www.zugiart.com/2010/03/life-and-death-of-a-software-system/</link>
		<comments>http://www.zugiart.com/2010/03/life-and-death-of-a-software-system/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 12:11:45 +0000</pubDate>
		<dc:creator>zen</dc:creator>
				<category><![CDATA[geeky]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[buddhism]]></category>
		<category><![CDATA[death]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.zugiart.com/?p=1069</guid>
		<description><![CDATA[Every entity in this world will go through this cycle of living and dying - nothing shall escape it. This includes software systems.]]></description>
			<content:encoded><![CDATA[<p>Birth, Aging, Sickness, and Death.</p>
<p>Every entity in this world will go through this cycle of living and dying. Nothing shall escape it.</p>
<p>This applies to the most obvious entity of all, our own self. However this also applies to other concept in life. Take for example, a computer system.</p>
<p>A computer system is often the result of a software project. There is the moment where an idea is being formulated, a prototype is built to pitch the project, budget acquired, team formulated and grown, and finally, the project took off (birth). Over time, the system is crafted, again and again it is perfected, broken, fixed, patched, deployed. installed, broken again, fixed again, and so on (aging).</p>
<p>However, as software system changes hand from one team to another, fixes and enhancement done to it may or may not be in accordance with the original structure conceived by its creators. This will eventually result in various internal complication and inconsistencies. Sometimes it is not the software that age, but the hardware. Disks failing, cables aging, memory corruption, dead power supply, and so on. Indeed, nothing last forever! (sickness).</p>
<p>Finally, at some point, all software system will be retired. It may became obsolete, replaced by a newer system, or simply, broke down (death). On that fateful day, management, end-users, or whoever it is that work closely with the system will eventually look back and reflect upon the value it has contributed to the organization or end users. Even future systems implemented will be measured, directly or indirectly, against its older counterparts.</p>
<p>Therefore for those of you who works in the realm of computing, do keep in mind this principle. Take it to your heart that nothing in this world is permanent.</p>
<p>In doing so, when crafting and scoping a system, it is important that we ask ourself (and the client) &#8211; what is the intended lifecycle of this project or software system? how will it be supported and maintained? who will look after the system when your team is gone?</p>
<p>Remember that a software system is an entity as much as you are. How you write each of your system reflects your view and life-state in general. And verily so, you can infer the character of a programmer from a piece of code that he has written. From the various decision points he made which is visible in the way the system is structured, organized, partitioned and optimized.</p>
<p>Have that system lived a life worth living?</p>
<p>Well, have you?</p>
<p>Indeed it is true that truth emerges and lies stripped bare when one reflects upon Death. When the system has reached the end of its live, and your name written as craftsman of that system in the various source code and documentations that surrounds the system, how would you like to be perceived?</p>
<p>So if there is one credo for a programmer to follow, this would be it:</p>
<blockquote><p>Live a life worth living &#8211; Craft a system worth crafting.<br />
The two goes hand in hand.</p></blockquote>
<img style='display:none' id="post-1069-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.zugiart.com/2010/03/life-and-death-of-a-software-system/',title:'Life and Death of a software system',tweet:'Birth, Aging, Sickness, and Death. Every entity in this world will go through this cycle of living a',description:'Birth, Aging, Sickness, and Death. Every entity in this world will go through this cycle of living a'})"><script type='text/javascript'>document.getElementById("post-1069-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.zugiart.com/2010/03/life-and-death-of-a-software-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Squid: Forward Cascading Authentication Proxy</title>
		<link>http://www.zugiart.com/2009/11/squid-cascading-authentication-proxy/</link>
		<comments>http://www.zugiart.com/2009/11/squid-cascading-authentication-proxy/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 02:09:50 +0000</pubDate>
		<dc:creator>zen</dc:creator>
				<category><![CDATA[geeky]]></category>

		<guid isPermaLink="false">http://www.zugiart.com/?page_id=753</guid>
		<description><![CDATA[Or alternatively referred to as &#8216;cascading authentication proxy&#8217; is a proxy that sits behind another proxy. Thus allowing any other component who does not have credential to access the original proxy, to be able to use that proxy through the forward authenticating proxy. Similar to feature found in the desktop proxy product CCProxy.  The following [...]]]></description>
			<content:encoded><![CDATA[<p>Or alternatively referred to as &#8216;cascading authentication proxy&#8217; is a proxy that sits behind another proxy. Thus allowing any other component who does not have credential to access the original proxy, to be able to use that proxy through the forward authenticating proxy.</p>
<p>Similar to feature found in the <em>desktop proxy</em> product <a href="http://www.youngzsoft.net/ccproxy/">CCProxy</a>.  The following is the squid base configuration  for such a proxy. As usual, replace $VARIABLE with its corresponding values directly in the configuration file.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># port to use</span>
http_port <span style="color: #007800;">$SQUID_PORT</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># upstream BASIC authentication</span>
cache_peer <span style="color: #007800;">$PROXY_HOST</span> parent <span style="color: #007800;">$PROXY_PORT</span> <span style="color: #000000;">0</span> no-query default proxy-only <span style="color: #007800;"><span style="color: #c20cb9; font-weight: bold;">login</span></span>=<span style="color: #007800;">$PROXY_USER</span>:<span style="color: #007800;">$PROXY_PASSWORD</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># ACL</span>
&nbsp;
acl manager proto cache_object
acl localhost src 127.0.0.1<span style="color: #000000; font-weight: bold;">/</span>255.255.255.255
acl all src 0.0.0.0<span style="color: #000000; font-weight: bold;">/</span>0.0.0.0
&nbsp;
http_access allow all
never_direct allow all
icp_access deny all
&nbsp;
<span style="color: #666666; font-style: italic;"># LOGGING</span>
cache_log <span style="color: #007800;">$LOG_DIR_PATH</span><span style="color: #000000; font-weight: bold;">/</span>cache.log
cache_store_log <span style="color: #007800;">$LOG_DIR_PATH</span><span style="color: #000000; font-weight: bold;">/</span>store.log
&nbsp;
<span style="color: #666666; font-style: italic;">#caching</span>
cache_dir ufs <span style="color: #007800;">$CACHE_DIR_PATH</span> <span style="color: #000000;">10</span> <span style="color: #000000;">1</span> <span style="color: #000000;">1</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#cache_effective_user squid</span>
<span style="color: #666666; font-style: italic;">#cache_effective_group wheel</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#no local caching</span>
maximum_object_size <span style="color: #000000;">0</span> KB
minimum_object_size <span style="color: #000000;">0</span> KB
&nbsp;
<span style="color: #666666; font-style: italic;"># specify uncachable requests</span>
acl all src 0.0.0.0<span style="color: #000000; font-weight: bold;">/</span>0.0.0.0
no_cache deny all</pre></div></div>

<img style='display:none' id="post-753-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.zugiart.com/2009/11/squid-cascading-authentication-proxy/',title:'Squid: Forward Cascading Authentication Proxy',tweet:'Or alternatively referred to as &#8216;cascading authentication proxy&#8217; is a proxy that sits be',description:'Or alternatively referred to as &#8216;cascading authentication proxy&#8217; is a proxy that sits be'})"><script type='text/javascript'>document.getElementById("post-753-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.zugiart.com/2009/11/squid-cascading-authentication-proxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Ubuntu 9.10 Desktop guide</title>
		<link>http://www.zugiart.com/2009/11/linux-ubuntu-9-10-desktop-guide/</link>
		<comments>http://www.zugiart.com/2009/11/linux-ubuntu-9-10-desktop-guide/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 04:43:15 +0000</pubDate>
		<dc:creator>zen</dc:creator>
				<category><![CDATA[geeky]]></category>

		<guid isPermaLink="false">http://www.zugiart.com/?p=744</guid>
		<description><![CDATA[I configured this from a fresh install and captured all of the notes here in my linux ubuntu 9.10 desktop guide. ]]></description>
			<content:encoded><![CDATA[<p>I configured this from a fresh install and captured all of the notes here in my <a href="http://www.zugiart.com/notes/linux-ubuntu-desktop-9-10/">linux ubuntu 9.10 desktop guide</a>.</p>
<p>The note covers all of the steps I discovered in setting  up and configuring Linux Ubuntu 9.10 to be the perfect desktop OS. This include pointers on setting  up disk partitions, installations, compiz configuration, and more. Best enjoyed in full screen ( to see the details). Song is from Coldplay <img src='http://www.zugiart.com/main/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="505" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/p_GVHCe_6bM&amp;hl=en&amp;fs=1&amp;hd=1" /><param name="allowfullscreen" value="true" /><embed wmode="transparent" type="application/x-shockwave-flash" width="640" height="505" src="http://www.youtube.com/v/p_GVHCe_6bM&amp;hl=en&amp;fs=1&amp;hd=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Have fun <img src='http://www.zugiart.com/main/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img style='display:none' id="post-744-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.zugiart.com/2009/11/linux-ubuntu-9-10-desktop-guide/',title:'Linux Ubuntu 9.10 Desktop guide',tweet:'I configured this from a fresh install and captured all of the notes here in my linux ubuntu 9.10 de',description:'I configured this from a fresh install and captured all of the notes here in my linux ubuntu 9.10 de'})"><script type='text/javascript'>document.getElementById("post-744-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.zugiart.com/2009/11/linux-ubuntu-9-10-desktop-guide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bash: the peril of $10 args</title>
		<link>http://www.zugiart.com/2009/09/bash-args-10-issue/</link>
		<comments>http://www.zugiart.com/2009/09/bash-args-10-issue/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 03:51:11 +0000</pubDate>
		<dc:creator>zen</dc:creator>
				<category><![CDATA[geeky]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://www.zugiart.com/?p=551</guid>
		<description><![CDATA[In BASH, you need to use parenthesis when using numbered arg that exceeds 9.]]></description>
			<content:encoded><![CDATA[<p>Bash command arguments only goes up to $9. For the 10th arguments, ${10} should be used, instead of $10.</p>
<p>Example: <strong>tenthargs.sh</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;$1 $2 $3 $4 $5 $6 $7 $8 $9 <span style="color: #007800;">${10}</span>&quot;</span></pre></div></div>

<p>When invoked:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ .<span style="color: #000000; font-weight: bold;">/</span>tenthargs.sh one two three four five six seven eight nine ten
<span style="color: #666666; font-style: italic;"># properly prints out:</span>
<span style="color: #666666; font-style: italic;"># one two three four five six seven eight nine ten</span></pre></div></div>

<p>if $10 is used instead of ${10}, upon running the result will be like this instead:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># one two three four five six seven eight nine one0</span></pre></div></div>

<p>That is, bash understood $10 as the first parameter ($1) followed by a literal 0 instead of the &#8216;tenth args&#8217;.</p>
<p>Of course, I have added this to my <a href="/notes/bash">bash notes</a>.</p>
<img style='display:none' id="post-551-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.zugiart.com/2009/09/bash-args-10-issue/',title:'Bash: the peril of $10 args',tweet:'Bash command arguments only goes up to $9. For the 10th arguments, ${10} should be used, instead of ',description:'Bash command arguments only goes up to $9. For the 10th arguments, ${10} should be used, instead of '})"><script type='text/javascript'>document.getElementById("post-551-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.zugiart.com/2009/09/bash-args-10-issue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>zroundup, a demo</title>
		<link>http://www.zugiart.com/2009/09/zero-configuration-roundup/</link>
		<comments>http://www.zugiart.com/2009/09/zero-configuration-roundup/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 22:33:38 +0000</pubDate>
		<dc:creator>zen</dc:creator>
				<category><![CDATA[geeky]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[roundup]]></category>

		<guid isPermaLink="false">http://www.zugiart.com/?p=525</guid>
		<description><![CDATA[Introducing, zero-configuration issue tracking system. Still under development :)]]></description>
			<content:encoded><![CDATA[<p>I would like to introduce a small project that I am working on atm &#8211; started this on Sunday, took me almost 4 hours to get it to this stage. I&#8217;ve just managed to capture it properly via <strong>recordMyDesktop</strong> and <strong>mencoder</strong>, before I can upload this to YouTube.</p>
<p><a href="http://pypi.python.org/pypi/roundup">Roundup</a>, as you may already know is a Python issue tracking system. <strong>zroundup</strong> stands for <strong>zero configuration roundup</strong> &#8211; I&#8217;m aiming to make an issue tracking system that you can just download and run. Preferrably I would also like to be able to put this into a thumbdrive and then carry it around with me &#8211; a portable issue tracking system, on a stick!</p>
<p>I actually thought that this sort of thing would be perfect for freelancers / contractors who are usually on the move and have a huge list of issues / tasks on multiple projects that need to be managed.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="383" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/UgHo9yMBFvs&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed wmode="transparent" type="application/x-shockwave-flash" width="600" height="383" src="http://www.youtube.com/v/UgHo9yMBFvs&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Note: Probably you&#8217;ll have to see this in full screen, I haven&#8217;t figure out how to take a screenshot of only the region within my desktop, and keep in mind that this is still a work in progress &#8211; when it&#8217;s finished, the use case would likely be:</p>
<ul>
<li>Download and install on a USB stick</li>
<li>You can run / stop the issue tracker from the USB stick</li>
<li>If you disconnect the USB stick the tracker will stop, but preserving all data</li>
<li>If you connect the USB stick on a windows machine, the tracker will run (automatically, if autoplay is enabled).</li>
</ul>
<img style='display:none' id="post-525-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.zugiart.com/2009/09/zero-configuration-roundup/',title:'zroundup, a demo',tweet:'I would like to introduce a small project that I am working on atm &#8211; started this on Sunday, t',description:'I would like to introduce a small project that I am working on atm &#8211; started this on Sunday, t'})"><script type='text/javascript'>document.getElementById("post-525-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.zugiart.com/2009/09/zero-configuration-roundup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Q&amp;A: WordPress Hosting</title>
		<link>http://www.zugiart.com/2009/08/qa-wordpress-hosting/</link>
		<comments>http://www.zugiart.com/2009/08/qa-wordpress-hosting/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 22:59:00 +0000</pubDate>
		<dc:creator>zen</dc:creator>
				<category><![CDATA[geeky]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.zugiart.com/2009/08/qa-wordpress-hosting/</guid>
		<description><![CDATA[The basics of what you need to know about Wordpress blogging on paid hosting server with your own domain name.]]></description>
			<content:encoded><![CDATA[<p>A friend of mine asks about WordPress hosting &#8211; whether she could upload a theme into her wordpress blog or not if it is hosted on www.wordpress.com, and what sort of <em>trouble</em> will be involved if she wanted to host her blog outside of www.wordpress.com and have a domain name for herself. I thought I should share this answer here <img src='http://www.zugiart.com/main/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>WordPress, the blog engine</h3>
<p>WordPress by itself provides the full feature as-is. Even the ones in wordpress.com allows you to use all of its feature.</p>
<ul>
<li>Plugins and Themes requires you to upload the file into the wordpress installation directory. As far as I know, you can&#8217;t do this in wordpress.com, because you don&#8217;t have a &#8216;server shell account&#8217; that you can use to log into the file system and upload your stuff in there.</li>
<li>You can choose one of the default themes and modify them, but you can&#8217;t upload your own graphic/image in there. You can only link out to images available on the net. In short, it&#8217;s painful.</li>
</ul>
<h3>Hosting wordpress outside wordpress.com</h3>
<ul>
<li>To host a wordpress blog outside of wordpress.com, you need Apache, MySQL and PHP. In other words you need a web server with PHP and MySQL backend.</li>
<li>If you want to keep it simple, I suggest you find a free web hosting that supports PHP, MySQL and (S)FTP.</li>
<li>Dump wordpress in there and play around.</li>
</ul>
<h3>Paid hosting and domain name</h3>
<ul>
<li>Once you are comfortable working with WordPress and you feel confident enough to <em>take the plunge</em>, you may subscribe to a paid hosting server for more support &amp; reliability (most hosting cost aroun $5-10 USD per month)</li>
<li>Copy your wordpress installation into this paid hosting.</li>
<li>Afterwards, you can also migrate the content of your blog from one wordpress installation to another easily with its export/import tool.</li>
<li>Once you have your blog up and running, you can get domain name (e.g. www.mydomainNameIsCoolerThanYours.com) and have it point to your existing wordpress installation on your paid hosting service. Check out GoDaddy.com for domain name registration (costs you about $10USD per year)</li>
</ul>
<h3>If you are geekier than the rest</h3>
<ul>
<li>If you just want to play around &amp; experiment, you can download WAMP and install it in your PC, then put wordpress there. Since that is in your PC you can experiment as much as you want and do whatever you like.</li>
<li>This is more relevant for people who wants to do Theme development, plugin development, and the like.</li>
</ul>
<p>If you are thinking of going <em>more hardcore</em> on WordPress blogging, I hope this will help point you in the right direction.</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=4ffeba19-7cd9-8533-8c3f-a577158dcce2" alt="" /></div>
<img style='display:none' id="post-437-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.zugiart.com/2009/08/qa-wordpress-hosting/',title:'Q&#038;A: WordPress Hosting',tweet:'A friend of mine asks about WordPress hosting &#8211; whether she could upload a theme into her word',description:'A friend of mine asks about WordPress hosting &#8211; whether she could upload a theme into her word'})"><script type='text/javascript'>document.getElementById("post-437-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.zugiart.com/2009/08/qa-wordpress-hosting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Foxtab</title>
		<link>http://www.zugiart.com/2009/08/foxtab/</link>
		<comments>http://www.zugiart.com/2009/08/foxtab/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 14:10:14 +0000</pubDate>
		<dc:creator>zen</dc:creator>
				<category><![CDATA[geeky]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://www.zugiart.com/2009/08/foxtab/</guid>
		<description><![CDATA[Yet another great firefox addon. Man it's raining good add-ons these days.]]></description>
			<content:encoded><![CDATA[<p>Foxtab is a 3D tab switching add-ons for Firefox. Yet another great Firefox add-on you should get your hands on. The 3D tab switching have similar feel to Cooliris, and can be activated (conveniently) via the ctrl+tab keystroke.</p>
<p>Notable feature:</p>
<ul>
<li>Can be activated via keystroke or mouse gesture. The mouse gesture never really work for me, but the keystroke is great</li>
<li>Customizable look and feel, you can even set a wallpaper for the tab switcher</li>
<li>Customizable tab switching animation, which include &#8216;cover flip&#8217; ala iTunes album selector</li>
</ul>
<p>Yet another reason to stick with Firefox <img src='http://www.zugiart.com/main/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=d0ce37c2-264c-8def-8248-3bb627d5f698" alt="" /></div>
<img style='display:none' id="post-434-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.zugiart.com/2009/08/foxtab/',title:'Foxtab',tweet:'Foxtab is a 3D tab switching add-ons for Firefox. Yet another great Firefox add-on you should get yo',description:'Foxtab is a 3D tab switching add-ons for Firefox. Yet another great Firefox add-on you should get yo'})"><script type='text/javascript'>document.getElementById("post-434-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.zugiart.com/2009/08/foxtab/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
