<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>/dev/weblog</title>
    <link>http://devweblog.org/</link>
    <description>Technical drivel.</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.3 - http://www.s9y.org/</generator>
    <pubDate>Thu, 26 Jun 2008 01:53:53 GMT</pubDate>

    <image>
        <url>http://devweblog.org/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: /dev/weblog - Technical drivel.</title>
        <link>http://devweblog.org/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Eclipse Ganymede</title>
    <link>http://devweblog.org/archives/27-Eclipse-Ganymede.html</link>
            <category>Open Source</category>
    
    <comments>http://devweblog.org/archives/27-Eclipse-Ganymede.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=27</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=27</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    
&lt;p&gt;&lt;a href=&quot;http://www.eclipse.org/downloads/&quot;&gt;Eclipse Ganymede&lt;/a&gt; came out today.  (Those who &lt;a href=&quot;http://www.eclipse.org/donate/&quot;&gt;donated&lt;/a&gt; could have gotten it earlier).&lt;/p&gt;&lt;p&gt;Here&#039;s a screenshot of my download speed for Ganymede.&lt;/p&gt;&lt;div&gt;&lt;!-- s9ymdb:3 --&gt;&lt;img height=&quot;300&quot; width=&quot;485&quot; style=&quot;border: 1px solid rgb(243, 243, 243);&quot; alt=&quot;25.8 of 151MB (2.1MB/sec)&quot; class=&quot;serendipity_image_left&quot; src=&quot;http://devweblog.org/uploads/eclipse-dl-speed.png&quot; /&gt;&lt;/div&gt;
&lt;p&gt;Thanks for ~2.0MiB/sec download speeds, Verizon FiOS!&lt;/p&gt;
&lt;p&gt;Now I&#039;m about to install the latest Integration version of &lt;a href=&quot;http://www.eclipse.org/pdt&quot;&gt;PDT&lt;/a&gt;, so we&#039;ll see how that goes.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 25 Jun 2008 20:43:50 -0400</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/27-guid.html</guid>
    <category>eclipse</category>
<category>open source</category>
<category>verizon fios</category>

</item>
<item>
    <title>/dev/audio</title>
    <link>http://devweblog.org/archives/26-devaudio.html</link>
    
    <comments>http://devweblog.org/archives/26-devaudio.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=26</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=26</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    &lt;p&gt;I like programming and listening to music.  It helps set a pace for me to work.  This little gem just popped in my head while I was listening to AC/DC:&lt;/p&gt;
&lt;div style=&quot;border: 1px solid rgb(208, 208, 208); font-family: monospace; color: rgb(0, 0, 102); background-color: rgb(240, 240, 240);&quot; class=&quot;php&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-weight: bold;&quot;&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: rgb(177, 177, 0);&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 204, 102);&quot;&gt;(&lt;/span&gt;; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;$those&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;aboutToRock&lt;/span&gt;; &lt;span style=&quot;color: rgb(102, 204, 102);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(102, 204, 102);&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;$we&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: rgb(0, 102, 0);&quot;&gt;saluteYou&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 204, 102);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 204, 102);&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: rgb(102, 204, 102);&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Yes, I know.  I&#039;m awesome.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 29 May 2008 12:49:50 -0400</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/26-guid.html</guid>
    <category>music</category>
<category>php</category>

</item>
<item>
    <title>Xyster Build 6</title>
    <link>http://devweblog.org/archives/25-Xyster-Build-6.html</link>
            <category>Xyster</category>
    
    <comments>http://devweblog.org/archives/25-Xyster-Build-6.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=25</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=25</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    &lt;p&gt;Build 6 of the Xyster Framework has been released.  Tons of new features both in core and in incubator.&lt;/p&gt;&lt;p&gt;Please head over to &lt;a href=&quot;http://xyster.devweblog.org&quot;&gt;the Xyster site&lt;/a&gt; and grab yourself a copy.&lt;/p&gt;

            
            
 
    </content:encoded>

    <pubDate>Mon, 19 May 2008 18:54:19 -0400</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/25-guid.html</guid>
    <category>php</category>
<category>releases</category>
<category>xyster</category>

