<?xml version="1.0" encoding="iso-8859-1" ?>
<rss version="2.0" 
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" 
   xmlns:html="http://www.w3.org/1999/html" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
   <title>PlatosCave.net</title>
   <link>http://www.platoscave.net</link>
   <description>Wayne Dyck personal website and blog. Linux, programming, web design and the occasional deep thought.</description>
   <language>en</language>
   <copyright>Copyright 2008 PlatosCave.net</copyright>
   <ttl>60</ttl>
   <pubDate>Thu, 12 Jun 2008 05:13 GMT</pubDate>
   <managingEditor>wayne at platoscave.net</managingEditor>
   <generator>PyBlosxom http://pyblosxom.sourceforge.net/ 1.4.3 01/10/2008</generator>
<item>
   <title>Encoding ampersands with Python</title>
   <guid isPermaLink="false">computers/programming/languages/python/encoding-ampersands-with-python</guid>
   <link>http://www.platoscave.net/computers/programming/languages/python/encoding-ampersands-with-python.html</link>
   <description><![CDATA[
<p>I need to replace ampersands in a text file with the HTML entity '&amp;'. I could simply use Python's string <code>replace</code> 
method, however, this will mess up my text if some of the ampersands have already been turned into HTML entities. The same is true 
if I use regular expressions to match a single '&amp;'. What I really need to do is replace an ampersand providing it is 
not followed by 'amp;'.</p>
<p>Using <a href="http://www.regular-expressions.info/lookaround.html">negative lookahead assertion</a> with our regular 
expression is the answer. Negative lookahead is used when you want to match something not followed by something else. It starts 
with <code>(?!</code> and finishes at the <code>)</code>.</p>
<p>Our expression now becomes: <code>&(?!amp;)</code> and means the text it contains, <code>amp;</code>, must not follow the 
expression that preceeds it.</p>
<p>In this example I also added an expression to not match any HTML entity numbers as well.</p>
<pre>
&gt;&gt;&gt; import re
&gt;&gt;&gt; s = "&lt;Title&gt;Eugene&amp;#039;s Software Emporium & Arcade&lt;/Title&gt;"
&gt;&gt;&gt; pattern = re.compile('&(?!#)(?!amp;)')
&gt;&gt;&gt; if pattern.search(s):
...   iterator = pattern.finditer(s)
...   for match in iterator:
...     print match.span()
... 
(38, 39)
&gt;&gt;&gt; s[match.start():match.end()]
'&'
&gt;&gt;&gt; 
</pre>

]]></description>
   <category domain="http://www.platoscave.net">/computers/programming/languages/python</category>
   <pubDate>Thu, 12 Jun 2008 05:13 GMT</pubDate>
