<?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/"
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
<channel>
    <title>GizmoLA.com - Web Tech</title>
    <link>http://www.gizmola.com/blog/</link>
    <description></description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.1 - http://www.s9y.org/</generator>
    <managingEditor>webmaster@gizmola.com</managingEditor>
<webMaster>webmaster@gizmola.com</webMaster>
<pubDate>Tue, 23 Feb 2010 09:47:52 GMT</pubDate>

    <image>
        <url>http://www.gizmola.com/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: GizmoLA.com - Web Tech - </title>
        <link>http://www.gizmola.com/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Get files from subversion without creating a sandbox using svn export</title>
    <link>http://www.gizmola.com/blog/archives/100-Get-files-from-subversion-without-creating-a-sandbox-using-svn-export.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/100-Get-files-from-subversion-without-creating-a-sandbox-using-svn-export.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=100</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=100</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    One of the first things people learn about using subversion is how to do a &quot;checkout&quot; using &lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1297&amp;amp;entry_id=100&quot;  onmouseover=&quot;window.status=&#039;http://svnbook.red-bean.com/en/1.4/svn-book.html#svn.ref.svn.c.checkout&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;svn checkout&quot;&gt;svn co&lt;/a&gt;.  The svn checkout command pulls files from the subversion repository into your &quot;sandbox&quot; and in so doing creates what subversion calls a &quot;working copy&quot;.  A working copy includes a &lt;em&gt;.svn&lt;/em&gt; directory in every subdirectory of the working copy, which is chock full of directories and files that svn uses to determine what you&#039;re doing in your sandbox.&lt;br /&gt;
&lt;br /&gt;
A &quot;working copy&quot; is designed to be just that -- a copy of the source tree built with the assumption that you will be making changes and committing them back to subversion. But what do you do if you want the files, but you don&#039;t need or want a sandbox?&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.gizmola.com/blog/archives/100-Get-files-from-subversion-without-creating-a-sandbox-using-svn-export.html#extended&quot;&gt;Continue reading &quot;Get files from subversion without creating a sandbox using svn export&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 22 Feb 2010 23:27:59 -0800</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/100-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>Finding &quot;Next Monday&quot; using MySQL Dates</title>
    <link>http://www.gizmola.com/blog/archives/99-Finding-Next-Monday-using-MySQL-Dates.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/99-Finding-Next-Monday-using-MySQL-Dates.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=99</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=99</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    Several people who read my article on &lt;a href=&quot;blog/archives/51-Exploring-Mysql-CURDATE-and-NOW.-The-same-but-different..html&quot;  title=&quot;Exploring Mysql CURDATE and NOW. The same but different&quot;&gt;Exploring Mysql CURDATE and NOW. The same but different&lt;/a&gt; posed questions regarding how to return a valid MySQL date equivalent to &quot;Next Monday&quot; given any particular day, as determined by MySQL&#039;s CURDATE().  This is a little bit tricky, but can be done entirely in MySQL syntax, making it usable with Calendar applications built on top of MySQL queries, without the need to use serverside date functions.  This builds upon concepts discussed in my prior article, so if you have trouble understanding the implications of using CURDATE or DATE_ADD, you should probably take a minute and read that article. &lt;br /&gt;&lt;a href=&quot;http://www.gizmola.com/blog/archives/99-Finding-Next-Monday-using-MySQL-Dates.html#extended&quot;&gt;Continue reading &quot;Finding &amp;quot;Next Monday&amp;quot; using MySQL Dates&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 01 Dec 2009 22:18:39 -0800</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/99-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>Centos Virtual LAMP server -- Part II</title>
    <link>http://www.gizmola.com/blog/archives/97-Centos-Virtual-LAMP-server-Part-II.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/97-Centos-Virtual-LAMP-server-Part-II.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=97</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=97</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    &lt;a href=&quot;blog/archives/95-Run-a-Centos-Lamp-development-server-on-XP-using-VirtualBox.html&quot;  title=&quot;Part  1 LAMP on VirtualBox&quot;&gt;*Part 1 of this series is here*&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Customizing your LAMP server&lt;/h3&gt;&lt;br /&gt;