</item>
<item>
    <title>Oracle 10g XE and OpenVZ</title>
    <link>http://devweblog.org/archives/24-Oracle-10g-XE-and-OpenVZ.html</link>
            <category>Databases</category>
    
    <comments>http://devweblog.org/archives/24-Oracle-10g-XE-and-OpenVZ.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=24</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=24</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    
&lt;p&gt;Last night I tried to install &lt;a href=&quot;http://www.oracle.com/technology/products/database/xe/&quot;&gt;Oracle 10g XE&lt;/a&gt; on my Debian-based database server for testing purposes.  &lt;em&gt;Tried&lt;/em&gt; is the key word here.&lt;/p&gt;
&lt;p&gt;Interestingly enough, Oracle offers a deb repository for this purpose. Add the following line to your &lt;kbd&gt;/etc/apt/sources.list&lt;/kbd&gt;:&lt;/p&gt;
&lt;pre&gt;deb http://oss.oracle.com/debian unstable main non-free&lt;/pre&gt;
&lt;p&gt;Then execute the following commands as root (or with sudo) to add Oracle&#039;s public signing key and then install Oracle XE:&lt;/p&gt;
&lt;pre&gt;# wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle  -O- | sudo apt-key add - &lt;br /&gt;# apt-get update&lt;br /&gt;# apt-get install oracle-xe&lt;/pre&gt;
&lt;p&gt;Here&#039;s the catch: my database server is an &lt;a href=&quot;http://www.openvz.org&quot;&gt;OpenVZ&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Virtual_private_server&quot;&gt;VPS&lt;/a&gt;.  The Oracle installer checks for a sufficiently large swap partition and will bomb out if one of a sufficient size is not found.  OpenVZ VPSs &lt;em&gt;do not have&lt;/em&gt; a swap partition.&lt;/p&gt;
&lt;p&gt;OpenVZ &lt;em&gt;does&lt;/em&gt; support swap space, and that swap space can be set with barriers and limits, &lt;strong&gt;but&lt;/strong&gt; the swap space is &lt;em&gt;as a whole&lt;/em&gt; meaning that there is one swap space for the entire system, not a user-configurable swap space per-VPS.&lt;/p&gt;
&lt;p&gt;So now comes the task of tricking the installer to think I the VPS has a swap partition, or trying to get it on there some other way.  Stay tuned for the nuttiness.&lt;/p&gt;
&lt;p&gt;Oracle is stupid.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 06 May 2008 18:14:23 -0400</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/24-guid.html</guid>
    <category>databases</category>
<category>debian</category>
<category>openvz</category>
<category>oracle</category>

</item>
<item>
    <title>Shutdown Day</title>
    <link>http://devweblog.org/archives/23-Shutdown-Day.html</link>
    
    <comments>http://devweblog.org/archives/23-Shutdown-Day.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=23</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=23</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    &lt;p&gt;Hey, this is a quick reminder.  Don&#039;t forget about &lt;a href=&quot;http://www.shutdownday.org/&quot;&gt;Shutdown Day&lt;/a&gt; on May 3rd.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Be part of one of the biggest global experiments ever to take place on the Internet. The idea behind Shutdown Day is to find out how many people can go without a computer for one whole day, and what will happen if we all participate! &lt;/p&gt;&lt;/blockquote&gt; 
    </content:encoded>

    <pubDate>Thu, 01 May 2008 11:46:55 -0400</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/23-guid.html</guid>
    <category>shutdown day</category>

</item>
<item>
    <title>Open Screen say what?</title>
    <link>http://devweblog.org/archives/22-Open-Screen-say-what.html</link>
    
    <comments>http://devweblog.org/archives/22-Open-Screen-say-what.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=22</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=22</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    &lt;p&gt;You might know by now that Adobe makes my blood boil sometimes.  Their needlessly expensive graphics and publishing package represents all that open source is not.  When I read news blips this morning about &lt;a href=&quot;http://www.adobe.com/openscreenproject/&quot;&gt;Open Screen&lt;/a&gt;, I was pleasantly surprised.&lt;/p&gt;&lt;p&gt;This blurb taken from a CNet article:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Wadhwani said the Open Screen project has five basic elements. Adobe will remove license restriction on the .swf file format. &amp;quot;It is published already, but in order to view it you have to say you will not create a competing player,&amp;quot; said Wadhwani. &amp;quot;We&#039;re lifting that restriction. People have been worried about vendor lock-in. This will remove that obstacle, and concern.&amp;quot;&lt;/p&gt;