</item>
<item>
   <title>Python - Web application frameworks</title>
   <guid isPermaLink="false">computers/programming/languages/python/python-web-application-frameworks</guid>
   <link>http://www.platoscave.net/computers/programming/languages/python/python-web-application-frameworks.html</link>
   <description><![CDATA[
<p>The <a href="http://wiki.python.org/moin/">PythonInfo Wiki</a> defines a a web framework as,</p>
<blockquote>
<p>a collection of packages or modules which allow developers 
to write Web applications or services without having to handle such low-level 
details as protocols, sockets or process/thread management.</p>
</blockquote>
<p>As a testiment to Python's power and simplicity it would seem that many developers have created 
their own frameworks rather than use a solution already in existence. As a result one will find solutions 
in various stages of development and feature implementation.</p>
<p>I have always tried to subscribe to the basic principle of using the right tool for the job. 
With that in mind I have embarked on an exploratory journey to investigate some of Python's existing 
Web frameworks with hopes of finding one that will work for a couple of big projects I have in the 
works. My requirements are fairly simple; I do not want to learn a behemoth of an API that will take 
months to figure out, yet I do not want something so simplistic that it will expect me to handle to many 
low-level details. Finally, until I can bring my own server back online, the chosen framework needs to work 
with my current hosting provider, DreamHost.</p>
<p>The five high-level frameworks I am looking at include:</p>
<ul>
<li style="font-size: 1.2em; line-height: 1.4em;"><a href="http://www.djangoproject.com/">Django</a> is a high-level Python Web framework that encourages 
rapid development and clean, pragmatic design. Because Django was developed in a fast-paced newsroom 
environment, it was designed to make common Web-development tasks fast and easy.</li>
<li style="font-size: 1.2em; line-height: 1.4em;"><a href="http://www.turbogears.org/">TurboGears</a> builds on other open source projects. In TurboGears, 
<a href="http://www.cherrypy.org/">CherryPy</a> controllers sit at the hub of your project. This is the 
biggest area for integration. Providing tools that allow the controllers to more easily work 
with <a href="http://www.sqlobject.org/">SQLObject</a> databases, answer asynchronous calls from 
<a href="http://mochikit.com/">MochiKit</a> and render out completed 
<a href="http://www.kid-templating.org/">Kid templates</a> is where the big win will come.</li>
<li style="font-size: 1.2em; line-height: 1.4em;"><a href="http://pylonshq.com/">Pylons</a> combines the very best ideas from the worlds of Ruby, 
Python and Perl, providing a structured but extremely flexible Python web framework. It's also one 
of the first projects to leverage the emerging WSGI standard, which allows extensive re-use and 
flexibility - but only if you need it. Out of the box, Pylons aims to make web development fast, 
flexible and easy.</li>
<li style="font-size: 1.2em; line-height: 1.4em;"><a href="http://www.webwareforpython.org/">Webware</a> is a suite of Python packages and tools 
for developing object-oriented, web-based applications. The suite uses well known design patterns 
and includes a fast Application Server, Servlets, Python Server Pages (PSP), Object-Relational Mapping, 
Task Scheduling, Session Management, and many other features. Webware is very modular and easily extended.</li>
<li style="font-size: 1.2em; line-height: 1.4em;"><a href="http://www.zope.org">Zope</a> is an open source application server for building content 
management systems, intranets, portals, and custom applications. The Zope community consists of hundreds 
of companies and thousands of developers all over the world, working on building the platform and Zope 
applications. Zope is written in Python.</li>
</ul>
<p></p>

]]></description>
   <category domain="http://www.platoscave.net">/computers/programming/languages/python</category>
   <pubDate>Mon, 26 May 2008 20:48 GMT</pubDate>
</item>
<item>
   <title>HTML Slidy - A browser based XHTML presentation framework</title>
   <guid isPermaLink="false">computers/software/html-slidy-presentation-framework</guid>
   <link>http://www.platoscave.net/computers/software/html-slidy-presentation-framework.html</link>
   <description><![CDATA[
<p>While at <a href="http://www.linuxfestnorthwest.org/">LinuxFest Northwest 2008</a> in Bellingham, WA this past weekend I attended a session on natural language processing in Python presented by <a href="http://www.semanticbible.com/">Sean Boisen</a>. His <a href="http://www.semanticbible.com/other/talks/2008/nltk/nltk.html">slide presentation</a> was done, not with PowerPoint, but with <a href="http://www.w3.org/2005/03/slideshow.html">HTML Slidy</a>, a browser based XHTML presentation framework. The best thing about HTML Slidy is that it is cross-browser compatible using simple XHTML, JavaScript and CSS, operates like PointPoint and best of all, is accessible.</p>
<p>The next time I have a presentation to make, HTML Slidy is definitely something I am going to try.</p>

]]></description>
   <category domain="http://www.platoscave.net">/computers/software</category>
   <pubDate>Tue, 29 Apr 2008 03:55 GMT</pubDate>