Unix people are probably familiar with the father of the DNS system -- the /etc/hosts file.  The hosts file has a simple format:&lt;br /&gt;
&lt;br /&gt;
ipaddress hostname&lt;br /&gt;
&lt;br /&gt;
In the days prior to DNS, people would update a master hosts file and copy it around to all the servers in the enterprise.  Surprisingly Windows versions also support this file, as a way of overriding DNS, so we can use this to our advantage, by adding an entry for our development server.  In this example, I&#039;m going to use dev.gizmola.com, which is not a real server.&lt;br /&gt;
&lt;br /&gt;
One important reason to do this is that Apache and other web servers, use a feature of HTTP 1.1 that specifies a header field named &quot;Host:&quot;.  This mechanism facilitates the service of multiple domains from a single apache server, through the configuration of apache virtual host (or vhost) entires.  The server uses the Host name in the HTTP header to determine how to route requests, so without host name resolution. you have to use non-standard ports and other mechanisms that are more trouble than they&#039;re worth. a&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.gizmola.com/blog/archives/97-Centos-Virtual-LAMP-server-Part-II.html#extended&quot;&gt;Continue reading &quot;Centos Virtual LAMP server -- Part II&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 04 Aug 2009 18:10:08 -0700</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/97-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>Run a Centos Lamp development server on XP, Vista or Win 7 using VirtualBox</title>
    <link>http://www.gizmola.com/blog/archives/95-Run-a-Centos-Lamp-development-server-on-XP,-Vista-or-Win-7-using-VirtualBox.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/95-Run-a-Centos-Lamp-development-server-on-XP,-Vista-or-Win-7-using-VirtualBox.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=95</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=95</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    If you use a Windows based workstation or notebook computer virtualization offers a way for you to run a linux server environment using the same linux distribution and configuration you&#039;ll use in production.  Virtualization allows you to explore clustering and network setups that can&#039;t be tested on your workstation alone and simplifies your development environment by keeping the LAMP environment contained inside a VM.  &lt;br /&gt;
&lt;br /&gt;
While VMWare offers these capabilities with their VMWare workstation product, Sun has created a free alternative called VirtualBox, with many of the same capabilities in VMWare workstation.  VirtualBox runs on a variety of intel chip based operating systems including OS/X, Windows XP &amp;amp; Vista, Linux and Solaris, and supports the installation of many different &quot;Guest&quot; operating systems.  In this article, I&#039;ll detail the installation and configuration of Centos.  Centos is a great choice for a Linux server operating system, as it is widely used by hosting companies due to its Redhat Enterprise Linux (RHEL) core.&lt;br /&gt;
&lt;br /&gt;
Our goals in this setup will be:&lt;br /&gt;
&lt;br /&gt;
&amp;bull; Centos server running the LAMP stack&lt;br /&gt;
&amp;bull; XP can be used to develop code using the IDE of your choice.  &lt;br /&gt;
&amp;bull; The XP Workstation can communicate with the linux server using standard tools: putty, winscp, firefox&lt;br /&gt;
&amp;bull; The setup works even when no other networking is available.  When a network is available, no network reconfiguration is required.&lt;br /&gt;
&amp;bull; Use XP to setup private domain resolution so apache vhost configurations can be tested.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s get started.   &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.gizmola.com/blog/archives/95-Run-a-Centos-Lamp-development-server-on-XP,-Vista-or-Win-7-using-VirtualBox.html#extended&quot;&gt;Continue reading &quot;Run a Centos Lamp development server on XP, Vista or Win 7 using VirtualBox&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 16 Jul 2009 14:07:21 -0700</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/95-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>Too much information about the MySQL TIMESTAMP</title>
    <link>http://www.gizmola.com/blog/archives/93-Too-much-information-about-the-MySQL-TIMESTAMP.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/93-Too-much-information-about-the-MySQL-TIMESTAMP.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=93</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=93</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    The MySQL timestamp is an oddity, being both a mySQL &quot;Data Type&quot; as well as a type of specialty column that provides a built in default.  It doesn&#039;t help matters, that the timestamp was changed significantly around mysql version 4.1.  &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;The Old TIMESTAMP&lt;/h3&gt;&lt;br /&gt;