&lt;p&gt;Adobe will also remove licensing fees for embedding Flash Player on devices. The software has always been a free download for PC users. But Adobe has charged for embedding on devices. Those charges will disappear with the next release of the software.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Even though Adobe still rubs me the wrong way, this move is &lt;em&gt;entirely&lt;/em&gt; in the right direction.  Maybe this means I can finally get a working Flash player on my x84_64 notebook.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 01 May 2008 10:18:51 -0400</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/22-guid.html</guid>
    <category>adobe</category>
<category>flash</category>
<category>flash sucks</category>
<category>open standards</category>

</item>
<item>
    <title>Ubuntu Hardy Heron Install Live Blog</title>
    <link>http://devweblog.org/archives/21-Ubuntu-Hardy-Heron-Install-Live-Blog.html</link>
            <category>GNU/Linux</category>
    
    <comments>http://devweblog.org/archives/21-Ubuntu-Hardy-Heron-Install-Live-Blog.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=21</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=21</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    
&lt;p&gt;Ubuntu 8.04 Hardy Heron came out yesterday.  I meant to upgrade yesterday but, on a whim, I thought I&#039;d install from scratch and live blog it.  What follows is the result of that effort.&lt;/p&gt;&lt;p&gt;Did I mention I ordered the limited edition Hardy Heron t-shirt from the Canonical store?  Because I did.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://devweblog.org/archives/21-Ubuntu-Hardy-Heron-Install-Live-Blog.html#extended&quot;&gt;Continue reading &quot;Ubuntu Hardy Heron Install Live Blog&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 25 Apr 2008 17:42:26 -0400</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/21-guid.html</guid>
    <category>gnu/linux</category>
<category>hardy heron</category>
<category>how to</category>
<category>linux</category>
<category>live blog</category>
<category>releases</category>
<category>ubuntu</category>

</item>
<item>
    <title>Another log on the fire</title>
    <link>http://devweblog.org/archives/20-Another-log-on-the-fire.html</link>
            <category>Databases</category>
    
    <comments>http://devweblog.org/archives/20-Another-log-on-the-fire.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=20</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=20</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    
&lt;p&gt;If you want foreign key support in MySQL, you need to use the InnoDB storage engine.  If you want fulltext index support, you need to use the MyISAM storage engine.  Ain&#039;t that a bitch?&lt;/p&gt;&lt;p&gt;Just for the record: PostgreSQL supports them both well.&lt;/p&gt;&lt;p&gt;To be fair, the syntax for &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html&quot;&gt;fulltext searching in MySQL&lt;/a&gt; is more simple than that of &lt;a href=&quot;http://www.postgresql.org/docs/8.3/static/textsearch.html&quot;&gt;fulltext searching in PostgreSQL&lt;/a&gt;.  Here&#039;s an example:&lt;/p&gt;&lt;p&gt;MySQL:&lt;/p&gt;&lt;pre&gt;SELECT title&lt;br /&gt;FROM example&lt;br /&gt;WHERE MATCH (title, body) AGAINST (&#039;foobar&#039;)&lt;/pre&gt;&lt;p&gt;PostgreSQL:&lt;/p&gt;&lt;pre&gt;SELECT title&lt;br /&gt;FROM example&lt;br /&gt;WHERE to_tsvector(title || body) @@ to_tsquery(&#039;foobar&#039;);&lt;/pre&gt;
&lt;p&gt;So while the syntax is easier, you can&#039;t use fulltext and foreign keys simultaneously in MySQL.  PostgreSQL wins this battle.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 21 Apr 2008 20:10:25 -0400</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/20-guid.html</guid>
    <category>databases</category>
<category>foreign keys</category>
<category>fulltext</category>
<category>mysql</category>
<category>postgresql</category>