</item>
<item>
   <title>Online dining guide and restaurant reviews</title>
   <guid isPermaLink="false">personal/dining-guide-domain</guid>
   <link>http://www.platoscave.net/personal/dining-guide-domain.html</link>
   <description><![CDATA[
<p>The other day I managed to secure the <a href="http://www.dining-guide.org">dining-guide.org</a> domain name.</p>
<p>The <a href="http://www.dining-guide.org">Dining Guide</a> will offer restaurant and cafe patrons a place to share their 
experiences with others. How many times have you had a bad experience in a restaurant and later talked with a friend 
to learn they had a simliar one? Would you rather know where the exceptional food and service is? Would you rather 
know a head of time if the restaurant is family friendly? I certainly would and that is one of the reasons why I am 
building the site.</p>
<p>I have seen many sites offering variations on this same theme, however, none of them have the feature sets and 
usability that I will be implementing on the <a href="http://www.dining-guide.org">Dining Guide</a> site.</p>
<p>Stay tuned and be sure to watch the site over the next few weeks.</p>


]]></description>
   <category domain="http://www.platoscave.net">/personal</category>
   <pubDate>Sat, 26 Apr 2008 17:28 GMT</pubDate>
</item>
<item>
   <title>Effigy Interactive Mindscape - Flash</title>
   <guid isPermaLink="false">personal/effigy-interactive-mindscape</guid>
   <link>http://www.platoscave.net/personal/effigy-interactive-mindscape.html</link>
   <description><![CDATA[
<div style="float:right;padding:5px"><img src="/images/effigy-interactive-mindscape.jpg" width="185" height="105" alt="Effigy Interactive Mindscape"></div>
<p>This is one of <a href="/portfolio/websites/effigy/">the sites I did for my company</a>, Effigy Interactive, back in 2002. I broke every usability and accessibility rule creating it, however, most self-promotional sites usually do.</p>
<p>The Flash portion of the site is meant to be atmospheric and encourage the viewer to explore and discover. I never got around to finishing the html portion as I was to busy with customer sites and other paying projects.</p>

]]></description>
   <category domain="http://www.platoscave.net">/personal</category>
   <pubDate>Sat, 05 Apr 2008 17:00 GMT</pubDate>
</item>
<item>
   <title>Linux and the Insignia Pilot Video MP3 Player</title>
   <guid isPermaLink="false">computers/linux/insignia-pilot-video-mp3-player</guid>
   <link>http://www.platoscave.net/computers/linux/insignia-pilot-video-mp3-player.html</link>
   <description><![CDATA[
<div style="float:right;padding:5px"><img src="/images/insignia-pilot.jpg" width="185" height="94" alt="Image of Insignia Pilot video MP3 player"></div>
<p>Last month I picked myself up an <a href="http://www.insignia-products.com/pc-289-22-insignia-pilot-8gb-video-mp3-player-with-bluetooth-technology.aspx">8GB Insignia Pilot video MP3 player</a> from <a href="http://www.bestbuy.com">Best Buy</a> for Christmas.</p>
<p>I looked at a number of MP3 players before deciding on the Insignia Pilot. I had two main requirements: it had to work with Linux and it had to support <a href="http://www.vorbis.com/">Ogg Vorbis</a> audio. The Insignia Pilot does both of these and more. It supports an impressive list of formats: MP3, WMA, WMA Lossless, WMA DRM, WMA Pro, OGG, WAV, Audible, MPEG4 (30 fps), WMV (30 fps) and JPEG.</p>
<p>The Insignia Pilot supports 320x240 MPEG4 video at 30 fps. Very nice. The installation CD includes a Windows based application that will convert video clips and images into a format compatible with the Pilot. This is great if you are running Windows, however, not so helpful if you are running Linux.</p>
<p>Over the next few days I learned more about video codecs and encoding than I had planned to. The <a href="http://www.anythingbutipod.com">Anything But iPod</a> site was a great source of information and thanks in part to this initial thread on <a href="http://www.anythingbutipod.com/forum/showthread.php?t=20066">supported video formats</a>, <a href="http://www.mplayerhq.hu/">MPlayer</a> and hours of reading the documentation for <a href="http://www.mplayerhq.hu/DOCS/HTML/en/mencoder.html">MEncoder</a> and <a href="http://www.xvid.org/">Xvid</a> followed by trial and error I have a workable solution.</p>
<p>First copy the DVD (which you own) to your hard drive using the following,</p>
<pre>
mplayer dvd://1 -dumpstream -dumpfile dump.vob
</pre>
<p>Next is the encoding process. The Pilot's screen is 320x240, however, if the DVD is in widescreen format and you want to preserve the ratio you need to scale the video to 320x176 instead.</p>
<pre>
mencoder dump.vob -oac mp3lame -lameopts cbr:br=96 -srate 44100 -af resample=44100:0:0 -af volume=20 \ 
-ovc lavc -lavcopts vcodec=mpeg4:mbd=1:vbitrate=384 -sws 2 -vf scale=320:176,harddup \
-noskip -skiplimit 1 -ffourcc XVID -ofps 29.97 -o output.avi
</pre>
<p>With the above settings I can encode the Matrix to 481.1 MB. For me, these settings provide a reasonable trade off of size over quality. If one wants a slightly higher quality you can change the audio and video bitrates to <code>cbr:br=128</code> and <code>vbitrate=512</code> respectively.</p>

]]></description>
   <category domain="http://www.platoscave.net">/computers/linux</category>
   <pubDate>Sat, 26 Jan 2008 19:17 GMT</pubDate>