In older mysql versions, the TIMESTAMP was not in the same format as a DateTime column, and you could also set up truncation by defining the TIMESTAMP to have a fixed size.  For example, you could define a TIMESTAMP column to be a TIMESTAMP(4) which would then only store the 4 digit Year portion of a DateTime value.  I won&#039;t go into much detail on the pre version 4.1 TIMESTAMP, however, if you&#039;re stuck with an older version of MySQL I recommend you read the manual carefully before you attempt to use any of the information here.  I&#039;m going to concentrate on the current TIMESTAMP.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;TIMESTAMP Properties&lt;/h3&gt;&lt;br /&gt;
At its most fundamental, the TIMESTAMP is really nothing more than a Unix TimeStamp, which is to say, that internally it is stored as an integer value of seconds.  Where a MySQL DATETIME column can be used to store any date and time from Jan 1, 1000 to 12/31/9999, the TIMESTAMP is limited in the same ways that the Unix timestamp is currently limited -- it can only store values from Jan 1, 1970 to Jan 9, 2038.  &lt;br /&gt;
&lt;br /&gt;
Those familiar with Unix design, will recognize the Jan 9, 2038 date as being the next big &quot;Y2K&quot; computing panic, and if you&#039;re young enough, you may realize a large payday in your future, selling remediation services to companies in roughly another 28 years.  The folks at &lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1020&amp;amp;entry_id=93&quot;  onmouseover=&quot;window.status=&#039;http://www.y2038.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://www.y2038.com/&quot;&gt;http://www.y2038.com/&lt;/a&gt; are already estimating this to be as much as a 10 trillion dollar jackpot, although no doubt by that time most of the coding will be done by the Morlocks from their &lt;em&gt;underground cave cities&lt;/em&gt;.   Outsourcing of IT to Morlocks will be a major industry trend by the year 2020, mark my words.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.gizmola.com/blog/archives/93-Too-much-information-about-the-MySQL-TIMESTAMP.html#extended&quot;&gt;Continue reading &quot;Too much information about the MySQL TIMESTAMP&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 23 Apr 2009 13:55:47 -0700</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/93-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>Mysql Update:  Null + 1 is Null!  </title>
    <link>http://www.gizmola.com/blog/archives/91-Mysql-Update-Null-+-1-is-Null!.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/91-Mysql-Update-Null-+-1-is-Null!.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=91</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=91</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    &lt;h3&gt;&lt;u&gt;You can&#039;t add to Null&lt;/u&gt;&lt;/h3&gt;&lt;br /&gt;