</item>
<item>
    <title>Xyster Build 5</title>
    <link>http://devweblog.org/archives/19-Xyster-Build-5.html</link>
            <category>Xyster</category>
    
    <comments>http://devweblog.org/archives/19-Xyster-Build-5.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=19</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=19</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    &lt;p&gt;Build 5 of the Xyster Framework has been released.  This version includes more features in &lt;code&gt;Xyster_Container&lt;/code&gt; and various other slight modifications.  You&#039;ll also find a bit more user documentation.&lt;/p&gt;&lt;p&gt;Please head over to &lt;a href=&quot;http://xyster.devweblog.org&quot;&gt;the Xyster site&lt;/a&gt; and grab yourself a copy.&lt;/p&gt;&lt;p&gt;Note that this version of the framework uses features in Zend Framework 1.5 which hasn&#039;t been released yet.  You can get a &lt;a href=&quot;http://framework.zend.com/download/snapshot/&quot;&gt;snapshot of ZF&lt;/a&gt; from their download page.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 05 Mar 2008 19:50:55 -0500</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/19-guid.html</guid>
    <category>php</category>
<category>releases</category>
<category>xyster</category>

</item>
<item>
    <title>Drupal 6.0 Released</title>
    <link>http://devweblog.org/archives/18-Drupal-6.0-Released.html</link>
    
    <comments>http://devweblog.org/archives/18-Drupal-6.0-Released.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=18</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=18</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    
&lt;p&gt;Congratulations to the Drupal team on their &lt;a href=&quot;http://drupal.org/drupal-6.0&quot;&gt;release of Drupal 6.0&lt;/a&gt;!  There are many changes under the hood, but perhaps the most instantly useful of which is their &lt;a href=&quot;http://drupal.org/node/152893&quot;&gt;native support for OpenID&lt;/a&gt;.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Wed, 13 Feb 2008 16:41:25 -0500</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/18-guid.html</guid>
    <category>drupal</category>
<category>openid</category>
<category>php</category>
<category>releases</category>

</item>
<item>
    <title>No More PHP 4, Pt 3: Play Nice with Authentication</title>
    <link>http://devweblog.org/archives/17-No-More-PHP-4,-Pt-3-Play-Nice-with-Authentication.html</link>
            <category>PHP</category>
    
    <comments>http://devweblog.org/archives/17-No-More-PHP-4,-Pt-3-Play-Nice-with-Authentication.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=17</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=17</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    
&lt;p&gt;PHP 4 is end-of-life very soon. In addition to offering projects the chance to refactor and improve their application design, PHP 5 offers many things PHP 4 just doesn&#039;t. This series of posts will deal with things projects can get their fingers into that will benefit everyone.&lt;/p&gt;
&lt;p&gt;The third: play nice with authentication.&lt;/p&gt;
&lt;p&gt;Your application isn&#039;t the only kid on the block, especially if it&#039;s a single-purpose application like a forum or an issue tracker.  Nothing is more frustrating than having to hack your application so my users don&#039;t have to login to different parts of my Web site.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://killersoft.com/randomstrings/&quot;&gt;Clay Loveless&lt;/a&gt; made a post in June of &#039;06 stressing &lt;a href=&quot;http://killersoft.com/randomstrings/2006/06/14/stop-writing-loner-applications/&quot;&gt;the stupidity of &amp;quot;loner applications&amp;quot;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can remedy your application&#039;s isolation using one of two things: &lt;a href=&quot;http://openid.net&quot;&gt;OpenID authentication&lt;/a&gt; or some kind of authentication plugin API or adapter.&lt;/p&gt;
&lt;p&gt;Implementing OpenID is perhaps the lesser solution.  Users would still have to put their OpenID address into each application on a site to login; it&#039;s not nearly as bad as having separate passwords, but still less convenient than a unified sign-on.&lt;/p&gt;
&lt;p&gt;The preferred solution to this mess is to provide an API for others to write pluggable authentication modules and then pick which one is being used in a configuration somewhere.  I applaud &lt;a href=&quot;http://wiki.splitbrain.org/wiki:dokuwiki&quot;&gt;DokuWiki&lt;/a&gt; for their very simple and effective implementation of such an adapter.  I also have experience with MediaWiki&#039;s plugin system, but don&#039;t get me started on the MediaWiki source code.  Mantis has a decent start on an authentication plugin, but it still leaves much to be desired.&lt;/p&gt;
&lt;p&gt;If you&#039;re going to start an authentication adapter system from scratch, may I suggest &lt;kbd&gt;&lt;a href=&quot;http://framework.zend.com/manual/en/zend.auth.html&quot;&gt;Zend_Auth&lt;/a&gt;&lt;/kbd&gt;?  Adapters are a breeze to implement and &lt;kbd&gt;Zend_Auth&lt;/kbd&gt; takes care of persisting a user&#039;s session.  If you&#039;re using the &lt;kbd&gt;Zend_Controller&lt;/kbd&gt; MVC, may I also suggest &lt;kbd&gt;&lt;a href=&quot;http://xyster.devweblog.org/documentation/guide/xyster.controller.plugins.html#xyster.controller.plugins.auth&quot;&gt;Xyster_Controller_Plugin_Auth&lt;/a&gt;&lt;/kbd&gt;?  It gives you the ability to specify the MVC dispatch locations for login prompting, success, and failure.&lt;/p&gt;
&lt;p&gt;Actually, adapters and plugins are a good idea for &lt;em&gt;any&lt;/em&gt; software.  If I have to edit a single source file for your application, you&#039;re doing a poor job at keeping extensibility in mind.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 22 Jan 2008 12:00:54 -0500</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/17-guid.html</guid>
    <category>authentication</category>
