<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Jimmy Do's Blog</title>
	<atom:link href="http://jimmydo.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jimmydo.wordpress.com</link>
	<description></description>
	<lastBuildDate>Tue, 26 Apr 2011 17:47:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='jimmydo.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Jimmy Do's Blog</title>
		<link>http://jimmydo.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://jimmydo.wordpress.com/osd.xml" title="Jimmy Do&#039;s Blog" />
	<atom:link rel='hub' href='http://jimmydo.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Timer Applet 2.1.2</title>
		<link>http://jimmydo.wordpress.com/2009/02/27/timer-applet-212/</link>
		<comments>http://jimmydo.wordpress.com/2009/02/27/timer-applet-212/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 03:43:02 +0000</pubDate>
		<dc:creator>jimmydo</dc:creator>
				<category><![CDATA[Timer Applet]]></category>

		<guid isPermaLink="false">http://jimmydo.wordpress.com/?p=29</guid>
		<description><![CDATA[Timer Applet 2.1.2 is another minor release that fixes an incompatibility with the latest version of the notification daemon.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=29&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="https://sourceforge.net/project/showfiles.php?group_id=127778&amp;package_id=139889&amp;release_id=664371">Timer Applet 2.1.2</a> is another minor release that fixes an incompatibility with the latest version of the notification daemon.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimmydo.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimmydo.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimmydo.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimmydo.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jimmydo.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jimmydo.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jimmydo.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jimmydo.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimmydo.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimmydo.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimmydo.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimmydo.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimmydo.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimmydo.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=29&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jimmydo.wordpress.com/2009/02/27/timer-applet-212/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimmydo</media:title>
		</media:content>
	</item>
		<item>
		<title>Timer Applet 2.1.1</title>
		<link>http://jimmydo.wordpress.com/2009/02/15/timer-applet-211/</link>
		<comments>http://jimmydo.wordpress.com/2009/02/15/timer-applet-211/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 07:00:33 +0000</pubDate>
		<dc:creator>jimmydo</dc:creator>
				<category><![CDATA[Timer Applet]]></category>

		<guid isPermaLink="false">http://jimmydo.wordpress.com/?p=26</guid>
		<description><![CDATA[The 2.1.1 release works around an API-breaking change in the version of libnotify used in Fedora 10.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=26&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The <a href="https://sourceforge.net/project/showfiles.php?group_id=127778&amp;package_id=139889&amp;release_id=661163">2.1.1 release</a> works around an API-breaking change in the version of libnotify used in Fedora 10.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimmydo.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimmydo.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimmydo.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimmydo.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jimmydo.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jimmydo.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jimmydo.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jimmydo.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimmydo.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimmydo.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimmydo.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimmydo.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimmydo.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimmydo.wordpress.com/26/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=26&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jimmydo.wordpress.com/2009/02/15/timer-applet-211/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimmydo</media:title>
		</media:content>
	</item>
		<item>
		<title>Timer Applet 2.1</title>
		<link>http://jimmydo.wordpress.com/2009/02/02/timer-applet-21/</link>
		<comments>http://jimmydo.wordpress.com/2009/02/02/timer-applet-21/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 07:30:15 +0000</pubDate>
		<dc:creator>jimmydo</dc:creator>
				<category><![CDATA[Timer Applet]]></category>

		<guid isPermaLink="false">http://jimmydo.wordpress.com/?p=17</guid>
		<description><![CDATA[Timer Applet 2.1 is now available. This release includes a bunch of bug fixes, updated localizations, and a couple major changes: Time transposition (based on a patch by Matt Corks). Example: 62.5 in the &#8220;Minutes&#8221; field will now be converted to 1 hour, 2 minutes, 30 seconds. GStreamer for playing sounds (patch from Philipp Kern)<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=17&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="https://sourceforge.net/project/showfiles.php?group_id=127778&amp;package_id=139889&amp;release_id=657918">Timer Applet 2.1</a> is now available. This release includes a bunch of bug fixes, updated localizations, and a couple major changes:</p>
<ul>
<li> Time transposition (based on a patch by Matt Corks). <strong>Example</strong>: 62.5 in the &#8220;Minutes&#8221; field will now be converted to 1 hour, 2 minutes, 30 seconds.</li>
<li> GStreamer for playing sounds (patch from Philipp Kern)</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimmydo.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimmydo.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimmydo.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimmydo.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jimmydo.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jimmydo.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jimmydo.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jimmydo.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimmydo.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimmydo.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimmydo.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimmydo.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimmydo.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimmydo.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=17&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jimmydo.wordpress.com/2009/02/02/timer-applet-21/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimmydo</media:title>
		</media:content>
	</item>
		<item>
		<title>cron/anacron not running your script?</title>
		<link>http://jimmydo.wordpress.com/2009/01/08/cronanacron-not-running-your-script/</link>
		<comments>http://jimmydo.wordpress.com/2009/01/08/cronanacron-not-running-your-script/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 06:39:58 +0000</pubDate>
		<dc:creator>jimmydo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jimmydo.wordpress.com/?p=12</guid>
		<description><![CDATA[If you dropped a script into one of the /etc/cron.* directories, but it isn&#8217;t being run, try this in a terminal: run-parts &#8211;test /etc/cron.daily (replacing &#8216;/etc/cron.daily&#8217; with whichever actual folder contains your script) This will list the scripts that cron or anacron would run (the &#8211;test option tells it to show, but not actually execute, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=12&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you dropped a script into one of the /etc/cron.* directories, but it isn&#8217;t being run, try this in a terminal:</p>
<blockquote><p>run-parts &#8211;test /etc/cron.daily<br />
(replacing &#8216;/etc/cron.daily&#8217; with whichever actual folder contains your script)</p></blockquote>
<p>This will list the scripts that cron or anacron would run (the &#8211;test option tells it to show, but not actually execute, the scripts). Your script should appear in the output listing. If it doesn&#8217;t, verify that:</p>
<ol>
<li>your script is executable, and</li>
<li><strong>the name of the script has only letters, digits, underscores, and hyphens</strong></li>
</ol>
<p>#1 is easy to understand, but let me explain #2. By default (at least on Ubuntu), /etc/crontab and /etc/anacrontab are setup to execute the contents of the /etc/cron.* directories using a command like this:</p>
<blockquote><p>run-parts &#8211;report /etc/cron.daily</p></blockquote>
<p>but according to the run-parts man page:</p>
<blockquote><p>If  neither the &#8211;lsbsysinit option nor the &#8211;regex option is given then the names must consist entirely of upper and lower case letters, digits, underscores, and hyphens.</p></blockquote>
<p>This means that run-parts will just ignore scripts that are not named properly!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimmydo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimmydo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimmydo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimmydo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jimmydo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jimmydo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jimmydo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jimmydo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimmydo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimmydo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimmydo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimmydo.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimmydo.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimmydo.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=12&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jimmydo.wordpress.com/2009/01/08/cronanacron-not-running-your-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimmydo</media:title>
		</media:content>
	</item>
		<item>
		<title>Editing code with gedit</title>
		<link>http://jimmydo.wordpress.com/2008/12/24/editing-code-with-gedit/</link>
		<comments>http://jimmydo.wordpress.com/2008/12/24/editing-code-with-gedit/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 20:37:00 +0000</pubDate>
		<dc:creator>jimmydo</dc:creator>
				<category><![CDATA[gedit]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://jimmydo.wordpress.com/2008/12/24/editing-code-with-gedit/</guid>
		<description><![CDATA[gedit is a nice text editor, but with its plugin system it can also make a great code editor. These are my customizations for editing code (mainly Python) in gedit: Preferences Display line numbers Highlight current line Display right margin (so I know when I&#8217;m putting too much on one line) Enable automatic indentation Plugins [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=8&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>gedit is a nice text editor, but with its plugin system it can also make a great code editor. These are my customizations for editing code (mainly Python) in gedit:</p>
<p><span style="font-size:130%;"><span style="font-weight:bold;">Preferences</span></span>
<ul>
<li>Display line numbers</li>
<li>Highlight current line</li>
<li>Display right margin (so I know when I&#8217;m putting too much on one line)</li>
<li>Enable automatic indentation</li>
</ul>
<p><span style="font-size:130%;"><span style="font-weight:bold;">Plugins</span></span>
<ul>
<li><span style="font-weight:bold;">File Browser Pane</span> (included) &#8211; Sidebar for browsing and opening files</li>
<li><span style="font-weight:bold;">Indent Lines</span> (included) &#8211; Indent/unindent selected text</li>
<li><span style="font-weight:bold;">Snippets</span> (included) &#8211; Expand abbreviations to snippets of boilerplate text.</li>
<li><span style="font-weight:bold;">Code Comment</span> (gedit-plugins) &#8211; Comment/uncomment selected text</li>
<li><span style="font-weight:bold;">Draw Spaces</span> (gedit-plugins) &#8211; Show tab and space characters</li>
<li><span style="font-weight:bold;">Smart Spaces</span> (gedit-plugins) &#8211; When using spaces for indentation, this lets you unindent by pressing backspace once, rather than pressing it as many times as the number of spaces you use for one level of indentation.</li>
<li><a href="http://users.tkk.fi/%7Eotsaloma/gedit/">completion</a> &#8211; Auto-complete words</li>
<li><a href="http://www.upperbound.net/snapopen/">snapopen</a> &#8211; Quickly open files using regex</li>
<li><a href="http://code.google.com/p/gedit-autotab/">autotab</a> &#8211; Detect whether the tab key should insert a tab or spaces, based on what&#8217;s being used for indentation in the rest of the file</li>
</ul>
<p>For Ubuntu, I&#8217;ve noted the plugins that are included with the standard gedit installation and the ones that come as part of the &#8216;gedit-plugins&#8217; package. You can also go to the <a href="http://live.gnome.org/Gedit/Plugins">gedit Plugins page</a> to see what other plugins are available.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimmydo.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimmydo.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimmydo.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimmydo.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jimmydo.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jimmydo.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jimmydo.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jimmydo.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimmydo.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimmydo.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimmydo.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimmydo.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimmydo.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimmydo.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=8&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jimmydo.wordpress.com/2008/12/24/editing-code-with-gedit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimmydo</media:title>
		</media:content>
	</item>
		<item>
		<title>ATI fglrx Dual Monitor and No Video Flicker!</title>
		<link>http://jimmydo.wordpress.com/2008/12/23/ati-fglrx-dual-monitor-and-no-video-flicker/</link>
		<comments>http://jimmydo.wordpress.com/2008/12/23/ati-fglrx-dual-monitor-and-no-video-flicker/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 09:03:00 +0000</pubDate>
		<dc:creator>jimmydo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jimmydo.wordpress.com/2008/12/23/ati-fglrx-dual-monitor-and-no-video-flicker/</guid>
		<description><![CDATA[I finally have an xorg.conf file gives me a dual-monitor desktop andflicker-free video playback while Compiz is enabled. Here&#8217;s my setup: Ubuntu 8.10 &#8220;Intrepid Ibex&#8221; Driver: fglrx Compiz Visual Effects enabled Primary LCD monitor: 1680&#215;1050 resolution Secondary LCD monitor (positioned to the right of the primary monitor): 1024&#215;768 resolution The following is the contents of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=7&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>I finally have an xorg.conf file gives me a dual-monitor desktop and<br />flicker-free video playback while Compiz is enabled. Here&#8217;s my setup:
<ul>
<li>Ubuntu 8.10 &#8220;Intrepid Ibex&#8221;</li>
<li>Driver: fglrx</li>
<li>Compiz Visual Effects enabled</li>
<li>Primary LCD monitor: 1680&#215;1050 resolution</li>
<li>Secondary LCD monitor (positioned to the right of the primary monitor): 1024&#215;768 resolution</li>
</ul>
<p>The following is the contents of my xorg.conf file (most of the important stuff is in the &#8220;Device&#8221; section). Hopefully others with similar setups will find this useful:<br />
<blockquote>Section &#8220;Monitor&#8221;<br />   Identifier    &#8220;Configured Monitor&#8221;<br />EndSection</p>
<p>Section &#8220;Screen&#8221;<br />   Identifier    &#8220;Default Screen&#8221;<br />   Monitor        &#8220;Configured Monitor&#8221;<br />   Device        &#8220;Configured Video Device&#8221;<br />   DefaultDepth    24<br />EndSection</p>
<p>Section &#8220;Module&#8221;<br />   Load    &#8220;glx&#8221;<br />   Disable    &#8220;dri2&#8243;<br />EndSection</p>
<p>Section &#8220;Device&#8221;<br />   Identifier    &#8220;Configured Video Device&#8221;<br />   Driver    &#8220;fglrx&#8221;</p>
<p>   # Fix video flickering when Compiz is enabled.<br />   Option &#8220;TexturedVideo&#8221; &#8220;off&#8221;</p>
<p>   # Comment out the following line if you want to mirror the primary monitor instead of extend it.<br />   Option    &#8220;DesktopSetup&#8221; &#8220;horizontal&#8221;</p>
<p>   Option    &#8220;ForceMonitors&#8221; &#8220;lvds,crt2&#8243;<br />EndSection</p></blockquote>
<p><span style="font-weight:bold;">Update</span>: I forgot to mention a couple things:
<ul>
<li>I&#8217;m using the version of fglrx provided by <a href="http://www.albertomilone.com/nvidia_scripts1.html">envyng</a>.</li>
<li>After updating the xorg.conf file, I had to open up the &#8220;Screen Resolution&#8221; settings panel and change the &#8220;Resolution&#8221; drop-down menu from &#8220;1680 x 1050 (16:10)&#8221; to &#8220;3360 x 1050&#8243;.</li>
</ul>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimmydo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimmydo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimmydo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimmydo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jimmydo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jimmydo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jimmydo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jimmydo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimmydo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimmydo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimmydo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimmydo.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimmydo.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimmydo.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=7&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jimmydo.wordpress.com/2008/12/23/ati-fglrx-dual-monitor-and-no-video-flicker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimmydo</media:title>
		</media:content>
	</item>
		<item>
		<title>Watchable Monad in Python</title>
		<link>http://jimmydo.wordpress.com/2007/07/21/watchable-monad-in-python/</link>
		<comments>http://jimmydo.wordpress.com/2007/07/21/watchable-monad-in-python/#comments</comments>
		<pubDate>Sat, 21 Jul 2007 22:47:00 +0000</pubDate>
		<dc:creator>jimmydo</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://jimmydo.wordpress.com/2007/07/21/watchable-monad-in-python/</guid>
		<description><![CDATA[Dan has an interesting new post about monads. I was still a bit fuzzy about the concept after reading the post, so he recommended that I rewrite the &#8220;watchable&#8221; monad in Python. Here it is: # * Monad structure:# (((func1, state1), (func2, state2), (funcN, stateN)), watched_val)## * Watcher function signature:# watcher_func(state, prev_watched_val)# state will be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=6&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Dan has an interesting new post <a href="http://metalinguist.wordpress.com/2007/07/21/monads-for-schemerslispers/">about monads</a>. I was still a bit fuzzy about the concept after reading the post, so he recommended that I rewrite the &#8220;watchable&#8221; monad in Python. Here it is:
<pre style="overflow:auto;"># * Monad structure:#    (((func1, state1), (func2, state2), (funcN, stateN)), watched_val)## * Watcher function signature:#    watcher_func(state, prev_watched_val)#      state will be equal to None on the first call

def make_watchable(watched_val):   return ((), watched_val)

def join_watchable(watchable):   outer_watchers = watchable[0]   inner_watchers = watchable[1][0]   inner_value = watchable[1][1]   return (outer_watchers + tuple([watcher for watcher in inner_watchers if watcher not in outer_watchers]),           inner_value)

def wrap_func_for_watchable(orig_func):   def make_updated_watchers(watchers, prev_val):       return tuple([(watcher_func, watcher_func(state, prev_val)) for watcher_func, state in watchers])   return lambda watchable: (make_updated_watchers(watchable[0], watchable[1]),                             orig_func(watchable[1]))

def add_watcher(watchable, watcher_func):   return join_watchable((((watcher_func, None),), watchable))</pre>
<p>
<pre style="overflow:auto;"># Sample watcher functions

def count_modifications_watcher(state, prev_val):if state == None:   return 1else:   return state + 1

def track_history_watcher(state, prev_val):if state == None:   return (prev_val,)else:   return state + (prev_val,)</pre>
<p>
<pre style="overflow:auto;"># Usage

&gt;&gt;&gt; increment_watchable = wrap_func_for_watchable(lambda x: x + 1)&gt;&gt;&gt; double_watchable = wrap_func_for_watchable(lambda x: 2 * x)&gt;&gt;&gt; watched_zero = add_watcher(add_watcher(make_watchable(0), count_modifications_watcher), track_history_watcher)&gt;&gt;&gt; &gt;&gt;&gt; increment_watchable(watched_zero)(((&lt;function track_history_watcher at 0xb7dd84c4&gt;, (0,)), (&lt;function count_modifications_watcher at 0xb7dd848c&gt;, 1)), 1)&gt;&gt;&gt; watched_two = increment_watchable(increment_watchable(watched_zero))&gt;&gt;&gt; increment_watchable(double_watchable(watched_two))(((&lt;function track_history_watcher at 0xb7dd84c4&gt;, (0, 1, 2, 4)), (&lt;function count_modifications_watcher at 0xb7dd848c&gt;, 4)), 5)</pre>
<p>Reading up a bit also helps. I found Wikipedia to be a good reference:<br /><a href="http://en.wikipedia.org/wiki/Monads_in_functional_programming">http://en.wikipedia.org/wiki/Monads_in_functional_programming</a></p>
<p>Dan also recommends this:<br /><a href="http://www.cs.toronto.edu/%7Esme/presentations/cat101.pdf">http://www.cs.toronto.edu/~sme/presentations/cat101.pdf</a></p>
<p>Carefully reviewing the Lisp examples and reading the above two links made a second reading of his post much more understandable for me.</p>
<p>Reading Lisp again was also strangely refreshing, but we definitely need some kind of in-browser paren matching. Maybe there&#8217;s some JavaScript magic somewhere? But even if such as thing existed, I doubt you&#8217;d be able to get it to work in WordPress. Oh well. Thanks for another excellent post Dan!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimmydo.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimmydo.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimmydo.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimmydo.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimmydo.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimmydo.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jimmydo.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jimmydo.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jimmydo.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jimmydo.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimmydo.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimmydo.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimmydo.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimmydo.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimmydo.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimmydo.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=6&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jimmydo.wordpress.com/2007/07/21/watchable-monad-in-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimmydo</media:title>
		</media:content>
	</item>
		<item>
		<title>GObject Memory Management Conventions</title>
		<link>http://jimmydo.wordpress.com/2007/07/04/gobject-memory-management-conventions/</link>
		<comments>http://jimmydo.wordpress.com/2007/07/04/gobject-memory-management-conventions/#comments</comments>
		<pubDate>Wed, 04 Jul 2007 06:18:00 +0000</pubDate>
		<dc:creator>jimmydo</dc:creator>
				<category><![CDATA[c]]></category>
		<category><![CDATA[gobject]]></category>

		<guid isPermaLink="false">http://jimmydo.wordpress.com/2007/07/04/gobject-memory-management-conventions/</guid>
		<description><![CDATA[Reference counting is a fairly simple memory management concept: increment the reference count of an object you want to keep and decrement the reference count when you don&#8217;t need the object anymore. In GObject, you use g_object_ref() to increment and g_object_unref() to decrement the reference count of an object (GObject also has the concept of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=5&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Reference_counting">Reference counting</a> is a fairly simple memory management concept: increment the reference count of an object you want to keep and decrement the reference count when you don&#8217;t need the object anymore. In GObject, you use g_object_ref() to increment and g_object_unref() to decrement the reference count of an object (GObject also has the concept of <a href="http://developer.gnome.org/doc/API/2.2/gobject/gobject-The-Base-Object-Type.html#id2598825">floating references</a> that complicates things a little, but it&#8217;s still pretty easy to understand. I&#8217;ll just ignore floating references for now, but if you want to learn more about whether they&#8217;re necessary or why they&#8217;re in GObject, <a href="http://mail.gnome.org/archives/gtk-devel-list/2006-January/msg00012.html">this is an interesting thread</a> to read through). But just understanding the mechanics of reference counting isn&#8217;t enough if you want to effectively use a reference-counted API. You really want to understand the memory management conventions of the API so that you know when you actually &#8220;own&#8221; an object.</p>
<p>While working on some GObject-derived classes, I started to wonder if I was incrementing and decrementing reference counts at the correct times. I was confused by the fact that the g_value_get_object() method would return an object <span style="font-weight:bold;">reference</span> (the caller is <span style="font-style:italic;">not</span> responsible for decrementing the reference count), but g_object_get() would return an object <span style="font-weight:bold;">copy</span> (the caller <span style="font-style:italic;">is</span> responsible for decrementing the reference count). Reference counting APIs usually rely on naming conventions to indicate whether the caller will receive a reference or a copy, so I expected some standard behavior for &#8220;get&#8221; methods. Judging by other methods I&#8217;ve used in the GObject API, it looks like &#8220;get&#8221; methods should return object references rather than copies. It worried me that one of the most-used &#8220;get&#8221; methods in GObject, g_object_get(), has behavior inconsistent with that convention. After a bit of searching, I finally stumbled upon a few nuggets of information. The first post highlights some of the <a href="http://mail.gnome.org/archives/gtk-devel-list/2006-January/msg00051.html">naming inconsistencies</a> I encountered. The reply to that message explains that <a href="http://mail.gnome.org/archives/gtk-devel-list/2006-January/msg00120.html">conventions were proposed</a> a while ago but were never formally adopted, and he also links to the <a href="http://beast.gtk.org/mirror/gnome-hackers-2000-07-30-timj-pgfc.txt">proposed conventions</a> for reference.</p>
<p>Although I&#8217;m sure some attempt is made at maintaining consistency in function naming and reference counting semantics in GObject and related APIs, I really hoped that there was a formal set of guidelines that API developers could follow and that API users could refer to. It really is a annoying to have to either refer to the docs or browse the source code to figure out if a particular method&#8217;s return value must be unreferenced. Using naming conventions would not only make GObject-based APIs both individually consistent and consistent among each other, but it would also let developers know the exact reference counting behavior of a method just by looking at its name. I remember reading over some of <a href="http://developer.apple.com/">Apple&#8217;s API docs</a>, and both <a href="http://en.wikipedia.org/wiki/Core_Foundation">Core Foundation</a> and <a href="http://en.wikipedia.org/wiki/Cocoa_%28API%29">Cocoa</a> have a standard set of memory management guidelines. Something similar for GObject would be very nice.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimmydo.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimmydo.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimmydo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimmydo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimmydo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimmydo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jimmydo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jimmydo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jimmydo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jimmydo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimmydo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimmydo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimmydo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimmydo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimmydo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimmydo.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=5&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jimmydo.wordpress.com/2007/07/04/gobject-memory-management-conventions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimmydo</media:title>
		</media:content>
	</item>
		<item>
		<title>The Return to C and GObject</title>
		<link>http://jimmydo.wordpress.com/2007/07/02/the-return-to-c-and-gobject/</link>
		<comments>http://jimmydo.wordpress.com/2007/07/02/the-return-to-c-and-gobject/#comments</comments>
		<pubDate>Mon, 02 Jul 2007 08:36:00 +0000</pubDate>
		<dc:creator>jimmydo</dc:creator>
				<category><![CDATA[c]]></category>
		<category><![CDATA[gobject]]></category>

		<guid isPermaLink="false">http://jimmydo.wordpress.com/2007/07/02/the-return-to-c-and-gobject/</guid>
		<description><![CDATA[Lately I&#8217;ve been playing around with the GObject system in C again. Mostly because I want to better understand how it works. I dabbled a bit with creating GObject-derived classes when I was working on the C version of Timer Applet, but soon after I took a break from C to port Timer Applet to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=4&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Lately I&#8217;ve been playing around with the <a href="http://en.wikipedia.org/wiki/Gobject">GObject</a> system in C again. Mostly because I want to better understand how it works. I dabbled a bit with creating GObject-derived classes when I was working on the C version of <a href="http://timerapplet.sourceforge.net/">Timer Applet</a>, but soon after I took a break from C to port Timer Applet to Python, so I didn&#8217;t really get very deeply into it. (<span style="font-weight:bold;">Update</span>: I realized this is a bit unclear. Technically I&#8217;m still using GObject through the Python bindings, but I wanted to learn more about the native C API for GObject because that is what GTK+ and GNOME are written in, and it&#8217;s just interesting to see how OO can be done in C).</p>
<p>So now I&#8217;m back in C. First of all, welcome back type declarations. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I like the self-documenting nature of type declarations, especially in function/method arguments. It makes it much easier to understand how a particular function is used. Sometimes when reading other people&#8217;s Python code, I would have to follow call chains in reverse (by grepping through the source files for the function names) in order to figure out what the types of the arguments ultimately were (if there is smarter way to do this, please let me know). You could probably argue that this would not be a problem with better documentation, but why rely on someone to voluntarily document something when you can have strict enforcement by the compiler? I still like Python though. It&#8217;s just a different beast compared to C and has many advantages of its own.</p>
<p>A big annoyance about going back to C has been header files! After working with higher-level languages like C# or Python, having to create and maintain header files is just horrible. Why do I have to change two files whenever I want to add or remove a method or change a method&#8217;s signature?? But I wanted to learn GObject, and GObject is written in C, so let&#8217;s move on. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>From my experience so far, creating new GObject-derived classes is a bit tedious in C (which I guess is to be expected), but it&#8217;s not too bad once you get used to it. You encounter a lot of friction in the beginning. It&#8217;s very difficult to stay on track and get anything useful done because you&#8217;re constantly trying to figure out how to create things like signals and properties. But once you get the hang of things, all that boilerplate code becomes understandable and almost second nature. Overall, it&#8217;s been a good learning experience. It&#8217;s nice to better understand the foundation on which GNOME is built.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimmydo.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimmydo.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimmydo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimmydo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimmydo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimmydo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jimmydo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jimmydo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jimmydo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jimmydo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimmydo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimmydo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimmydo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimmydo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimmydo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimmydo.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=4&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jimmydo.wordpress.com/2007/07/02/the-return-to-c-and-gobject/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimmydo</media:title>
		</media:content>
	</item>
		<item>
		<title>Timer Applet 2.0</title>
		<link>http://jimmydo.wordpress.com/2007/04/27/timer-applet-20/</link>
		<comments>http://jimmydo.wordpress.com/2007/04/27/timer-applet-20/#comments</comments>
		<pubDate>Fri, 27 Apr 2007 09:12:00 +0000</pubDate>
		<dc:creator>jimmydo</dc:creator>
				<category><![CDATA[d-bus]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Timer Applet]]></category>

		<guid isPermaLink="false">http://jimmydo.wordpress.com/2007/04/27/timer-applet-20/</guid>
		<description><![CDATA[Update: Fixed layout of example code. So&#8230;first blog entry. Let&#8217;s get to the good stuff: Timer Applet 2.0! I&#8217;m really excited about this release because it brings some extra polish that I&#8217;ve been meaning to add for a long time. I&#8217;ve re-written the entire applet in Python, so there are definitely some drastic under-the-hood changes, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=3&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-family:arial;"><span style="font-weight:bold;">Update:</span> Fixed layout of example code.</p>
<p>So&#8230;first blog entry. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Let&#8217;s get to the good stuff: Timer Applet 2.0!</span></p>
<p><span style="font-family:arial;">I&#8217;m really excited about this release because it brings some extra polish that I&#8217;ve been meaning to add for a long time. I&#8217;ve re-written the entire applet in Python, so there are definitely some drastic under-the-hood changes, but let&#8217;s talk about the user-visible changes.</span></p>
<p><span style="font-family:arial;">Here&#8217;s a quick overview:</span>
<ul style="font-family:arial;">
<li>New icon</li>
<li>Countdown animation with a &#8220;pie&#8221; meter</li>
<li>One-click selection of timer presets</li>
<li>Streamlined saving of new presets</li>
<li>Cleaner first-time experience with the Start Timer dialog</li>
<li>After a timer finishes, periodically redisplay the notification bubble until the user stops the timer</li>
<li>GConf option for notification beep using internal speakers (this needs verification)</li>
<li>D-Bus API</li>
</ul>
<p><b>New Icon</b><br /><span style="font-family:arial;">I&#8217;m no artist, but I tried my best to make something decent. I think it&#8217;s at least an improvement over the old one. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></p>
<div style="text-align:center;font-family:arial;"><a href="http://www.flickr.com/photos/7982697@N05/474336663/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/172/474336663_554a86a5d2_o.png" alt="timer-applet-logo-old-no-alpha" height="128" width="128" /></a><a href="http://www.flickr.com/photos/7982697@N05/474336659/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/169/474336659_00a28cb7e6_o.png" alt="timer-applet-logo-no-alpha" height="116" width="128" /></a></div>
<div style="text-align:center;"><span style="font-size:85%;">old icon vs. new icon</span></div>
<p><span style="font-weight:bold;font-family:arial;">Countdown Animation</span><br /><span style="font-family:arial;">A running timer will now show a &#8220;pie&#8221; meter that will indicate how much time is remaining.</p>
<p></span>
<div style="text-align:center;"><a href="http://www.flickr.com/photos/7982697@N05/474330089/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/221/474330089_480d2d0814_o.png" alt="timer-running-showing-time" height="34" width="81" /></a></div>
<p><span style="font-weight:bold;font-family:arial;">One-Click Presets</span><br /><span style="font-family:arial;">Previously, if you wanted to load a preset in the Start Timer dialog, you would have to double-click a preset or highlight it and click &#8216;Load Selected Preset&#8217;. Now, each item in the list of presets is a button that you can just click once to load the preset. Fewer clicks </span><span style="font-style:italic;font-family:arial;">and</span><span style="font-family:arial;"> we no longer need that &#8216;Load Selected Preset&#8217; button cluttering up the dialog.</p>
<p></span>
<div style="text-align:center;"><span style="font-family:arial;"><a href="http://www.flickr.com/photos/7982697@N05/474336665/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/202/474336665_b3cca6df3f_o.png" alt="start-timer-dialog-old" height="419" width="253" /></a><a href="http://www.flickr.com/photos/7982697@N05/474330079/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/175/474330079_cbe02dfff5_o.png" alt="start-timer-dialog" height="384" width="298" /></a></span></div>
<div style="text-align:center;"><span style="font-family:arial;font-size:85%;">old vs new Start Timer dialog</span></div>
<p><span style="font-weight:bold;font-family:arial;">Streamlined Saving of Presets</span><br /><span style="font-family:arial;">The most common thing you would probably need to do in the Start Timer dialog is create a preset, so now there&#8217;s a &#8216;Save as Preset&#8217; button that will create a preset out of the duration and name that you currently have entered in the fields. You can now create a preset from the comfort of the Start Timer dialog. The &#8216;Add&#8217;, &#8216;Edit&#8217;, and &#8216;Delete&#8217; buttons have been replaced with a &#8216;Manage Presets&#8217; button that will take you to the Manage Presets dialog, where you get access to all of the preset management options.</span></p>
<p><span style="font-weight:bold;font-family:arial;">Cleaner First-Time Experience</span><br /><span style="font-family:arial;">A brand-new user, with no presets, will see a simplified Start Timer dialog without the presets list (if there are no presets, then why show it, right?). The list of presets will only appear if there is at least one preset.</p>
<p></span>
<div style="text-align:center;"><span style="font-family:arial;"><a href="http://www.flickr.com/photos/7982697@N05/474330081/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/170/474330081_756e4848b4_o.png" alt="start-timer-dialog-first-time" height="259" width="259" /></a></span></div>
<p><span style="font-weight:bold;font-family:arial;">Periodic Redisplay of Notification Bubble</span><br /><span style="font-family:arial;">After a timer finishes, the notification bubble will keep reappearing until you click on the button to stop the timer. This is just another way to remind the user that the timer has finished, in addition to the blinking timer. BTW, the blinking happens faster now, so that it&#8217;s more noticeable.</span></p>
<p><span style="font-weight:bold;font-family:arial;">Internal Speaker Beep</span><br /><span style="font-family:arial;">I&#8217;ve added a GConf setting for making your internal PC speaker beep when a timer finishes. Since this probably won&#8217;t be used by many people, I chose not to expose it in the UI. My computer doesn&#8217;t have an internal speaker though, so I haven&#8217;t been able to test this feature. Please give it a try and let me know if it works. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  You can find the GConf key here:</span></p>
<p><span style="font-family:arial;">/apps/panel/applet_*/prefs/play_beep</span></p>
<p><span style="font-family:arial;">where * is some integer. It&#8217;s up to you to figure out which GConf entry corresponds to your current instance of Timer Applet. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Or you can use the D-Bus API to figure it out&#8230;.</span></p>
<p><span style="font-weight:bold;font-family:arial;">D-Bus API</span><br /><span style="font-family:arial;">You can now use D-Bus to get the list of timer IDs (an ID looks like &#8216;applet_*&#8217;, </span><span style="font-family:arial;">where * is some integer</span><span style="font-family:arial;">; this is the same as the applet&#8217;s GConf key). With the timer ID, you can get the corresponding Timer object and use it to start, pause/continue, or stop a Timer Applet instance.</span></p>
<p><span style="font-family:arial;">Here&#8217;s some sample code:<br /></span><span style="font-family:monospace;">
<pre style="overflow:auto;">#!/usr/bin/env python

import dbus

bus = dbus.SessionBus()timer_manager = bus.get_object('net.sourceforge.timerapplet.TimerApplet',                               '/net/sourceforge/timerapplet/TimerApplet/TimerManager')timer_id_list = timer_manager.GetTimerIDList()if len(timer_id_list) &gt; 0:    first_timer_id = timer_id_list[0]    print 'Starting timer with ID: %s' % first_timer_id

    timer = bus.get_object('net.sourceforge.timerapplet.TimerApplet',                           '/net/sourceforge/timerapplet/TimerApplet/Timers/' + first_timer_id)

    # Start() takes: name, hours, minutes, seconds    # Name can be an empty string.    timer.Start('Laundry', 0, 45, 0)else:    print 'There are no Timer Applets in the panel.'</pre>
<p></span><span style="font-family:arial;">The </span><span style="font-weight:bold;font-family:arial;">TimerManager</span><span style="font-family:arial;"> has only one method: GetTimerIDList().</span></p>
<p><span style="font-family:arial;">Each </span><span style="font-weight:bold;font-family:arial;">Timer</span><span style="font-family:arial;"> has these methods:</span>
<ul style="font-family:arial;">
<li>Start(name, hours, minutes, seconds)</li>
<li>PauseContinue()</li>
<li>Stop()</li>
</ul>
<p><span style="font-family:arial;">I tried to keep the API as simple as possible, so if it doesn&#8217;t meet your needs, let me know and I&#8217;ll try to work something out.</p>
<p>Phew, that was my first post. Done. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <br /></span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimmydo.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimmydo.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimmydo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimmydo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimmydo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimmydo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jimmydo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jimmydo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jimmydo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jimmydo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimmydo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimmydo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimmydo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimmydo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimmydo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimmydo.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimmydo.wordpress.com&amp;blog=5983756&amp;post=3&amp;subd=jimmydo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jimmydo.wordpress.com/2007/04/27/timer-applet-20/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimmydo</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/172/474336663_554a86a5d2_o.png" medium="image">
			<media:title type="html">timer-applet-logo-old-no-alpha</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/169/474336659_00a28cb7e6_o.png" medium="image">
			<media:title type="html">timer-applet-logo-no-alpha</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/221/474330089_480d2d0814_o.png" medium="image">
			<media:title type="html">timer-running-showing-time</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/202/474336665_b3cca6df3f_o.png" medium="image">
			<media:title type="html">start-timer-dialog-old</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/175/474330079_cbe02dfff5_o.png" medium="image">
			<media:title type="html">start-timer-dialog</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/170/474330081_756e4848b4_o.png" medium="image">
			<media:title type="html">start-timer-dialog-first-time</media:title>
		</media:content>
	</item>
	</channel>
</rss>