Here&#039;s something about mysql create table definitions that can easily catch you if you aren&#039;t careful.  Consider this table definition:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mysql geshi&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #990099; font-weight: bold;&quot;&gt;CREATE&lt;/span&gt; &lt;span style=&quot;color: #990099; font-weight: bold;&quot;&gt;TABLE&lt;/span&gt; screenshots &lt;span style=&quot;color: #FF00FF;&quot;&gt;&amp;#40;&lt;/span&gt;id &lt;span style=&quot;color: #FF9900; font-weight: bold;&quot;&gt;INT&lt;/span&gt; &lt;span style=&quot;color: #CC0099; font-weight: bold;&quot;&gt;NOT&lt;/span&gt; &lt;span style=&quot;color: #9900FF; font-weight: bold;&quot;&gt;NULL&lt;/span&gt; &lt;span style=&quot;color: #9900FF; font-weight: bold;&quot;&gt;AUTO_INCREMENT&lt;/span&gt; &lt;span style=&quot;color: #990099; font-weight: bold;&quot;&gt;PRIMARY&lt;/span&gt; &lt;span style=&quot;color: #990099; font-weight: bold;&quot;&gt;KEY&lt;/span&gt;&lt;span style=&quot;color: #FF00FF;&quot;&gt;,&lt;/span&gt; votes &lt;span style=&quot;color: #FF9900; font-weight: bold;&quot;&gt;INT&lt;/span&gt;&lt;span style=&quot;color: #FF00FF;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #FF00FF;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bash geshi&quot; style=&quot;text-align: left&quot;&gt;&lt;br /&gt;mysql&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; CREATE TABLE screenshots &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;id&lt;/span&gt; INT NOT NULL AUTO_INCREMENT PRIMARY KEY, votes INT&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#41;&lt;/span&gt;; &amp;#160; &amp;#160; &amp;#160;&lt;br /&gt;Query OK, &lt;span style=&quot;color: #000000;&quot;&gt;0&lt;/span&gt; rows affected &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;0.09&lt;/span&gt; sec&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;#160;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
What the user wanted was a simple table to keep track of user submitted screen shots.  Of course the real table had a submission date, and name column but I&#039;ve omitted those in order to focus on what can happen when you allow a numeric column to have NULL values.  &lt;br /&gt;
&lt;br /&gt;
In the application in question, when a user votes for the screen shot they like, the system should &quot;count&quot; the vote, by increasing the values in the &quot;votes&quot; column by one.  Initially the developer working on this application was trying to read the value from the database, and in a PHP web script, they would increment this value and take the result and set &quot;votes&quot; to be equal to it in an UPDATE statement.  I explained that this could cause lost votes, because if two or more users were voting at nearly the same time, each would overwrite the value of the &quot;vote&quot; column.  In fact there are scenarios far worse than that --- a user with a cached page could vote and set the vote count back days or weeks.  I didn&#039;t bother to mention the possibility that someone might recognize what was going on in the web form, and start tampering with it, since it was plainly evident that the form was passing the current number of votes.  &lt;br /&gt;
&lt;br /&gt;
One of the many benefits of using a relational database is built in concurrency.  In an UPDATE statement, you can add to the value of the column without having to know what its original value is, just as computer languages allow assignment to a variable that references the variable&#039;s current value (ie. $a = $a + 1, $a++).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mysql geshi&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #990099; font-weight: bold;&quot;&gt;UPDATE&lt;/span&gt; screenshots &lt;span style=&quot;color: #990099; font-weight: bold;&quot;&gt;SET&lt;/span&gt; votes &lt;span style=&quot;color: #FF00FF;&quot;&gt;=&lt;/span&gt; votes &lt;span style=&quot;color: #FF00FF;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #008080;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #990099; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; id &lt;span style=&quot;color: #FF00FF;&quot;&gt;=&lt;/span&gt; &amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
All that&#039;s needed is to have the serverside language provide a value for a particular &quot;id&quot;  and the votes will be tallied and updated correctly.  Even more importantly, mysql will serialize the updates, insuring that no votes are lost.&lt;br /&gt;
&lt;br /&gt;
However, given the original Mysql CREATE TABLE statement , what will happen if our code embeds the UPDATE statement provided? &lt;br /&gt;&lt;a href=&quot;http://www.gizmola.com/blog/archives/91-Mysql-Update-Null-+-1-is-Null!.html#extended&quot;&gt;Continue reading &quot;Mysql Update:  Null + 1 is Null!  &quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 12 Feb 2009 12:18:11 -0800</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/91-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>Lampsig 2008 Presentation on Subversion for Lamp Developers</title>
    <link>http://www.gizmola.com/blog/archives/88-Lampsig-2008-Presentation-on-Subversion-for-Lamp-Developers.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/88-Lampsig-2008-Presentation-on-Subversion-for-Lamp-Developers.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=88</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=88</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    &lt;a class=&#039;serendipity_image_link&#039; href=&#039;http://www.gizmola.com/blog/pages/svnpresentation.html&#039;&gt;&lt;!-- s9ymdb:157 --&gt;&lt;img width=&#039;266&#039; height=&#039;189&#039; style=&quot;float: left; border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://www.gizmola.com/blog/uploads/images/snvpres.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Here are the slides for the presentation on subversion I gave at the September 2008 LampSIG meeting.  I hope some may find them useful, however they were meant only to provide a skeleton for the talk, and aren&#039;t a complete tutorial by any means.  The following links to other sites were mentioned in the talk:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1023&amp;amp;entry_id=88&quot;  onmouseover=&quot;window.status=&#039;http://svnbook.red-bean.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;red-bean book&quot;&gt;The Red bean book, aka Subversion manual&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1024&amp;amp;entry_id=88&quot;  onmouseover=&quot;window.status=&#039;http://www.orcaware.com/svn/wiki/Svnmerge.py&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;The svnmerge python script&quot;&gt;The svnmerge python script&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1025&amp;amp;entry_id=88&quot;  onmouseover=&quot;window.status=&#039;http://www.onlamp.com/pub/a/onlamp/2004/08/19/subversiontips.html?page=1&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;Subversion tips&quot;&gt;Subversion tips Article&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1026&amp;amp;entry_id=88&quot;  onmouseover=&quot;window.status=&#039;http://www.digilife.be/quickreferences/QRC/Subversion%20Quick%20Reference%20Card.pdf&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;Subversion Cheat Card&quot;&gt;Subversion Cheat Card&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 13 Oct 2008 14:24:39 -0700</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/88-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>New Lula/Lampsig Coop Server</title>
    <link>http://www.gizmola.com/blog/archives/85-New-LulaLampsig-Coop-Server.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/85-New-LulaLampsig-Coop-Server.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=85</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=85</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    So the UML Coop has finally after 3 years of talking about it, acquired a new server from Silicon Mechanics.  Read the rest of the article for the complete specifications.  We will be moving off User Mode Linux (UML) and on to OpenVZ. This change will allow us to accept some new members to the coop, so if you&#039;re interested drop me a line.&lt;br /&gt;
&lt;!-- s9ymdb:154 --&gt;&lt;img width=&#039;110&#039; height=&#039;37&#039; style=&quot;border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://www.gizmola.com/blog/uploads/images/server.tn.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.gizmola.com/blog/archives/85-New-LulaLampsig-Coop-Server.html#extended&quot;&gt;Continue reading &quot;New Lula/Lampsig Coop Server&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 24 Jul 2008 10:55:09 -0700</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/85-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>LAMP Tutorial Series originally published on PHPFreaks.com</title>
    <link>http://www.gizmola.com/blog/archives/82-LAMP-Tutorial-Series-originally-published-on-PHPFreaks.com.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/82-LAMP-Tutorial-Series-originally-published-on-PHPFreaks.com.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=82</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=82</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    A few years ago I published a 3 part LAMP tutorial series entitled &lt;strong&gt;LAMP, MySQL/PHP Database Driven Websites&lt;/strong&gt; on the well known php community website PHPFreaks.com.  This series dealt with a slew of practical issues including how a LAMP server works, relational database design using MySQL, many to many tables, SQL inner and outer joins, practical PHP debugging, php documentation tools, basic PHP classes, css, interactive javascript &amp;amp; DHTML with a &lt;em&gt;chooser&lt;/em&gt; widget, php HEREDOC and php basics like how to process forms and utilize GET and POST methods.&lt;br /&gt;