<category>no more php4</category>
<category>openid</category>
<category>php</category>

</item>
<item>
    <title>Xyster Build 4</title>
    <link>http://devweblog.org/archives/16-Xyster-Build-4.html</link>
            <category>Xyster</category>
    
    <comments>http://devweblog.org/archives/16-Xyster-Build-4.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=16</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=16</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    &lt;p&gt;Build 4 of the Xyster Framework has been released.  Most notable new feature: &lt;kbd&gt;Xyster_Container&lt;/kbd&gt;, the dependency injection package.&lt;/p&gt;&lt;p&gt;Please head over to &lt;a href=&quot;http://xyster.devweblog.org&quot;&gt;the Xyster site&lt;/a&gt; and grab yourself a copy.&lt;/p&gt;&lt;p&gt;Note that this version of the framework uses features in Zend Framework 1.5 which hasn&#039;t been released yet.  You can get a &lt;a href=&quot;http://framework.zend.com/download/snapshot/&quot;&gt;snapshot of ZF&lt;/a&gt; from their download page.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 20 Jan 2008 13:48:53 -0500</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/16-guid.html</guid>
    <category>php</category>
<category>releases</category>
<category>xyster</category>

</item>
<item>
    <title>I Miss Actual Video</title>
    <link>http://devweblog.org/archives/15-I-Miss-Actual-Video.html</link>
    
    <comments>http://devweblog.org/archives/15-I-Miss-Actual-Video.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=15</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=15</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    &lt;p&gt;Remember the days where a video would be embedded in a web page?  You could stream different kinds of &lt;i&gt;actual&lt;/i&gt; video right to your favorite video plugin!  I remember a choice between RealPlayer, Windows Media, and QuickTime.&lt;/p&gt;
&lt;p&gt;Nowadays, it seems like you only have one choice: Flash.  If, however, you&#039;re on a 64-bit operating system, you don&#039;t have a choice &lt;i&gt;at all&lt;/i&gt;.  Hey, Flash developers: read that line again.  People who run 64-bit Linux, for example, &lt;b&gt;do not have a Flash plugin&lt;/b&gt;.  Don&#039;t blame Linux; &lt;a href=&quot;http://kb.adobe.com/selfservice/viewContent.do?externalId=6b3af6c9&amp;sliceId=1&quot;&gt;it&#039;s Adobe&#039;s fault&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;(Yes, I know there are hacks to emulate a 32-bit browser in a 64-bit operating system, but they&#039;re hacks and not solutions or acceptable in any way.  Silence.)&lt;/p&gt;&lt;p&gt;Thank you, &lt;a href=&quot;http://video.google.com&quot;&gt;Google Video&lt;/a&gt;, for allowing me to download the videos as &lt;i&gt;actual video&lt;/i&gt;, yes, an MPEG-4 file so I can watch it as video should be watched.  Thank you, &lt;a href=&quot;http://www.stage6.com/&quot;&gt;Stage6&lt;/a&gt;, for using &lt;i&gt;actual video&lt;/i&gt; implicitly.  Meanwhile, I hope and pray that YouTube and its kin will stop wrapping perfectly good video with a Flash plugin that not all of its clients have or want.&lt;/p&gt;&lt;p&gt;Still don&#039;t understand?  Turn off your Flash plugin and try watching some Internet videos.  You&#039;ll end up spending a lot of time at &lt;a href=&quot;http://www.apple.com/trailers/&quot;&gt;Apple Movie Trailers&lt;/a&gt;.&lt;br /&gt; &lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 03 Jan 2008 17:05:26 -0500</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/15-guid.html</guid>
    <category>adobe</category>
