<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <title>Ramblings of a web guy (Tag: phorum)</title>
        <description>Brian Moon, of dealnews.com, shares what he knows (and learns) about PHP, MySQL and other stuff</description>
        <link>http://brian.moonspot.net/feed.php?type=rss&amp;amp;tag=phorum</link>
        <lastBuildDate>Tue, 07 Sep 2010 21:09:41 -0500</lastBuildDate>
        <generator>Wordcraft 0.10</generator>
        <item>
            <guid>http://brian.moonspot.net/forums-are-crap-help-us</guid>
            <title>Forums are crap. Can we get some help?</title>
            <link>http://brian.moonspot.net/forums-are-crap-help-us</link>
            <description><![CDATA[Amy Hoy has written a blog post about why <a href=
"http://sweatyd.posterous.com/forums-are-crap">forums are crap</a>.
And she is right. Forum software does not always do a good job of
helping people communicate. I have worked with Amy. She did a great
analysis of <a href="http://dealnews.com/">dealnews.com</a> that
led to our new design. So, she is not to be ignored.<br>
<br>
However, as a software developer (<a href=
"http://www.phorum.org/">Phorum</a>), I see a lot of problems and
no answers.&nbsp; And it is not all on the software.&nbsp; Web site
owners use forums to solve problems that they really, really suck
at.&nbsp; Ideally, every web site would be very unique for their
audience.&nbsp; They would use a custom solution that fits a number
of patterns that best solves their problem.&nbsp; However, most web
site owners don't want to take the time to do such things.&nbsp;
They want a one stop, drop in solution. See the monolith that is
vBulletin, scary.<br>
<br>
And what if a forum is the best solution? Well, software
developers, in general, are not good designers. They don't think
like normal people. And they don't see their applications as a
whole, but as pieces that do jobs. The forum software market has
been run by software developers for over 10 years. Most of them all
are still copies of what <a href=
"http://en.wikipedia.org/wiki/UBB.classic">UBB</a> was 13 years
ago. And software (like Phorum) that has tried to be different is
shunned by the online communities of the world because they don't
work/look/feel like every other forum software on the planet.<br>
<br>
So, as software developers, what are we to do? We want to make
great software. We want to help our users help their users. But,
what we have been doing for 10+ years has only been adequate. As
the leader of an open source forum software project, I am open to
any and all ideas.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Mon, 12 Oct 2009 10:01:44 -0500</pubDate>
            <category>mysql</category>
            <category>phorum</category>
            <category>php</category>
            <category>usability</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/06/18/did-you-know-i-am-going-to-be-at-velocity/</guid>
            <title>Did you know I am going to be at Velocity?</title>
            <link>http://brian.moonspot.net/2008/06/18/did-you-know-i-am-going-to-be-at-velocity/</link>
            <description><![CDATA[Well, neither did I until today. HA!<br />
<br />
<a href="http://en.oreilly.com/velocity2008/public/content/home">Velocity</a> is a new O'Reilly conference dedicated to "Optimizing Web Performance and Scalability".  It starts next Monday.  Yesterday I was contacted by <a href="http://en.oreilly.com/velocity2008/public/schedule/speaker/2314">Adam Jacobs</a> of HJK Solutions about taking part in a <a href="http://en.oreilly.com/velocity2008/public/schedule/detail/4762">panel discussion</a> about what happens when success comes suddenly to a web site.  I think he thought I was in the bay area.  Little did he know I am in Alabama.  But, amazingly, I was able to work it all out so I can be there.  I wish I had known about this conference ahead of time.  It sounds really awesome.  Performance has always been something I focus on.  I hope to share some and learn at the same time.<br />
<br />
So, if you are going to be there, come see our panel.<br />
<br />
P.S. Thanks to John Allspaw of Flickr for recommending me to Adam.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Tue, 17 Jun 2008 23:31:32 -0500</pubDate>
            <category>memcached</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/06/11/memproxy-01/</guid>
            <title>MemProxy 0.1</title>
            <link>http://brian.moonspot.net/2008/06/11/memproxy-01/</link>
            <description><![CDATA[<a href="http://memproxy.googlecode.com/files/memproxy-0.1.tar.gz">MemProxy 0.1 is out</a>!  It has taken me a while, but I have finally gotten around to releasing the code that I credited with saving us during a <a href="http://brian.moonspot.net/2006/12/22/is-yahooed-a-word/">Yahoo! mention</a>.  It is a caching proxy "server" that uses memcached for storing the cache.  I put server in quotes because it is really just a PHP script that handles the caching and talking to the application servers.  Apache and other HTTP servers already do a good job talking HTTP to a vast myriad of clients.  I did not see any reason to reinvent the wheel.  Here are some of the features that make it different from anything I could find:<br />
<ul><br />
	<li>Uses memcached for storage</li><br />
	<li>Serves cache headers to clients based on TTL of cached data</li><br />
	<li>Uses custom headers to assemble multiple pieces of cache into one object</li><br />
	<li>Minimal dependencies.  Only PHP and pecl/memcached needed.</li><br />
	<li>Small code base.  It is just two files, one when settings are cached.</li><br />
	<li>Application agnostic.  If the backend is hosted on an HTTP server this can cache it.</li><br />
</ul><br />
Some other things it does that you might expect:<br />
<ul><br />
	<li>Handles HTTP 1.1 requests to the backend</li><br />
	<li>Allows TTLs set by the standard Cache-Control header</li><br />
	<li>Appears transparent to the client.</li><br />
	<li>Sends proper HTTP error codes relating to proxies/gateways</li><br />
	<li>Allows pages to be refreshed or removed from cache</li><br />
	<li>Allows a page to be viewed from the application server without caching it</li><br />
	<li>more....</li><br />
</ul><br />
You can find the code on <a href="http://code.google.com/p/memproxy/">Google Code</a>.  The code (or something like it rather) has been in use at <a href="http://dealnews.com/">dealnews</a> for well over a year.  But, this is a new code base.  It had to be refactored for public consumption.  So, there may be bugs.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Tue, 10 Jun 2008 20:46:15 -0500</pubDate>
            <category>memcached</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/06/05/in_array-is-quite-slow/</guid>
            <title>in_array is quite slow</title>
            <link>http://brian.moonspot.net/2008/06/05/in_array-is-quite-slow/</link>
            <description><![CDATA[So, we had a cron job hanging for hours.  No idea why.  So, I started debugging.  It all came down to a call to in_array().  See, this job is importing data from a huge XML file into MySQL.  After it is done, we want to compare the data we just added/updated to the data in the table so we can deactivate any data we did not update.  We were using a mod_time field in mysql in the past.  But, that proved to be an issue when we wanted to start skipping rows from the XML that were present but unchanged.  Doing that saved a lot of MySQL writes and sped up the process.<br />
<br />
So, anyhow, we have this huge array of ids accumulated during the import.  So, an in clause with 2 million parts would suck.  So, we suck back all the ids in the database that exist and stick that into an array.  We then compared the two arrays by looping one array and using in_array() to check if the value was in the second array.  Here is a pseudo example that shows the idea:<br />
<br />
[sourcecode language='php']<br />
<br />
foreach($arr1 as $key=>$i){<br />
<br />
if(in_array($i, $arr2)){<br />
<br />
unset($arr1[$key]);<br />
<br />
}<br />
}<br />
<br />
[/sourcecode]<br />
<br />
So, that was running for hours with about 400k items.  Our data did not contain the value as the key, but it could as the value was unique.  So, I added it.  So, now, the code looks like:<br />
<br />
[sourcecode language='php']<br />
<br />
foreach($arr1 as $key=>$i){<br />
<br />
if(isset($arr2[$i])){<br />
<br />
unset($arr1[$key]);<br />
<br />
}<br />
}<br />
<br />
[/sourcecode]<br />
<br />
Yeah, that runs in .8 seconds.  Much better.<br />
<br />
So, why were we using in_array to start with if in_array is clearly not the right solution to this problem?  Well, it was basic code evolution.  Originally, these imports would be maybe 100 items.  But, things changed.<br />
<br />
FWIW,  I tried array_diff() as well.  It took 25 seconds.  Way better than looping and calling in_array, but still not as quick as a simple isset check.  There was refactoring needed to put the values into the keys of the array.<br />
<br />
<strong>UPDATE:</strong> I updated this post to properly reflect that there is nothing wrong with in_array, but simply that it was not the right solution to this problem.  I wrote this late and did not properly express this.  Thanks to all those people in the comments that helped explain this.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Thu, 05 Jun 2008 02:38:18 -0500</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/05/07/thoughts-on-the-2008-mysql-conference-and-expo/</guid>
            <title>Thoughts on the 2008 MySQL Conference and Expo</title>
            <link>http://brian.moonspot.net/2008/05/07/thoughts-on-the-2008-mysql-conference-and-expo/</link>
            <description><![CDATA[Well, it has been almost a month.  I know I am late to the blogosphere on my thoughts.  Just been busy.<br />
<br />
Again this year, the Phorum team was invited to be a part of the DotOrg Pavilion.  What is that?  Basically they just give expo floor space to open source projects.  It is cool.  We had a great location this year.  We were right next to the area where they served food and drinks during the breaks.  We had lots of traffic and met some of our power users.  <a href="http://www.imvu.com/">IMVU.com</a> is getting 1.5 million messages per month in their Phorum install.  They did have to customize it to fit into their sharding.  But, that is expected.  A guy (didn't catch his name) from Innobase came by and told us that they just launced <a href="http://forums.innodb.com/">InnoDB support forums</a> on their site using Phorum.  Cool.  So now MySQL and Innobase use Phorum.  I am humbled by the message that sends to me about Phorum.<br />
<br />
Speaking of our booth, we were right next to the <a href="http://www.phpmyadmin.net/">phpMyAdmin</a> guys.  Wow, that product has come a long way.  I was checking out the visual database designer they have now.  It was neat.  I also met the Gentoo MySQL package maintainer.  He was in the phpMyAdmin booth.<br />
<br />
I was interviewed by <a href="http://www.webdevradio.com/">WebDevRadio</a> as I <a href="http://doughboy.wordpress.com/2008/05/03/interview-with-webdevradio/">already posted</a>.  I was also asked to do a short Q&amp;A with the Sun Headlines video team.  They used one part of my clip.  I won't link to that.  No, if you find it good for you.  I need to be interviewed some more or something.  I did not look comfortable at all.<br />
<br />
There were lots of companies with <em>open</em> in their name or slogan.  I guess this is expected pandering.<br />
<br />
I attended part of the InnoDB talk given by <a href="http://en.oreilly.com/mysql2008/public/schedule/speaker/88">Mark Callaghan</a> of Google.  It appears that Google is serious about improving InnoDB on large machines.  That is, IMO, good news for anyone that likes InnoDB.  If I counted right, they had more than 5 people who at least part of their job is to improve InnoDB.<br />
<br />
I gave my two talks.  The first had low attendance, but the feedback was nice.  It was just after the snack break in the expo hall and I was in the farthest room from the expo hall.  That is what I keep telling myself. =)  The second was better attended and the feedback seemed good there.  I was told by Maurice (Phorum Developer) that I talked too fast and at times sounded like Mr. Mackey from South Park by repeating the word <em>bad </em>a lot.  I will have to work on that in the future.  I want to do more speaking.<br />
<br />
On the topic of my second talk, there seemed to be a lot of "This is how we scaled our site" talks.  I for one found them all interesting.  Everyone solves the problem differently.<br />
<br />
Next year I am thinking about getting more specific with my talk submissions.  Some ideas include: PHP, MySQL and Large Data Sets, When is it ok to denormalize your data?, Using memcached (not so much about how it works), Index Creation (tools, tips, etc.).<br />
<br />
In closing, I want to give a big thanks to Jay Pipes and Lenz Grimmer from MySQL.  Despite Jay's luggage being lost he was still a big help with some registration issues among other things.  Both of them helped out the Phorum team a great deal this year.  Thanks guys.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Wed, 07 May 2008 12:48:47 -0500</pubDate>
            <category>memcached</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/05/03/interview-with-webdevradio/</guid>
            <title>Interview with WebDevRadio</title>
            <link>http://brian.moonspot.net/2008/05/03/interview-with-webdevradio/</link>
            <description><![CDATA[While I was at the MySQL Conference, I sat down with Michael Kimsal of <a href="http://www.webdevradio.com/index.php">WebDevRadio</a> and <a href="http://www.webdevradio.com/index.php?id=74">recapped the two talks</a> that I gave at the conference.  I have uploaded the slides so you can follow along if you want.<br />
<br />
<a href="http://content.dealnews.com/files/one_to_cluster.pdf">One to a Cluster</a> - The evolution of the dealnews.com architecture.<br />
<br />
<a href="http://content.dealnews.com/files/phorum_mysql_tricks.pdf">MySQL Tips and Tricks</a> - Some simple tips and some of the more advanced SQL we use in Phorum.<br />
<br />
Thanks Michael.  Any time you need a guest, just let me know.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Sat, 03 May 2008 10:13:00 -0500</pubDate>
            <category>memcached</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/05/01/mysql-conference-swag/</guid>
            <title>MySQL Conference Swag</title>
            <link>http://brian.moonspot.net/2008/05/01/mysql-conference-swag/</link>
            <description><![CDATA[I was reading a post about <a href="http://arjen-lentz.livejournal.com/113112.html">The Swag Report</a> and realized that I stayed so busy at the Phorum booth (and a little at the memcached booth) and preparing for my talks, I did not bother to go around and collect any swag from the conference.  So, if you are a vendor and want to mail me some swag that I missed, you can send it to: Brian Moon, 198 S. Hillcrest Rd., Odenville, AL  35120.  Of course, I expect nothing.  But, ya never know what product I might pimp because of a t-shirt. =)]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Thu, 01 May 2008 13:09:08 -0500</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/04/17/2008-mysql-conference-part-1/</guid>
            <title>2008 MySQL Conference, part 1</title>
            <link>http://brian.moonspot.net/2008/04/17/2008-mysql-conference-part-1/</link>
            <description><![CDATA[It is always surprising what I learn when I go to a conference these days.  Years ago, I could go to any talk and just suck it all in.  Now, it is the little nuggets.  The topics as a whole do more to confirm what I have already developed while running the <a href="http://www.phorum.org/">Phorum</a> project and building the infastructure for <a href="http://dealnews.com/">dealnews.com</a>.  That confirmation is still nice.  You know you are not the only one that thought a particular solution was a good idea.<br />
<br />
One of the confirmations I have had is that the big sites like Flickr, Wikipedia, Facebook and others don't use exotic setups when it comes to their hardware and OS.  During a keynote panel, they all commented that they did not do any virtualization on their servers.  Most did not use SANs.  Some ran older MySQL versions but some were running quite recent versions.  I have kept thinking that I did not have the desire to get to fancy with that stuff and clearly I am not the only one.<br />
<br />
One of the little nuggets that will likely change my world is <a href="http://dev.mysql.com/doc/refman/5.0/en/index-merge-optimization.html">index_merge in MySQL</a>.  I feel silly as this has been around since 5.0.3 but I was not aware of it.  Basically MySQL will now use more than one key to resolve a where clause and possibly an order by depending on the query.  This could lead to me removing several keys from tables in both Phorum and at dealnews.<br />
<br />
There were others, but I am tired and trying to get OpenID into the Phorum trunk right now so I will have to think of more later.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Thu, 17 Apr 2008 16:43:50 -0500</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/04/17/phorum-turns-10/</guid>
            <title>Phorum turns 10</title>
            <link>http://brian.moonspot.net/2008/04/17/phorum-turns-10/</link>
            <description><![CDATA[So, I am at the MySQL Conference this week with my Phorum co-developers.  We got to talking last night about how old Phorum is.  We knew it was about 10 years.  We pulled up some old archived zip file of version 1.5 and found in the this in the comment block.<br />
<br />
<code><br />
* Created 04/16/1998<br />
</code><br />
<br />
Whoa!  That means that yesterday was the 10th birthday of the Phorum project.  I would guess that is the date I originally put the code up on my personal web site for people to download.  I remember sending that email to the  PHP General mailing list.  I told people they could have the code if they would help debug it.  Later I officially made a GPL license and then a BSD style license as I became more knowledgeable about the open source and free software world.<br />
<br />
So, for kicks we decided to install version 1.6 on the phorum.org site.  Keep in mind the release date for that was March 30, 1999.  The only hurdles were a default value on an auto increment column in the .sql file, needing register_globals and adding .php3 to be parsed as PHP.  That got it up and running.  I had hoped to post the URL for fun, but sadly, 5 lines in were sql injection vulnerabilties.  Ah, the good ol' days.<br />
<br />
Sadly, I don't have my emails from 1998.  I lost everything in 2001 due to either a hard drive crash or some shady deal I had with someone hosting the Phorum site at the time.  I can't remember.  If anyone happens to have UseNet archives or mailing list archives of the PHP General list from April 1998, please let me know.  I would love to have that old stuff.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Thu, 17 Apr 2008 16:27:05 -0500</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/04/08/what-to-do-in-the-bay-area/</guid>
            <title>What to do in the Bay Area?</title>
            <link>http://brian.moonspot.net/2008/04/08/what-to-do-in-the-bay-area/</link>
            <description><![CDATA[So, as <a href="http://doughboy.wordpress.com/2008/04/01/2008-mysql-conference/">I said before</a>, I will be at the <a href="http://www.mysqlconf.com/">MySQL Conference</a> next week.  I am renting a car this year so I don't have to wait on cabs or deal with them at all.  So, I am mobile and being from a modern Southern US city, used to driving 30 minutes just to go to dinner.  So, where should we go?  Anything good in San Jose?  Should I go all the way to San Francisco?  I am willing to go where ever.  Help me locals, you are my only hope!]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Tue, 08 Apr 2008 11:30:01 -0500</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/04/01/2008-mysql-conference/</guid>
            <title>2008 MySQL Conference</title>
            <link>http://brian.moonspot.net/2008/04/01/2008-mysql-conference/</link>
            <description><![CDATA[In just two weeks I will be heading to the 2008 MySQL Conference.  I will be speaking this year.  My two talks are:<br />
<br />
<a href="http://en.oreilly.com/mysql2008/public/schedule/detail/352">MySQL Hacks and Tricks to Make Phorum Fast</a><br />
04/16/2008  4:25pm PDT Room: Ballroom A<br />
<br />
<a href="http://en.oreilly.com/mysql2008/public/schedule/detail/49">From One Server to a Cluster</a><br />
04/16/2008  5:15pm PDT Room: Ballroom C<br />
<br />
I have to pull back to back talks.  *PHEW* I hope I can hold up.  To make it worse, they did not put me in the same room. If I remember right though, those are really close to each other.<br />
<br />
Of course, the Phorum team will be in the Expo Hall in the DotOrg pavilion.  Just look for the big dog.<br />
<br />
<img src="http://doughboy.files.wordpress.com/2008/04/bigdog.png" alt="Big Dog" />]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Mon, 31 Mar 2008 21:46:38 -0500</pubDate>
            <category>memcached</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/02/21/forums-are-the-red-headed-step-child-of-a-web-site/</guid>
            <title>Forums are the red headed step child of a web site</title>
            <link>http://brian.moonspot.net/2008/02/21/forums-are-the-red-headed-step-child-of-a-web-site/</link>
            <description><![CDATA[I have seen it time and time again.  And yet, every time, it irritates me to no end.  You are on a professional web site.  You are navigating around and at some point you hit the link for their forums.  And just like that you feel transported to another place.  The whole site design just changes.  Colors, layout, navigation... everything.  Here are some examples, including the new C7Y site from php|Architect which inspired this post. (I really do love you guys on the podcast I promise =)<br />
<ul><br />
	<li>php|architect's C7Y - <a href="http://c7y.phparch.com/">main site</a> - <a href="http://c7y-bb.phparchitect.com/">forums</a></li><br />
	<li>Zend's Developer Zone - <a href="http://devzone.zend.com/public/view">main site</a> - <a href="http://www.zend.com/forums/">forums</a><br />
Zend's forums do at least use the Zend.com header, but you can't get to the forums from the main Zend.com site.  You have to go to the Developer Zone.</li><br />
	<li>TextPad (great windows editor) - <a href="http://www.textpad.com/">main site</a> - <a href="http://forums.textpad.com/index.php">forums</a><br />
The header is kind of the same.  Fonts and link colors change slightly though which is worse in some ways than a wholesale change.  It looks like they just wedged in their HTML into the phpBB template.</li><br />
</ul><br />
I could continue to list some here, but you get the idea.   So, what is the problem?  Does most message board software make it too hard to edit their templates?  Are forums an after thought and some underling is given the task to make them work and not allowed access to the main site's templates?<br />
<br />
Some people do better at it.  <a href="http://forums.mysql.com/">MySQL</a> for example.  Theirs is still not perfect.  An ad awkwardly appears in the forums in a way that makes it look like an error.  However, thanks to <a href="http://www.phorum.org/">Phorum</a> (cha-ching), MySQL was able to make their own log in system work with their forums.  Heck, even at <a href="http://forums.dealnews.com/">dealnews</a> I have not done that.  Mostly because our forum logins predate our site accounts for email alerts and newsletters.  I am not asking for perfection though.  I would just like to feel like the company/entitiy gave some love to making their forums part of their site and not an afterthought.<br />
<br />
So, I call for all web sites to start treating their forums like real pages.  Give them the same love and attention you give that front page or any other page.  And, if your message board software makes that hard, give Phorum a try.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Wed, 20 Feb 2008 18:07:44 -0600</pubDate>
            <category>Design</category>
            <category>HTML</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/02/20/speaking-at-mysql-conference-2008/</guid>
            <title>Speaking at MySQL Conference 2008</title>
            <link>http://brian.moonspot.net/2008/02/20/speaking-at-mysql-conference-2008/</link>
            <description><![CDATA[I had mentioned a while back that I <a href="http://doughboy.wordpress.com/2007/10/31/mysql-conference-submissions/">submitted three proposals</a> for the <a href="http://en.oreilly.com/mysql2008/public/content/home">2008 MySQL Conference</a>.  Well, two were accepted.<br />
<br />
<b>From one server to a cluster</b><br />
<br />
In the last 10 years, dealnews.com has grown from a single shared hosting account to an entire rack of equipment. Luckily, we started using PHP and MySQL very early in the company's history.<br />
<br />
From the early days of growing a forum to surviving Slashdotting, Digging and even a Yahoo! front page mention, we have had to adapt both our hardware and software many times to keep up with the growth.<br />
<br />
I will discuss the traps, bottlenecks, and even some big wins we have encountered along the way using PHP and MySQL. From the small scale to using replication and even some MySQL Cluster.  We have done many interesting things to give our readers (and our content team) a good experience when using our web site.<br />
<br />
<b>MySQL hacks and tricks to make Phorum fast</b><br />
<br />
Phorum is the message board software used by MySQL. One reason they chose Phorum was because of its speed. We have to use some tricks and fancy SQL to make this happen. Things we will talk about in this session include:<br />
<ul><br />
	<li>Using temporary tables for good uses.</li><br />
	<li> Why PHP and MySQL can be a bad mix with large data sets.</li><br />
	<li>What mysqlnd will bring to the table with the future of PHP and MYSQL.</li><br />
	<li>How Phorum uses full text indexing and some fancy SQL to make our search engine fast.</li><br />
	<li>Forcing MySQL to use indexes to ensure proper query performance.</li><br />
</ul><br />
You can find <a href="http://en.oreilly.com/mysql2008/public/schedule/speaker/66">my conference page</a> here.  (as <a href="http://terrychay.com/blog/">Terry</a> would say, me, me, me!)]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Wed, 20 Feb 2008 15:12:01 -0600</pubDate>
            <category>Linux</category>
            <category>memcached</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/02/07/godaddy-support-is-awful/</guid>
            <title>GoDaddy support is awful</title>
            <link>http://brian.moonspot.net/2008/02/07/godaddy-support-is-awful/</link>
            <description><![CDATA[Luckily, I don't have personal experience with them.  But, based on the 2 to 3 users per week that come to the Phorum support forums and IRC, they have the worst support of any host on the internet.<br />
<br />
<b>Example 1</b><br />
<br />
A user <a href="http://www.phorum.org/phorum5/read.php?61,127675">comes to the forums</a> having trouble with his Phorum install.  In the user's words, GoDaddy tells him "they couldnt help me costumize my scripts because it wasnt their job".  In this case "customize" meant filling in the MySQL permissions into the Phorum config files.  In the end, GoDaddy had to move him to a Linux hosting account.  They claimed that the Windows hosting accounts do not support PHP.  However, they are clearly wrong about their own hosting as this all started because the user received a PHP error about not connecting to MySQL.<br />
<br />
<b>Example 2</b><br />
<br />
This user found that <a href="http://www.phorum.org/phorum5/read.php?61,124392,124392#msg-124392">GoDaddy is using MySQL 4</a> on their servers.  Their web site does not mention a version anywhere.  So, users are locked in to a hosting plan before knowing this.<br />
<br />
<b>Example 3</b><br />
<br />
This happened today in IRC.  It was much like the first example.  In this case, GoDaddy support told him "permissions are set via ftp".  Um, MySQL permissions are set via FTP?  The user had a MySQL server name.  For some reason it did not exist.  So, either he typed it wrong or they gave him the wrong server name.  Either way, their support should recognize this and be able to help their clients.<br />
<br />
<b>Example 4</b><br />
<br />
This is less a support issue and just plain crappy of them IMO.  <a href="http://www.phorum.org/phorum5/read.php?61,126856,126856#msg-126856">GoDaddy does not allow the creation of temporary tables</a>.  The Phorum search engine makes use of them to save lots of CPU and memory on the PHP side.  Luckily for their users, Thomas felt sorry enough for them to make a module that used good old fashioned slow LIKE queries.  So, that will work until their account is shut off because they have search queries clogging up the database servers.<br />
<br />
So, if you are on GoDaddy, I feel for you.  From where we sit, it really seems like they do not provide very good support.  We end up having to support their users for things that GoDaddy should be able to answer.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Thu, 07 Feb 2008 11:43:31 -0600</pubDate>
            <category>Linux</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/02/04/how-not-to-get-support-and-how-to-turn-the-other-cheek/</guid>
            <title>How NOT to get support and how to turn the other cheek.</title>
            <link>http://brian.moonspot.net/2008/02/04/how-not-to-get-support-and-how-to-turn-the-other-cheek/</link>
            <description><![CDATA[So, I checked my email this morning and found this jewel:<br />
<blockquote>I might use Phorum if you brain deads knew how to upload or download your files via FTP. Your documentation has no order to it, its all a mess. I even dropped a release level to see if it was just that release. Ill give you a clue, DONT TRANSFER YOUR FILES VIA AUTO, EXPECIALY YOUR TXT FILES. TRANSFER THEM IN ASCII MODE ONLY, THIS INCLUDES YOUR PHP FILES. Then you just f---ing* MIGHT get readable files. Now you might say hey wait a min, we have full documentation on our web site, but you forget, someone has to open the sample.config.php file and read the crap that resides there.</blockquote><br />
<blockquote><i>* edited for content</i></blockquote><br />
Should I respond?  If so, how?  I decided to respond in as nice a way as I could.<br />
<blockquote> I normally don't answer direct support emails.  Neither do I normally  answer very angry emails.  However, I view this as an educational  experience.<br />
<br />
Judging by your email, I would say you are using Notepad on Windows to  edit and read files.  That is mistake number one.  Notepad only reads  one file format: Windows text files.  Windows natively uses a CRLF for  it's line endings.  It is the only operating system that does so.  Notepad is the only application on the Windows platform that only reads  that format.  If you would use Wordpad instead, this would not have been  a problem for you.  For some reading on the subject, you may want to read:<br />
<br />
<a href="http://en.wikipedia.org/wiki/Newline" class="moz-txt-link-freetext">http://en.wikipedia.org/wiki/Newline</a><br />
<a href="http://www.cs.toronto.edu/%7Ekrueger/csc209h/tut/line-endings.html" class="moz-txt-link-freetext">http://www.cs.toronto.edu/~krueger/csc209h/tut/line-endings.html</a><br />
<br />
Because PHP scripts are most commonly deployed on a Linux platform, the  Unix line feed (LF or \n) is best for PHP applications.  Here are some  suggestions for some great text editors for Windows.<br />
<br />
TextPad - <a href="http://www.textpad.com/" class="moz-txt-link-freetext">http://www.textpad.com/</a><br />
Metapad - <a href="http://www.liquidninja.com/metapad/" class="moz-txt-link-freetext">http://www.liquidninja.com/metapad/</a><br />
PSPad   - <a href="http://www.pspad.com/en/" class="moz-txt-link-freetext">http://www.pspad.com/en/</a><br />
<br />
I hope this has helped educate you on the world of new lines and how  real programming works.  In the future, a kind word in the forums would  be much more appreciated than an email like this.  Not all people would  be as kind as I am being and want to help you grow.</blockquote><br />
What do you think?  Should have just let this guy go?  Should have been as ugly to him as he was to me?]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Mon, 04 Feb 2008 10:23:30 -0600</pubDate>
            <category>Linux</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/01/17/responsible-use-of-the-_request-variable/</guid>
            <title>Responsible use of the $_REQUEST variable.</title>
            <link>http://brian.moonspot.net/2008/01/17/responsible-use-of-the-_request-variable/</link>
            <description><![CDATA[A recent <a href="http://marc.info/?l=php-internals&amp;m=119956617516891&amp;w=2">thread split</a> on the PHP Internals list has been about the use of the $_REQUEST variable.  I have seen more than one person make the following logic mistake:<br />
<ol><br />
	<li>I may get data via GET</li><br />
	<li>I may get data via POST</li><br />
	<li>Ah, I should use $_REQUEST as it will catch both.</li><br />
</ol><br />
There is a problem with that logic.  Cookies!  Cookies are also put ino $_REQUEST.  In fact, they are put into $_REQUEST last.  So, any data that was sent via GET or POST is overwritten by cookies of the same name.<br />
<br />
When does this cause a problem?  Well, let's say you have a script that has a form that asks for a user name.  You call the field username.  So, you are looking for that data in $_REQUEST.  Unknown to you, another member of your team makes a cookie named username on a totally unrelated application.  His cookie needs to be accessible from several parts of the site, so he assigned the cookie to the path /.  So, now, when a user submits your form, the data comes in looking like this:<br />
<code><br />
$_GET["username"] = "user input";<br />
$_COOKIE["username"] = "Tom";<br />
$_REQUEST["username"] = "Tom";<br />
</code><br />
<br />
So, now you have bad data for the username you wanted.  This becomes even more menacing when you start thinking about security issues like XSS or CRSF.  As Stefan Esser, a strong PHP Security advocate, wrote <a href="http://marc.info/?l=php-internals&amp;m=120056333422186&amp;w=2">in another reply to the thread</a>:<br />
<blockquote><font color="#000080"> Just imagine my example...<br />
<code><br />
switch ($_REQUEST['action'])<br />
{<br />
case 'logout':<br />
logout();<br />
break;<br />
...<br />
}<br />
</code><br />
When someone injects you a cookie like   +++action=logout   through an<br />
XSS or through a feature like  foobar.co.kr can set cookies for *.co.kr<br />
(in FF atleast).<br />
Then you CANNOT use the application anymore. This is a DOS. You cannot<br />
defeat this problem except detecting and telling the user to delete his<br />
cookies manually...</font></blockquote><br />
Yikes!  So, now you have all kinds of problems with using $_REQUEST.<br />
<br />
So, what is the best way to handle both GET and POST data?  Well, here are a couple options.<br />
<br />
<b>Merge GET and POST data</b><br />
<br />
You could use array_merge() to merge the $_GET and $_POST variables into one.  I would use a new variable for this data.  You can overwrite super globals.  Some think it is a bad idea.  I can't argue that it could cause confusion if you did this in an environment where several parts of the application are going to be using user input.  If you do want to do this you could do the following.<br />
<code><br />
$user_input = array_merge($_GET, $_POST);<br />
// or overwrite $_REQUEST - not recommended<br />
$_REQUEST = array_merge($_GET, $_POST);<br />
</code><br />
<br />
<b>Use GET OR POST, not both</b><br />
<br />
I personally like to only use <b>either</b> $_GET or $_POST.  I have very rarely seen a case where using both made sense.  I normally favor $_POST if it is set.<br />
<br />
<code>if(!empty($_POST)){<br />
$user_input = $_POST;<br />
} elseif {<br />
$user_input = $_GET;<br />
}<br />
</code><br />
<br />
Now we have a save array that can be used and we know that the data only came from one place.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Thu, 17 Jan 2008 10:52:31 -0600</pubDate>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/01/16/charity-for-our-little-team/</guid>
            <title>Charity for our little team?</title>
            <link>http://brian.moonspot.net/2008/01/16/charity-for-our-little-team/</link>
            <description><![CDATA[I don't often beg for stuff, but this is not for me <i>per se</i>.  The Phorum team is raising money to get all of our team (all 3 of us) to Santa Clara for <a href="http://en.oreilly.com/mysql2008/public/content/home">MySQL Conference</a>.  We will be part of the <a href="http://lenz.homelinux.org/archives/148-Presenting-the-MySQL-Conference-Expo-2008-DotOrg-Pavilion-attendees.html">DotOrg Pavilion</a> again this year.  We thank MySQL for inviting us.  We just about have all we need for that part of our fund raising.<br />
We also have need of a new server.  We don't need much.  But, our old Celeron is feeling the pressure of all the new things we are doing with our documentation system.   This is where I am hoping some of you out there can help.  Surely somewhere, someone has a dual Xeon with an older raid card in it that they don't need anymore.  We do have a need for cpu power and for RAID.  We lost a hard drive a few years ago and while we had backups, it was a hassle.  We were down for days.  We have hosting (from my employer, <a href="http://dealnews.com/">dealnews</a>), but I guess if the deal was right, I might consider it.  I do run my personal email and another hobby site on the server.  But, 90+% of the usage is for Phorum.<br />
<br />
So, if anyone can help us out,  either with hardware or a <a href="http://www.phorum.org/donate/donate.php">donation</a>, we thank you.  You can email me at<a href="mailto:brian@phorum.org"> brian@phorum.org</a>.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Wed, 16 Jan 2008 17:23:48 -0600</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2008/01/02/96/</guid>
            <title>Finally, Phorum 5.2 has made it to stable!</title>
            <link>http://brian.moonspot.net/2008/01/02/96/</link>
            <description><![CDATA[You can read the full announcement in the <a href="http://www.phorum.org/story.php?78" target="_blank" rel="nofollow">news post</a> at phorum.org.<br>
<br>
Summary:<br>
<br>
When we officially started on 5.2 in March of 2006, we had several goals. I think we achieved most of those. We also accomplished some unplanned things. Our hackathon (me and maurice slept about 8 hours in 4 days I think) at MySQL Conference 2007 helped a lot. Remember, you can help us get there again by <a href="http://www.phorum.org/donate/donate.php" target="_blank" rel="nofollow">donating to our fund</a>.<br>
<br>
Some highlitghts:<br>
<br>
New Template<br>
New API layers and more hooks<br>
Better MySQL support<br>
Improved bundled modules<br>
New announcement system<br>
New Search, inside and out<br>
<br>
In addition to all this, there are things like more caching options, the new hybrid read view, the new feed options (the feed code was rewritten from scratch) and better error messages so that users are less confused.<br>
<br>
We hope you all enjoy Phorum 5.2. It is the next step for this project that is over 10 years old now. And please, keep making Phorum all your own.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Wed, 02 Jan 2008 17:09:53 -0600</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2007/12/13/taking-a-moment-to-give-thanks/</guid>
            <title>Taking a moment to give thanks.</title>
            <link>http://brian.moonspot.net/2007/12/13/taking-a-moment-to-give-thanks/</link>
            <description><![CDATA[We are just passed the time of year when we give thanks (in the US anyway) and we are coming up on the time when we all try and be giving.  I feel like my last few blog posts have been a little too negative and want to make up for that.  So, I want to say thank you to some people for what I have in my professional world.<br />
<br />
<strong>Daniel deGrandpre and Richard Moss, dealnews.com</strong><br />
I have known both these guys since I was a kid.  I was so excited when they offered me a full time job working on the internet.  I was in a Dilbert world and they rescued me.  Richard gave me the best recommendation I have ever heard.  I listed Richard as a reference for the job I had before dealnews.com.  The interviewer told me that when she asked Richard why she should hire me, he said "Because if I had the money, he would be working for me."  A year later, when I told her I was leaving she asked where I was going.   I happily told her, "Remeber that guy?  He has the money."  Thanks Dan and Rich.<br />
<br />
<strong>Rasmus Lerdorf, Zeev Suraski, Andi Gutmans and other PHP contributors</strong><br />
I was coding Visual Basic when I found PHP.  It was really cool to write code that could make these web pages with such ease.  It made sense and did exactly what I needed it to do.  With each version it has gotten better.  Despite any conflicts on some mailing list, PHP and its community stays the best tool for the job.  Thanks to anyone that has ever helped with that.<br />
<br />
<strong>Monty Widenius, Brian Aker, Jay Pipes and others at MySQL</strong><br />
Along side PHP has been MySQL all the way.  Early on it was msql, but that did not last long.  Like PHP, MySQL has endured criticism and scrutiny to remain the best too for the job.  It has also gotten better with every year and I feel honored to be a part of the MySQL community if only from the edge.  I even started pronounceing it right this year at MySQL Conference.  (It's my-s-q-l in case you didn't know)<br />
<br />
<strong>Apache Foundation</strong><br />
There are lots of people in this group that have given time to make my professional life what it is today.  I was a little active in the community a few years back, but have had little personal experience with the Apache foundation recently.  I still appreciate everyone that has had a part in it.<br />
<br />
<strong>Thomas Seifert and Maurice Makaay, my Phorum cohorts</strong><br />
Last but in no way least are these two guys.  I had some help here and there with Phorum for the first few years.  But, Thomas has been on the team since 2001.  He took Phorum to a new level by adding user logins and other things he needed.  Maurice has been with us as a user for a while and a team member for a few years now.  Like Thomas, he has brought Phorum up a level.  Besides help with Phorum, they are great friends and another resource I can tap for help when I am confused about things.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Thu, 13 Dec 2007 16:34:50 -0600</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2007/12/13/namespaces-sigh/</guid>
            <title>Namespaces, *sigh*</title>
            <link>http://brian.moonspot.net/2007/12/13/namespaces-sigh/</link>
            <description><![CDATA[If you read internals (and by read, I mean glance at the barrage of subjects in your inbox), you too have seen the flood of namespaces related emails.  I have no technical expertise to add to the conversation.  However, unlike the otehr 90% of the people that are like me, I decided not to get involved.  The garbage collector being discussed is much more interesting.  For those that have not been following along, here is the basics from the best of my memory.<br />
<blockquote>People asked for namespaces.<br />
<br />
The powers that be did not want to do them.<br />
<br />
Someone with CVS access made a patch and suddenly it was a good idea.<br />
<br />
Yay! We have namespaces in PHP6 and maybe 5.3.<br />
<br />
Some people with CVS access decided they did not like them again.<br />
<br />
Then other people defended them and get major kudos from all over the internet.<br />
<br />
Then more patches  were made to make them do what the haters wanted them to do.<br />
<br />
And now people are again calling for resolution to an issue that afaik, was solved when it was commited to HEAD.</blockquote><br />
Then there are the <a href="http://en.wikipedia.org/wiki/Pilot_fish">pilot fish</a> in all this.  They swim along in the conversation trying to steer things their way. They want this feature or that feature or some odd thing that they used Super Pascal for AS400 in 1994.  They say things like "while we are talking about namespaces, blah blah blah".<br />
<br />
Now, if you don't care what I think about namespaces, you can stop reading here.<br />
<br />
.<br />
<br />
.<br />
<br />
.<br />
<br />
Ok, still here.  Namespaces that are one per file, but only protect the functions and classes in the file are pointless.  It is syntactical sugar.  Instead of <em>my_function</em>.  I have the <em>namespace my</em> with a function named <em>function</em>.  But, in some other file I can call <em>my::function</em> or <em>use my;</em> and then use <em>function</em>.  Boy, that makes it all clear.  Right?  If it is going to be one per file, lets scope the whole file please.  Some of us still use PHP as Rasmus intended (or as I believe he intended).  To quickly build pages using includes sanely.  My <em>include "header.php";</em>  beats your object with a header method any day.  Every developer I have worked with understood  <em>include "header.php";</em> in seconds.  But dammit, the down side is that something in header.php eventually makes my life hell because of scoping.<br />
<br />
Most of all, would someone please just say the magic words to make the insanity stop.  There is a "REAL" internals list somewhere that we can't all see.  You guys hash it out on there and then tell us what the plan is.  All this back and forth is making us crazy.  Maybe I should rehash unicode support again just to see the namespaces discussions die.  I am not sure if that would be better or worse.<br />
<br />
That is all that I have to say about that.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Wed, 12 Dec 2007 21:59:12 -0600</pubDate>
            <category>namespaces</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2007/10/31/mysql-conference-submissions/</guid>
            <title>MySQL Conference Submissions</title>
            <link>http://brian.moonspot.net/2007/10/31/mysql-conference-submissions/</link>
            <description><![CDATA[Well, it seems to be the thing to do to talk about the things you submitted to MySQL Conference.  So, I figured I would share.  I submitted 3 topics.<br />
<blockquote><strong>From one server to a cluster</strong><br />
<br />
In the last 10 years, dealnews.com has grown from a single shared hosting account to an entire rack of equipment.  Luckily, we started using PHP and MySQL very early in the company's history.<br />
<br />
From the early days of growing a forum to surviving _Slashdotting_, _Digging_ and even a Yahoo! front page mention, we have had to adapt both our hardware and software many times to keep up with the growth.<br />
<br />
I will discuss the traps, bottlenecks, and even some big wins we have encountered along the way using PHP and MySQL.  From the small scale to using replication and even some MySQL Cluster we have done many interesting things to give our readers (and our content team) a good experience when using our web site.<br />
<br />
<strong>MySQL hacks and tricks to make Phorum fast</strong><br />
<br />
Phorum is the message board software used by MySQL.  One reason they chose Phorum was because of its speed.  We have to use some tricks and fancy SQL to make this happen.  Things we will talk about in this session include:<br />
<br />
* Using temporary tables for good uses.<br />
* Why PHP and MySQL can be a bad mix with large data sets.<br />
* What mysqlnd will bring to the table with the future of PHP and MYSQL.<br />
* How Phorum uses full text indexing and some fancy SQL to make our search engine fast.<br />
* Forcing MySQL to use indexes to ensure proper query performance.<br />
<br />
<strong>Perils of distributed software</strong><br />
<br />
Ever wrote software that has to be installed on n + infinity environments?  Phorum is such software.  The Phorum team has been developing for 10 years.  The vast number of configurations and wide range of user experience has shaped how we have written Phorum.  I will share some of the PHP, MySQL and user issues we have seen and how we have tried to work around them.</blockquote><br />
Wish me luck.  Maybe you can get the full version of one or all of thse in April.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Tue, 30 Oct 2007 21:52:33 -0500</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2007/10/19/putting-files-into-a-database/</guid>
            <title>Putting files into a database</title>
            <link>http://brian.moonspot.net/2007/10/19/putting-files-into-a-database/</link>
            <description><![CDATA[So, once again, I was listening to the <a href="http://podcast.phparch.com/">Pro::PHP Podcast</a> (or is it Newscast?  guys?).  They were talking about putting files in to a database table.  Now, most people will say you should never do this.  And lots of time they are right.  And once upon a time I agreed with them without question.  Then I started living in the real world where sometimes you have to do things you never thought you would.  Here are the two places where I stores files in a database.<br />
<br />
<strong>Phorum</strong><br />
<br />
Ever wrote software that has to be installed on <em>n + infinity</em> environments.  It really sucks.  Phorum version 3.3 or 3.4 was the first to allow attachments.  We put them on disk.  The instructions for setting up a spot on disk for attachments was longer than all the rest of the install document.  The support questions were even worse.  And there there were the people that left their old host and didn't take the files with them.  Just the database.  DOH!  So, in Phorum 5 we decided that for ease of use, there would be no need for Phorum to write to disk.  Well, we tried really hard anyway.  Its almost true.  We only write cache data to disk.  No config is written by the applicaiton and no permanent storage is written to disk.  <a href="http://www.phorum.org/">Phorum 5.2</a> (near beta) has a new file storage system that allows for modules to be written to store the data wherever you want it.  There is already a disk storage module.  But, already there are people asking really naive questions about it.  Probably because someone told them to never store files in a table.<br />
<br />
<strong>Replication</strong><br />
<br />
At <a href="http://dealnews.com/">dealnews</a> we have a lot of images.  Every deal gets its own image.  We do 100+ deals a day.  So, getting those images distributed to all the servers is a task.  A deal could go from idea to live in 2 minutes.  So, we decided to store the images in the database.  3 versions of the image in fact.  With a little mod_rewrite magic we can pull the image from the DB and put it on disk on a front end server if its not on the server already.  From that point forward the file is served off of disk.  So, its a one time db hit per image per server.  Not that big of a deal.  We use a CDN now too, so it's really not a big deal.  We could probably skip the on disk part all together.  Backups are easy.  All the attributes of a deal are in the database.  Not some in the db and some on some disk.  We can just import the db to a test machine and have a fully functioning set of data to work with.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Fri, 19 Oct 2007 02:34:12 -0500</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2007/10/10/my-editor-of-choice/</guid>
            <title>My editor of choice</title>
            <link>http://brian.moonspot.net/2007/10/10/my-editor-of-choice/</link>
            <description><![CDATA[So, I was listening to the <a href="http://podcast.phparch.com/main/index.php/main">Pro PHP Podcast</a> on the way home from work today.  They were talking about <a href="http://www.activestate.com/Products/komodo_ide/">Komodo</a> a lot.  I figured I would give my favorite editor a plug.  Believe it or not, it's <a href="http://www.jedit.org/">jEdit</a>.<br />
<br />
I keep trying all the latest and greatest editors out there.  I fought with Eclipse and have tried the newer more PHP centric offerings built on Eclipse.  I recently tried out Komodo Edit for a week.  I had tried the Komodo IDE when it came out for Mac a while back.  But, I just keep coming back to jEdit.<br />
<br />
<strong>What I like about it</strong><br />
<br />
The main thing that I like about jEdit over the other top contenders of the new generation is that it has a simple file browser.  It does not have the concept of "projects".  Eclipse and Komodo both have these concepts.  But, when I really got to looking at the projects in Komodo, you basically set a point in your filesystem and tell it that everything in this dir is Project Foo.  So, really, you have to have your code organized on disk anyway.  It also bugged me (in Komodo Edit at least) that my project file had to live in the same dir with my project's code.  That just seemed awkward.  Not everyone that shares my SVN is gonna want that and its gonna be sitting there in my <em>svn status</em> as an unknown file.<br />
<br />
Another thing I like about jEdit is the rather large plugin repository.  Now, it's an older project, so that is something that you would hope any established application would have.  But, if I am thinking about switching today, I have to give the nod to jEdit here.  The list is a bit Java-centric of course.  It's a Java application after all.  But, there are some good ones in there like a PHP code structure browser.  I can't live without that.  Makes finding functions or methods really easy in large libraries.<br />
<br />
<strong>What I don't like</strong><br />
<br />
Its Java so its not quite like working with a native application.  The dialogs are funny and the UI is just a bit off even with the Mac plugin that makes it more Mac looking.  Having said that, I don't want a truly "Mac like" editor.  BBEdit and XCode are not my kind of editors.  I like tabbed interfaces vs. multi windowed UIs.<br />
<br />
Its not an IDE, its an editor.  There is no debugging, at least, not easily.  There looks to be some ability to hook in debugging tools, but I have not gone through the trouble.  Of course, that could be said of many of the IDEs out there.  PHP has never had the ease of debugging that say Visual Basic had (still has?) back in 1998 when that was my full time job.  That was one thing about VB I loved.  The language was "eh".  But the IDE was really nice.<br />
<br />
<strong>Things I don't care about that you might</strong><br />
<br />
jEdit does not have an SVN plugin that I can find.  I like my command line.  I know one coworker is addicted to the Eclipse real time SVN diff highlighting.  There is a CVS plugin, but I don't know how good it is.  I am not aware of any PHP code completion, but it may be there.  I have an odd knack for remembering stuff like that and those little pop ups just annoy me.  Oh, and did I mention its Java?  That put me off for a long time.  But, it won me over.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Wed, 10 Oct 2007 00:57:25 -0500</pubDate>
            <category>Apple</category>
            <category>HTML</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2007/08/02/phorum-520-alpha-released/</guid>
            <title>Phorum 5.2.0-alpha released</title>
            <link>http://brian.moonspot.net/2007/08/02/phorum-520-alpha-released/</link>
            <description><![CDATA[Yes!  Its here!  <a href="http://www.phorum.org/">Phorum 5.2</a> has reached alpha status.  Its been over a year since we branched the 5.1 code and started on 5.2.  A lot has changed and Phorum is better for it.  Much of the success of Phorum 5.2 goes to Maurice Makaay.  He has done a lot of work to make the core code cleaner and easier for module developers.  He has also been instrumental in the documentation project.  As for new features and changes, below are a few.  We are still updating a wiki page with all the changes and features at <a href="http://www.phorum.org/development/wiki/Phorum52News">http://www.phorum.org/development/wiki/Phorum52News</a>.<br />
<br />
For your users:<br />
<ul><br />
	<li>Brand new template.  Emerald is a more modern, full featured template.  It uses many interface design recommendation used by usability professionals.</li><br />
	<li>Rewritten search engine for faster search with more options.</li><br />
	<li>New hybrid read page that is threaded and shows all messages</li><br />
	<li>Better error messages when posting to help your users know what is wrong.</li><br />
	<li>All new code for forum feeds.  Both RSS 2.0 and Atom are supported.</li><br />
	<li>New announcement module that gets announcements out of the message list and into a more prominent position.</li><br />
</ul><br />
For the admins:<br />
<ul><br />
	<li>New APIs for making modules that work with the core. (Along with full docs)</li><br />
	<li>Template core changes so that similar vars in different templates have the same name.</li><br />
	<li>More modules included with Phorum and officially supported.</li><br />
	<li>Module run time ordering.  You can not control in what order you modules run.</li><br />
	<li>Sanity checks updated to help admins know if their Phorum is running properly.</li><br />
</ul><br />
There is a lot more that I don't want to list here.  Please have a look at <a href="http://www.phorum.org/development/wiki/Phorum52News">http://www.phorum.org/development/wiki/Phorum52News</a> for the full list.  We will be updating that list as we go along as well.<br />
<br />
What is alpha status you ask?  Well, while in alpha status, Phorum 5.2 may still get new minor features and code may be reworked extensively.  Basically, it means that the major features we wanted for 5.2 are done.  They need testing and that is where you come in.  If you have the facility to test the code with your data, please do and report bugs.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Thu, 02 Aug 2007 10:30:30 -0500</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2007/07/27/oreilly-open-source-conference-day-two/</guid>
            <title>O'Reilly Open Source Conference Day Two</title>
            <link>http://brian.moonspot.net/2007/07/27/oreilly-open-source-conference-day-two/</link>
            <description><![CDATA[So, day two was the cool keynote day.  Day one keynotes were from Tim O'Reilly (not that he is not cool) and the vendors sponsors.   The Intel building blocks stuff was neat, but most of it was vendor stuff IMO.<br />
<br />
Today we had the "cool thing to here and see, but I proabably won't use it" keynote.  It was <a href="http://conferences.oreillynet.com/cs/os2007/view/e_sess/14368">The Processing Development Environment</a>.  It was really cool.  You can read more about it at <a href="http://processing.org/">processing.org</a>.<br />
<br />
The next keynote was hard for me to follow.  There were no slides he stood behind the podium the whole time.  <a href="http://conferences.oreillynet.com/cs/os2007/view/e_spkr/144">Gnat</a>  seemed to love it as he all told us in IRC.  You can read the guys blog at <a href="http://overcomingbias.com/">overcomingbias.com</a>.  It was basically about overcoming the biases you have.... I think.<br />
<br />
Interestingly, (speaking of bias) the next keynote was from Microsoft.  Coincidence?  According to the speaker, MS (or at least this guy) is really trying to make some Open Source stuff.  Time will tell.  Also, they are "working" with the OSI to get their licensing approved as Open Source licenses.  As somone in IRC said, its a win/win from them.  If they don't get approved, they can just blame the OSI for being inflexible.  Nate kind of put him on the spot about patents after his talk.  He handled it well and kind of rode the fence.<br />
<br />
The last keynote was, for me, the pay off keynote.  Its the one I will remember from this year the most.  It was about branding.  The poor guy did not have his slides due to technical issues and still did a great job.  You can read Steve's blog at <a href="http://steve-yegge.blogspot.com/">steve-yegge.blogspot.com</a>.  Maybe he will post the slides.<br />
<br />
I attended a couple of good sessions today.  One was about caching, mostly with APC.  But, if you stripped down the APC stuff and just took some of his concepts, you could apply some of it to lots of caching methods.  The talk was given by <a href="http://conferences.oreillynet.com/cs/os2007/view/e_spkr/3683">Gopal Vijayaraghavan</a> of Yahoo!  I don't have a URL for the site where his slides may be.  If I find it, I will post it.<br />
<br />
Another one was about legacy PHP code.  I didn't agree with 100% of what he was saying, but if you are in the boat he described, anything is better than where you are.  The guys site is <a href="http://clintonrnixon.net/">clintonrnixon.net</a>.  Hopefully he will put of the slides and maybe a blog post about it.<br />
<br />
The last talk that I want to tell you about was from <a href="http://slash7.com/">Amy Hoy</a>.   She gave the "When Interface Design Attacks!" again this year. Just like last year, it was brilliant.  There were new topics like web 2.0.  I was happy to see that the Phorum 5.2 template I have been working on (emerald) already included many of her recommendations.  I guess she rubbed off on me last year.  Amy has started her own consulting company.  If we need a usability and/or interface design help again (bleh, the last one was less than exciting) I will push for using her for sure.  Check out her site (linked above) for more stuff from her.<br />
<br />
The day (and conference really) ended with parties.  We went to the Sourceforge Open Source Awards party.  phpBB won best tool for communication.  Gag me with a chicken bone.  I guess it has a large install base.  But, MySpace has lots of users too.  That does not mean its not a black eye on the internet.  Ok, MySpace is worse than phpBB for sure.  But, c'mon, I write Phorum.  I am biased (see above keynote =).  It was a popularity contest and I guess there are more kiddies to vote for them than say Pidgin which is what I voted for.  With all the trouble they have had with their name, I wonder if "Gaim" would have gotten more votes.  (see other keynote on branding =).  The phpBB team may need to see the branding keynote from this morning.  It talked about how it takes a generation to change perception about a brand.  Most people I talked to here have a negative reaction to the phpBB brand.<br />
<br />
The rest of the night we just hung out at the party hosted by <a href="http://www.jivesoftware.com/products/openfire/">Jive Software</a>. We use OpenFire from those guys.  I am not a big Java user on the server.  Its just one more different thing to admin in a company that is 99% GNU C apps on the servers.  But, Openfire does a damn good job with XMPP.<br />
<br />
In closing, O'Reilly Open Source Convention was great.  I got some great ideas of stuff we should be doing.  I got confirmation of things that we are already doing.  And most important, IMO, we got to share with others how we solve problems.  As  Gopal said in his caching talk, sometimes is better to stop doing stuff and tell others what you are doing (paraphrase).]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Fri, 27 Jul 2007 03:03:09 -0500</pubDate>
            <category>Design</category>
            <category>Linux</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
            <category>Search</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2007/07/26/oreilly-open-source-conference-day-one/</guid>
            <title>O'Reilly Open Source Conference Day One</title>
            <link>http://brian.moonspot.net/2007/07/26/oreilly-open-source-conference-day-one/</link>
            <description><![CDATA[Day one is complete.  Portland is great as always.  Its really day 1 1/2 since we got in at 1PM yesterday.  That allowed us to go to the MySQL/Zend party last night.  Great party by those guys.  Touched based with old friends and made some new ones.<br />
<br />
I kind of session hopped today.  Of note, I attended Andi Gutmans PHP Security talk which really had little to do with PHP.  Like Larry Wall's onion metaphor, Andi presented an onion metaphor for security.  I stopped in for a while on the <a href="http://lucene.apache.org/solr/">SOLR</a> talk.  It looks neat.  I like that it is a REST interface to Lucene.  If we were not using Sphinx already I might take a longer look.  But, we like Sphinx and, SOLR and Lucene are Java.  Not that there is anything wrong with that, we just don't use Java a lot, so its just one more thing that would be out of the norm.  I admit I spent a good bit of time in what is being called the "hallway track" working on some code.  Work does not stop just because you are at a conference.<br />
<br />
I got to hang out with Jay Pipes of the MySQL Community team a good bit.  We talked about the <a href="http://forums.mysql.com/">MySQL forums</a> (which or course runs <a href="http://www.phorum.org/">Phorum</a>) and how they want to improve them.  They would like to see tagging, user and post rating and some other things.  Some good things will come out of that.  Hopefully they have some of the tagging stuff done already at MySQL Forge and can contribute that code to Phorum, saving us time.<br />
<br />
I hosted the Caching for fun and profit BoF.  It was not packed, but it was a good time.  The MySQL BoF was at the same time, so we lost some folks to that I am sure.  They had beer and pizza.  Brad Fitzpatrick did come by and contribute.  Thanks Brad.  It was mostly the same stuff you get on the memcached mailing list.  "How do we expire lots of cache at once?"  Questions about different clients.  Stuff like that.  It kind of turned into a memcached BoF, but I tried to share the dealnews experience with the attendees including our <a href="http://doughboy.wordpress.com/2007/06/07/five-months-with-mysql-cluster/">MySQL Cluster pushed caching</a>.<br />
<br />
I have met many readers of both <a href="http://dealnews.com/">dealnews</a> and this blog (hi to you) while here.  Glad to know that both my professional work and my personal work are of use to folks.  The demographic at this conference is dead on for dealnews.  Maybe I can get them to sponsor it next year.  That would be cool.<br />
<br />
I say every year that I want to present "next year".  Something always keeps me from doing it.  Usually its just not having time to prep for it.  By the time I think about it, the call for papers has passed.  I really want to get it done this time.  We shall see I suppose.<br />
<br />
We went to the Sun party tonight.  It was a good time.  There was beer that was free as in beer.  More hanging with friends and talking about all kinds of stuff.  Now, all you Slashdotters sit down.  I saw people from the PostgreSQL and MySQL teams drinking beer and having fun together.  OMGWTFBBQ!!!1!!  See, the people that really matter in those projects don't bicker and fight about which is better.  They just drink beer and have a good time together.<br />
<br />
Anyhow, I will blog more after day 2.  There won't be a day 3 as I have to catch an 11:30 flight back home.  That is usually how it goes.  Not sure why they book anything on Friday really.  Even O'Reilly has its "after party" on Thursday night.  Its late, and I need sleep.]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Thu, 26 Jul 2007 02:52:34 -0500</pubDate>
            <category>Firefox</category>
            <category>HTML</category>
            <category>Linux</category>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>PHP</category>
            <category>Programming</category>
            <category>Search</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2006/08/09/phorum-52-template-revisited/</guid>
            <title>Phorum 5.2 template revisited</title>
            <link>http://brian.moonspot.net/2006/08/09/phorum-52-template-revisited/</link>
            <description><![CDATA[I <em>think</em> I have finished the initial visual changes to the <a href="http://dev.phorum.org/phorum5-dev/">Phorum 5.2 template</a>.  I still have some logistic changes (like making all URL vars exist in a URL array instead of vars like another_thing_to_link_url).  If you have a second, please give it a run though.  Give me your thoughts and see if I missed any pages.<br />
<br />
(Originally posted on the <a href="http://www.phorum.org/phorum5/read.php?57,115296">Phorum web site</a>)]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Wed, 09 Aug 2006 00:33:23 -0500</pubDate>
            <category>Phorum</category>
            <category>PHP</category>
            <category>templates</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2006/08/03/phorum-sphinx-really-fast/</guid>
            <title>Phorum + Sphinx = really fast</title>
            <link>http://brian.moonspot.net/2006/08/03/phorum-sphinx-really-fast/</link>
            <description><![CDATA[Thomas wrote the <a href="http://www.phorum.org/phorum5/read.php?16,114341,114341#msg-114341">Sphinx search module</a> nearly a month ago.  I have just now gotten to looking at it.  From the things I have read, Sphinx looks really cool.  I am considering using it in some other sites.<br />
<br />
<a href="http://sphinxsearch.com/">Sphinx</a> is a "<em>standalone search engine, meant to provide fast, size-efficient and relevant fulltext search functions to other applications. Sphinx was specially designed to integrate well with SQL databases and scripting languages. Currently built-in data sources support fetching data either via direct connection to MySQL, or from an XML pipe.</em>"<br />
<br />
(Originally posted on the <a href="http://www.phorum.org/phorum5/read.php?57,115063">Phorum web site</a>)]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Thu, 03 Aug 2006 00:31:14 -0500</pubDate>
            <category>MySQL</category>
            <category>Phorum</category>
            <category>Search</category>
            <category>sphinx</category>
        </item>
        <item>
            <guid>http://brian.moonspot.net/2006/04/11/phorum-52-template/</guid>
            <title>Phorum 5.2 Template</title>
            <link>http://brian.moonspot.net/2006/04/11/phorum-52-template/</link>
            <description><![CDATA[As Thomas has said, we have started working on 5.2.  I had wanted to redo the template for 5.1, but by the time that came up on the list, there was so much already done to the code, I did not want to hold it back.  I know some of you went to a lot of trouble to change your 5.0 templates to work with 5.1.  Keep in mind that 5.2 may very well be a year or more off in the future.  We don't release major changes as stable on a whim.<br />
<br />
For those that want to keep up with the new template, you can see it at <a href="http://dev.phorum.org/phorum5-dev/">http://dev.phorum.org/phorum5-dev/</a>.  Keep in mind that some or all of it could be broken at any given time.<br />
<br />
(Originally posted on the <a href="http://www.phorum.org/phorum5/read.php?57,112032">Phorum web site</a>)]]></description>
            <dc:creator>brianlmoon</dc:creator>
            <pubDate>Tue, 11 Apr 2006 00:28:41 -0500</pubDate>
            <category>Phorum</category>
            <category>PHP</category>
            <category>templates</category>
        </item>
    </channel>
</rss>