</item>
<item>
   <title>Python - Recursive Directory Crawl Using Generators</title>
   <guid isPermaLink="false">computers/programming/languages/python/recursive-directory-crawl</guid>
   <link>http://www.platoscave.net/computers/programming/languages/python/recursive-directory-crawl.html</link>
   <description><![CDATA[
<p>I was looking for an <code>os.walk</code> example to crawl through a file system and found 
the <code>locate</code> function below on <a href="http://aspn.activestate.com/ASPN/Cookbook/Python/">ActiveState's Python Cookbook</a> site. 
I incorporated it into a simple routine that dumps the output to an XML file that can then be 
transformed using XSLT to sort and tally the results.</p>
<pre>
#!/usr/bin/env python

import os
import fnmatch
import time
from xml.dom import minidom

def locate(pattern, root=os.curdir):
    for path, dirs, files in os.walk(os.path.abspath(root)):
        for filename in fnmatch.filter(files, pattern):
            yield os.path.join(path, filename)
 
def main():
    doc = minidom.Document()
    files = doc.createElement("files")
    doc.appendChild(files)
    comment = doc.createComment("Size attribute is reported in bytes.")
    files.appendChild(comment)
    
    for i, file in enumerate(locate("*.*", "\\\\SERVER\\Share")):
        try:
            item = doc.createElement("filename")
            item.setAttribute("id", "%s" % (i))
            item.setAttribute("path", file)
            item.setAttribute("ext", os.path.splitext(file)[1].lower())
            item.setAttribute("size", "%s" % os.stat(file).st_size)
            item.setAttribute("last_modified", time.ctime(os.stat(file).st_mtime))
            files.appendChild(item)
        except OSError, e:
            print "%s => %s" % (file, e.strerror)

    fp = open('myfiles.xml', 'w')
    doc.writexml(fp, "", "  ", "\n", "iso-8859-1")
    fp.close()
    
    return    

if __name__ == "__main__":
    main()
</pre>
<p>The <code>locate</code> function takes two parameters; the first is a file pattern 
to match and the second is the directory to start the crawl from.</p>

]]></description>
   <category domain="http://www.platoscave.net">/computers/programming/languages/python</category>
   <pubDate>Wed, 07 Nov 2007 07:25 GMT</pubDate>