<category>flash</category>
<category>flash sucks</category>
<category>mime types</category>
<category>the internet</category>
<category>video</category>

</item>
<item>
    <title>Focus Your Login Forms On Me!</title>
    <link>http://devweblog.org/archives/14-Focus-Your-Login-Forms-On-Me!.html</link>
    
    <comments>http://devweblog.org/archives/14-Focus-Your-Login-Forms-On-Me!.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=14</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=14</wfw:commentRss>
    

    <author>nospam@example.com (Andy Stratton)</author>
    <content:encoded>
    &lt;p&gt;All the new blog-tastic, niche, social media, networking, web 2.0, buzz-word worthy abstract made-up name websites have one thing in common: &lt;strong&gt;Login Forms&lt;/strong&gt;.  Assuming I&#039;m remotely similar to other productivity-minded developers, most of you are like me: you know your OS, your keyboard, and most keyboard shortcuts and use your mouse as a last resort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stop forcing me to use my mouse when I don&#039;t have to!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most login forms require a minimum an email address (or username) and a password to login.  What many of the fore mentioned sites, as well as many other web applications, like online banking, and even State Government/Organization websites lack, are a few simple lines of Javascript to enhance the user experience during a login failure and save neurotic people like me from being forced to use the mouse in lieu of the keyboard.&lt;/p&gt;

&lt;p&gt;We&#039;d like the input field for the email address/username to have the cursor&#039;s focus on page load, since we&#039;re ready to login.  Ideally, if we&#039;ve tried and failed to login, set the cursor the most logical field causing the failure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Empty email/username field &amp;rarr; focus on email/username field&lt;/li&gt;
&lt;li&gt;No password entered &amp;rarr; focus on password field&lt;/li&gt;
&lt;li&gt;Incorrect password entered &amp;rarr; focus on password field&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let&#039;s say this is our markup for a login form:&lt;/p&gt;

&lt;code style=&quot;display: block; border:1px solid #ccc; background: #eee;padding:1em;margin:1em 0;&quot;&gt;
&amp;lt;form id=&amp;quot;login&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;/login&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;email&amp;quot;&amp;gt;Email: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot; id=&amp;quot;email&amp;quot; /&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;p&amp;gt;&amp;lt;label for=&amp;quot;passwd&amp;quot;&amp;gt;Password: &amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;passwd&amp;quot; id=&amp;quot;passwd&amp;quot; /&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;p&amp;gt;&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Login&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;/code&gt;

&lt;p&gt;If we add a few lines of simple Javascript below it:&lt;/p&gt;

