<?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>firsttube.com &#187; WordPress</title>
	<atom:link href="http://www.firsttube.com/tag/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.firsttube.com</link>
	<description>crunchy nuggets, served semi-daily</description>
	<lastBuildDate>Tue, 03 Jan 2012 00:14:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>I&#8217;ve Been Hacked! WP-Lytebox Sucks</title>
		<link>http://www.firsttube.com/read/ive-been-hacked-wp-lytebox-sucks/</link>
		<comments>http://www.firsttube.com/read/ive-been-hacked-wp-lytebox-sucks/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 21:36:16 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://firsttube.com/?p=1600</guid>
		<description><![CDATA[This is the third time I&#8217;ve had to spent serious time &#8220;fixing&#8221; WordPress.  Say what you will about my old &#8220;Small Axe&#8221; or &#8220;Flip&#8221; solutions, but I never had a problem.  With WordPress, I have found regular issues. This time, &#8230; <a href="http://www.firsttube.com/read/ive-been-hacked-wp-lytebox-sucks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img style="width: 150px; height: 150px; padding: 5px; float: right;" src="http://firsttube.com/uploads/2010/04/wordpress-hack-150x150.jpg" alt="Hacking WordPress" />This is the third time I&#8217;ve had to spent serious time &#8220;fixing&#8221; WordPress.  Say what you will about my old &#8220;Small Axe&#8221; or &#8220;Flip&#8221; solutions, but I never had a problem.  With WordPress, I have found regular issues.</p>
<p>This time, I traced the problem back to wp-lytebox, and I&#8217;m ashamed to say I&#8217;ve had to fix the same problem before.  It all started when I couldn&#8217;t load the post page in the backend of <a href='http://firsttube.com'>firsttube.com</a>.  Digging in, I eventually found a file called sys.php in the root of the site, and it listed the contents of my site and had a form that allowed someone to add a page, chmod a page, or delete a page.  Killer!</p>
<p>I found that it was defaulting to <em>/path/to/WP/wp-includes/plugins/wp-lytebo</em>x, and sure enough, digging into that directory revealed several other fun scripts, all of which gave someone the ability to access all the files on my site.  Fun!</p>
<p>I found that I already had replaced this plugin before, so I decided to get rid of it altogether, this now proving it wasn&#8217;t a misconfiguration, but rather, <a href="http://www.f-secure.com/vulnerabilities/SA200902421">a problem with the wp-lytebox itself</a>.</p>
<p>In this process, however, I was unable to fix my issue.  Visiting <em>/wp-admin/post-new.php</em> still rendered only a page footer, and nothing more.</p>
<p>So I starting fooling around in my directories looking for files that had been modified more recently than when I did my 2.9.2 upgrade.  One of the files? My <em>.htaccess</em> file.</p>
<p>&#8220;<em>This be odd,</em>&#8221; I thought to myself, &#8220;<em>I&#8217;ve changed this not, methinks.</em>&#8221;</p>
<p>Sure enough, there was a rogue line within: RewriteCond ^/default/$ /wp-admin/includes Huh?</p>
<p>I dug into that folder, and the .htaccess file there was recent too? It&#8217;s contents? <em>DefaultIndex users.php</em></p>
<p>Of course, I immediately opened users.php and found, as you might have guessed, a bunch of Russian crap. Savvy WP hackers will know, it&#8217;s not a real file, there is no users.php in the real wp-admin/includes directory.</p>
<p>I also found a folder that had two large files, both named core.XXXX where XXXX was a 4 digit number, and a massive 40 MB error_log.  Yikes.</p>
<p>I thought I had everything cleaned out, and I truly believed that the way in was wp-lytebox.  Then <a href="http://wordpress.org/support/topic/379659">I found this</a>.  And sure enough, all of the listed files were compromised.  So I nuked all the files, and replaced them all.  D&#8217;oh!</p>
<p>So, if you&#8217;re arriving via Google or Bing or Yahoo!, do NOT use wp-lytebox.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/ive-been-hacked-wp-lytebox-sucks/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Microsoft&#8217;s Web App Gallery FAIL</title>
		<link>http://www.firsttube.com/read/microsofts-web-app-gallery-fail/</link>
		<comments>http://www.firsttube.com/read/microsofts-web-app-gallery-fail/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 17:42:42 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://firsttube.com/?p=1210</guid>
		<description><![CDATA[Giving Microsoft, IIS, and PHP.exe the benefit of the doubt, I decided to try installing WordPress on Windows via Microsoft&#8217;s new Web Application Gallery.   The install is simple and straightforward: install MySQL, go to the web app gallery, click &#8230; <a href="http://www.firsttube.com/read/microsofts-web-app-gallery-fail/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Giving Microsoft, IIS, and PHP.exe the benefit of the doubt, I decided to try installing WordPress on Windows via <a href="http://www.microsoft.com/web/gallery/">Microsoft&#8217;s new Web Application Gallery</a>.   The install is simple and straightforward: install MySQL, go to the web app gallery, click on the download, choose what you want, poof! Done.</p>
<p>I got the first few steps knocked out, I selected WordPress,  gave it my MySQL username and password, and let it go.  It installed PHP for Windows, the MySQL connector, and WordPress.  Then I launched my browser and pointed to http://localhost:81 and&#8230; no.  Error 402.  I monkeyed with the site in IIS and was able to generate an error that simply says:  <em>Parameter not found</em>.</p>
<p>PHP is installed.  IIS assicates .php files with PHP.exe.  But WordPress <em>no worky</em>.</p>
<p>Fail.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/microsofts-web-app-gallery-fail/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Posting Your Latest Tweet in WordPress</title>
		<link>http://www.firsttube.com/read/posting-your-latest-tweet-in-wordpress/</link>
		<comments>http://www.firsttube.com/read/posting-your-latest-tweet-in-wordpress/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 16:48:31 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Social Networking]]></category>

		<guid isPermaLink="false">http://firsttube.com/?p=1118</guid>
		<description><![CDATA[Although I posted yesterday how to add your latest tweet to WordPress without a plugin, I made several changes to the script before I posted it to make it more &#8220;generic&#8221; and re-usable. Since I&#8217;ve changed it quite a bit, &#8230; <a href="http://www.firsttube.com/read/posting-your-latest-tweet-in-wordpress/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Although I posted yesterday how to add your latest tweet to WordPress without a plugin, I made several changes to the script before I posted it to make it more &#8220;generic&#8221; and re-usable. Since I&#8217;ve changed it quite a bit, I decided to repost it.  This new script also autolinks @usernames and <a href="http://www.google.com/search?q=twitter+hash+tags">#hash tags</a>.</p>
<p>Directions are this easy: set the path of $tw_File with a static, writable file.  Set $tw_userid to your Twitter user id.  Done. </p>
<p>Download <a href="http://firsttube.com/s/latest-tweet"><strong>firsttube.com &#8220;get latest tweet&#8221; php snippet</strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/posting-your-latest-tweet-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Thank a Plugin Developer Day</title>
		<link>http://www.firsttube.com/read/thank-a-plugin-developer-day/</link>
		<comments>http://www.firsttube.com/read/thank-a-plugin-developer-day/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 20:35:43 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://firsttube.com/?p=1064</guid>
		<description><![CDATA[Matt Mullenweg, creator of WordPress and skipper of Automattic, has declared today, January 28, &#8220;Thank a Plugin Developer&#8221; Day. In thanks, I will list all of the plugins I use in my firsttube.com WordPress install. Akismet is a comment filter &#8230; <a href="http://www.firsttube.com/read/thank-a-plugin-developer-day/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ma.tt/">Matt Mullenweg</a>, creator of WordPress and skipper of <a href="http://automattic.com">Automattic</a>, has declared today, January 28, <a href="http://ma.tt/2009/01/4000-plugins/">&#8220;Thank a Plugin Developer&#8221; Day</a>.  In thanks, I will list all of the plugins I use in my <a href='http://firsttube.com'>firsttube.com</a> WordPress install.</p>
<ul class="list">
<li><a href="http://akismet.com/">Akismet</a> is a comment filter that uses a &#8220;karma&#8221; type algorithm to analyze comments and separate ham from spam.  According to my internal stats, Akismet reports 37,512 spams caught, 284 legitimate comments, and an overall accuracy rate of 99.934%. Not too shabby.  As a result, this site no longer has a captcha.</li>
<li><a href="http://www.bravenewcode.com/blipit/">Blip.It iPhone Handler</a> is a neat little tool that creates a method to display embedded flash as Quicktime on-the-fly, ideal for iPhone compatibility.</li>
<li><a href="http://wordpress.org/extend/plugins/cache-images/">Cache Images</a>, another Mullenweg gem, let me fetch remote images and store them locally.  I prefer to host all images locally if possible, so this is fantastic.</li>
<li>&#8220;ftBlogrollerWP (ft)&#8221; is my own modified plugin that creates a page with all of my links, as seen <a href="http://firsttube.com/links">here</a>.</li>
<li><a href="http://www.arnebrachhold.de/redir/sitemap-home/">Google XML Sitemaps</a> is a tool for creating a sitemap that Google and other search engines can use to spider your site.  This would take forever by hand and would be very hard to keep up manually, but this plugin makes it effortless.</li>
<li><a href="http://devel.kostdoktorn.se/limit-login-attempts">Limit Login Attempts</a>.  No sense in letting someone hammer your WordPress admin login eternally.  Basic security that ought to be part of WordPress core.</li>
<li><a href="http://rmarsh.com/plugins/similar-posts/">Similar Posts</a> is a snazzy little plugin that tries to find similar posts to any given post.  I use this on each post&#8217;s page.  In pre-Wordpress firsttube, I did this by searching for other articles with the same tags.  In WordPress-era ft, I do this via a plugin.  Similar Posts requires the <a href="http://rmarsh.com/plugins/post-plugin-library/">Post-Plugin Library</a>.</li>
<li><a href="http://op111.net/p65">Tangofy</a> is a simple plugin to modify icons in the stock WordPress admin pages.</li>
<li><a href="http://www.templature.com/2007/10/18/ttftitles-wordpress-plugin/">TTFTitles</a> is a sweet little plugin that creates images from text.  I do this on entry titles and sidebar titles.  It allows you to add a dimension of professional typography and to use fonts that aren&#8217;t in the eight &#8220;web safe.&#8221;</li>
<li><a href="http://www.ilfilosofo.com/blog/wp-db-backup">WordPress Database Backup</a>: you&#8217;ll never guess what this one does!</li>
<li><a href="http://wordpress-plugins.feifei.us/hashcash/">WordPress Hashcash</a> does the spam filtering in conjunction with Akismet.  Whatever Akismet misses, Hashcash catches.  Essentially, it catches *everything* Akismet misses and only really reports problems when users have javascript turned off.</li>
<li><a href="http://rauru.com/wordpress-popular-posts">WordPress Popular Posts</a> provide me view counts, plain and simple.  I used to keep track pre-Wordpress, but sadly, I lost my hit count (many of which were in the thens of thousands of views) and only started again this month.  Nonetheless, it&#8217;s in the sidebar.</li>
<li><a href="http://mnm.uib.es/gallir/wp-cache-2/">wp-cache</a> is a caching program, but I&#8217;m not currently using the cache.</li>
<li><a href="http://grupenet.com/2007/08/03/wp-lytebox/">WP-Lytebox</a> automatically adds a lytebox effect to inline images, which is spectacular.</li>
<li><a href="http://www.ruhanirabin.com/wp-optimize/">WP-Optimize</a> is a database optimizer that does optimization not only of MySQL overhead, but also removes autosaves and other space wasters from your database.</li>
<li><a href="http://wordpress.org/extend/plugins/wp-syntax/">WP-Syntax</a> makes my code pretty, and that&#8217;s all.</li>
<li><a href="http://www.beardygeek.com/">WP iPaper</a> is a plugin for embedding <a href="http://scribd.com">scribd</a> stuff.</li>
<li>Lastly, <a href="http://bravenewcode.com/wptouch/">WPtouch iPhone Theme</a> is a stylesheet that makes this site look native on the iPhone.  It&#8217;s truly a beautiful skin.</li>
</ul>
<p>That is all.  Thank you to all the above developers. As a reward, please accept this pingback!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/thank-a-plugin-developer-day/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress &#8220;Press This&#8221; 404 Problem</title>
		<link>http://www.firsttube.com/read/wordpress-press-this-404-problem/</link>
		<comments>http://www.firsttube.com/read/wordpress-press-this-404-problem/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 15:41:50 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://firsttube.com/?p=1062</guid>
		<description><![CDATA[WordPress › Support » Press This 404 issue. &#8220;Press This&#8221; hasn&#8217;t worked for me for ages.  I am so happy to have it back!]]></description>
			<content:encoded><![CDATA[<p><a href="http://wordpress.org/support/topic/190089">WordPress › Support » Press This 404 issue</a>.</p>
<p>&#8220;Press This&#8221; hasn&#8217;t worked for me for ages.  I am so happy to have it back!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/wordpress-press-this-404-problem/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>firsttube.com Upgraded To WordPress 2.7</title>
		<link>http://www.firsttube.com/read/firsttubecom-upgraded-to-wordpress-27/</link>
		<comments>http://www.firsttube.com/read/firsttubecom-upgraded-to-wordpress-27/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 20:28:56 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Scoble]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://firsttubecom/?p=997</guid>
		<description><![CDATA[So far, one problem, two gripes.  My problem is that I can&#8217;t seem to get posts with dots in the slug title to work right, even though I once solved this problem before.  What&#8217;s worse is that it won&#8217;t fetch &#8230; <a href="http://www.firsttube.com/read/firsttubecom-upgraded-to-wordpress-27/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So far, one problem, two gripes.  My problem is that I can&#8217;t seem to get posts with dots in the slug title to work right, even though I once <a href="http://firsttube.com/read/hacking-wordpress-day-two/">solved this problem before</a>.  What&#8217;s worse is that it won&#8217;t fetch those posts anymore, which really sucks.</p>
<p>Onto my gripes. I can&#8217;t get inline replying/threading to work.  There is very little documentation on it so far.  The functions are called comment_reply_link() and get_comment_reply_link(), and there&#8217;s nothing anywhere in the codex that helps, there&#8217;s little on the internet, the only place to get any real detail is the code itself, which explains:</p>
<p><em><small>from wp-includes/comment-template.php starting at line 949 on WP 2.7.0</small></em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"> <span style="color: #339933;">*</span> Retrieve HTML content <span style="color: #b1b100;">for</span> reply to comment <span style="color: #990000;">link</span><span style="color: #339933;">.</span>
 <span style="color: #339933;">*</span>
 <span style="color: #339933;">*</span> The <span style="color: #b1b100;">default</span> arguments that can be override are <span style="color: #0000ff;">'add_below'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'respond_id'</span><span style="color: #339933;">,</span>
 <span style="color: #339933;">*</span> <span style="color: #0000ff;">'reply_text'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'login_text'</span><span style="color: #339933;">,</span> and <span style="color: #0000ff;">'depth'</span><span style="color: #339933;">.</span> The <span style="color: #0000ff;">'login_text'</span> argument will be
 <span style="color: #339933;">*</span> used<span style="color: #339933;">,</span> <span style="color: #b1b100;">if</span> the user must <span style="color: #990000;">log</span> in or register first before posting a comment<span style="color: #339933;">.</span> The
 <span style="color: #339933;">*</span> <span style="color: #0000ff;">'reply_text'</span> will be used<span style="color: #339933;">,</span> <span style="color: #b1b100;">if</span> they can post a reply<span style="color: #339933;">.</span> The <span style="color: #0000ff;">'add_below'</span> and
 <span style="color: #339933;">*</span> <span style="color: #0000ff;">'respond_id'</span> arguments are <span style="color: #b1b100;">for</span> the JavaScript moveAddCommentForm<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">function</span>
 <span style="color: #339933;">*</span> parameters<span style="color: #339933;">.</span>
 <span style="color: #339933;">*</span>
 <span style="color: #339933;">*</span> <span style="color: #339933;">@</span>since 2<span style="color: #339933;">.</span>7<span style="color: #339933;">.</span>0
 <span style="color: #339933;">*</span>
 <span style="color: #339933;">*</span> <span style="color: #339933;">@</span>param <span style="color: #990000;">array</span> <span style="color: #000088;">$args</span> Optional<span style="color: #339933;">.</span> Override <span style="color: #b1b100;">default</span> options<span style="color: #339933;">.</span>
 <span style="color: #339933;">*</span> <span style="color: #339933;">@</span>param int <span style="color: #000088;">$comment</span> Optional<span style="color: #339933;">.</span> Comment being replied to<span style="color: #339933;">.</span>
 <span style="color: #339933;">*</span> <span style="color: #339933;">@</span>param int <span style="color: #000088;">$post</span> Optional<span style="color: #339933;">.</span> Post that the comment is going to be displayed on<span style="color: #339933;">.</span>
 <span style="color: #339933;">*</span> <span style="color: #339933;">@</span><span style="color: #b1b100;">return</span> string<span style="color: #339933;">|</span>bool<span style="color: #339933;">|</span>null <span style="color: #990000;">Link</span> to show comment form<span style="color: #339933;">,</span> <span style="color: #b1b100;">if</span> successful<span style="color: #339933;">.</span> <span style="color: #009900; font-weight: bold;">False</span><span style="color: #339933;">,</span> <span style="color: #b1b100;">if</span> comments are closed<span style="color: #339933;">.</span></pre></div></div>

<p>It doesn&#8217;t matter much, because it doesn&#8217;t work, period, even though I&#8217;ve followed the instruction here to a t.  So I&#8217;ll have to fix that in time.</p>
<p>My last gripe is with the new wp_list_comments() routine.  I understand this is all new, but the idea that templating comments requires a callback function as a wrapper to all comments, pings, and trackbacks is <strong>clumsy</strong> at best.  <a href="http://codex.wordpress.org/Template_Tags/wp_list_comments">The codex on wp_list_comments()  have nothing</a> to explain it to people, so while I&#8217;ve dug in and gotten things working, it&#8217;s not for the feint of heart just yet, since you need to build a PHP function in your theme in your <em>functions.php</em> file (or create one if it doesn&#8217;t exist, which cannot be done via the Dashboard).  I&#8217;m a little sad, since the theme system is so flexible and the new plugin system is just incredible, to see the new comment loop be so <em>manual</em> compared to the single file approach used so successfully in the past.</p>
<p>I know that <a href="http://scobleizer.com/2008/12/12/wordpress-27/">Scoble says WordPress 2.7 rocks</a>, and it does.  Scoble doesn&#8217;t realize the shortcomings because he hasn&#8217;t tried to play with the new features, and fortunately, it very gracefully degrades.  But it&#8217;s got some work to do to be perfect, for me at least.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/firsttubecom-upgraded-to-wordpress-27/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 2.7 RC1</title>
		<link>http://www.firsttube.com/read/wordpress-27-rc1/</link>
		<comments>http://www.firsttube.com/read/wordpress-27-rc1/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 18:42:27 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://firsttubecom/?p=983</guid>
		<description><![CDATA[I just downloaded and installed WordPress 2.7 RC1. The upgrade took about 3 minutes, end to end, and the &#8220;several moments&#8221; database upgrade took less than 2 seconds. All in the all, there&#8217;s very little to notice on the front &#8230; <a href="http://www.firsttube.com/read/wordpress-27-rc1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I just downloaded and installed WordPress 2.7 RC1.  The upgrade took about 3 minutes, end to end, and the &#8220;several moments&#8221; database upgrade took less than 2 seconds.  All in the all, there&#8217;s very little to notice on the front end that is different, I haven&#8217;t been able to test comment threading yet.  However, the new admin site is really nice looking.  The Dashboard is a HUGE improvement over the &lt;2.7 series.</p>
<p>Themes were entirely unbroken.  Upgrading <a href='http://firsttube.com'>firsttube.com</a> may be a bit more of a challenge since <a href="http://firsttube.com/read/hacking-wordpress-day-two/">I&#8217;ve manually changed a few fore WordPress files</a>, which may prevent in place automatic upgrades.  However, all in all, I think the 2.7 release is looking really great.  </p>
<p>When 2.7 final is released, I expect to be updating my live site pretty quickly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/wordpress-27-rc1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BePress: A WordPress Theme</title>
		<link>http://www.firsttube.com/read/bepress-a-wordpress-theme/</link>
		<comments>http://www.firsttube.com/read/bepress-a-wordpress-theme/#comments</comments>
		<pubDate>Sun, 07 Sep 2008 14:03:36 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[BeOS]]></category>
		<category><![CDATA[BePress]]></category>

		<guid isPermaLink="false">http://firsttubecom/?p=827</guid>
		<description><![CDATA[Chasing a random whim, I decided to check if there was an existing WordPress theme to mimic the BeOS 5 desktop. If there is one, I can&#8217;t find it. As I&#8217;ve detailed before, I&#8217;ve been learning to hack WordPress. So &#8230; <a href="http://www.firsttube.com/read/bepress-a-wordpress-theme/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="attachment_830" class="wp-caption alignright" style="width: 310px"><a href="http://firsttube.com/uploads/2008/09/bepress-v0.2.jpg"><img class="size-medium wp-image-830" title="BePress v0.2" src="http://firsttube.com/uploads/2008/09/bepress-v0.2-300x188.jpg" alt="BePress: A WordPress theme" width="300" height="188" /></a><p class="wp-caption-text">BePress: A WordPress theme</p></div>
<p>Chasing a random whim, I decided to check if there was an existing <a href="http://wordpress.org/extend/themes/">WordPress theme</a> to mimic <a href="http://en.wikipedia.org/wiki/BeOS">the BeOS 5 desktop</a>.  If there is one, I can&#8217;t find it. As I&#8217;ve detailed before, I&#8217;ve been <a href="http://firsttube.com/tag/wordpress">learning to hack WordPress</a>.  So I thought, perhaps this is a chance for me to write my first WordPress theme.</p>
<p>Enter BePress.  At first, I began this project as a 100% table-free CSS/XHTML project.  After a few hours of tinkering, however, and after looking into some old code <a href="http://eugenia.gnomefiles.org">Eugenia</a> wrote, it became clear to me that going table-less will not render the result I&#8217;d like to see.  Perhaps for a 2.0 version I&#8217;ll pursue that goal.  In the meantime, for my 0.2 roll I replaced my divs and spans with tables and got a nice, smooth BeOS table-like interface.  Behold, <a href="http://dev.firsttube.com/bepress">BePress</a>.</p>
<div class="mceTemp">
<dl id="attachment_829" class="wp-caption alignleft" style="width: 100px;">
<dt class="wp-caption-dt"><a href="http://firsttube.com/uploads/2008/09/bepress.png"><img class="size-full wp-image-829" title="BePress" src="http://firsttube.com/uploads/2008/09/bepress.png" alt="BePress" width="90" height="29" /></a></dt>
</dl>
</div>
<p>Although far from complete &#8211; complete to me means all pages of the theme are present and rendering properly &#8211; I&#8217;m feeling that it&#8217;s a nice start.  I&#8217;m also getting more comfortable digging into WordPress.  It turns out that writing a theme is exceptionally easy once you understand how <a href="http://codex.wordpress.org/The_Loop">The Loop</a> works.</p>
<p>I expect to continue to mess with this for another week or two before I look into WordPress hosting it for download.  I don&#8217;t see any reason why not to share it with the world, if there&#8217;s actually still anyone out there with a nostalgia for the BeOS who wants to theme their WordPress blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/bepress-a-wordpress-theme/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My First Plugin</title>
		<link>http://www.firsttube.com/read/my-first-plugin/</link>
		<comments>http://www.firsttube.com/read/my-first-plugin/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 00:29:25 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://firsttubecom/?p=672</guid>
		<description><![CDATA[I recognize that I&#8217;ve been a little wordy about WordPress lately &#8211; no pun intended &#8211; but I&#8217;m afraid that it&#8217;s really interesting to me, and probably will be for the next few days. So, if you&#8217;re growing weary of &#8230; <a href="http://www.firsttube.com/read/my-first-plugin/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I recognize that I&#8217;ve been a little wordy about WordPress lately &#8211; no pun intended &#8211; but I&#8217;m afraid that it&#8217;s really interesting to me, and probably will be for the next few days.  So, if you&#8217;re growing weary of the WordPress related posts, I&#8217;m sorry.  </p>
<p>Today I took my first stab at writing a WordPress plugin.  Turns out, it&#8217;s really easy.  I&#8217;m mean <strong>really</strong> easy.  The plugin is pretty simple: it just searches through every post and turns the unlinked words <a href='http://firsttube.com'>firsttube.com</a> into a hyperlink.  However, it seems like it might be a useful plugin for some, even just as a text-replacement plugin.  So we&#8217;ll see if I publish it.   In the meantime, though, it took me about 15 minutes to write and then it was recognized by WordPress, which was very cool.  </p>
<p>I have a few ideas for more involved plugins too that I may write, one day.  But in the meantime, this one is pretty cool.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/my-first-plugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OSNews vs. WordPress</title>
		<link>http://www.firsttube.com/read/osnews-vs-wordpress/</link>
		<comments>http://www.firsttube.com/read/osnews-vs-wordpress/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 00:35:20 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[OSNews]]></category>
		<category><![CDATA[Websites]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://firsttubecom/?p=656</guid>
		<description><![CDATA[I&#8217;ve spent quite a bit of time, over the last 5 or 6 days, diving into WordPress and learning what makes it tick.  Parts of WordPress are really impressive &#8211; just flat out cool. The way some of it works &#8230; <a href="http://www.firsttube.com/read/osnews-vs-wordpress/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve spent quite a bit of time, over the last 5 or 6 days, diving into WordPress and learning what makes it tick.  Parts of WordPress are <em>really</em> impressive &#8211; just flat out <em><strong>cool</strong></em>. The way some of it works is fairly complex and deciphering it sometimes means reading page after page after page to understand an entire routine.  But sometimes, when you finally see, end to end, how something in WordPress works &#8211;  I mean really see individual bits of the engine &#8211; you have to admit it teaches you a little about PHP.  WordPress, underneath it all, is a pretty big beast and its strength and ubiquitous presence comes largely, I think, from the fact that it can do virtually anything.  The really sweet plugin system, the ways hooks work, &#8220;The Loop,&#8221; the dynamic options panel &#8211; it&#8217;s all very educational.  </p>
<p>The interesting thing here is that I&#8217;ve browsed the source of <a href="http://slashcode.com">Slash</a>, <a href="http://scoop.kuro5hin.org">Scoop</a>, <a href="http://phpnuke.org">phpNuke</a>, and now <a href="http://wordpress.org">WordPress</a>, and all of them are <strong>definitively</strong> more complex and much heavier than the entire <a href='http://osnews.com'>OSNews</a> codebase. Now, before you jump all over me &#8211; firstly, Slash and Scoop are Perl, and I don&#8217;t really read Perl, so I can&#8217;t speak as an expert there.  Secondly, WordPress and Nuke both are very portable and dynamic, whereas <a href='http://osnews.com'>OSNews</a> has a narrow focus and, location-wise, is very static.  But that aside, <a href='http://osnews.com'>OSNews</a> has withstood simultaneous link bombs from <a href="http://slashdot.org">Slashdot</a> and <a href="http://digg.com">Digg</a>.  As amazing as WordPress is, it&#8217;s mostly amazing that it functions at all and loads in less than 2 minutes per page with as much going on as I can see behind the scenes.   That&#8217;s not a cut on WordPress, by the way.</p>
<p>In fact, if anything , what is really impressed upon me is how smooth and simple <a href='http://osnews.com'>OSNews</a> code is, if I may be so bold.  OSNews runs superfast due, in part, to lots of creative caching, some on-demand, some via cron.  But it also does so because of highly efficient queries that are measured for speed on their JOINs, meaning in some cases, it&#8217;s faster to do 20 simple queries than one complex one, or build a long and scary chain of &#8220;OR x=a OR x=b OR x=c OR x=d&#8230;&#8221;  Watching WordPress code in action is really fun for me, but watching <a href='http://osnews.com'>OSNews</a> work knowing what I now know about how much work PHP can cram into its threads is even more fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/osnews-vs-wordpress/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>To Those That Read firsttube.com via RSS</title>
		<link>http://www.firsttube.com/read/to-those-that-read-firsttubecom-via-rss/</link>
		<comments>http://www.firsttube.com/read/to-those-that-read-firsttubecom-via-rss/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 00:42:08 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://firsttubecom/?p=646</guid>
		<description><![CDATA[To those of you that read firsttube.com via RSS, I&#8217;m sorry about the recent difficulties. My conversion to WordPress is almost entirely complete, including handling all old links, etc. I have a few legacy things left to fix. In the &#8230; <a href="http://www.firsttube.com/read/to-those-that-read-firsttubecom-via-rss/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>To those of you that read <a href='http://firsttube.com'>firsttube.com</a> via RSS, I&#8217;m sorry about the recent difficulties.  My conversion to WordPress is almost entirely complete, including handling all old links, etc.  I have a few legacy things left to fix.  In the meantime, I realize that my feed has been screwy for the last few days and I&#8217;m sorry about that. </p>
<p>It should be fixed now, so that likely means another 20 dupes or so, I can&#8217;t control that.  But I can tell you that I think we&#8217;re all caught up.  Thanks for hanging with me.   </p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/to-those-that-read-firsttubecom-via-rss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacking WordPress, Day Two</title>
		<link>http://www.firsttube.com/read/hacking-wordpress-day-two/</link>
		<comments>http://www.firsttube.com/read/hacking-wordpress-day-two/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 01:17:25 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://firsttubecom/?p=621</guid>
		<description><![CDATA[Thus far, my move to WordPress has been an adventure.  Here&#8217;s a few lessons learned. First off, I was very excited about the features of WordPress.  I was really excited, most specifically, about the API, and about the rich text &#8230; <a href="http://www.firsttube.com/read/hacking-wordpress-day-two/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Thus far, my move to WordPress has been an adventure.  Here&#8217;s a few lessons learned.</p>
<p>First off, I was very excited about the features of WordPress.  I was really excited, most specifically, about the API, and about the rich text WYSIWYG of the backend.  I&#8217;ve done a lot of work on Small Axe&#8217;s backend, but it&#8217;s still nothing compared to WordPress.</p>
<p>When I imported my stuff, it worked well, but the &#8220;slugs&#8221; &#8212; or URL-friendly post titles &#8212; did not convert properly.  They converted as WordPress friendly, properly escaped slugs.  The problem was, my slugs needed to stay intact, because I didn&#8217;t want all old links to break.</p>
<p>Understanding the way WordPress functions is really tough for a WP newbie, because the code is so spread out, yet compact, voluminous, yet digestible.  Start with index.php, onto wp-blog-header.php, into wp-settings.php, and then you find the <strong>massive</strong> list of files in the wp-includes directory.  You&#8217;ll dig all over trying to find files to find includes in includes in includes.  I finally found a great article that tries to explain <a href="http://www.bernzilla.com/item.php?id=1007">the WordPress slug architecture.</a> It&#8217;s fairly complex.   Much of it lives in<em>/wp-includes/query.ph</em>p.  However, my problem was very specific.</p>
<p>Many of my post slugs had periods in them.  The period does not interfere with the URL, but WordPress doesn&#8217;t like them, and somewhere in the massive beast.     So I had to find the page that &#8220;gets&#8221; posts.  Lo and behold, there is a function called &#8220;get_posts&#8221; that lives in <em>/wp-includes/query.php</em>.  I kept poking around.  Like anyone who keeps digging, eventually, you&#8217;ll find yourself in <em>wp-includes/formatting.php</em>.  And there it is.</p>
<p>Slug posts get sanitized &#8211; like everything, virtually all input is strictly sanitized &#8211; by a function called sanitize_title_with_dashes().  This function generates the slug.  In order to include dots in your slug titles, just replace lines 366 and 267 (on WordPress 2.6.0) with this:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/&amp;amp;+?;/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// kill entities</span>
<span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/[^%a-z0-9 _.-]/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Then your slug titles will not strip periods.  Of course, I don&#8217;t recommend you actually use periods, I just wanted them to work when fetching old posts created before I knew any better.</p>
<p>After that adventure, I have to tell you, I&#8217;m really loving WordPress.  There are some incredible plugins that have done some amazing functionality extension for me.  So far, so good.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/hacking-wordpress-day-two/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Export Blogsome, Export Slashdot Journal</title>
		<link>http://www.firsttube.com/read/Export-Blogsome-Export-Slashdot-Journal/</link>
		<comments>http://www.firsttube.com/read/Export-Blogsome-Export-Slashdot-Journal/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 16:55:07 +0000</pubDate>
		<dc:creator>Adam S</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[Backups]]></category>
		<category><![CDATA[Blogsome]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Small Axe]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://firsttubecom/read/Export-Blogsome-Export-Slashdot-Journal</guid>
		<description><![CDATA[I was recently issued a challenge: backup a blogsome blog and the content of a Slashdot journal and merge them into a single database. I foolishly accepted this challenge, knowing that Blogsome is based on WordPress. Come to find out &#8230; <a href="http://www.firsttube.com/read/Export-Blogsome-Export-Slashdot-Journal/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I was recently issued a challenge: backup a blogsome blog <i>and</i> the content of a Slashdot journal and merge them into a single database.  I foolishly accepted this challenge, knowing that Blogsome is based on WordPress.  Come to find out that Blogsome doesn&#8217;t allow you to backup or export their WordPress content.  Also, Slashdot doesn&#8217;t provide you a way to export or backup your journal.  The prize was sweet: a brand new, fairly expensive, unlocked mobile phone.  </p>
<p>If you want to make a mirror of your blogsome blog, you can use a single very powerful command to generate a snapshot of it from any Linux machine or Windows with Cygwin installed: </p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-k</span> <span style="color: #660033;">-m</span> <span style="color: #660033;">-r</span> http:<span style="color: #000000; font-weight: bold;">//</span>url</pre></div></div>

<p>
But this will only create a static HTML mirror of your website.  It won&#8217;t allow you manipulate content or put it into another database.  That leaves only one way to do it &#8211; request the entire site page by page, and parse each page individually.  RSS is not reliable here, as most people have it set to only 15 or so items and parsing an enormous page make make PHP or your server run out of memory or alloted script execution time. </p>
<p>It&#8217;s a multi-step process, to be certain.  It was actually <i>painful</i> to go through the process.  Requesting over and over, debugging the script line by line.  It takes several steps to get things right.  But, eventually, I did it. I was able to export a Blogsome blog in its entirety &#8211; every entry, all the categories, all the comments with emails and websites &#8230;everything.  </p>
<p>Slashdot was the same.  It took some tinkering, but eventually, I was able to backup a very lengthy Slashdot journal.  Again, in its entirety.  I got every post, the date, etc.  It was not simple, but it worked well.  And I not only got them backed up, I merged them into a single database serving up&#8230; Small Axe 0.6 (which was a whole adventure of its own, taking current <a href='http://firsttube.com'>firsttube.com</a> code and &#8220;neutralizing&#8221; it).  Suffice it to say, when I saw all entries working and served in Small Axe, I had a huge smile.   Turns out that the person I was doing this for decided against Small Axe (only because it doesn&#8217;t yet offer all the bells and whistles WordPress does, even if it is a beast).  But it was irrelevant &#8211; the hard part was getting the data properly, and that&#8217;s done.  Migrating to *any* blog database is possible if you have the time, inclination, and skill to write a SQL export/import script. </p>
<p>Here&#8217;s how it works: </p>
<p>* Cycle through each page of the blogsome blog.  On each page, we get the entries, the URL, the postid, and other relevant info.  We set a flag on each item to 0. <br />
* As we retreive the items, we correct the path to images, spacing, smilies, etc. <br />
* Then we cycle through each page individually.  We have all the URLs already, so we go through each one and parse comments.  It&#8217;s important to know that comment owner comments are marked up differently.  As we get the comments, we upodate the flag and let the script run on its own.  Our 900+ items took about an hour by meta-refreshing the fully rendered page every 3 seconds. <br />
* As we go through the comments, we strip tags we don&#8217;t want, we fix emoticons, we fix internal links, spacing, etc.  We must expose emails temporarily if we want them to transfer over. <br />
* Finally, we import them all into a central database with an agreed schema.  </p>
<p>If you have a Blogsome blog and/or a Slashdot journal you need backed up, I can help you do it.  It&#8217;s not a simple process, but it is very accurate and preserves whatever data is exposed via HTML.  So for the right barter, I would be very motivated to help.  If I can simplify the process, I may create an open script to do this.  But for now, I&#8217;ve got the code.  </p>
<p>On a related note, I&#8217;ll probably release an updated version of Small Axe sometime in the not too distant future, because the amount of changing I&#8217;ve done and all the features I&#8217;ve just implemented are killer.  Small Axe is FAR from WordPress caliber tested, but it&#8217;s SUPER simple and can do all the basics of a normal blog, including templating, smart per-domain caching, blocking by ip, username, email, or keyword, gravatar support, tons of configuration options, RSS and Atom support, threaded commenting, post locking, post expiring, browser identification, slug-based permalinking, and much more.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firsttube.com/read/Export-Blogsome-Export-Slashdot-Journal/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