</item>
<item>
   <title>Invenacom - Free Online Home Inventory Service</title>
   <guid isPermaLink="false">personal/invenacom-home-inventory-services</guid>
   <link>http://www.platoscave.net/personal/invenacom-home-inventory-services.html</link>
   <description><![CDATA[
<div style="float:right;padding:5px"><a href="http://www.invenacom.com/"><img src="/images/invenacom_logo.jpg" width="192" height="141" alt="Invenacom logo"></a></div>
<p><a href="http://www.invenacom.com/">Invenacom Home Inventory Services, Inc.</a> is now offering their <a href="http://www.invenacom.com/our_solution.php">online asset management program</a> for free.</p>
<p>Although you can purchase a number of home inventory software programs in stores, Invenacom's system is unique in that it is web-based. The system will automatically keep track of the value of your assets so you can be sure your home insurance policy will cover everything in the event of a loss. You would be surprised how much you actually have. The program also allows you to upload a digital photo of each item and it will automatically resize it on the fly.</p>
<p>All your documented valuables are stored securely on their servers rather than locally on your computer so in the event of a fire or theft you simply log into their website and you have full access to your itemized inventory.</p>
<p>If you are curious about the company, I found a <a href="http://www.youtube.com/watch?v=HTAc8QCe7K8">video interview with the founders, Gerald Lau and Terry Dhut</a> on YouTube as well as a <a href="http://www.youtube.com/watch?v=2OzavlTsvMU">promotional video</a> for their service.</p>
<p>It's a very simple to use and efficient system. If you get a chance, take a look at it.</p>

]]></description>
   <category domain="http://www.platoscave.net">/personal</category>
   <pubDate>Tue, 10 Jul 2007 07:08 GMT</pubDate>
</item>
<item>
   <title>Linuxfest Northwest 2007 - Bellingham, WA</title>
   <guid isPermaLink="false">computers/linux/linuxfest-northwest-2007-bellingham-wa</guid>
   <link>http://www.platoscave.net/computers/linux/linuxfest-northwest-2007-bellingham-wa.html</link>
   <description><![CDATA[
<p><a href="http://opintech.blogspot.com/">PythonDog</a> and I once again made the yearly trek to Bellingham, WA for 
<a href="http://www.linuxfestnorthwest.org/">Linuxfest Northwest</a>. This year's Fest spanned two days rather than 
the usual one and, in my opinion, it continues to get better each time.</p>
<p>The presentations I attended were varied:</p>
<ul style="font-size: 1.2em;">
  <li><a href="http://www.jabber.org/">Jabber</a> with <a href="http://ejabberd.jabber.ru/">ejabberd</a> - Aaron Klemm, <a href="http://www.digipen.edu/">DigiPen Institute of Technology</a></li>
  <li>Open sourcing <a href="http://www.secondlife.com/">Second Life</a> - Rob Lanphier and Phoenix Linden, <a href="http://www.lindenlab.com/">Linden Lab</a></li>
  <li>From HTML to <a href="http://www.mozilla.org/projects/xul/">XUL</a>, Web to Desktop - Shane Caraveo, <a href="http://www.activestate.com/">ActiveState</a></li>
  <li>Why <a href="http://plone.org/">Plone</a>? (An Intro) - Brian Gershon and Andrew Burkhalter, Seattle Plone Users Group</li>
  <li>Up and Running (Fast) - Andy Carrel, <a href="http://www.google.com/">Google</a></li>
  <li><a href="http://www.laptop.org/">One Laptop Per Child</a> - Jesse Keating, <a href="http://www.redhat.com/">Red Hat</a></li>
  <li>How Sites Scale Out - Brian Aker, <a href="http://www.mysql.com/">MySQL AB</a></li>
</ul>
<p>My favorite sessions were by Linden Lab (Second Life), Google (Up and Running), Red Hat (OLPC) and MySQL (How Sites Scale Out).</p>
<p>Although I do not consider myself much of a virtual socialite, the concept of what Linden Lab is doing with Second Life appeals to  a part of me. It is a social medium and, like any medium, it allows the creative an outlet to express oneself and hopefully, in turn, reach a receptive audience.</p>
<p>Listening to what Andy Carrel had to say about Google and the daily issues they face with the vast amounts of hardware and data is mind boggling. One of the things he said that set me thinking was that of programmer effectiveness. Google engineers create services that run on building-sized computing platforms. Their computer is made up of thousands of CPUs, lots of DRAM, networking devices, and disk drives. I consider myself fortunate if I have a second server to help load balance a service.</p>
<p>Jesse Keating with Red Hat gave a great presentation on the One Laptop Per Child (OLPC) initiative. The little green laptop is a marvel of engineering and a testiment to what they are trying to accomplish considering who their target audience is - the third world, underdeveloped countries, kids. Each child gets their own laptop to take home and bring back to school. The short and long term implications of what this could mean for their development as individuals and a nation is awe inspiring.</p>
<p>Next year's Linuxfest is already on my calendar. I can't wait.</p>

]]></description>
   <category domain="http://www.platoscave.net">/computers/linux</category>
   <pubDate>Mon, 30 Apr 2007 06:00 GMT</pubDate>