&lt;br /&gt;
The series was fairly successful, (a 4.5 of 5 after hundreds of ratings), many pages of comments and questions, and page views to the 100k&#039;s+ although PHPFreaks auditing system was turned off at some point and stopped recording views.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, some years ago PHPFreaks.com suffered some fairly catastrophic issues with its publishing system.  There were also some bugs, and the site was exploited with some XSS, and the admins simply decommissioned the majority of the site.  My series was part of what disappeared.  At that point, a couple of college Computer Science courses on web development had taken the series and integrated it into their curriculum, and the professor of one of these courses had converted it into a Word document, which I was able to download and convert to pdf.&lt;br /&gt;
&lt;br /&gt;
I plan to write a compatible publishing addon for gizmola.com so that I can take the original markup and republish it here, but in the meantime, here is the series in pdf format.  The conversion utility they used stripped out the original markup, and page breaks are gone, but the text, source code, and illustrations are all still there.  &lt;br /&gt;
&lt;br /&gt;
I also offer all the source code for parts 2 &amp;amp; 3 of the series.  I&#039;m not sure what happened to the source for part 1, however, it is all included inline in the tutorial.  &lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1036&amp;amp;entry_id=82&quot;  onmouseover=&quot;window.status=&#039;http://www.gizmola.com/blog/index.php?serendipity[subpage]=downloads&amp;amp;level=1&amp;amp;thiscat=6&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;LAMP Tutorial Series.&quot;&gt;The &lt;strong&gt;LAMP, MySQL/PHP Database Driven Websites&lt;/strong&gt; series is now available in pdf format.  Click here.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 27 May 2008 12:52:58 -0700</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/82-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>CAPTCHA busting -- A sucker born every minute</title>
    <link>http://www.gizmola.com/blog/archives/73-CAPTCHA-busting-A-sucker-born-every-minute.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/73-CAPTCHA-busting-A-sucker-born-every-minute.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=73</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=73</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    &lt;img width=&#039;272&#039; height=&#039;48&#039; border=&#039;0&#039; hspace=&#039;5&#039; align=&#039;left&#039; src=&#039;http://www.gizmola.com/blog/uploads/images/captchaimg.jpg&#039; alt=&#039;&#039; /&gt;I have a small phpBB2 forum attached to this site, that I used briefly to support some of my side projects.  phpBB has had a checkered past in terms of security, having been the victim of many exploits.  To be fair that&#039;s one of the costs of having been one of the first and most widely successful php based community projects.  The number of phpBB deployments is staggering even to this day.  With so many forums out there, spammers quickly figured out that if they could write a bot to create an account and auto post messages, they&#039;d be able to spread their spam messages far and wide.  I was getting so much spam, I ultimately disabled the ability of people to authenticate their own accounts, and despite this change, still see as many as ten new signups for the forum every day.  Who would bother to sign up for an account they can&#039;t use?  There had to be a way of determining the bots from the humans who wanted to post to my forum.  &lt;br /&gt;
