<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Welcome to the phpBB Doctor Blog</title>
	<atom:link href="http://www.phpbbdoctor.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phpbbdoctor.com/blog</link>
	<description>Your premium source for custom modification services for phpBB</description>
	<lastBuildDate>Tue, 24 Apr 2012 18:33:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Google Summer of Code</title>
		<link>http://www.phpbbdoctor.com/blog/2012/04/24/google-summer-of-code/</link>
		<comments>http://www.phpbbdoctor.com/blog/2012/04/24/google-summer-of-code/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 18:33:32 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[MOD Writing]]></category>
		<category><![CDATA[phpBB]]></category>

		<guid isPermaLink="false">http://www.phpbbdoctor.com/blog/?p=370</guid>
		<description><![CDATA[I found it interesting to read that phpBB is participating in the Google Summer of Code this year. One of the features that they hope to get out of the process is a post revision history&#8230; something that I started designing years ago, and will be releasing into production on my largest board within the [...]]]></description>
			<content:encoded><![CDATA[<p>I found it interesting to read that <a href="http://www.phpbb.com/community/viewtopic.php?f=14&#038;t=2154961">phpBB is participating in the Google Summer of Code this year</a>. One of the features that they hope to get out of the process is a <a href="http://area51.phpbb.com/phpBB/viewtopic.php?f=108&#038;t=42893">post revision history</a>&#8230; something that I <a href="http://www.phpbbdoctor.com/blog/2009/11/02/storing-post-revisions-post-locking/">started designing years ago</a>, and will be <a href="http://www.phpbbdoctor.com/blog/2011/11/02/new-phpbb2-modifications-coming/">releasing into production on my largest board</a> within the next few weeks! Great minds thinking alike and all of that&#8230;</p>
<p>Turns out that in this case, phpBB2 was probably easier to work with than phpBB3. With phpBB2 the post text is already separated from most of the other post meta data (such as poster, poster IP address, and so on) which made it very easy to design a way to track post revisions. In phpBB3 they combined the phpbb_posts and phpbb_posts_text tables into a single table. In order to track post revisions in that case, the design would call for splitting the text out into a separate table in order to track the post text revisions without having to duplicate all of the other post meta data.</p>
<p>In any case, I have finished the coding and testing for everything and it&#8217;s functional. What&#8217;s left is going back and adding in some security checks to make sure people can&#8217;t do things they&#8217;re not supposed to do&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpbbdoctor.com/blog/2012/04/24/google-summer-of-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Party Like It&#8217;s 1992</title>
		<link>http://www.phpbbdoctor.com/blog/2012/04/09/party-like-its-1992/</link>
		<comments>http://www.phpbbdoctor.com/blog/2012/04/09/party-like-its-1992/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 15:00:04 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.phpbbdoctor.com/blog/?p=368</guid>
		<description><![CDATA[Alternate title for this post was &#8220;The Butterfly Effect.&#8221; You have have heard about that concept, where a butterfly flapping its wings in New York causes storms in Tokyo or something along those lines. I had a similar moment this weekend when I discovered that a clock being set ahead by one hour resulted in [...]]]></description>
			<content:encoded><![CDATA[<p>Alternate title for this post was &#8220;The Butterfly Effect.&#8221; You have have heard about that concept, where a butterfly flapping its wings in New York causes storms in Tokyo or something along those lines. I had a similar moment this weekend when I discovered that a clock being set ahead by one hour resulted in iTunes deleting songs after they were synced to my iPod. It&#8217;s a long story, so I&#8217;ll start at the beginning. <span id="more-368"></span></p>
<h3>NetGear Duo Backup Process</h3>
<p>My last post on this blog was about how I used a shell script on my NetGear Duo to <a href="http://www.phpbbdoctor.com/blog/2012/03/21/more-backup-automation/">automate the backup process for my various phpBB2 boards</a> and other web sites. As part of that post I wrote:</p>
<blockquote><p>To make sure I didn’t miss out on backup files any more I also added a line at the end of the process to email me the results of the backup script. Now each morning I can check my smartphone and confirm that the backup process ran correctly the night before.</p></blockquote>
<p>For a while this backup process ran just fine. The notification came in to my phone just as expected. Then at some point I noticed that the back up process which was supposed to run at 2AM was instead running at 3AM. I did not worry about it too much. I just assumed that there was something going on with the cron schedule and I would look at it later when I had time. The important issue (downloading the back up files) was being handled, albeit at a different time than expected.</p>
<h3>Ancient Virus</h3>
<p>Remember <a href="http://en.wikipedia.org/wiki/Nimda">nimda</a>? It was a virus that came out back in 2001. I guess the formal classification is that it was really a worm, not a virus, but many folks use the terms interchangeably even though they&#8217;re not the same. I had some friends with some older computer hardware that they were trying to retire, but they still had some data on the older machines that they were trying to retrieve. The problem is that the files they needed to move were too big for a thumb drive, this particular computer had no cd-writer (it was from 2000, after all), and they weren&#8217;t comfortable removing the hard drive and moving it to a new machine. So they brought it over to my house.</p>
<p>I first tried removing the hard drive and putting it into an external drive chassis to read the files. Interestingly enough, the drive would not get show up. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_confused.gif' alt=':-?' class='wp-smiley' />  I wasn&#8217;t sure why, but that wasn&#8217;t the problem I was trying to solve. I noticed that the original computer case had a network port, so I decided to put the hard drive back in the box and connect it to my network. We had already established that the machine would boot up so I knew that would work.</p>
<p>As soon as we did that, my own computer started going crazy, making all sorts of beeps and noises! Turns out that this ancient machine was infected by the Nimda worm, and as soon as it got connected to my network it started to spread. Funny, being attacked by a ten-year old worm! I say &#8220;funny&#8221; because my AVG installation seemed to be doing its job and properly sending all of the infected files to the quarantine. I guess if you&#8217;re in the anti-virus (anti-worm) market, you had better make sure that you can capture anything that&#8217;s ten years old just as efficiently as newer stuff.</p>
<p>Ultimately we were able to recover the files for my friends, and I learned my lesson. The next time they brought over a computer I set up an isolated network between their machines rather than attach them to my network.</p>
<p>Interesting footnote: my iTunes library is stored on my NetGear device, both for redundancy and for file sharing purposes. Because it&#8217;s shared, that particular volume is open to the network. Because it&#8217;s open to the network, I think Nimda dropped a file into every single folder, which I then had to clean up. More on this later.</p>
<h3>iTunes Difficulties</h3>
<p>Around the same time iTunes released a new version (10.6) that was supposed to handle album artwork better. Now normally I am not a fan of jumping on the latest update. In fact I have my &#8220;automatic update&#8221; turned off for iTunes just to avoid experiencing a broken system when something that I have is already working. But in this case I had experienced a number of issues with managing my iTunes art, so I decided to install the update. It does, in fact, handle album artwork much better so I was pleased with the update.</p>
<p>A few days later I made a trip to a local used book / compact disc store and came home with a stack of about 20 cds or so. I ripped them using iTunes, reset the artist from &#8220;First Last&#8221; format to &#8220;Last, First&#8221; as I like to do, and downloaded album art from my favorite album art site <a href="http://www.albumartexchange.com/">Album Art Exchange</a>. These are all steps that I normally would do. While performing these various steps I was also listening to some of the new music that I had purchased. (&#8221;New&#8221; is a relative term, as I recall on this particular trip I found a number of &#8220;classic rock&#8221; artists from the 80&#8217;s so it was a nice blast of nostalgia.) Once I had performed all of my updates I synced iTunes to my iPod.</p>
<p>Here&#8217;s where it gets weird.</p>
<p>I went back to play some of the songs, and they were gone! The files were physically missing from the hard drive. </p>
<h3>Investigation Part I</h3>
<p>Remember that earlier I mentioned that my iTunes library is stored on a public network share, and that it had been attacked by Nimda, right? That was the first area I investigated. I first did a full scan of the entire system with AVG. I did a search for the file &#8220;droppings&#8221; that Nimda had left behind, and when I found them I deleted them or removed them from the AVG quarantine. I wondered if the worm was renaming some of my audio files rather than creating these as new files, but the only songs that were deleted were new ones. Nothing that had been ripped months (or years) ago was being deleted, it was only the new files.</p>
<p>I downloaded some specific scanners designed to find and remove Nimda and confirmed that I was infection free. Now what?</p>
<h3>Investigation Part II</h3>
<p>I re-ripped the music from cds, and carefully repeated the process. It seemed that once the songs were on the iPod, as long as I recovered them somehow iTunes was fine. It did not do any further deleting. I wasn&#8217;t sure what was going on, but at least the problem was something I could recover from. Next I ran a controlled test. Here&#8217;s what I did, and what I observed.</p>
<ol>
<li>I ripped three new cds (new meaning ones that I had not ripped from my collection yet)</li>
<li>I navigated to the folder and confirmed that all songs had been ripped. I then zipped up the contents of each folder.</li>
<li>I made some minor edits to the data once the cds were ripped. As mentioned above, I prefer artist names to be &#8220;Last, First&#8221; rather than &#8220;First Last&#8221; so I generally update the artist and the album artist to reflect this. I also have a group tagging strategy, so every song has at least one entry in the grouping field. All of this worked fine.</li>
<li>I sync&#8217;d to my iPod. But this time I kept a Windows Explorer session open on one of the new folders. Gotcha&#8230; I watched some (but not all) of the files disappear.</li>
<li>I then checked my iPod. The files were there on the iPod, they just were no longer on my hard drive. Of the 3 new albums, here are the specific details.
<p>Album 1 &#8211; 11 tracks ripped, track 1, 3, 5, 6, 8, and 10 missing after sync<br />
Album 2 &#8211; 9 tracks ripped, track 1 missing after sync<br />
Album 3 &#8211; 11 tracks ripped, all 11 tracks deleted during sync process</p>
<p>Seemingly a random sequence of events. I am not sure what to make of this right now.</li>
<li>To recover I unzipped the archived files I made for each album, and verified that iTunes could see the data (no more ! next to the song).</li>
<li>I sync&#8217;d to my iPod again. Now remember that the songs already exist on my iPod, they were just deleted from my hard drive. So there&#8217;s nothing to update. After the sync (the second time) the songs are still there on the hard drive, still on the iPod, and no issues.</li>
</ol>
<h3>What About Other Data?</h3>
<p>At this point I had eliminated the Nimda worm from consideration. I went through some other applications and carefully created specific files on various folders throughout my network disk device. I opened / edited / closed and did a number of other operations. Nothing I did deleted files in other areas of the network disk device, so at this point I eliminated that from consideration. It really seemed to be the iTunes 10.6 update that was the culprit here, but how to fix it?</p>
<p>10.6.1 came out a few weeks later, and I immediately updated. It did not fix my problem.</p>
<h3>Investigation Part III &#8211; Isolation</h3>
<p>I decided to try a different iTunes installation. I repeated this experiment with the same cds on another computer. This computer also has iTunes 10.6 but is only used to sync to an iPhone belonging to my wife. There were no songs on this computer prior to me adding these test albums, so the library is very small. The library on my computer contains over 40,000 songs. Nothing went wrong on my wife&#8217;s computer, which is also running Windows XP. The primary difference is that on the second computer the iTunes library is stored locally rather than on the network device.</p>
<p>But I have already done what I can to eliminate the network device as the culprit.</p>
<p>I&#8217;m going in circles.</p>
<p>On my last test, back on my computer, I ripped a single cd and did not do any of my normal steps. I ripped and then moved immediately to sync to my iPod. The entire album &#8211; all 21 tracks &#8211; was deleted. Even the folder was removed! <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' /> </p>
<h3>Butterfly Wings</h3>
<p>Yesterday (Sunday) I checked my email for the back up process. It ran, but all of the files were stamped August instead of April, and the year was 1992! I opened a shell session on the network disk device and confirmed that yes, it thought the date was 1992. I opened the administrator tool and confirmed that the date there was also showing as 1992. The device was set up to sync to a time server hosted by NetGear, so I turned that off and reset to the proper time manually. I confirmed that the new date took, and then went back and reset to the NetGear time service. It was back in 1992 again. A quick check of the NetGear forums found several other posts about the same thing, some of which suggested moving to a different time service.</p>
<p>Now it gets interesting. When I moved to a public time service (off of the private NetGear hosted service) not only did I get the correct time, but the hour difference mentioned at the very beginning of this post was also corrected!</p>
<p>All of a sudden a light went off. Could the one-hour time difference be impacting my iTunes?</p>
<h3>Problem Resolved</h3>
<p>In my earlier tests, when I ripped and immediately synced a single album, it meant that the entire set of songs was processed within an hour. I wondered if these songs were being deleted because iTunes was confused. According to my network disk device, these files would have been ripped one hour into the future! I know iTunes tracks a ton of data, including last played date, last skipped date, and of course the ripped date. Since the ripped date and the file create date on the operating system were out of sync by an hour, I can only assume that iTunes was doing something weird and ultimately deleting the files. The reason the deleting was more random when I ripped a bunch of songs was because (I guessed) the overall process took longer than one hour. If I worked quickly, more songs got deleted. If I took my time, fewer songs were deleted.</p>
<p>To test this concept I deleted the most recent album from iTunes and synced my iPod to clear everything up. I then ripped and synced the same album and none of the tracks got dropped. Everything was processed just fine. Earlier using these same steps all 21 tracks had been deleted.</p>
<p>Ultimately it appears that the Nimda worm was a <a href="http://en.wikipedia.org/wiki/Red_herring">red herring</a>. It had nothing to do with the issue. The network drives were also functioning perfectly from a mechanical perspective. The network was also fine. I was not having a problem with any other application, only iTunes. </p>
<p>It was a combination of the network time service being wrong in conjunction with some weird program bug in iTunes that was causing random files to disappear. Once I reset my time using a public time service (the same one used for my Windows system) iTunes functioned fine.</p>
<p>That&#8217;s the butterfly effect. A clock is wrong by one hour and random music tracks are deleted as they are synced to my iPod.</p>
<p>That was my fun for the month. How was yours? <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpbbdoctor.com/blog/2012/04/09/party-like-its-1992/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>More Backup Automation</title>
		<link>http://www.phpbbdoctor.com/blog/2012/03/21/more-backup-automation/</link>
		<comments>http://www.phpbbdoctor.com/blog/2012/03/21/more-backup-automation/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 18:34:06 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[Board Management]]></category>
		<category><![CDATA[Server Management]]></category>

		<guid isPermaLink="false">http://www.phpbbdoctor.com/blog/?p=367</guid>
		<description><![CDATA[Some years back I purchased a couple of NetGear Duo RAID disk enclosures. Each enclosure was loaded up with dual 1TB disk drives from Western Digital. Everything written to one drive was mirrored to the second drive. This helped protect against a single disk failure.
I also had a very old (PIII processor!) computer that was [...]]]></description>
			<content:encoded><![CDATA[<p>Some years back I <a href="http://www.phpbbdoctor.com/blog/2009/04/18/netgear-duo/">purchased a couple of NetGear Duo RAID disk enclosures</a>. Each enclosure was loaded up with dual 1TB disk drives from Western Digital. Everything written to one drive was mirrored to the second drive. This helped protect against a single disk failure.</p>
<p>I also had a very old (PIII processor!) computer that was running linux. At one point I was using it as a development environment, but it had long since been retired from that duty. Why was it still around? I had created mount points for each of the RAID arrays on this linux box, and it was responsible for going to my web server (which hosts this blog, among other things) and downloading the nightly database backup files. (My web server runs a hot backup at 1AM each morning using the mysqldump command.) This linux box also had a script (running at 2AM) that would ftp to my web server, retrieve all of the database dumps, download them, add a date stamp to the file name, and then copy the resulting files out to the RAID array. The entire process was automatic, transparent, and for a long time was quite robust.</p>
<p>Until a few weeks ago.  <span id="more-367"></span></p>
<p>At various points I would go out to the disk array and check to see that the backup files were properly being retrieved. The last time I checked, it seemed that I was not getting any backup files&#8230; at least not for the past several weeks. Attempting to log in to the development / backup box via ssh proved to be unsuccessful. After rebooting the box, though, everything came up and seemed to work. I was able to run the backup script without errors.</p>
<p>The next morning, however, there was no backup file from the prior night, and the box was once again locked up. To be honest, it wasn&#8217;t worth fixing. It was noisy, a power hog, and the only thing it was doing at this point was downloading the nightly backup files. The NetGear Duo was also running a variation of linux, so why not try that? I installed an add-on that enabled ssh access to the device and went to town. After a couple of different attempts I eventually got a cron job set up that would connect to my web server and do all of the same things my old linux box used to do, with the added advantage that the Duo was already on as a file server anyway so it was now taking on an additional task.</p>
<p>Life was good, and backup files began to show up on a regular basis once again. To make sure I didn&#8217;t miss out on backup files any more I also added a line at the end of the process to email me the results of the backup script. Now each morning I can check my smartphone and confirm that the backup process ran correctly the night before.</p>
<h3>Time To Upgrade</h3>
<p>But never one to leave well enough alone <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I decided to try upgrading one of the Duo devices to a newer model, the Ultra 2 Plus. This new device had a lot more memory, dual network ports, and a multi-core CPU. Everything should be faster. I also upgraded to the &#8220;black&#8221; series of Western Digital disk drives as I had experienced intermittent problems with using the &#8220;green&#8221; series inside the RAID enclosures. Everything came in last week and was installed with only a little fuss. I got my security configuration reset so that I can use the scp command (secure copy) to download the files from my web server. The last hurdle was that the new Ultra 2 Plus device did not have a mail command installed! After some research and posting on the ReadyNas forums (which by the way run phpBB) I got the answer: I have to use the sendmail command instead. This command is not quite as friendly as the mail command, but I got it to work.</p>
<h3>Database Backup Script</h3>
<p>My web server already has a cron job scheduled at 1AM that uses the mysqldump command to create a database dump of every database that I want to back up. Here is the following cron job which is scheduled on the Ultra 2 Plus. It&#8217;s responsible for connecting to the server, downloading the files, adding a date stamp, and then copying the files out to the designated sub-directory on the RAID. Finally it creates the mail file and sends it out. The list of databases to back up is included in a text file so that I don&#8217;t have maintain that script. </p>
<pre>#!/bin/bash

# first establish local path location
cd /w_drive/incoming/

# next get updated copy of dbnames.txt
scp username@example.com:db_backups/dbnames.txt .

for dbname in `cat dbnames.txt`; do

#       Go get database backup file
        echo "Processing $dbname "
        scp username@example.com:db_backups/$dbname.sql.gz .

#       Establish some local variables
        filename="_`date +%Y-%m-%d`.sql.gz"
        filename="$dbname$filename"
        outputpath="/w_drive/$dbname/$filename"

        echo "Moving $dbname.sql.gz to $outputpath"

#       Rename local copy of db backup file to include date
        mv $dbname.sql.gz $filename

#       Then move dated backup file to proper output path
        mv $filename $outputpath
        chmod 644 $outputpath

done

# Build mail formatted file
echo "date: `date +%Y-%m-%d`" > mail.txt
echo "to: email@example.com" >> mail.txt
echo "subject: Backup" >> mail.txt
echo "from: email@example.com" >> mail.txt
cat /w_drive/incoming/getbackup.out | grep -v "tty" >> mail.txt

# Send the email
/usr/sbin/sendmail email@example.com < /w_drive/incoming/mail.txt</pre>
<p>As an additional bonus, my office is a lot quieter without the extra server running. I don't know that it will make a noticeable difference in my power bill, but it will certainly help at least a little bit.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpbbdoctor.com/blog/2012/03/21/more-backup-automation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>phpBB3 MODs Domain Names Available</title>
		<link>http://www.phpbbdoctor.com/blog/2012/01/11/phpbb3-mods-domain-names-available/</link>
		<comments>http://www.phpbbdoctor.com/blog/2012/01/11/phpbb3-mods-domain-names-available/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 21:30:29 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[phpBB]]></category>

		<guid isPermaLink="false">http://www.phpbbdoctor.com/blog/?p=366</guid>
		<description><![CDATA[I have posted a topic on phpbb.com letting folks know I&#8217;m not going to renew my phpBB3 MODs-related domains. If you&#8217;re interested, hop on over to phpbb.com and send me a PM to let me know.
First come, first served.
]]></description>
			<content:encoded><![CDATA[<p>I have posted a topic on phpbb.com letting folks know I&#8217;m <a href="http://www.phpbb.com/community/viewtopic.php?f=71&#038;t=2148048">not going to renew my phpBB3 MODs-related domains</a>. If you&#8217;re interested, hop on over to phpbb.com and send me a PM to let me know.</p>
<p>First come, first served.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpbbdoctor.com/blog/2012/01/11/phpbb3-mods-domain-names-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passwords Matter</title>
		<link>http://www.phpbbdoctor.com/blog/2012/01/10/passwords-matter/</link>
		<comments>http://www.phpbbdoctor.com/blog/2012/01/10/passwords-matter/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 17:53:00 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[phpBB Doctor]]></category>

		<guid isPermaLink="false">http://www.phpbbdoctor.com/blog/?p=300</guid>
		<description><![CDATA[Way back in 2009 phpbb.com was hacked via an exposure in the phplist mailing list software. (Just to be very clear, there was no exploit found in the phpBB code used to run the site, only this supplementary program used to run the email notification system.) One of the results of the hack of phpbb.com [...]]]></description>
			<content:encoded><![CDATA[<p>Way back in 2009 phpbb.com was hacked via an exposure in the phplist mailing list software. (Just to be very clear, there was no exploit found in the phpBB code used to run the site, only this supplementary program used to run the email notification system.) One of the results of the hack of phpbb.com was that several thousand user passwords were exposed and posted on the Internet. They were exposed, frankly, because they were too simple, and that&#8217;s not phpBB&#8217;s fault. <span id="more-300"></span></p>
<h3>Pet Names Don&#8217;t Make Good Passwords</h3>
<p>People often struggle with remembering passwords. Yes, there are programs that can help you with that, but are they really that much more secure than writing things down on a piece of paper? Here&#8217;s one take from one of my favorite web comic authors:</p>
<p><img src="http://imgs.xkcd.com/comics/password_strength.png" /></p>
<p>The bottom line is that a password is supposed to protect an account from unauthorized access. It&#8217;s not supposed to prevent authorized access, but for infrequently used resources it can do that as well. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<h3>Password Storage</h3>
<p>One indicator of concern to me is whether a web site can send you your existing password when you forget it. That means they&#8217;re likely using an encryption process rather than a hashing algorithm to store passwords. And that means anyone with access to the decryption key can read every password in the system. phpBB2 uses a hashing algorithm which means as a board owner / administrator I can safely say to any of my users that I cannot tell them what their password is. I can assign them a new one, and of course there is a self-service option available to phpBB2 users that will do just that, but I cannot tell them what their existing password is. In a default phpBB2 installation a user password is hashed and stored as a 32 character string. Similar passwords will generate very dissimilar hash strings, so there is no way for someone to easily guess what a password might be simply based on the results of the hash. For example, here are a few similar input values and the resulting MD5 hash outputs:</p>
<pre>test     098f6bcd4621d373cade4e832627b4f6
Test     0cbc6611f5540bd0809a388dc95a615b
tset     751ec45015a704a39dc403001c963e97
test1    5a105e8b9d40e1329780d62ea2265d8a</pre>
<p>Despite the similarity of the input values they all have very different hash values. That means that similar hash values are going to have very different input values as well. Also, because a hash is generated by a one-way function there is no way to recreate the input value based on the hash. (There are some cases where two different input values could generate the same output hash; that&#8217;s allowed.) </p>
<p>If that&#8217;s the case, then how can I tell if a user has entered the correct password when they log in? It&#8217;s actually really simple. When a user logs in, phpBB takes the password provided on the form, hashes it, and then compares the resulting hash value to the hash stored in the database. As long as the input values are the same (entering &#8220;test&#8221; as my password will always generate 098f6bcd4621d373cade4e832627b4f6 as the hash value) then the password matches and the user is logged in.</p>
<p>How, then, were hackers able to decipher the passwords stored in the phpBB.com database if there is no way to reverse a hash process? They didn&#8217;t. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Instead they used a lookup table (also called a <a href="http://en.wikipedia.org/wiki/Rainbow_table">rainbow table</a>) to match up known hash values with their source value. Imagine taking a dictionary and running every word in it through the hashing process. When you&#8217;re done, you have a list of hashes and their source. By matching password hash values against the list of known entries the hackers were able to figure out what a number of phpBB.com user passwords were.</p>
<p>To help defeat this sort of process, phpBB3 now uses a <a href="http://en.wikipedia.org/wiki/Salted_hash">salted hash</a> which provides even more security. I imagine someone has back-ported this to phpBB2 as a MOD but I have not had time to look for one yet. But the fact is if a secure password is used (a combination of words and numbers, or as the cartoon above suggests several words run together) the odds of the password appearing in a rainbow table are extremely slim, and even the simple hashing algorithm used in phpBB2 is essentially safe. Even changing the case of one letter helps, as shown in these two hash examples from earlier: </p>
<pre>test     098f6bcd4621d373cade4e832627b4f6
Test     0cbc6611f5540bd0809a388dc95a615b</pre>
<p>Changing the &#8220;t&#8221; to a &#8220;T&#8221; changes the hash. It might be even better to change something other than the first letter, for example changing the &#8220;e&#8221; to an &#8220;E&#8221; as in tEst. That&#8217;s a very easy word to remember and it&#8217;s not likely to show up on any rainbow table, unless a hacker wants to run every possible combination of upper and lower case letters for every possible dictionary word. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' />  Ultimately it would be better to use a combination of letters (mixed case), numbers, and even symbols where allowed.</p>
<p>So how important is it that phpBB3 uses a salted algorithm for passwords? If people were smart about what passwords they use then it really would not matter so much. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  But as shown in some of the related links at the end of this post, people are not very smart about the passwords they pick. In that case, the salting process is quite beneficial.</p>
<h3>Social Engineering</h3>
<p>Which brings me to my final issue for this post: people can be fond of certain passwords and often use (reuse) them on more than one site. If you use the same password for a phpBB board that you use for your banking system, then change it. Change it now. For one thing, most phpBB board owners do not use a secure protocol (such as HTTPS rather than HTTP) for their sites. That means the password is exposed during the transmission of the form data. Ultimately no matter how a password is stored or how complex the password might be, if people can be tricked into giving up their passwords by phishing emails, web site plugins, and other techniques, that&#8217;s a problem. If a hacker manages to grab the password for one site, they may then be able to use it on other sites. I have made a practice of using a unique password on every service I sign up for in order to prevent this for a very long time. But once again, xkcd.com says it better:</p>
<p><img src="http://imgs.xkcd.com/comics/password_reuse.png" /></p>
<p><strong>Related Links</strong></p>
<ul>
<li><a href="http://www.darkreading.com/blog/archives/2009/02/phpbb_password.html">phpBB Password Analysis</a></li>
<li><a href="http://www.whatsmypass.com/the-top-500-worst-passwords-of-all-time">500 Worst Passwords</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.phpbbdoctor.com/blog/2012/01/10/passwords-matter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Celebrating The Holidays</title>
		<link>http://www.phpbbdoctor.com/blog/2011/12/14/celebrating-the-holidays/</link>
		<comments>http://www.phpbbdoctor.com/blog/2011/12/14/celebrating-the-holidays/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 15:28:13 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[MOD Writing]]></category>

		<guid isPermaLink="false">http://www.phpbbdoctor.com/blog/?p=365</guid>
		<description><![CDATA[I&#8217;ve seen several phpBB boards over the years that swap out the regular graphic objects for holiday objects at certain times of the year. At phpbb.com they have previously done this for Halloween as well as the year-end holidays. I&#8217;ve done the same thing for my biggest board &#8220;BOB&#8221; by replacing the regular logo:

with one [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve seen several phpBB boards over the years that swap out the regular graphic objects for holiday objects at certain times of the year. At phpbb.com they have previously done this for Halloween as well as the year-end holidays. I&#8217;ve done the same thing for my biggest board &#8220;BOB&#8221; by replacing the regular logo:</p>
<p><img src="http://www.forumtopics.com/busobj/menu/bob.png" /></p>
<p>with one of several holiday logos:</p>
<p><img src="http://www.forumtopics.com/busobj/menu/bob_snow.png" /> <img src="http://www.forumtopics.com/busobj/menu/bob_orn.png" /> <img src="http://www.forumtopics.com/busobj/menu/bob_wrap.png" /></p>
<p>And of course this:</p>
<p><img src="http://www.forumtopics.com/busobj/menu/bob_hat.png" /></p>
<p>During the American Thanksgiving week we used this:</p>
<p><img src="http://www.forumtopics.com/busobj/menu/bob_turkey.png" /></p>
<p>Over at the phpBB2 Refugees site we&#8217;ve swapped our normal refugee tent for one with a more holiday feel for the last several weeks:</p>
<p><img src="http://phpbb2refugees.com/menu/holiday.gif" /></p>
<p>Right now this is a manual process, which means I have to remember to edit the php code to invoke the new logo (or alternately use ftp to upload a replacement logo with the same name over the current one). Manual process? for Dave? <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' /> </p>
<p>I&#8217;m setting up a database table with dates and alternate logo names, and will set up a cron job that every night at midnight checks to see if holiday logos are needed for the following day or not. On BOB we rotate among several logos, so there could be more than one logo at any given time. The logo information is then written to a cache file where it will be used for the following 24 hours.</p>
<p>Easy as pie.</p>
<p>Holiday pie. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpbbdoctor.com/blog/2011/12/14/celebrating-the-holidays/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s About Trust, Not Technology</title>
		<link>http://www.phpbbdoctor.com/blog/2011/12/05/its-about-trust-not-technology/</link>
		<comments>http://www.phpbbdoctor.com/blog/2011/12/05/its-about-trust-not-technology/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 19:17:22 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[Board Management]]></category>

		<guid isPermaLink="false">http://www.phpbbdoctor.com/blog/?p=363</guid>
		<description><![CDATA[I read this morning a topic in the MOD Authors forum at phpbb.com where the topic poster was trying to figure out a way to encrypt / decrypt private message text. The technical challenge was easily overcome, as someone posted some code that allows the board owner to do exactly that.
The problem is, it accomplishes [...]]]></description>
			<content:encoded><![CDATA[<p>I read this morning a topic in the MOD Authors forum at phpbb.com where the topic poster was trying to <a href="http://www.phpbb.com/community/viewtopic.php?f=71&#038;t=2145235">figure out a way to encrypt / decrypt private message text</a>. The technical challenge was easily overcome, as someone posted some code that allows the board owner to do exactly that.</p>
<p>The problem is, it accomplishes nothing. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Private messages are often a hot topic for board owners, probably because of the privacy implications of the name &#8220;private&#8221; message. As most board owners probably know, private messages are not truly private. Anyone with database access can read the private message text. Anyone with access to a backup SQL dump can do the same. But who has this type of access, and what can be done to prevent it? <span id="more-363"></span></p>
<h3>Board Owner Access</h3>
<p>In many cases, only one person owns and manages a web site that includes a phpBB board. In this case, that person is likely to have the administrator passwords for the phpBB board, the SQL database password, and ftp or even shell access to the server itself. Even if that person does not start out knowing the SQL database password, they can get it easily enough by downloading the config.php file and getting it from there. Now suppose that private messages are encrypted  as suggested in the topic listed above. Is the data safe?</p>
<p>No, I&#8217;m afraid not. The data in the database is encrypted, but by definition the information has to be able to be unscrambled for the PM recipient to be able to see it. All the board owner has to do is download the php code to obtain the encryption key and then use it to decrypt the data. It turns out it&#8217;s not the fact that the data is encrypted or not, because the board owner has access to the data and the tools required to decrypt it. The board owner can still read private messages, it just takes longer.</p>
<h3>Encryption Versus Hashing</h3>
<p>Passwords are hashed, not encrypted. This means that even though the board owner can see what the hash string is in the field in the database, there is no way to de-hash the data. By definition a hashing algorithm is one-way. But if the private message text is hashed, then there would be no way to get the original text back! That&#8217;s why as a board owner I can change a password to something new, but I cannot tell you what your original password was.</p>
<p>The point is, hashing is secure. My password is relatively safe. Encryption by definition has to be reversible, and there is really no way to eliminate all avenues of accessing that information as long as access to the raw data is possible. </p>
<h3>It&#8217;s About Trust Not Technology</h3>
<p>Even in a more complex environment where there is more than one person with access to and permissions to manage a web site there is only so much that can be done to compartmentalize the issue. Someone, at least one person, is going to have access to the server. Even if it takes two or more people (one to get into the database, the other to decrypt the data) private messages are still not so private.</p>
<p>It all comes down to trust. If I don&#8217;t want someone to read what I wrote, I don&#8217;t write it down. I have to trust that a board administrator is not going to go about reading private messages, or that they&#8217;re not going to edit my post to make it look like I&#8217;m saying something that I didn&#8217;t, or that they&#8217;re not going to install a key-logger that captures my password as it&#8217;s entered on the login screen, or that they&#8217;re not going to try to &#8230; well, it goes on from there. Adding encryption to private messages doesn&#8217;t fix the issue.</p>
<p>And here&#8217;s one more loophole. I mentioned above that password information is hashed and therefore I cannot log in as &#8220;you&#8221; because I cannot determine your password. But I can do this:</p>
<ul>
<li>Log in to the SQL database and retrieve the hash for my password</li>
<li>Also retrieve the hash for your password and save it</li>
<li>Update your account so that your hash value is equal to mine. No I &#8220;know&#8221; your password because it&#8217;s the same as mine.</li>
<li>I log in and do whatever I want to do as &#8220;you&#8221; because I have effectively stolen your identity</li>
<li>When done, I reset your password hash back to the original value so you can log in again, and you have no idea that anything has happened</li>
</ul>
<p>Not very nice, but certainly possible. You just have to trust me not to do these things.</p>
<p>It&#8217;s for this and other reasons I have removed the PM feature from the boards that I manage. By removing the illusion of privacy implied by the name &#8220;private message&#8221; I don&#8217;t have to deal with this. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpbbdoctor.com/blog/2011/12/05/its-about-trust-not-technology/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>phpBB3 subSilver2 Posting Form Ported to phpBB2</title>
		<link>http://www.phpbbdoctor.com/blog/2011/11/10/phpbb3-subsilver2-posting-form-ported-to-phpbb2/</link>
		<comments>http://www.phpbbdoctor.com/blog/2011/11/10/phpbb3-subsilver2-posting-form-ported-to-phpbb2/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 05:53:17 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[MOD Writing]]></category>

		<guid isPermaLink="false">http://www.phpbbdoctor.com/blog/?p=362</guid>
		<description><![CDATA[One of the biggest complaints I&#8217;ve had with running my boards on phpBB2 is that the javascript used for BBCode and smilies insertion during the posting process offers poor (if any) support for modern browsers. Rather than reinvent the wheel, I spent some time to port parts of the subSilver2 template from phpBB3 back to [...]]]></description>
			<content:encoded><![CDATA[<p>One of the biggest complaints I&#8217;ve had with running my boards on phpBB2 is that the javascript used for BBCode and smilies insertion during the posting process offers poor (if any) support for modern browsers. Rather than reinvent the wheel, I spent some time to port parts of the subSilver2 template from phpBB3 back to phpBB2. While testing is not completely done, it seems to have been a success. I copied editor.js straight out; I don&#8217;t think I made any changes to that file but I will go back and verify that before I post a MOD. There were some minor changes made to posting_body.tpl and posting_smilies.tpl to call the new functions. For example in phpBB2 to insert a smilie we called the <code>emoticon()</code> function and now it&#8217;s calling <code>insert_text()</code> just like the BBCode insertion process.</p>
<p>I used the same function to update my canned messages MOD as well.</p>
<p>Oh, and I updated the color picker just a bit. The original color picker used values of 00, 40, 80, and two more to create an array of colors that was 5&#215;5x5. I changed it to the old &#8220;Netscape Safe&#8221; color palette and used 00, 33, 66, 99, CC, and FF and created a 6&#215;6x6 grid instead.</p>
<p>I have the new posting form activated on two different boards for the moment. As long as I don&#8217;t find too many issues I will write it up as a MOD.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpbbdoctor.com/blog/2011/11/10/phpbb3-subsilver2-posting-form-ported-to-phpbb2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another phpBB2 MOD: Cross Post / Double Post Prevention</title>
		<link>http://www.phpbbdoctor.com/blog/2011/11/03/another-phpbb2-mod-cross-post-double-post-prevention/</link>
		<comments>http://www.phpbbdoctor.com/blog/2011/11/03/another-phpbb2-mod-cross-post-double-post-prevention/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 16:03:43 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[Anti-spam]]></category>
		<category><![CDATA[MOD Writing]]></category>

		<guid isPermaLink="false">http://www.phpbbdoctor.com/blog/?p=361</guid>
		<description><![CDATA[As I was working through some code last night I found another &#8220;in progress&#8221; MOD that I wanted to add to the list of MODs in progress that I published yesterday. Over the years I&#8217;ve seen cases where someone from the other side of the planet has a dicey Internet connection and they end up [...]]]></description>
			<content:encoded><![CDATA[<p>As I was working through some code last night I found another &#8220;in progress&#8221; MOD that I wanted to add to the list of <a href="http://www.phpbbdoctor.com/blog/2011/11/02/new-phpbb2-modifications-coming/">MODs in progress that I published yesterday</a>. Over the years I&#8217;ve seen cases where someone from the other side of the planet has a dicey Internet connection and they end up submitting the same post twice because their browser submit times out. Or someone might post the same question in more than one forum, thinking that they&#8217;ll get more attention. Or a spammer might hit multiple forums with the same post multiple times. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_mad.gif' alt=':mad:' class='wp-smiley' /> </p>
<p>I think I&#8217;ve managed to come up with something that definitely helps solve the first two scenarios and as a bonus helps the spammer problem as well. I call this my &#8220;Cross Post / Double Post&#8221; MOD, and it&#8217;s being tested on my beta board now.</p>
<p>The MOD design has so far turned out to be fairly simple. I tie into the flood control process and retrieve the post text for the last three posts by the user. From there I take the current post text and compare it to the prior posts. The first check is a straight equality check, meaning I check for the exact same post text. This will catch the &#8220;copy/paste&#8221; folks with very little overhead. If the post text is not identical, then next I use a function called <code>similar_text()</code>. (<a href="http://us.php.net/manual/en/function.similar-text.php">similar text</a> reference at php.net) This function takes three arguments. The first two are the two strings to compare, and the third is a variable to store the results of the comparison, which is a number from 0 to 100. The result code should essentially be treated as a percentage. If the two posts are 95% similar then I check to see if the original post already in the database is in the same forum as the new post being attempted. If the forums are the same, then a &#8220;Double post&#8221; exception is triggered. If the forums are different, then a &#8220;Cross post&#8221; exception is triggered instead.</p>
<p>The number of posts (3) and percentage of similarity (95) are both controlled via the board configuration screen, so it&#8217;s quite flexible. Setting the percentage threshold to zero (0) is the same as turning the comparison process off.</p>
<p>This MOD is being tested on my &#8220;beta release&#8221; board right now. The first version of the MOD did not use the <code>similar_text()</code> function mentioned above. I attempted to use the <code>soundex()</code> function instead. However it seemed that the <code>soundex()</code> function did not look at enough text, so posts that were clearly different were still being reported as being the same. Switching functions solved that issue.</p>
<p>I&#8217;m now wondering if I need to deal with setting different threshold values for different forums. I hate to do that, as it drastically increases the complexity of the code. But for example there are many forum &#8220;games&#8221; that people play in an &#8220;off topic&#8221; type of forum. Some of those games look very repetitive, and would potentially trigger the CP/DP exception handling. Then again, the current logic looks across all forums, so as long as the person is active in more areas than just the off-topic games area it might be okay. I don&#8217;t want this feature to get in the way of normal use, but I do want to help out the moderator team by capturing / rejecting double post and cross post events.</p>
<p>Stay tuned for details as we start user testing this week. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpbbdoctor.com/blog/2011/11/03/another-phpbb2-mod-cross-post-double-post-prevention/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New phpBB2 Modifications</title>
		<link>http://www.phpbbdoctor.com/blog/2011/11/02/new-phpbb2-modifications-coming/</link>
		<comments>http://www.phpbbdoctor.com/blog/2011/11/02/new-phpbb2-modifications-coming/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 17:22:16 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[MOD Writing]]></category>
		<category><![CDATA[Performance Tuning]]></category>
		<category><![CDATA[phpBB]]></category>

		<guid isPermaLink="false">http://www.phpbbdoctor.com/blog/?p=360</guid>
		<description><![CDATA[What has Dave been working on lately? Not blog posts, obviously.   Here are the headlines&#8230;

Full-Text Search
I created a full-text index on the post subject and text over a year ago to see if maintaining that index would cause any performance issues. I&#8217;m happy to say that I have not seen any challenges from [...]]]></description>
			<content:encoded><![CDATA[<p>What has Dave been working on lately? Not blog posts, obviously. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Here are the headlines&#8230;</p>
<ol>
<li>Full-Text Search<br />
I created a full-text index on the post subject and text over a year ago to see if maintaining that index would cause any performance issues. I&#8217;m happy to say that I have not seen any challenges from inserts / updates with this index in place. I&#8217;m going to be altering the search screen to allow the <a href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html">full syntax offered by MySQL</a> on this type of index and hope to release that in a few months. Some of the challenges I have not yet decided how to solve are things like limiting forums &#8211; either by security or user preference &#8211; and other criteria that can be entered on the standard search screen.
</li>
<li>Capture Post Revisions<br />
I&#8217;ve also added some code to capture post revisions. We&#8217;ve had a couple of folks that come back to our board and edit their post, removing all of the text and leaving only something like &#8220;&#8230;&#8221; instead. This destroys the continuity of the topic, and as a result we&#8217;re going to now track post revisions by capturing the post text history. If needed a moderator will be able to review and then restore a prior post, and ultimately lock that post from further editing. As with the full text search I have done fairly extensive testing on how this is implemented in order to ensure that performance does not suffer, and I&#8217;ll have a few blog posts about that process. This MOD is completed and I expect to roll it out onto the main board in a few weeks. (FWIW, I <a href="http://www.phpbbdoctor.com/blog/2009/11/02/storing-post-revisions-post-locking/">first talked about this post several years ago</a>, and am just now finally getting it completed.)
</li>
<li>Moderator Posts<br />
I&#8217;ve added a new field to the post table that allows a moderator to designate whether it&#8217;s a moderator post or a user post. For example, moderators can certainly participate in a normal board conversation as a regular person. But they may also add posts in their role as a moderator. This new feature will format those posts differently so they stand out, will automatically remove the &#8220;personal&#8221; aspects of a post such as signatures, and does not increment a moderator post count for this type of post. It is intended to be a way for moderators to be able to separate out their moderator posts from their board participation posts. This MOD is also completed and expected to be released shortly.
</li>
<li>Including External Content<br />
I&#8217;ve added some cron jobs that parse RSS feeds from several blogs owned by board members. Their blog posts are automatically set up as part of their signature (as &#8220;Latest Blog Posts&#8221;) and updated once an hour. For bloggers that our community wants to recognize, this is a great way for them to get additional exposure without having to manually update their signature every time they publish a new blog post. This part of the MOD is already in use on our board. Only board admins can currently enter blogger information, as we want to go through a review process and certify blogs rather than allowing just anybody to link to an external site. This was done by altering the administrator user edit form and leaving the regular user profile form alone.</p>
<p>As an extension to this, I&#8217;m also pulling in the content from the blog post and storing that in a hidden forum. As the blog posts are added to the forum they are obviously added to the full-text index because they&#8217;re part of the same table. I am also adding these posts to the standard phpBB2 search tables at the same time. That way if someone searches for term &#8220;X&#8221; and that&#8217;s found in an external blog post, they&#8217;ll see a link in their search results. The blog address is stored on the topic table and a different icon is used to show the user that they&#8217;re leaving our board and heading to an external site. I have all of the main work done; the last requirement is altering search.php so that it offers the ability to include / exclude external content and then react to that setting accordingly. I hope to get this completed in the next few weeks.
</li>
<li>Social Media Profile Links<br />
I&#8217;ve added Facebook, Twitter, and LinkedIn fields to user profiles. These are displayed along with the other profile links, using smaller 18&#215;18 pixel logos. I&#8217;m planning on going back and redoing the other profile links to use the same form factor but that part hasn&#8217;t been done yet. Here are the images I&#8217;ve made, using logos or other material provided by each service provider. <img src="http://www.forumtopics.com/busobj/templates/bob/images/icon_twitter.png" /> <img src="http://www.forumtopics.com/busobj/templates/bob/images/icon_facebook.png" /> <img src="http://www.forumtopics.com/busobj/templates/bob/images/icon_linkedin.png" />
</ol>
<p>One thing that many of these MODs have in common is my concern for performance. We&#8217;re over 750K posts now, and still running extremely well on a server that is hosting several dozen sites, although none of them as active as our big board. Every time I touch the code performance is a primary goal. Another MOD that I&#8217;ve been planning is to port the phpBB3 posting form back to phpBB2 since it does a better job of supporting modern browsers as well as proving some additional formatting features. I haven&#8217;t even started on that yet, but I think it would be good. Now that I&#8217;ve personally switched to Chrome as my standard browser I&#8217;m noticing some interesting quirks. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>So that&#8217;s what I&#8217;ve been up to for the past few months. <img src='http://www.phpbbdoctor.com/blog/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpbbdoctor.com/blog/2011/11/02/new-phpbb2-modifications-coming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