</item>
<item>
   <title>Flickr - Online Photo Management and Sharing</title>
   <guid isPermaLink="false">personal/flickr-online-photo-management-and-sharing</guid>
   <link>http://www.platoscave.net/personal/flickr-online-photo-management-and-sharing.html</link>
   <description><![CDATA[
<p><a href="http://www.flickr.com">Flickr</a> is an online photo management and sharing application. 
The service offers the ability to make photos available to others, both public and private, and collaborative 
ways of organizing images by allowing others to categorize photos by adding comments and tags.</p>
<p>I have uploaded a few images into <a href="http://www.flickr.com/photos/platoscave/">my Flickr account</a>. 
Some are digital and others are scans from my 35mm, Minolta X-700 that I still use as my primary camera.</p>



]]></description>
   <category domain="http://www.platoscave.net">/personal</category>
   <pubDate>Sat, 21 Apr 2007 15:21 GMT</pubDate>
</item>
<item>
   <title>Python - SOAPpy and HTTP Authentication</title>
   <guid isPermaLink="false">computers/programming/languages/python/soappy-http-authentication</guid>
   <link>http://www.platoscave.net/computers/programming/languages/python/soappy-http-authentication.html</link>
   <description><![CDATA[
<p>The other week I was wanting to use a SOAP web service that was protected by http 
basic authentication. I could not find a way to do the authentication with SOAPpy. 
I looked everywhere for an example before I stumbled upon a version of the 
below code in an archived newsgroup post.</p>
<pre>
from SOAPpy import Config, HTTPTransport, SOAPAddress, WSDL

class myHTTPTransport(HTTPTransport):
    username = None
    passwd = None
    
    @classmethod
    def setAuthentication(cls,u,p):
        cls.username = u
        cls.passwd = p
          
    def call(self, addr, data, namespace, soapaction=None, encoding=None,
             http_proxy=None, config=Config):
        
        if not isinstance(addr, SOAPAddress):
            addr=SOAPAddress(addr, config)
            
        if self.username != None:
            addr.user = self.username+":"+self.passwd
            
        return HTTPTransport.call(self, addr, data, namespace, soapaction,
                                  encoding, http_proxy, config)
    

if __name__ == '__main__':
    wsdlFile = 'http://localhost/soap/wsdl/'
    myHTTPTransport.setAuthentication('gollum', 'myprecious')
    server = WSDL.Proxy(wsdlFile, transport=myHTTPTransport)
    print server.ApiVersion()

</pre>
<p>It works because you can specify your own transport to the WSDL.Proxy using 
Python's **kw feature. The original author subclassed the default transport 
in Client.HTTPTransport and added a static class method to supply the basic 
authentication.</p>

]]></description>
   <category domain="http://www.platoscave.net">/computers/programming/languages/python</category>
   <pubDate>Sun, 25 Mar 2007 06:09 GMT</pubDate>