&lt;br /&gt;
CAPTCHA, as the conventional wisdom of the day was concerned, would provide a useful deterrent to this annoyance -- bots arent&#039; smart enough to decipher the captcha images and extract the right combination of numbers and letters depicted in the image, and type them back to into the form in order to unlock the account.  Without the account, the spammers couldn&#039;t have their bots post their spam messages.  While phpBB introduced a CAPTCHA capability relatively late in the game, it is now something you get out of the box, and there is at least one mod that improves on the quality of the CAPTCHA image, which is to say, makes it harder to read.&lt;br /&gt;
&lt;br /&gt;
The problem is that CAPTCHA&#039;s are there to defeat dumb machines, but not dumb humans.  And as the old saying goes, there&#039;s a sucker born every minute who is more than happy to help your local spammer defeat the CAPTCHA image on your site.  How might you ask?  Well, the scam works something like this:  John Q. Sucker visits some site that informs him he&#039;s getting something for free -- it could be a free ipod, porn, or an xbox 360.  All that is important is that this person believes they will be getting access to this free stuff once they register.&lt;br /&gt;
&lt;br /&gt;
They visit the spammer&#039;s site, and are presented a CAPTCHA image in order to register, only, this image didn&#039;t come directly from the spammer&#039;s site -- it came from YOURS.  The spammer writes a simple bot that goes to your site and hits the registration page.  It takes the CAPTCHA image your site provided, and presents it to John Q. Sucker on the spammer&#039;s site.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.gizmola.com/blog/archives/73-CAPTCHA-busting-A-sucker-born-every-minute.html#extended&quot;&gt;Continue reading &quot;CAPTCHA busting -- A sucker born every minute&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 08 Jan 2007 22:50:14 -0800</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/73-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>February LAMPsig presentation on SVG with Ajax demo</title>
    <link>http://www.gizmola.com/blog/archives/69-February-LAMPsig-presentation-on-SVG-with-Ajax-demo.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/69-February-LAMPsig-presentation-on-SVG-with-Ajax-demo.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=69</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=69</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    &lt;a title=&quot;/blog/uploads/images/lampsig_scale2006_booth.jpg&quot; id=&quot;s9yisp113&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1071&amp;amp;entry_id=69&quot;  onmouseover=&quot;window.status=&#039;http://www.gizmola.com/blog/index.php?serendipity[subpage]=s9yisp&amp;amp;amp;serendipity[id]=69&amp;amp;amp;serendipity[image]=113&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; id=&quot;s9yisphref113&quot;&gt;&lt;img width=&#039;110&#039; height=&#039;101&#039; border=&#039;0&#039; hspace=&#039;5&#039; align=&#039;left&#039; src=&#039;http://www.gizmola.com/blog/uploads/images/lampsig_scale2006_booth.tn.jpg&#039; alt=&#039;&#039; /&gt;&lt;/a&gt;I&#039;ll be talking about &lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1072&amp;amp;entry_id=69&quot;  onmouseover=&quot;window.status=&#039;http://lampsig.org/new/archives/50-February-Meeting-The-Making-of-our-SCALE-Demo.html#extended&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;February 2006 LAMPsig General Meeting&quot;&gt;the Dynamic Scalable Vector Graphics (SVG) with Asynchronous Javascript and XML (Ajax) demo&lt;/a&gt; I created for the LAMPsig booth at the Southern California Linux expo 2006 (SCALE) conference that was held last weekend.  &lt;br /&gt;
&lt;br /&gt;
There were some excellent LAMP oriented discussions including Zend&#039;s Andi Gutmans himself, who talked about the PHP community project and PHP 6, then hung around for a while whilst myself and Chris Thompson peppered him with questions about MySQL&#039;s oop, its applicablility to the various framework projects underway.  In short, Andi indicated that the PHP core team currently has no plans to add anything to the Oop capabilities of PHP 5, although I suppose that could change once the PHP Framework project matures.  He indicated that the PHP Framework should be available in alpha or beta within the next few weeks.&lt;br /&gt;
&lt;br /&gt;
Other LAMP hi-lights included Jim Winstead from MySQL AB who discussed new features in MySQL 5.x  and provided some nice example code, and David Schecter from Sleepycat gave an entertaining talk that illustrated how integral berkely database is to Linux in general, and how its used by many major players to provide a high performance caching layer in front of oracle and mysql for websites like Yahoo.&lt;br /&gt;
&lt;br /&gt;
  
    </content:encoded>

    <pubDate>Fri, 17 Feb 2006 08:45:08 -0800</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/69-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>Serendipity GeSHi Plugin update .05</title>
    <link>http://www.gizmola.com/blog/archives/67-Serendipity-GeSHi-Plugin-update-.05.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/67-Serendipity-GeSHi-Plugin-update-.05.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=67</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=67</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    Give this a day and it should be in Spartacus and the Sourceforge Additional Plugins cvs branch.&lt;br /&gt;
&lt;br /&gt;
-.05 release&lt;br /&gt;
- Updated GeSHi to latest release (1.0.7.4)&lt;br /&gt;
- This release includes some fixes, and new language files for: &lt;br /&gt;
applescript, D, diff output, DIV game language, DOS batch language,  eiffel, freebasic, gml, Delphi Inno script, Matlab M language files, MySQL specific SQL, Objective CAML, Ruby, Scheme, SDLBasic, and VHDL: Very high speed integrated circuit HDL&lt;br /&gt;
  
    </content:encoded>

    <pubDate>Sun, 13 Nov 2005 18:53:20 -0800</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/67-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>Joomla PonyGallery tweak</title>
    <link>http://www.gizmola.com/blog/archives/66-Joomla-PonyGallery-tweak.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/66-Joomla-PonyGallery-tweak.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=66</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=66</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    In the current release of the The Mambo/Joomla PonyGallery component, support for MamboJoe&#039;s Community Builder component is hardwired into the picture detail page.  The Author name is a link to the Community Builder component.  If you don&#039;t have that component installed, here is how you can remove the link.&lt;br /&gt;