&lt;code style=&quot;display: block; border:1px solid #ccc; background: #eee;padding:1em;margin:1em 0;&quot;&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
if ( document.getElementById(&quot;email&quot;).value == &#039;&#039; ) {&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;document.getElementById(&quot;email&quot;).focus();&lt;br /&gt;
} else {&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;document.getElementById(&quot;passwd&quot;).focus();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;
&lt;/code&gt;

&lt;p&gt;You get a very convenient and usable, yet functional without Javascript, login form that sets your cursor at a logical position within +/- one tab keypress of where you need to be.  Might sound picky, but sure does stop from slowing me down, which is a big point in &lt;span style=&quot;text-decoration: line-through;&quot;&gt;getting&lt;/span&gt; keeping my attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stop breaking the enter key for submitting!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We all love to add nifty client-side validation.  It&#039;s fun to code some front-end applications in Javascript, and it helps as a initial scrub of data &amp;ndash; just make sure that your hax0ring isn&#039;t destroying the expected behavior of your forms.&lt;/p&gt;

&lt;p&gt;Here&#039;s more some guidelines to keep in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Never break the enter key as a method of submitting your forms.&lt;/strong&gt;&lt;br /&gt;If you&#039;re handling the event of a user pressing a key, and failing on invalid characters, be sure to throw a handler in there for character code 13 (the enter key).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Always have a submit button.&lt;/strong&gt;&lt;br /&gt;Feel free to tag it with an id and hide it with CSS/Javascript, but make it easy for people to use if they don&#039;t have CSS, Javascript, or images.  Sometimes form images act funny in browsers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use labels on all form input elements!&lt;/strong&gt;&lt;br /&gt;It&#039;s extremely frustrating to try to select a radio button or a checkbox and having to hit the 10px by 10px circle or box.  Make it easier for your users and more accessible for those who need it to be.  As a best practice, use them on anything taking in data in your form.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Get on the Bus with Fieldsets and Legends&lt;/strong&gt;&lt;br /&gt;These will help you organize your data fields logically as well as increase your markup&#039;s &lt;em&gt;semantic-ness&lt;/em&gt;.  Plus, since they aren&#039;t used often, they can tend to look pretty cool.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy Programm0ring.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 13 Dec 2007 15:12:25 -0500</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/14-guid.html</guid>
    
</item>
<item>
    <title>Commodore 64 Nostalgia</title>
    <link>http://devweblog.org/archives/13-Commodore-64-Nostalgia.html</link>
            <category>Hardware</category>
    
    <comments>http://devweblog.org/archives/13-Commodore-64-Nostalgia.html#comments</comments>
    <wfw:comment>http://devweblog.org/wfwcomment.php?cid=13</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://devweblog.org/rss.php?version=2.0&amp;type=comments&amp;cid=13</wfw:commentRss>
    

    <author>nospam@example.com (Double Compile)</author>
    <content:encoded>
    
&lt;p&gt;&lt;a href=&quot;http://www.news.com/8301-13772_3-9832182-52.html?tag=nefd.top&quot;&gt;The Commodore 64 turned 25&lt;/a&gt; this week!&lt;/p&gt;
&lt;p&gt;I was 10 when my brother Ryan gave me his (this would be winter &#039;91-&#039;92).  His C64 had a &lt;a href=&quot;http://project64.c64.org/hw/warpspeed.txt&quot;&gt;Warp Speed cartridge&lt;/a&gt; and a 1200 baud modem!  It was hooked up to my black-and-white GoldStar 13&amp;quot; TV (the same one I used to play his &lt;a href=&quot;http://en.wikipedia.org/wiki/Atari_2600&quot;&gt;Atari 2600&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;At 10, I was using the C64 to (among other things)&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;visit my first BBS&lt;/li&gt;&lt;li&gt;program stupid choose-your-own-adventure games in &lt;a href=&quot;http://en.wikipedia.org/wiki/BASIC&quot;&gt;BASIC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;play great games like &lt;cite&gt;California Games&lt;/cite&gt; and &lt;cite&gt;Operation: Wolf&lt;/cite&gt;&lt;/li&gt;&lt;li&gt;do reports for school using Paperclip III.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;You should have seen my face the first time I wrote a BASIC script that wrote to the dot-matrix printer.&lt;/p&gt;
&lt;p&gt;I found out that a Sega Genesis controller worked great as a joystick for the C64.&lt;/p&gt;
&lt;p&gt;The next computer I got was an IBM-compatible &lt;a href=&quot;http://en.wikipedia.org/wiki/Intel_80486DX2&quot;&gt;486 DX2/66&lt;/a&gt; that ran Windows 3.1.  Quite an upgrade, but I still look back with a smile on my Commodore 64 days.&lt;/p&gt;
&lt;pre&gt;LOAD &amp;quot;nostalgia&amp;quot;,8,1&lt;br /&gt;RUN&lt;/pre&gt; 
    </content:encoded>

    <pubDate>Wed, 12 Dec 2007 16:51:56 -0500</pubDate>
    <guid isPermaLink="false">http://devweblog.org/archives/13-guid.html</guid>
    <category>anniversaries</category>
<category>commodore 64</category>
<category>hardware</category>

</item>

</channel>
</rss>