</item>
<item>
   <title>IBM's developerWorks - JavaScript and Ajax Tutorial Series</title>
   <guid isPermaLink="false">computers/programming/languages/javascript/javascript-and-ajax-tutorial-series</guid>
   <link>http://www.platoscave.net/computers/programming/languages/javascript/javascript-and-ajax-tutorial-series.html</link>
   <description><![CDATA[
<p>One of my often visited bookmarks is IBM's <a href="http://www-128.ibm.com/developerworks/">developerWorks 
site</a>. The site is virtual library of technical information and tutorials.</p>
<p>In September 2006, Brett McLaughlin, Author and Editor with O'Reilly Media Inc, concluded his six part
series on JavaScript, Ajax and the Document Object Model (DOM). Part one of the series starts with a 
quick-paced introduction to what Ajax is and how it works, follows with the use of the XMLHttpRequest object 
for Web requests and understanding the HTTP status codes it returns. The remaining parts of the series focus 
on how to mix JavaScript and the DOM to create interactive Ajax applications.</p>
<p>It is a great series that I still reference now and then when in the midst of a project.</p>
<ul>
  <li><a href="http://www-128.ibm.com/developerworks/webservices/library/wa-ajaxintro1.html">Mastering Ajax, Part 1: Introduction to Ajax</a></li>
  <li><a href="http://www-128.ibm.com/developerworks/webservices/library/wa-ajaxintro2/index.html">Mastering Ajax, Part 2: Make asynchronous requests with JavaScript and Ajax</a></li>
  <li><a href="http://www-128.ibm.com/developerworks/webservices/library/wa-ajaxintro3/index.html">Mastering Ajax, Part 3: Advanced requests and responses in Ajax</a></li>
  <li><a href="http://www-128.ibm.com/developerworks/webservices/library/wa-ajaxintro4/index.html">Mastering Ajax, Part 4: Exploiting DOM for Web response</a></li>
  <li><a href="http://www-128.ibm.com/developerworks/webservices/library/wa-ajaxintro5/index.html">Mastering Ajax, Part 5: Manipulate the DOM</a></li>
  <li><a href="http://www-128.ibm.com/developerworks/webservices/library/wa-ajaxintro5/index.html">Mastering Ajax, Part 6: Build DOM-based Web applications</a></li>
  </ul>
<p></p>

]]></description>
   <category domain="http://www.platoscave.net">/computers/programming/languages/javascript</category>
   <pubDate>Fri, 16 Mar 2007 04:23 GMT</pubDate>
</item>
<item>
   <title>Overcast of Tag Clouds</title>
   <guid isPermaLink="false">computers/internet/design/overcast-of-tag-clouds</guid>
   <link>http://www.platoscave.net/computers/internet/design/overcast-of-tag-clouds.html</link>
   <description><![CDATA[
<p>With the proliferation of <a href="http://en.wikipedia.org/wiki/Tag_cloud">tag clouds</a> appearing on the Web and 
providing a visual representation of both content tags and every other imaginable type of information I wonder if 
we will reach a saturation point. I wonder if we will become so inundated with our interpretive clouds that they will 
form a virtual overcast and obscure the clarity that comes on a cloudless day.</p>

]]></description>
   <category domain="http://www.platoscave.net">/computers/internet/design</category>
   <pubDate>Thu, 01 Feb 2007 08:07 GMT</pubDate>