&lt;br /&gt;
You need to edit the PonyGallery script sub_viewdetails.php.  This script is in the components/mod_ponygallery directory.&lt;br /&gt;
&lt;br /&gt;
Find these lines:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;php geshi&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1056&amp;amp;entry_id=66&quot; title=&quot;http://www.php.net/echo&quot;  onmouseover=&quot;window.status=&#039;http://www.php.net/echo&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&amp;lt;tr class=&#039;sectiontableentry2&#039;&amp;gt;&amp;lt;td width=&#039;30%&#039; valign=&#039;top&#039;&amp;gt;&amp;lt;b&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;_PONYGALLERY_AUTHOR&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td width=&#039;70%&#039; valign=&#039;top&#039;&amp;gt; &amp;lt;a href=&#039;index.php?option=com_comprofiler&amp;amp;task=userProfile&amp;amp;user=&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$imgownerid&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&#039;&amp;gt;&amp;lt;b&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$imgowner&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
And replace them with this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;php geshi&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1056&amp;amp;entry_id=66&quot; title=&quot;http://www.php.net/echo&quot;  onmouseover=&quot;window.status=&#039;http://www.php.net/echo&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&amp;lt;tr class=&#039;sectiontableentry2&#039;&amp;gt;&amp;lt;td width=&#039;30%&#039; valign=&#039;top&#039;&amp;gt;&amp;lt;b&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;_PONYGALLERY_AUTHOR&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td width=&#039;70%&#039; valign=&#039;top&#039;&amp;gt;&amp;lt;b&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$imgowner&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;&lt;span style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
I&#039;m fairly sure this will be a configuration item in the next release of PonyGallery ;)  Until then, if you aren&#039;t using CommunityBuilder, this will hold you over. 
    </content:encoded>

    <pubDate>Sun, 13 Nov 2005 11:40:41 -0800</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/66-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>PHPlot, MySQL and the Dark Ages of Camelot</title>
    <link>http://www.gizmola.com/blog/archives/63-PHPlot,-MySQL-and-the-Dark-Ages-of-Camelot.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/63-PHPlot,-MySQL-and-the-Dark-Ages-of-Camelot.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=63</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=63</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    &lt;img width=&#039;470&#039; height=&#039;295&#039; border=&#039;0&#039; hspace=&#039;5&#039; align=&#039;left&#039; src=&#039;http://www.gizmola.com/blog/uploads/images/daocusers.gif&#039; alt=&#039;&#039; /&gt;The Dark Ages of Camelot (DAoC) is one of a number of Massive Multiplayer Online Role playing games (MMORPG) available for people who like those types of things.  Mythic Entertainment, the company behind DAoC decided to offer an xml feed with various statistics about the game including the number of active players.  From April 2002 to July 2005 I used a cron job to query the xml feed once every 5 minutes, parse the results and store the statistics in a database table.&lt;br /&gt;
&lt;br /&gt;
I made a graph of these statistics available on a fan site I operated.  The graph used the open source &lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1059&amp;amp;entry_id=63&quot; title=&quot;http://www.phplot.com/&quot;  onmouseover=&quot;window.status=&#039;http://www.phplot.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHPlot graphing class&lt;/a&gt; in order to draw a line graph charting the number of players playing the game by hour for a 24 hour period.  Visitors to the site would see the line graph shown here, plotting the number of players per hour against a second line showing the day&#039;s average.  Like many PHP graphing libraries,  PHPlot assumes that you have the GD library installed and available to PHP on order for the graphs to work.  &lt;br /&gt;
&lt;br /&gt;
This was one of my early experiments with PHP, and illustrated its power and flexibility.  Now that the site where the graph appeared is no longer online, I figured I would provide the code, and a small subset of the database, for people interested in how to program with &lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1059&amp;amp;entry_id=63&quot; title=&quot;http://www.phplot.com/&quot;  onmouseover=&quot;window.status=&#039;http://www.phplot.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PHPlot.&lt;/a&gt;  At the time I created this code, PHPlot didn&#039;t have much documentation and required some trial and error experimentation.  Of course, since then (several years now) PHPlot has been improved, and should definately be considered if you want graphing in your application.  Because I don&#039;t want to spend time debugging old obsolete code, I&#039;ve provided the library I used in the download along with the graph script.  It would probably work with the latest release, but I don&#039;t have time to test it.  You can &lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1061&amp;amp;entry_id=63&quot; title=&quot;http://www.gizmola.com/blog/index.php?serendipity[subpage]=downloads&amp;amp;thiscat=5&amp;amp;file=7&quot;  onmouseover=&quot;window.status=&#039;http://www.gizmola.com/blog/index.php?serendipity[subpage]=downloads&amp;amp;thiscat=5&amp;amp;file=7&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;download my example database, version of PHPlot and script here&lt;/a&gt;.  The database contains one months data, so you can play with the script and explore the class. &lt;br style=&quot;clear:both&quot; /&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.gizmola.com/blog/exit.php?url_id=1066&amp;amp;entry_id=63&quot; title=&quot;http://www.php.net/array_pad&quot;  onmouseover=&quot;window.status=&#039;http://www.php.net/array_pad&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;&lt;/a&gt;  Read on for some brief instructions and an explanation of the code. &lt;br /&gt;&lt;a href=&quot;http://www.gizmola.com/blog/archives/63-PHPlot,-MySQL-and-the-Dark-Ages-of-Camelot.html#extended&quot;&gt;Continue reading &quot;PHPlot, MySQL and the Dark Ages of Camelot&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 29 Sep 2005 16:46:15 -0700</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/63-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>
<item>
    <title>Joomla (Mambo) Core ERD diagrams</title>
    <link>http://www.gizmola.com/blog/archives/62-Joomla-Mambo-Core-ERD-diagrams.html</link>
            <category>Web Tech</category>
    
    <comments>http://www.gizmola.com/blog/archives/62-Joomla-Mambo-Core-ERD-diagrams.html#comments</comments>
    <wfw:comment>http://www.gizmola.com/blog/wfwcomment.php?cid=62</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.gizmola.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=62</wfw:commentRss>
    

    <author>nospam@example.com (David Rolston)</author>
    <content:encoded>
    I have a small project that involves an implementation of Joomla (a fork of the popular PHP/Mysql based content management system Mambo).  I started with Mambo and during the time I was configuring the site, the core developers of Mambo left to create the Joomla project.  The reasons for this are discussed on their &lt;a href=&quot;http://www.opensourcematters.org/&quot;  class=&quot;bb-url&quot;&gt; OpenSourceMatters&lt;/a&gt; website.  &lt;br /&gt;
&lt;br /&gt;
Suffice it to say, I find an Entity Relationships diagram to be very helpful in understanding the architecture of a database driven application like Joomla.  There wasn&#039;t one available, so I decided to reverse engineer the database, and created these diagrams, which break the core database down into a few functional areas.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;User and Security Subsystem&lt;/b&gt;&lt;br /&gt;
&lt;a href=&#039;http://www.gizmola.com/blog/uploads/images/joomlaerd_users.jpg&#039;&gt;&lt;img width=&#039;110&#039; height=&#039;68&#039; border=&#039;0&#039; hspace=&#039;5&#039; src=&#039;http://www.gizmola.com/blog/uploads/images/joomlaerd_users.tn.jpg&#039; alt=&#039;&#039; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Backend (modularity and extensibility) Subsystem&lt;/b&gt;&lt;br /&gt;
&lt;a href=&#039;http://www.gizmola.com/blog/uploads/images/joomlaerd_backend.jpg&#039;&gt;&lt;img width=&#039;110&#039; height=&#039;68&#039; border=&#039;0&#039; hspace=&#039;5&#039; src=&#039;http://www.gizmola.com/blog/uploads/images/joomlaerd_backend.tn.jpg&#039; alt=&#039;&#039; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Content and Presentation Subsystem&lt;/b&gt;&lt;br /&gt;
&lt;a href=&#039;http://www.gizmola.com/blog/uploads/images/joomlaerd_content.jpg&#039;&gt;&lt;img width=&#039;110&#039; height=&#039;85&#039; border=&#039;0&#039; hspace=&#039;5&#039; src=&#039;http://www.gizmola.com/blog/uploads/images/joomlaerd_content.tn.jpg&#039; alt=&#039;&#039; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Banners&lt;/b&gt;&lt;br /&gt;
&lt;a href=&#039;http://www.gizmola.com/blog/uploads/images/joomlaerd_banners.jpg&#039;&gt;&lt;img width=&#039;110&#039; height=&#039;62&#039; border=&#039;0&#039; hspace=&#039;5&#039; src=&#039;http://www.gizmola.com/blog/uploads/images/joomlaerd_banners.tn.jpg&#039; alt=&#039;&#039; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Logging&lt;/b&gt;&lt;br /&gt;
&lt;a href=&#039;http://www.gizmola.com/blog/uploads/images/joomlaerd_logging.jpg&#039;&gt;&lt;img width=&#039;103&#039; height=&#039;110&#039; border=&#039;0&#039; hspace=&#039;5&#039; src=&#039;http://www.gizmola.com/blog/uploads/images/joomlaerd_logging.tn.jpg&#039; alt=&#039;&#039; /&gt;&lt;/a&gt; 
    </content:encoded>

    <pubDate>Fri, 23 Sep 2005 13:28:46 -0700</pubDate>
    <guid isPermaLink="false">http://www.gizmola.com/blog/archives/62-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/1.0/</creativeCommons:license>
</item>

</channel>
</rss>