</item>
<item>
   <title>Fedora Core 6 - GeForce3 Ti 200</title>
   <guid isPermaLink="false">computers/linux/fedora-core-6-geforce3-ti-200</guid>
   <link>http://www.platoscave.net/computers/linux/fedora-core-6-geforce3-ti-200.html</link>
   <description><![CDATA[
<p>I upgraded my main home computer to Fedora Core 6 (FC6) this past weekend. It has faithfully run Fedora Core 3 for the 
last couple of years, however, I was so impressed with FC6 on my laptop I decided to update the main computer as well.<p>
<p>After completing the installation I usually look to <a href="http://www.fedorafaq.org/">The Unofficial Fedora FAQ</a> 
for answers on the usual little quirks that come with each release, however, they appear to have not updated the site 
for FC6. Instead, I turned to <a href="http://www.gagme.com/greg/linux/fc6-tips.php">Fedora Core 6 Tips and Tricks</a> 
for quick references to installing the most popular free add-on software packages.</p>
<p>The first thing I always do after a fresh install is update my 
<a href="http://en.wikipedia.org/wiki/Yellow_dog_Updater%2C_Modified">yum</a> configuration to include the livna and 
freshrpms repositories,</p>
<pre>
rpm -ihv http://ayo.freshrpms.net/fedora/linux/6/i386/RPMS.freshrpms/freshrpms-release-1.1-1.fc.noarch.rpm
rpm -ihv http://rpm.livna.org/fedora/6/i386/livna-release-6-1.noarch.rpm
</pre>
<p><strong>Installing Xine DVD Player</strong><br>
With the above repositories setup, installing the <a href="http://xinehq.de/">Xine Video Player</a> is as simple 
as entering the following yum statement,</p>
<pre>
yum install xine xine-lib-extras-nonfree libdvdcss
</pre>
<p>and letting it resolve the other package dependencies. The <strong>libdvdcss</strong> library is what allows one to 
play commercial DVD movies.</p>
<p><strong>Installing the Nvidia Drivers</strong><br>One of my other motivations for upgrading to FC6 was the new OpenGL accelerated desktop effects provided by
 <a href="http://en.wikipedia.org/wiki/Compiz">Compiz.</a> Upon grabbing the latest drivers from Nvidia I discovered 
that my video card is now listed as "legacy" and is no longer supported in the most recent driver downloads. I read 
that Compiz needs at least version 96xx of the Nvidia drivers to work. I had to try several different ones until I 
found that the <a href="http://www.nvidia.com/object/linux_display_ia32_1.0-9631.html">NVIDIA-Linux-x86-1.0-9631-pkg1.run</a>
 package worked correctly.</p>
<p>My final modified xorg.conf configuration file is below which contains the necessary entries to add the 
Nvidia OpenGL drivers as well as the transparency effects.</p>
<pre>
# Xorg configuration created by system-config-display

Section "ServerLayout"
        Identifier     "single head configuration"
        Screen      0  "Screen0" 0 0
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Module"
        Load  "dbe"
        Load  "extmod"
        Load  "type1"
        Load  "freetype"
        Load  "glx"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
        Option      "XkbModel" "pc105"
        Option      "XkbLayout" "us"
EndSection

Section "Device"
        Identifier  "Videocard0"
        Driver      "nvidia"
        VendorName  "NVIDIA Corporation"
        Option      "AddARGBGLXVisuals" "True"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Videocard0"
        DefaultDepth     24
        SubSection "Display"
                Viewport   0 0
                Depth     24
        EndSubSection
EndSection
</pre>
<p>I am still amazed it runs as well as it does on my aging Pentium III 866 Mhz.</p>

]]></description>
   <category domain="http://www.platoscave.net">/computers/linux</category>
   <pubDate>Wed, 17 Jan 2007 19:00 GMT</pubDate>
</item>
<item>
   <title>Gas Leak!</title>
   <guid isPermaLink="false">personal/gas-leak</guid>
   <link>http://www.platoscave.net/personal/gas-leak.html</link>
   <description><![CDATA[
<p>Martin Luther King, Jr. Day was punctuated earlier this morning by a knock on our door. One of the sub-contractors 
working next to our neighbor's house had punctured a gas line while excavating. Whoops. They advised we might want 
to evacuate the house, just to be on the safe side, until the gas company could cap the broken line. It seemed like a 
reasonable suggestion so we headed a few doors down to the development's show home and office to wait.</p>
<p>All in all we were only out of the house for about 15 minutes before the gas company showed up and fixed the 
leak. I was pleased that my house was still where I left it and that it did not end up resembling a pile of 
<a href="http://en.wikipedia.org/wiki/Creamsicle">popsicle</a> sticks.</p>


]]></description>
   <category domain="http://www.platoscave.net">/personal</category>
   <pubDate>Mon, 15 Jan 2007 19:07 GMT</pubDate>
</item>
</channel>
</rss>
