<?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>23rd World &#187; Tutorials</title>
	<atom:link href="http://23rdworld.com/category/tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://23rdworld.com</link>
	<description>Home of Seattle-based web site designer and blog consultant, Mahalie Pech.</description>
	<lastBuildDate>Fri, 07 Oct 2011 18:43:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Tips on Install of WordPress on Mac OSX</title>
		<link>http://23rdworld.com/2011/07/29/tips-on-install-of-wordpress-on-mac-osx/</link>
		<comments>http://23rdworld.com/2011/07/29/tips-on-install-of-wordpress-on-mac-osx/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 00:51:50 +0000</pubDate>
		<dc:creator>mahalie</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://23rdworld.com/?p=272</guid>
		<description><![CDATA[Prerequisites / WordPress Dependencies Local Apache web server with PHP &#038; Mysql. If you don&#8217;t already have your local dev environment set up, consider installing MAMP or MAMP Pro. MAMP is a one-click install which will provide you with a clean, isolated stack for local development that has Mysql and PHP pre-configured. Another benefit of [...]]]></description>
			<content:encoded><![CDATA[<h2>Prerequisites / WordPress Dependencies</h2>
<p>Local Apache web server with PHP &#038; Mysql.</p>
<p>If you don&#8217;t already have your local dev environment set up, consider installing <a href="http://www.mamp.info">MAMP or MAMP Pro</a>. MAMP is a one-click install which will provide you with a clean, isolated stack for local development that has Mysql and PHP pre-configured. Another benefit of MAMP is that it is very popular so there are countless tutorials and examples to follow.</p>
<p>If for some reason you don&#8217;t want to use MAMP or you&#8217;ve already configured your local enviro somewhat but you still need PHP and/or MySQL, check out this article: <a href="http://www.thermalexposure.com/2010/09/02/install-and-configure-wordpress-on-mac-os-x-snow-leopard-step-by-step/#comment-59">Install and Configure WordPress on Mac OS X Snow Leopard Step-By-Step</a> by awilliams of Thermal Exposure. It takes you from zero to WordPress using Leopard&#8217;s built-in Apache server, although I do recommend you supplement these instructions with these tips and my other article <a href="http://23rdworld.com/2011/07/29/install-mysql-for-local-dev-on-mac-osx-10-6">Install Mysql for Local Dev on Mac OSX 10.6</a></p>
<h2>Download WordPress</h2>
<p>Download and extract <a href="http://wordpress.org/">the latest WordPress</a> package.</p>
<p>Move it somewhere good like in your /Sites/ folder (most usual place but depends on your config, it can go anywhere you desire so long as your local web server is configured to look there).</p>
<p>I moved mine to <code>/users/me/Sites/wordpress</code> and renamed &#8216;wordpress&#8217; to &#8216;wptest.loc&#8217; resulting in: <code>/users/me/Sites/wptest.loc</code>. You can rename it whatever you want &#8211; probably the name of your project or client&#8217;s site is a good idea.</p>
<p>WordPress needs permission to modify files during installation and runs as user &#8220;_www&#8221; so make sure it can do this.<br />
<code>
<pre>cd /Users/me/Sites/
sudo chown -R _www wptest.loc
sudo chmod -R g+w wptest.loc</pre>
<p></code></p>
<h2>Create a Database</h2>
<p>Now we need a database, a database user and a password. Technically you can use any user or add WordPress tables to an existing database but I like to keep things separate so it&#8217;s easy to port elsewhere or start over without worrying about wrecking other things. I&#8217;m going to create a database called wptest, database user named wptest_user. You can do this using a GUI (phpMyAdmin, etc.) but I guarantee you cannot do that faster than I can type this ;)</p>
<p><code>
<pre>
bash > mysql -u root -p
mysql > create database wptest;
mysql > GRANT ALL ON wptest.* TO wptest_user@localhost IDENTIFIED BY "secretpassword";
mysql > exit</pre>
<p></code></p>
<h2>Configure Site Address</h2>
<p>Remember how I renamed the <code>wordpress</code> folder to <code>wptest.loc</code>? This is because I plan on accessing it in the browser via http://wptest.loc instead of http://127.0.0.1/ or http://localhost.</p>
<p>To do this I use Virtual Hosts in my environment and point the virtual domains to my local IP address in my hosts file. It&#8217;s confusing at first but once you do it a time or two it will be second nature. It&#8217;s important if you&#8217;d like to work on multiple sites on your local environment concurrently and don&#8217;t want to rely on weird subdirectories or other work-arounds that wouldn&#8217;t easily port to a live web server.</p>
<p><a href="http://brassblogs.com/tutorials/setting-up-virtual-hosts-on-mamp">Setting Up Virtual Hosts on MAMP</a> explains how to set this system up. I provide only abbreviated steps below (MAMP not assumed).</p>
<h3>Setting up Virtual Hosts (in short)</h3>
<ul>
<li>In your httpd.conf file there should lines like this:<br />
<code>
<pre># Virtual Hosts
Include /path/to/your/httpd-vhosts.conf</pre>
<p></code></li>
<li>In your httpd-vhosts.conf file there should be a line like this:<br />
<code>
<pre>NameVirtualHost *:80
Include /path/to/your/httpd-vhosts.conf</pre>
<p></code></li>
</ul>
<h3>Create A Virtual Host</h3>
<p>Now, whenever you want to create a new virtual (local only) site:</p>
<ul>
<li>In your httpd-vhosts.conf file add an entry like this:<br />
<code>
<pre>&lt;VirtualHost *>
    ServerName wptest.loc
    DocumentRoot "/Users/me/Sites/wptest.loc"
  &lt;Directory "/Users/me/Sites/wptest.loc">
    Order allow,deny
    Allow from all
    DirectoryIndex index.php index.html
  &lt;/Directory>
&lt;/VirtualHost></pre>
<p></code></li>
<li>In your hosts file (mine is /etc/hosts) add another entry for your local IP:<br />
<code>
<pre>127.0.0.1    wptest.loc</pre>
<p></code></li>
</ul>
<h2>Install WordPress</h2>
<p>Point your browser to http://wptest.loc</p>
<p>If no config file is found you can edit it yourself, <code>wp-config-sample.php</code> as <code>wp-config.php</code> and adding the correct information for the database you created. Try using <code>172.0.0.1</code> as the Dataase Host if <code>localhost</code> doesn&#8217;t work.</p>
]]></content:encoded>
			<wfw:commentRss>http://23rdworld.com/2011/07/29/tips-on-install-of-wordpress-on-mac-osx/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Install Mysql for Local Dev on Mac OSX 10.6</title>
		<link>http://23rdworld.com/2011/07/29/install-mysql-for-local-dev-on-mac-osx-10-6/</link>
		<comments>http://23rdworld.com/2011/07/29/install-mysql-for-local-dev-on-mac-osx-10-6/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 23:02:15 +0000</pubDate>
		<dc:creator>mahalie</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://23rdworld.com/?p=274</guid>
		<description><![CDATA[Do not be intimidated, it&#8217;s not that hard. If you don&#8217;t mind reading a little documentation, the hardest thing about installing Mysql (IMO) is figuring out what package to install. If you&#8217;ve previously tried and failed (and done who knows what to your local config) or if you don&#8217;t have a particular reason not to, [...]]]></description>
			<content:encoded><![CDATA[<h2>Do not be intimidated, it&#8217;s not that hard.</h2>
<p>If you don&#8217;t mind reading a little documentation, the hardest thing about installing Mysql (IMO) is figuring out what package to install.</p>
<p class="warning">If you&#8217;ve previously tried and failed (and done who knows what to your local config) or if you don&#8217;t have a particular reason not to, why don&#8217;t you just <a href="http://www.mamp.info">get MAMP and skip all this</a>?</p>
<p class="warning"><strong>USE THIS INFORMATION AT YOUR OWN RISK.</strong> Any information found on this website is offered only as informational and includes no warranty, guarantees or support. The author claims no authority on any subject whatsoever. </p>
<ol>
<li>Go to <a href="http://dev.mysql.com/downloads/mysql/">http://dev.mysql.com/downloads/mysql/</a>
<ul>
<li>This will offer latest version (yes, you want the MySQL Community Server, btw) &#8211; if you have a good reason, you can access a previous version from here as well.</li>
</ul>
</li>
<li><strong>Choose the DMG Archive</strong> for your architecture (32-bit or 64-bit). You&#8217;ll have to log in or (more likely if you&#8217;re reading this article) register with MySQL. It&#8217;s annoying but fast and I&#8217;ve never received spam from them.</li>
<li>After jumping through sign in and mirror download hoops you&#8217;ll have a DMG file, something like <code>mysql-5.x.x-osx10.6-x86.DMG</code> which will contain an similarly named .pkg file. That&#8217;s all you <em>need</em>. But the most important file is the ReadMe.txt &#8211; which is actually useful and contains important steps you need to take. <strong>Open the ReadMe.txt</strong>.</li>
<li><strong>Read the ReadMe.txt file.</strong></li>
</ol>
<p>Ok, before you get mad at me &#8211; a lot of folks don&#8217;t provide useful ReadMe files, which is why I think it&#8217;s worth calling out in this case. Also, I saw so many tutorials on this, and worse, problems in forums where it was clear they didn&#8217;t follow the steps provided. Also, there are docs online that are mostly a repeat of this file &#8211; but it&#8217;s easy to accidentally read instructions for the wrong product version. So, as we OGs say, RTFM.</p>
<p>Following are notes from my specific install experience. It may be useful for you but you&#8217;ll need to verify your own system paths and configuration. Happy databasing!</p>
<ul>
<li>Restarted apache a whole bunch, can&#8217;t remember when or exactly when you need to but if something doesn&#8217;t work, that might help:<br />
<code>
<pre>sudo apachectl -k restart</pre>
<p></code></li>
<li>I installed MySQLStartupItem.pkg &#8211; while regularly using it this makes sense, and it&#8217;s easy to stop auto startup when you&#8217;re done working on a project using mysql. Also the commands to start Mysql are much shorter this way and I&#8217;m lazy.<br />
<code>
<pre>
$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
(ENTER YOUR PASSWORD, IF NECESSARY)</pre>
<p></code></li>
<li>Update my PATH environment variable:<br />
<code>
<pre>
//make a back up in case you muck something up
$ sudo cp /etc/paths /etc/paths_BAK
// edit your paths file - see vi reference or using pico, vim, emacs whatever
$ sudo vi /etc/paths
// insert /usr/local/mysql/bin and then save/quit
// test result
$ echo $PATH
// do you see /usr/local/mysql/bin in there somewheres? good!
$ mysql
// is bash prompt replaced with mysql> ? yay!
</pre>
<p></code>
</li>
<li>Create a password for root:<br />
<code>
<pre>$ mysqladmin -u root password aw3^s0mePAs5</pre>
<p></code></li>
</ul>
<p>More good notes (for 5.5, be sure to select correct manual option):</p>
<ul>
<li><a href="http://dev.mysql.com/doc/refman/5.5/en/macosx-installation-notes.html">http://dev.mysql.com/doc/refman/5.5/en/macosx-installation-notes.html</a></li>
<li><a href="http://dev.mysql.com/doc/refman/5.5/en/macosx-installation-startupitem.html">http://dev.mysql.com/doc/refman/5.5/en/macosx-installation-startupitem.html</a></li>
</ul>
<h2>What Next?</h2>
<ul>
<li>Login, create a db, <a href="http://en.wikibooks.org/wiki/MySQL/CheatSheet">do stuff</a>, <a href="http://dev.mysql.com/tech-resources/articles/mysql_intro.html">lern stuff</a>&#8230;<br />
<code>
<pre>$ mysql --help<br />
$ mysql -u root -p<br />
mysql> SHOW DATABASES;<br />
mysql> \h<br />
</code></li>
<li>Install a GUI - I like 'em, it's nice for visualization, although I think you definitely learn more &#038; more better if you stick with CLI or at least the query window.
<ul>
<li><strong><a href="http://www.sequelpro.com/">Sequel Pro</a></strong> - recently turned onto this. LOVE it. <a href="http://www.macgasm.net/2011/01/17/sequel-pro-review/">Good review here</a>.</li>
<li><strong><a href="http://wb.mysql.com/">MySQL Workbench</a></strong> - the official one. Cause you're a company wo/man!</li>
<li><strong><a href="http://www.phpmyadmin.net/home_page/index.php">PHP MyAdmin</a></strong> - cause you an OG! And/or you follow or make a lot of tutorials (most apache web hosts provide this).</li>
<li><strong><a href="http://www.araelium.com/querious/">Querious</a></strong> - cause it's worth a few bucks for a nice user experience.</li>
<li><strong><a href="http://www.navicat.com/">Navicat</a></strong> - cause money is no object! (If that's the case, please get me a copy! Love but cannot justify $$ at this time.)</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://23rdworld.com/2011/07/29/install-mysql-for-local-dev-on-mac-osx-10-6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>1-Click Install of Open Atrium on Dreamhost</title>
		<link>http://23rdworld.com/2011/01/07/1-click-install-of-open-atrium-on-dreamhost/</link>
		<comments>http://23rdworld.com/2011/01/07/1-click-install-of-open-atrium-on-dreamhost/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 20:34:42 +0000</pubDate>
		<dc:creator>mahalie</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://23rdworld.com/?p=250</guid>
		<description><![CDATA[Summary: If it was just one click I probably wouldn&#8217;t be writing about it ;) This is really for the ADD peeps and newbs out there, there&#8217;s nothing too challenging about this install. Here&#8217;s a quick guide to starting an Open Atrium (Drupal-based &#8220;intranet in a box&#8221;) site if you happen to be a lucky [...]]]></description>
			<content:encoded><![CDATA[<p class="warning">Summary: If it was just one click I probably wouldn&#8217;t be writing about it ;) This is really for the ADD peeps and newbs out there, there&#8217;s nothing too challenging about this install.</p>
<p>Here&#8217;s a quick guide to starting an <a href="http://openatrium.com/">Open Atrium</a> (Drupal-based &#8220;intranet in a box&#8221;) site if you happen to be a lucky <a href="http://www.dreamhost.com/r.cgi?14030">Dreamhost</a> customer. Dreamhost just added this feature today and it is pretty slick, but there&#8217;s still a couple bits of manual configuration.</p>
<p>Here&#8217;s what you&#8217;ll get:<br />
<img src="http://23rdworld.com/wp-content/uploads/2011/01/openatrium-dash.jpg" alt="screenshot of the dashboard of a fresh Open Atrium installation" title="openatrium-dash" width="500" height="321" class="aligncenter size-full wp-image-252" /></p>
<h2>How to Install Open Atrium on Dreamhost</h2>
<ol>
<li><strong>DH Panel:</strong> Go to Domains > Manage > <em>Add New Domain / Subdomain</em>, and create a spot to put your Open Atrium install. For example: oa.23rdworld.com. You can make your subdomain anything you want.</li>
<li><strong>DH Panel:</strong> Goodies > One-Click Installs > <em>OpenAtrium</em>. Select your new subdomain and leave option set to &#8216;Automatically create database&#8217;.</li>
<li>You will receive an automated email from Dreamhost that will include an link to your new site and information about your database that you will need later. Save this info!</li>
<li><strong>Set file permissions.</strong> Access your server files (FTP or shell, etc) to your new site. Just as the actually quite helpful error message says:
<p><code># Copy the ./sites/default/default.settings.php file to ./sites/default/settings.php.<br />
# Change file permissions so that it is writable by the web server. If you are unsure how to grant file permissions, please consult the on-line handbook</code></p>
<p>For you newbs, an easy way to do this is to use an FTP client (like <a href="http://filezilla-project.org/download.php">Filezilla</a>) to access your new site.</p>
<ul>
<li>Download /sites/default/default.settings.php</li>
<li>Rename default.settings.php settings.php </li>
<li>Upload settings.php to /sites/default/</li>
<li>Right-click settings.php and select file permissions (in Filezilla, will be similar in other FTP clients) and set it to 744 (server/owner can read-write)</li>
</ul>
</li>
<li>Go to your new site, for example: oa.23rdworld.com, this is where the prompts begin. Follow them.</li>
<li><a href="http://23rdworld.com/wp-content/uploads/2011/01/intall-error.jpg"><img src="http://23rdworld.com/wp-content/uploads/2011/01/intall-error-150x150.jpg" alt="Open Atrium installation settings.php file permission error" title="install-error" width="150" height="150" class="alignright size-thumbnail wp-image-253" /></a>You will get an error message (at right) if you skipped the &#8216;Set file permissions&#8217; step (above). That&#8217;s ok, you can just go back and do that now and then click &#8216;Try again&#8217;.
</li>
<li>Database settings: Fill in the database settings based on the email mentioned earlier. Make sure to <strong>open the &#8216;Advanced options&#8217; menu group and enter the hostname</strong> (also provided in the email).</li>
<li>The rest of the configuration settings should be pretty obvious.</li>
</ol>
<p>Hope this was useful for someone, I&#8217;m curious to see/hear what folks are using their Open Atrium installs for. Obviously not an intranet&#8230;unless you made it private&#8230;there&#8217;s loads of ways to do that (if there&#8217;s interest I&#8217;ll expand). I&#8217;m using mine to organize house projects with my roommate and husband. <strong>What are you using Open Atrium for?</strong></p>
<p>P.s. If anyone is looking to get a new Dreamhost account I have a $100 off invitation if you&#8217;re ready to commit to two years and there&#8217;s plenty of referral codes out there too, so find one before you sign up!</p>
]]></content:encoded>
			<wfw:commentRss>http://23rdworld.com/2011/01/07/1-click-install-of-open-atrium-on-dreamhost/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Adding TinyMCE to EE Wiki</title>
		<link>http://23rdworld.com/2010/03/01/adding-tinymce-to-ee-wiki/</link>
		<comments>http://23rdworld.com/2010/03/01/adding-tinymce-to-ee-wiki/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 23:31:04 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[ee]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[tinymce]]></category>
		<category><![CDATA[wiki]]></category>
		<category><![CDATA[wysiwyg]]></category>

		<guid isPermaLink="false">http://23rdworld.com/?p=230</guid>
		<description><![CDATA[Having found several requests in the forums and no tutorials online or in documentation, I&#8217;ve documented the steps I took to add the TinyMCE editor to my ExpressionEngine wiki. I am using the EEDocs wiki theme to provide documentation for my users. Here are very quick and dirty instructions to add TinyMCE to your EE [...]]]></description>
			<content:encoded><![CDATA[<p>Having found several requests in the forums and no tutorials online or in documentation, I&#8217;ve documented the steps I took to add the TinyMCE editor to my ExpressionEngine wiki. </p>
<p>I am using the EEDocs wiki theme to provide documentation for my users. Here are very quick and dirty instructions to add TinyMCE to your EE Wiki which basically follows the <a href="http://wiki.moxiecode.com/index.php/TinyMCE:Installation">default instructions</a> provided by the <a href="http://wiki.moxiecode.com/index.php/TinyMCE:Index">TinyMCE Wiki</a>.</p>
<ul>
<li>
<p><strong>Download <a href="http://sourceforge.net/projects/tinymce/">TinyMCE</a>, extract it.</strong></p>
</li>
<li>
<p><strong>Upload the TinyMCE to your webserver, note the path.</strong></p>
</li>
<li>
<p><strong>Find the default PHP file for the EE wiki theme you are using</strong>. Mine was in my siteroot/themes/wiki_themes/eedocs/ folder and is called eedocs.php. The default them would be in the themes folder under wiki_themes/default/default.php. Open this in the editor of your choice. You may want to create a backup copy in case you need to revert later.</p>
</li>
<li>
<p><strong>Add the following code to the &lt;head&gt; area</strong>:</p>
<p><code>&lt;script type="text/javascript" src="http://yoursite.com/yourpathto/tinymce/jscripts/tiny_mce/tiny_mce.js"&gt;&lt;/script&gt;</code>
<p>Note you may want to test that path in your browser and make sure it is linking to the tiny_mce.js path as intended.</p>
</li>
<li>
<p><strong>Add the following inline script to the &lt;head&gt; area </strong>:</p>
<p> <code>&lt;script type="text/javascript"&gt;<br />
tinyMCE.init({<br />
	mode : "textareas"<br />
});<br />
&lt;/script&gt;</code></li>
</ul>
<p>This will turn all of your textareas into TinyMCE editor fields. There are many other ways to configure this, you could specify exactly which textareas to use TinyMCE, for example. For all your TinyMCE customization options, see <a href="http://wiki.moxiecode.com/index.php/TinyMCE:Installation">the TinyMCE wiki</a> and for help knowing where to put what, check out the <a href="http://expressionengine.com/docs/index.html">ExpressionEngine User Guide</a> section on the <a href="http://expressionengine.com/docs/modules/wiki/wiki_templates.html">Wiki Theme Template</a>. </p>
<p>I can&#8217;t say I&#8217;ve done extensive testing yet, but the default TinyMCE install has not (so far) interfered with wiki markup at all, which is to say that [[Category:Foo::Bar]] and regular [[wiki links]] seem to be working happily.</p>
<p>Screenshot:<br />
<a href="http://www.flickr.com/photos/mahalie/4399117261/sizes/o/" title="ExpressionEngine Wiki with TinyMCE by mahalie, on Flickr"><img src="http://farm5.static.flickr.com/4028/4399117261_45cd019b0e.jpg" width="500" height="494" alt="ExpressionEngine Wiki with TinyMCE" /></a></p>
<p class="warning"><strong>Update:</strong> Installed the <a href="http://markitup.jaysalvat.com/home/">MarkItUp</a></strong> editor in a similar fashion, I like it a lot more than TinyMCE out of the box. May be looking at <a href="http://slateinfo.blogs.wvu.edu/plugins/textile_editor_helper">Textile Editor Helper (TEH)</a> and <a href="http://ckeditor.com/">CKEditor</a> as well, so check back for a WYSIWYG / markup editor showdown. In the meantime, consider what you need a WYSIWYG for and what markup under the hood you&#8217;re willing to live with in the long-term before settling on a solution for your site &#8211; here&#8217;s a good article that sums up that issue: <a href="http://redcloth.org/articles/wysi-dangerous-why-wysiwyg-editors-are-bad-for-your-website/">WYSI-dangerous: Why WYSIWYG  editors are bad for your website</a> on redcloth.org.</p>
]]></content:encoded>
			<wfw:commentRss>http://23rdworld.com/2010/03/01/adding-tinymce-to-ee-wiki/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to Fix Your ExpressionEngine RSS Template</title>
		<link>http://23rdworld.com/2009/12/23/how-to-fix-your-expressionengine-rss-template/</link>
		<comments>http://23rdworld.com/2009/12/23/how-to-fix-your-expressionengine-rss-template/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 00:46:05 +0000</pubDate>
		<dc:creator>mahalie</dc:creator>
				<category><![CDATA[Accessibility (SEO)]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Standards]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[instructions]]></category>
		<category><![CDATA[lamp development]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://23rdworld.com/?p=212</guid>
		<description><![CDATA[I began investigating the fascinating minutia of RSS when I couldn't find a reasonable answer in the EE forums to why Google Reader was re-posting every updated post on my site even thought the entry dates hadn't changed. As I went through the prevalent templates floating around the EE community line-by-line I noticed several things [...]]]></description>
			<content:encoded><![CDATA[<p>I began investigating the fascinating minutia of RSS when I couldn't find a reasonable answer in the EE forums to why <a class="zem_slink freebase/en/google_reader" href="http://www.google.com/reader" title="Google Reader" rel="homepage">Google Reader</a> was re-posting every updated post on my site even thought the entry dates hadn't changed. As I went through the prevalent templates floating around the EE community line-by-line I noticed several things that could be improved upon. The only critical fix, in my opinion, is removal of seconds from the dates in the &lt;item /> section. If you want your feed to validate you'll want to add the atom namespace. The rest are optional improvements.</p>

<p>If you want to skip the wheres and whys, I've posted the the <a href="http://snipplr.com/view/25353/ee-default-rss-template-fixed/">updated (fixed)</a> and <a href="http://snipplr.com/view/25354/ee-rss-template-improved/">improved RSS</a> templates on Snipplr.com and in their entirety at the end of this article.</p>

<h2>Existing RSS templates for ExpressionEngine</h2>
<ul>
	<li><a href="http://expressionengine.com/templates/source/category/feeds/">ExpressionEngine &gt; Downloads &gt; Template Library &gt; Feeds</a> - this template will be the basis of my recommendations, most other templates I've found seem to be derivative of this one.</li>
<li><a href="http://www.ablognotlimited.com/articles/customizing-expressionengine-rss-template/">Customizing ExpressionEngine RSS 2.0 Template</a> - an oft-referred to article at 'A Blog Not Limited' which provides some good updates and tweaks but that still keeps a lot of the original template intact.</li>
</ul>

<h2>Resources</h2>
<ul>
	<li><a href="http://www.rssboard.org/rss-specification">RSS 2.0 Specification</a></li>
	<li><a href="http://feedvalidator.org/">Feed Validator</a></li>
	<li>ExpressionEngine User Guide
    <ul>
     <li><a href="http://expressionengine.com/docs/modules/rss/index.html">RSS Module Tags</a></li> 
     <li><a href="http://expressionengine.com/docs/templates/date_variable_formatting.html">Date Variable Formatting</a></li>   
    </ul>
  </li>
  <li><a href="http://expressionengine.com/downloads/details/xml_encode/">EE XML Encode Plugin Information</a></li>
</ul>

<h2>Methodology</h2>
<p>I'm not going for a PHD in online syndication, I just wanted my <a href="http://en.wikipedia.org/wiki/RSS" title="RSS" rel="wikipedia">RSS feeds</a> to be error-free, work as expected in major aggregators and to use  best-practices which could be determined within a somewhat low threshold of research pain. In addition to referring first to the RSS 2.0 specifications, I used the RSS feeds of some really large websites to serve as examples, making the assumption (I know) that these sites have probably done thorough research on this topic. Often my choices were the result of seeing if these "big players" were all doing the same thing. All the feeds are major sites with the exception of the Flickr blog. The Flickr blog is using <a href="http://wordpress.com" title="WordPress.com" rel="homepage">WordPress.com</a>. I figured with their huge user-base not only would the feeds have been thoroughly vetted, most aggregators will be able to read them due to the sheer volume of WordPress-powered sites out there. Also I chose a WordPress.com feed instead of a self-hosted installation of WP to make sure it was the well-tested standard feed. The feeds I used are:</p>
<ul>
  <li><a href="http://feeds.nytimes.com/nyt/rss/HomePage">The New York Times Home Page Feed</a></li>
  <li><a href="http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml">BBC News | News Front Page | World Edition Feed</a></li>
  <li><a href="http://rss.cnn.com/rss/cnn_topstories.rss">CNN.com Top Stories Feed</a></li>
  <li><a href="http://pheedo.msnbc.msn.com/id/3034600/device/rss/">MSNBC.com Women's Helath Feed</a></li>
  <li><a href="http://blog.flickr.net/en/feed/">Flickr Blog Feed</a></li>
</ul>

<h2>RSS Feed Breakdown</h2>
<h3>Feed Format: RSS vs. Atom</h3>
<p>As of mid-2005, the two most likely candidates are <a href="http://en.wikipedia.org/wiki/RSS">RSS 2.0</a> and <a href="http://en.wikipedia.org/wiki/Atom_%28standard%29">Atom 1.0</a>. Google reader supports either fully and they suggest choosing one or the other (not both) because most RSS readers support all major formats and offering both can confuse users. The Atom syndication format, whose creation was in part motivated by a desire to get a clean start free of the issues surrounding RSS, has been adopted as <a href="http://en.wikipedia.org/wiki/IETF">IETF</a> Proposed Standard <a href="http://tools.ietf.org/html/rfc4287">RFC 4287</a> and is used by Google. However, RSS 2.0 was the first to support enclosures and has captured the podcasting audience and is the recommended format in the <a href="http://www.apple.com/itunes/podcasts/specs.html">iTunes podcasts specs</a>.</p>
<p>I generally do as Google does when it comes to web optimization, and I am a big fan of standards. In some regards I would call Atom "the higher path". That said, I am also a big fan of simplicity and ease-of-use so I'm going with RSS 2.0 because:</p>
<ul>
  <li>I already  hand-built an RSS 2.0 feed for podcasting (well, for iTunes) so would rather learn one standard / keep all feeds similarly formatted.</li>
  <li>One less term that could potentially confuse end-users and "web lite" folk who might inherit my work later on.</li>
  <li>A lot of really big sites that have probably carefully considered this topic went with RSS 2.0, including NYTimes.com, AListApart.com, Ebay.com, news.BBC.co.uk, and CNN.com.</li>
</ul>
<h3>RSS XML Namespaces</h3>
Here's where my first change kicks in. If you aren't actually USING a namespace in your RSS feed there's no need to include it - it's just cruft.
<h3>Before</h3>
<code>&lt;rss version="2.0"<br />
    xmlns:dc="http://purl.org/dc/elements/1.1/"<br />
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"<br />
    xmlns:admin="http://webns.net/mvcb/"<br />
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"<br />
    xmlns:content="http://purl.org/rss/1.0/modules/content/"&gt;</code>
<h3>After</h3>
<code>&lt;rss version="2.0"<br />
    xmlns:dc="http://purl.org/dc/elements/1.1/"&gt;</code>
<h3>Even Better</h3>
<code>&lt;rss version="2.0"<br />
    xmlns:dc="http://purl.org/dc/elements/1.1/"<br />
    xmlns:atom="http://www.w3.org/2005/Atom"&gt;</code>    
<p>The namespaces <a href="http://web.resource.org/rss/1.0/modules/syndication/">sy</a> and <a href="http://web.resource.org/rss/1.0/modules/content/">content</a> aren't used at all and can just be removed. Optional: I chose to remove <code>xmlns:admin="http://webns.net/mvcb/"</code> and the only tag that used it, <code>&lt;admin:generatorAgent rdf:resource="http://expressionengine.com/" /&gt;</code> - removing the <a href="http://web.resource.org/rss/1.0/modules/admin/">admin</a> namespace also eliminated <a href="http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/">rdf</a>, which admin namespace depends on.</p>
<p>I'm not saying any of the removed namespaces are bad, just unnecessary. For example, <a href="http://web.resource.org/rss/1.0/modules/admin/">admin</a> is a very common namespace, but if you leave it in you should update the URI to include the EE version number (dynamically) and add the <code>&lt;admin:errorReportsTo rdf:resource="URI"/&gt;</code> pointing to a valid email address for errors. It may be beneficial to aggregators in reporting statistical reporting of web frameworks and content management systems delivering aggregated RSS feeds.</p>
<p>I rather admire the efficency and simplicity of the namespace declarations used by NYTimes.com, CNN.com and others - so again, this is personal choice.</p>
<p>The third option (even better) adds the <a href="http://www.w3.org/2005/Atom">atom</a> namespace. The default EE RSS feed will not <a href="http://feedvalidator.org">validate</a> because it lacks the required atom:link tag containing the URI of the feed itself. There is some debate on whether this is actually necessary (some say the validator is wrong, not the lack of the atom tag)- read the article <a href="http://workbench.cadenhead.org/news/3284/adding-atomlink-your-rss-feed">Adding Atom:Link to Your RSS Feed</a> for background on this.</p>
<p>Depending on your site's content, your SEO practices and target audience, it is likely that you may need additional namespaces. A media-rich site, for example, would benefit from the <a href="http://video.search.yahoo.com/mrss/mrss">media</a> namespace. The media namespace is used to syndicate video, images and other media and can open up your feed to consumption by media-rich aggregators and services like <a href="http://developer.cooliris.com/?p=full">Cooliris</a> and <a href="http://video.search.yahoo.com/">Yahoo Video Search</a>.</p>
<h3>Channel Area</h3>
<p>Most of the default template makes perfect sense - just make sure to take a look at your feed output to make sure all the EE fields used have valid values. Also, make sure you want to the {weblog_foo} tags - if you are providing a site feed that combines multiple sections you will probably want to hand-edit many of the tags in the channel area.</p>
<h3>Dates</h3>
<p class="warning"><strong>Important tip: make sure your feed is correctly reporting the timestamp of your entry date.</strong> If the seconds are changing on an item whenever you make an update this will cause many aggregators, including Google Reader, to repost the entry to your RSS feed. Either take the seconds off the time or replace '%s' with an arbitrary static value like '15'.</p>
<p>A search for 'RSS Updates' in the <a href="http://expressionengine.com/forums/">EE Forums</a> will reveal that many people have had this problem. I tested all the date fields in my feeds (see <a href="http://expressionengine.com/forums/viewthread/138996/#686193">this thread</a> for details) and found that although the entry date day, hour and minute doesn't change on update (as expected), the seconds do! This weird behavior has something to do with how the dates are stored in the database and/or how the date is interpreted by EEs date tags. What it means is that if you go back and edit a post from three years ago, some aggregators will repost the item to your RSS feed even though you did not change the entry date. This can be especially troubling if you like to go back and tweak a post a lot right after publishing - you may go to your feed reader to see it reposted several times in a row.</p>
<!--
<p>So, FIX the second &lt;dc:date&gt; line, change the {gmt_entry_date} format to <code>"%Y-%m-%dT%H:%i%Q"</code>. As noted above, you could also put in a static number for seconds.</p>
-->
<h4>pubDate vs. dc:date</h4>
<p>&lt;pubDate&gt; is part of the <a href="http://www.rssboard.org/rss-specification">RSS 2.0 spec</a>. A lot of feeds out there still use &lt;dc:date&gt; and this either because they kept it from their RSS 1.0 template (for which dc:date was the only option) or they really like the very popular <a href="http://dublincore.org/documents/dces/">Dublin Core namespace</a> or they prefer it because of the <a href="http://www.w3.org/TR/NOTE-datetime">ISO 8601 date format</a> which is much more prevalent than the (really old, as in <a href="http://www.faqs.org/rfcs/rfc822.html">ARPANET old</a>!) <a href="http://feedvalidator.org/docs/error/InvalidRFC2822Date.html">RFC 822 date format</a> that &lt;pubDate&gt; uses. On one hand it makes sense to stay with the spec and pull in namespace elements only as required. On the other hand, it makes sense to provide output in the most reusable way (updated date format). Feed readers parse either just fine, so this is judgment call on your part. Here's an agrument for each:
</p><ul>
<li><a href="http://bradchoate.com/weblog/2003/06/21/rss">bradchoate.com/weblog/2003/06/21/rss</a></li>
<li><a href="http://diveintomark.org/archives/2003/06/21/history_of_rss_date_formats">diveintomark.org/archives/2003/06/21/history_of_rss_date_formats</a></li>
</ul>
<p>Based on my own survey of the feeds referenced above, I opted to switch to &lt;pubDate&gt;, replacing &lt;dc:date /&gt; in the channel with:
</p><p><code>&lt;pubDate&gt;{gmt_date format="%D, %d %M %Y %H:%i:%s %T"}&lt;/pubDate&gt;</code></p>
And replacing &lt;dc:date /&gt; in the item declaration(s) with:
<p><code>&lt;pubDate&gt;{gmt_entry_date format=&qout;%D, %d %M %Y %H:%i %T"}&lt;/pubDate&gt;</code></p>
<h3>Item &lt;title ... /&gt;</h3>
<p>The default tag is fine, but if your content people keep putting special characters in their titles (like mine do) then you might want to add the <code>protect_entities="yes"</code> attribute to the <code>{exp:xml_encode}</code> tag. For example the main EE site I work on uses &amp;#187; (») and &amp;amp; (&amp;) a lot in titles.</p>
<p>Even after protecting entities I was still having a heck of a time getting a trademark (™) symbol that is used on a site in many post titles and in a category to consistently display on both the webpage and in RSS feed aggregators - after some digging I realized the character entity that was being used (&amp;#x2122;) for it was not the <a href="http://sitening.com/extras/utf-8-character-html-encoding/">UTF-8</a> reference (&amp;#8482;) specified as the encoding for both the RSS and XHTML. So, make sure you (or your content editors) use the correct character encoding entities for special characters!</p>
<h3>Item &lt;guid ... /&gt;</h3>
<p>As formated in the <a href="http://expressionengine.com/templates/source/category/feeds/">official EE RSS template</a> the <code>&lt;guid&gt;</code> is not a permalink, and therefore should have  <code>isPermaLink="false"</code> attribute added to it. Of course you could use your actual permalink and then you could leave that off or change it to "true".</p>
<blockquote>"We recommend the use of the Atom and RSS 2.0 elements to unambiguously identify items. An item that is updated should keep its original ID, and a new item should never reuse an older item's ID. Changing IDs unnecessarily may result in duplicate items, and reusing IDs may cause some items to be hidden. <a href="http://www.taguri.org/">"Tag URIs"</a> make good IDs, since they don't change even when you need to reorganize your links." - <a href="http://www.google.com/help/reader/publishers.html#feeds">Google Reader Tips for Publishers &gt; Implementing Feeds</a></blockquote>  
<p>The above recommendatio explains the multi-posting of an entry on update issue I referred to earlier. Because of this, you will probably want to remove the '%s' from the formatting attribute as well. So, change the <code>gmt_entry_date</code> format string in the &lt;guid&gt; line to <code>"%H:%iZ"</code>.</p>
<p>Optionally, you could just use the actual URI of your article and change the <code>isPermalink</code> attribute to true. EE won't let you post two items with the same URL title within a weblog/channel, so you are pretty safe there (EE adds a number to the end of URL title if one already exists).</p>
<h3>Item &lt;description.../&gt;</h3>
<p>This line is technically fine, but most people will change this to allow HTML formatting of their entries: <code>&lt;description&gt;&lt;![CDATA[{summary}{body}]]&gt;&lt;/description&gt;</code>. This is what displays the bulk of your entry item and where most of your site-specific customization will happen, <a href="http://www.ablognotlimited.com/articles/customizing-expressionengine-rss-template/">Customizing ExpressionEngine RSS 2.0 Template</a> on 'A Blog Not Limited' is a great resource for this.</p>
<h3>Categories</h3>
The template uses &lt;dc:subject&gt;. Your feed will be more interoperable with other systems and make more sense programatically if each category is in its own tag. You can do this using the &lt;dc:subject&gt; format, or you can switch to using the &lt;category&gt; tag for each as provided for in the RSS 2.0 spec.
<h4>Original Template</h4>
<p>Code:</p> 
  <p><code>&lt;dc:subject&gt;{exp:xml_encode}{categories backspace="1"}{category_name}, {/categories}{/exp:xml_encode}&lt;/dc:subject&gt;</code></p>
<p>Result:</p>
  <p><code>&lt;dc:subject&gt;Architecture, Science, Workplace&lt;/dc:subject&gt;</code></p>
<h4>Separate using &lt;dc:subject&gt;</h4>
<p>Code:</p> 
  <p><code>{categories}&lt;dc:subject&gt;{exp:xml_encode}{category_name}{/exp:xml_encode}&lt;/dc:subject&gt;{/categories}</code></p>
<p>Result:</p>
  <p><code>&lt;dc:subject&gt;Architecture&lt;/dc:subject&gt;<br />
  &lt;dc:subject&gt;Science&lt;/dc:subject&gt;<br />
  &lt;dc:subject&gt;Workplace&lt;/dc:subject&gt;</code></p>
<h4>Separate using &lt;category&gt;</h4>
<p>Code:</p> 
<p><code>{categories}&lt;category&gt;{exp:xml_encode}{category_name}{/exp:xml_encode}&lt;/category&gt;{/categories}</code></p>
<p>Result:</p>
<p><code>&lt;category&gt;Architecture&lt;/category&gt;<br />
&lt;category&gt;Science&lt;/category&gt;<br />
&lt;category&gt;Workplace&lt;/category&gt;</code></p>

<h2>Updated EE RSS 2.0 Template</h2>
<p>This includes what I consider minimal mandatory fixes to ensure error-free code and to prevent (re)posting problems.</p>
<blockquote class="code"><pre>
{assign_variable:master_weblog_name="blog"}
{assign_variable:master_weblog_status="open"}
{exp:rss:feed weblog="{master_weblog_name}" status="{master_weblog_status}"}

&lt;?xml version="1.0" encoding="{encoding}"?>
&lt;rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    &lt;channel>
    &lt;title>{exp:xml_encode}{weblog_name}{/exp:xml_encode}&lt;/title>
    &lt;link>{weblog_url}&lt;/link>
    &lt;description>{weblog_description}&lt;/description>
    &lt;dc:language>{weblog_language}&lt;/dc:language>
    &lt;dc:creator>{email}&lt;/dc:creator>
    &lt;dc:rights>Copyright {gmt_date format="%Y"}&lt;/dc:rights>
    &lt;dc:date>{gmt_date format="%Y-%m-%dT%H:%i:%s%Q"}&lt;/dc:date>
    &lt;admin:generatorAgent rdf:resource="http://expressionengine.com/" />
{exp:weblog:entries weblog="{master_weblog_name}" limit="10" rdf="off" dynamic_start="on" disable="member_data|trackbacks" status="{master_weblog_status}"}
    &lt;item>
      &lt;title>{exp:xml_encode}{title}{/exp:xml_encode}&lt;/title>
      &lt;link>{title_permalink=site/index}&lt;/link>
      &lt;guid isPermaLink="false">{title_permalink=site/index}#When:{gmt_entry_date format="%H:%iZ"}&lt;/guid>
      &lt;description>{exp:xml_encode}{summary}{body}{/exp:xml_encode}&lt;/description>
      &lt;dc:subject>{exp:xml_encode}{categories backspace="1"}{category_name}, {/categories}{/exp:xml_encode}&lt;/dc:subject>
      &lt;dc:date>{gmt_entry_date format="%Y-%m-%dT%H:%i%Q"}&lt;/dc:date>
    &lt;/item>
{/exp:weblog:entries}
    &lt;/channel>
&lt;/rss>
{/exp:rss:feed}
</pre>
</blockquote>

<h2>Improved EE RSS 2.0 Template</h2>
<p>This includes optional changes that I added as a result of various articles, the RSS 2.0 spec and by examining the feeds of major professional news sites.</p>
<blockquote class="code"><pre>
{assign_variable:master_weblog_name="BLOG"}
{assign_variable:master_weblog_status="OPEN"}
{assign_variable:master_rss_uri="http://PATH/TO/THIS/RSS/FEED"}

{exp:rss:feed weblog="{master_weblog_name}" status="{master_weblog_status}"}
&lt;?xml version="1.0" encoding="{encoding}"?>
&lt;rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom">
    &lt;channel>
    &lt;title>{exp:xml_encode}{weblog_name}{/exp:xml_encode}&lt;/title>
    &lt;link>{weblog_url}&lt;/link>
    &lt;description>{weblog_description}&lt;/description>
    &lt;dc:language>{weblog_language}&lt;/dc:language>
    &lt;dc:creator>{email}&lt;/dc:creator>
    &lt;dc:rights>Copyright {gmt_date format="%Y"}&lt;/dc:rights>
    &lt;pubDate>{gmt_date format="%D, %d %M %Y %H:%i:%s %T"}&lt;/pubDate>
    &lt;atom:link href="{master_rss_uri}" rel="self" type="application/rss+xml" />   
{exp:weblog:entries weblog="{master_weblog_name}" limit="10" rdf="off" dynamic_start="on" disable="member_data|trackbacks" status="{master_weblog_status}"}
    &lt;item>
      &lt;title>{exp:xml_encode protect_entities="yes"}{title}{/exp:xml_encode}&lt;/title>
      &lt;link>{title_permalink=site/index}&lt;/link>
      &lt;guid isPermaLink="false">{title_permalink="site/index"}#id:{entry_id}#date:{gmt_entry_date format="%H:%i"}&lt;/guid>
      &lt;description>&lt;![CDATA[{summary}{body}]]&gt;&lt;/description>
      {categories}&lt;category>{exp:xml_encode protect_entities="yes"}{category_name}{/exp:xml_encode}&lt;/category>
      {/categories}
      &lt;pubDate>{gmt_entry_date format="%D, %d %M %Y %H:%i %T"}&lt;/pubDate>
    &lt;/item>
{/exp:weblog:entries}
    &lt;/channel>
&lt;/rss>
{/exp:rss:feed}						
</pre></blockquote>

<h2>Feedback</h2>
<p>Please let me know if you have any suggestions for improvements on the basic template. I have already submitted these suggestions (as have others) on the EE Forums and I hope this article will soon be out-dated. For further information on customizing your RSS feed including adding Google Analytics tracking and additional fields such as author name,  see <a href="http://www.ablognotlimited.com/articles/customizing-expressionengine-rss-template/">Customizing ExpressionEngine RSS 2.0 Template</a> at 'A Blog Not Limited' (if you use their updated template don't forget to remove the seconds from date fields in the item section).</p>]]></content:encoded>
			<wfw:commentRss>http://23rdworld.com/2009/12/23/how-to-fix-your-expressionengine-rss-template/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Installing Using Drupal book source on Dreamhost</title>
		<link>http://23rdworld.com/2009/03/26/installing-using-drupal-book-source-on-dreamhost/</link>
		<comments>http://23rdworld.com/2009/03/26/installing-using-drupal-book-source-on-dreamhost/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 03:58:00 +0000</pubDate>
		<dc:creator>mahalie</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[oreilly]]></category>
		<category><![CDATA[webhost]]></category>

		<guid isPermaLink="false">http://23rdworld.com/?p=164</guid>
		<description><![CDATA[USE THIS INFORMATION AT YOUR OWN RISK. Any information found on this website is offered only as informational and includes no warranty, guarantees or support. The author claims no authority on any subject whatsoever. I just started reading the recently published book Using Drupal, 1st Edition, published by trusty ol&#8217; O&#8217;Reilly and written by a [...]]]></description>
			<content:encoded><![CDATA[<p class="warning"><strong>USE THIS INFORMATION AT YOUR OWN RISK.</strong>  Any information found on this website is offered only as informational and includes no warranty, guarantees or support. The author claims no authority on any subject whatsoever.</p>
<p><div class="wp-caption alignright" style="width: 250px"><a href="http://usingdrupal.com/"><img alt="Using Drupal, 1st Edition by OReilly" src="http://usingdrupal.com/sites/default/files/using_drupal_sidebar.png" title="Using Drupal, 1st Edition" width="240" height="315" /></a><p class="wp-caption-text">Using Drupal, 1st Edition by O&#39;Reilly</p></div>I just started reading the recently published book <a href="http://usingdrupal.com/">Using Drupal</a>, 1st Edition, published by trusty ol&#8217; <a href="http://oreilly.com/catalog/9780596515805/">O&#8217;Reilly</a> and written by a bunch of <a href="http://www.lullabot.com/" title="Mahalie's favorite Drupal consultants and trainers">Lullabots</a>.</p>
<p>So far the book is great, but the instructions on setting up a dev environment aren&#8217;t exactly crystal clear for those completely new to Drupal. I thought I&#8217;d help out the next geek that bothers to <acronym title="Google That Shit">GTS</acronym> to find pitfalls before starting.</p>
<p>First review the preface section 2.7 &#8216;Downloading Drupal&#8217;. If you&#8217;ve never installed Drupal before, or any web application on a web server before, it&#8217;s a good idea to check out Lullabot Addison Berry&#8217;s very easy to follow video, <a href="http://www.lullabot.com/videocasts/installing-drupal-6">Installing Drupal 6</a>.</p>
<p>These instructions are specific to the context of a shared hosting account on Dreamhost, but may work for your environment as well. Be sure to review <a href="http://oreilly.com/catalog/9780596515805/errata/">the book&#8217;s errata</a> &#8211; the &#8216;confirmed errata&#8217; will let you know about any code mistakes or problems with source discovered since the book was published. For troubleshooting help related to the books exercises and installation issues, review the <a href="http://forums.oreilly.com/category/39/Using-Drupal/">Using Drupal book forum</a>.</p>
<p class="warning"><strong>THESE INSTRUCTIONS MAY CAUSE YOUR DATAZ TO BE LOST.</strong>  In addition to setting up things quickly, these steps include how to quickly delete all the stuff in your database, without bothersome &#8216;back up your data first&#8217; steps. The idea is you are just creating a sandbox and nuking your install is no big deal.</p>
<p>Enough blab, let&#8217;s do this:</p>
<style type="text/css">
<!--
ul.this li {font-weight:bold;margin-top:6px;margin-bottom:0;}
ul.this li ul {margin-top:2px;}
ul.this li ul li {font-weight:normal;margin-top:2px;}
-->
</style>
<ul class="this">
<li>Create a subdomain for your dev environment like drupal.yourdomain.com
<ul>
<li>Dreamhost panel &gt; Domains &gt; Mandage Domains &gt; Add New Domain / Sub-Domain</li>
</ul>
</li>
<li>Create a new database (on a new or existing subdomain)
<ul>
<li>Goodies &gt; Manage MySQL, scroll to the bottom where it says &#8216;Create a new MySQL database:&#8217;</li>
<li>Enter something in all the fields:database name must be unique system wide so get creative, create a new hostname like mysql.drupal.yourdomain.com, you can use your own username but I created a special username and password that I&#8217;ll also be using for the admin user in the Drupal install (note: dev enviro, not recc&#8217;d for production), you might want to put something to remind you what this is later in the comment field like &#8220;Sandbox for Using Drupal Book&#8221;.</li>
<li>Write down all that DB stuff so you can use it later.</li>
<li>Wait a while for new database host name and/or new subdomain to propagate.</li>
</ul>
</li>
<li>Download the <a href="http://www.usingdrupal.com/source_code">latest source</a> from the book site.
<ul>
<li>Extract the zip somewhere you can find it, like your desktop.</li>
</ul>
</li>
<li>Change the database connection string in using_drupal_source\drupal\sites\default\default.settings.php
<ul>
<li>Open default.settings.php with your favorite text editor</li>
<li>change connection string stored in $db_url (line 92 at <acronym class="Time of Writing">TOW</acronym>) from mysql://username:password@localhost/databasename to something like <code>mysql://name:psswd@mysql.drupal.yourdomain.com/dbname</code></li>
</ul>
</li>
<li>Copy default.settings.php in the same folder and call it settings.php
<ul>
<li>There should now be 2 files in the default folder</li>
</ul>
</li>
<li>Save a backup copy of your default folder somewhere
<ul>
<li>I just copied the default folder and renamed it &#8216;_default&#8217;, or save somewhere on your hard drive, thumb drive, whatever&#8230;the point is, settings.php and default.settings.php that will soon live on your web server are going to change and you&#8217;re going to want these files again someday.</li>
</ul>
</li>
<li>Upload the contents of using_drupal_source\drupal to the root of your new subdomain</li>
<li>chmod /sites/default to 777
<ul>
<li>On you web server (via your FTP client) navigate to /drupal/sites/default</li>
<li>If you&#8217;re using FileZilla, right click (ctrl+click for macs) the default folder and select file permissions, this will allow you to enter the numeric value 777 or just check read/write/execute for all roles</li>
</ul>
</li>
<li>Open http://drupal.yourdomain.com</li>
</ul>
<p><div class="wp-caption aligncenter" style="width: 510px"><a href="http://farm4.static.flickr.com/3430/3386803484_ab8ee6a755_o.jpg"><img alt="Installation profile options on successful install" src="http://farm4.static.flickr.com/3430/3386803484_52ce422bc7.jpg" title="Using Drupal" width="500" height="471" /></a><p class="wp-caption-text">Installation profile options on successful install</p></div></p>
<p>You&#8217;ll be prompted to select an &#8216;Installation Profile&#8217;. The book source code includes scripts to automatically install a site with assets and modules used in their examples for you. If you are just starting Chapter 2. where they send you off to the Appendix for installation instruction, chose the last option &#8211; the generic/basic Drupal install.</p>
<p>Here&#8217;s how to &#8220;start over&#8221; so you can use a different installation profile. These steps will cause you to lose any data you entered in Drupal &#8211; you will end up with a brand new install and a chance to chose a diferent installation profile:</p>
<ul class="this">
<li>Nuke all your database tables</p>
<ul>
<li>Note I said &#8216;tables&#8217;, not the database.</li>
<li>Go to http://mysql.drupal.yourdomain.com (phpMyAdmin screen) and login</li>
<li>Select you Drupal database from the databases list at left (e.g. NOT information_schema)</li>
<li>Scroll to the bottom of tables listing page and select &#8216;Check All&#8217;, change the &#8216;With selected:&#8217; drop down to &#8216;Drop&#8217;.</li>
<li>You will see a screen asking if you really want to execute this command. Click &#8216;Yes&#8217;.</li>
</ul>
</li>
<li>CHMOD /sites/default to 777 again
<ul>
<li>On your web server, go to /sites/default</li>
<li>CHMOD default to 777 (again, because the previous install process modified the permissions) and be sure to check &#8216;recursive&#8217; (or use -R on commandline) because there&#8217;s new files in there and we need to blow everything in the default folder away.</li>
</ul>
</li>
<li>Delete everything in /sites/default</li>
<li>Put a clean copy of default.settings.php and settings.php in /sites/default
<ul>
<li>Remember that saved copy of default.settings.php and settings.php?</li>
</ul>
</li>
<li>Go to http://drupal.yourdomain.com/install.php and start all over again :)</li>
</ul>
<p><div class="wp-caption alignnone" style="width: 510px"><a href="http://farm4.static.flickr.com/3623/3388465649_ec71b0cc0d_o.jpg"><img alt="Bold moves in phpMyAdmin. Select all  drop." src="http://farm4.static.flickr.com/3623/3388465649_331c0e6b91.jpg" title="Dropping Drupal Database Tables" width="500" height="267" /></a><p class="wp-caption-text">Bold moves in phpMyAdmin. Select all &gt; drop. </p></div></p>
<p>I hope that was helpful for someone. I remember all to well not even knowing what chmod was and trying to write perl scripts, ouch! As you might guess, with as much time as I spend documenting when I should be doing book exercises I don&#8217;t really have time to offer support, but please let me know if anything I&#8217;ve written here needs to be corrected or elaborated on. Have fun in Drupal land!</p>
]]></content:encoded>
			<wfw:commentRss>http://23rdworld.com/2009/03/26/installing-using-drupal-book-source-on-dreamhost/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Installing Netbeans PHP IDE on Ubuntu</title>
		<link>http://23rdworld.com/2009/02/27/installing-netbeans-php-ide-on-ubuntu/</link>
		<comments>http://23rdworld.com/2009/02/27/installing-netbeans-php-ide-on-ubuntu/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 23:55:12 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[lamp development]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://23rdworld.com/?p=134</guid>
		<description><![CDATA[Nothing amazing going on, just a few tips that might save you some time: You need java runtime installed and working, prolly apt-cache search to make sure you&#8217;re putting in the most recent version (6 as of this writing) sudo apt-get update sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-font The netbeans in the repo is for [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/mahalie/154041190/" title="Lizard Steals Green Bean by mahalie, on Flickr"><img src="http://farm1.static.flickr.com/77/154041190_46fb3c5a83.jpg" width="500" height="375" alt="Lizard Steals Green Bean" /></a></p>
</p>
<p>Nothing amazing going on, just a few tips that might save you some time:</p>
<ul>
<li>You need java runtime installed and working, prolly apt-cache search to make<br />
sure you&#8217;re putting in the most recent version (6 as of this writing)</p>
<ul>
<li><code>sudo apt-get update</code></li>
<li><code>sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-font</code></li>
</ul>
</li>
<li>The netbeans in the repo is for the Java IDE, so don&#8217;t bother with apt-get</li>
<li>Download the install file here: <a href="http://www.netbeans.org/downloads/index.html">http://www.netbeans.org/downloads/index.html</a>
<ul>
<li>Be sure to pick the PHP bundle</li>
</ul>
</li>
<li>If clicking on the netbeans-x.x-ml-php-linux.sh file gives you an error or tries to open in gedit or something, right-click > <em>properties > permissions and check &#8216;allow executing file as a program&#8217;</em></li>
<li>Select Run (not &#8216;Run in Terminal&#8217;), running in terminal will throw some GTK errors</li>
</ul>
<p>Next you might want to head over to the <a href="http://www.netbeans.org/features/php/index.html">Netbeans website</a> and watch the intro vid and orient yourself to the plethora of PHP-centric features.</p>
<p>As fair newb to programming in PHP I can&#8217;t say I&#8217;m qualified to suggest an IDE. So why Netbeans? It&#8217;s free. It porvides syntactic and semantic code highlighting for PHP and debugging through Xdebug. Folks in my <a href="http://php.meetup.com/49/">Seattle PHP meetup group</a> who know a lot more about programming than I do seem to really like it, every time I go to install Eclipse I am daunted by the website, instructions and innumerable options. Finally, it was recommended in the recent Smashing Magazine article <a href="http://www.smashingmagazine.com/2009/02/11/the-big-php-ides-test-why-use-oneand-which-to-choose/">The Big PHP IDE Test: Why Use One And Which To Choose</a> (2009.02.11) so I stopped resisting.</p>
<p>Do you like it, recommend others over it?</p>
]]></content:encoded>
			<wfw:commentRss>http://23rdworld.com/2009/02/27/installing-netbeans-php-ide-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Drupal 5.x on Ubuntu LAMP</title>
		<link>http://23rdworld.com/2008/04/09/drupal-5x-on-ubuntu-lamp/</link>
		<comments>http://23rdworld.com/2008/04/09/drupal-5x-on-ubuntu-lamp/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 23:50:06 +0000</pubDate>
		<dc:creator>mahalie</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[instructions]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://23rdworld.com/?p=124</guid>
		<description><![CDATA[USE THIS INFORMATION AT YOUR OWN RISK. Any information found on this website is offered only as informational and includes no warranty, guarantees or support. The author claims no authority on any subject whatsoever. Why Drupal, Why Ubuntu? For me it's all about community. I've always enjoyed apache web development in part because of the [...]]]></description>
			<content:encoded><![CDATA[<a href='http://23rdworld.com/wp-content/uploads/2008/04/drupal_ubuntu.jpg'><img src="http://23rdworld.com/wp-content/uploads/2008/04/drupal_ubuntu.jpg" alt="The quick and dirty dev install of Drupal on Ubuntu" title="Drupal 5.x on Ubuntu LAMP" width="500" height="128" class="aligncenter size-full wp-image-126" /></a>
<p class="warning"><strong>USE THIS INFORMATION AT YOUR OWN RISK.</strong> Any information found on this website is offered only as informational and includes no warranty, guarantees or support. The author claims no authority on any subject whatsoever. </p>
<h2>Why Drupal, Why Ubuntu?</h2>
For me it's all about community. I've always enjoyed apache web development in part because of the active and helpful user groups, forums, irc channels, etc. I use <a href="http://www.ubuntu.com/products/whatisubuntu/serveredition" title="learn more about Ubuntu server edition">Ubuntu</a> as the operating system for my<a href="http://en.wikipedia.org/wiki/LAMP_(software_bundle)" title="about the Linux Apache MySQL PHP web server stack"> LAMP</a> because it's really popular right now - it has a very active forum and pretty good documentation. <a href="http://drupal.org/">Drupal</a> is an open-source content management system, or you could look at it as a framework since it was built to make it easy for coders to override almost anything it does without hacking the core. This means you could make it do anything you want if you happen to be good enough at PHP and still take advantage of core development and security updates no matter how much you modify the product.
<h2>Why write installation instructions?</h2>
Good question? Well, the <a href="http://drupal.org/getting-started/5/install/download">installation instructions at Drupal.org</a> are good but they cover all sorts of environments (who wants to slog through all that?) and those in the  <a href="https://help.ubuntu.com/community/Drupal">Ubuntu Community Docs</a> are great and pretty specific but cover Drupal 4.6.7 and 5.1. I probably should update the docs at Ubuntu, perhaps I will after I hash it out here and after a few people let me know they worked or what to change. Also, I like to search for instructions specific to my situation whenever I approach a new installation. It's good to see what other people in similar circumstances have encountered, I call it due diligence. I would suggest any user doing this install review the documentation mentioned above thoroughly. Also see related links at the end of this article.
<h2>Environment</h2>
These instructions don't cover the setup of your server environment. Mine happens to be:
<ul>
	<li>Ubuntu 6.06 LTS server</li>
	<li>Apache 2.0.5.5</li>
	<li>PHP 5.1.2</li>
	<li>MySQL 5.0.22</li>
</ul>
<h2>Get Drupal</h2>
<code>wget http://ftp.drupal.org/files/projects/drupal-5.7.tar.gz<br />
tar -zxvf drupal-5.7.tar.gz
</code>
<p>I'm a big fan of apt-get but there were a lot of issues in the forum started by people having problems with Drupal in the repositories. <a href="https://help.ubuntu.com/community/Drupal">Community Docs</a> recommend getting the latest package from <a href="http://drupal.org/">Drupal.org</a>, right now that happens to be Drupal <a href="http://drupal.org/drupal-5.7">5.7</a>. (Drupal 6 is out now as well, and is very cool, but CCK/Views aren't ready for prime-time and I'm installing for the purposes of following tutorials written for 5.x.)</p>
<h2>Move Drupal</h2>
<code>sudo mkdir /var/www/drupaltest<br />
sudo mv drupal-5.3/* drupal-5.3/.htaccess /var/www/drupaltest<br />
sudo mkdir /var/www/drupaltest/files
</code>
<p>My apache install is pretty much setup to default config. /var/www is my web root, yours may vary. Because I'm just using this particular install as a test which I plan on destroying later I'm going to put it in the boring old subdirectory 'drupaltest', actually I named mine d57_test_01 but thought drupaltest would be more comprehendable in the example.</p>
<p>In the mv command we explicitly move .htaccess because it's a hidden file.</p>
<h2>Database Setup</h2>
<code>mysqladmin -u root -p create db_drupaltest<br />
mysql -u root -p
</code>
<p>Create the database for Drupal to use - you can replace 'db_drupaltest' with whatever you'd like to call the database. You'll need to enter your mySQL root password. If you get an access denied error make sure you're using the mySQL root password and not your login or Ubuntu root password. The second command puts you in mySQL monitor, the command line interface for <a href="http://dev.mysql.com/tech-resources/articles/mysql_intro.html">managing your MySQL server</a>. The commands in the next code section are SQL. You could also run this in phpMyAdmin if you'd rather have a GUI.</p>
<code>
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON db_drupaltest.* TO 'drupal_usr'@'localhost' IDENTIFIED BY 'secretpassword';
<br />
FLUSH PRIVILEGES;
\q
</code>
<p>Change the datebase name, the username 'drupal_usr' and 'secretpassword' to whatever you like. Just don't forget to write it down somewhere safe because you'll need to know it later.</p>
<h2>Edit Settings.php</h2>
<code>
sudo vi /var/www/drupaltest/sites/default/settings.php
</code>
<p>Using vi (or whatevs) change the $db_url line. Note: If you use a fancy charcters or dashes in your user, password or database names replace them URI hex encodings, this is detailed in database settings comments section in the settings.php file.</p>
<code>$db_url="mysql://drupal_usr:secretpassword@localhost/db_drupaltest";</code>
<h2>Up Your PHP Memory Allocation</h2>
<p>If you have a new LAMP install the default memory setting for scripts is 8M. This is redonkulous and Drupal will suck. Look for the 'Resource Limits' section and change memory_limit to 32M and then restart apache.</p>
<code>sudo vi /etc/php5/apache2/php.ini
sudo /etc/init.d/apache2 restart
</code>
<h2>Final Steps</h2>
<p>Go to http://localhost/drupaltest/install.php (or your servername instead of localhost if DNS is setup). You should see this:</p>

<a href='http://23rdworld.com/wp-content/uploads/2008/04/drupal57_coplete.jpg'><img src="http://23rdworld.com/wp-content/uploads/2008/04/drupal57_coplete.jpg" alt="Screenshot of Drupal Installation Message" title="drupal57_complete" width="500" height="321" class="aligncenter size-full wp-image-125" /></a>
<p>One last thing, if you click Administer you will probably get a 'one or more problems were detected' error message. Two things: your files directory isn't writable and you cron job hasn't run. The first one is easy - just make the files area writable by all:</p>
<code>sudo chmod 777 /var/www/drupaltest/files</code>
<p>As for cron, you can just click 'run cron manually' on the Status report page - but you'll need to do this anytime you want to update the index. For a quick dev install you're likely to trash soon it may not be necessary but for a production or long-term dev install you'll want to set up a cron job to hit http://localhost/drupaltest/admin/logs/status/run-cron every few minutes depending upon your site's traffic and requirements. See <a href="http://drupal.org/cron">Configuring cron jobs</a> in Drupal's Getting Started guide for more.</p>
<p>That's it. Good luck folks, now enjoy surfing the Drupal learning curve...heheh.</p>
<h2>Related Links</h2>
<ul>
	<li><a href="https://help.ubuntu.com/community/Drupal">Ubuntu Documentation &gt; Drupal</a></li>
	<li><a href="http://groups.drupal.org/drubuntu">Drubuntu Group</a> - "for people using Ubuntu for developing Drupal core or contributed modules, and also for people using the Ubuntu LAMP stack as a server for Drupal."<ul><li><a href="http://groups.drupal.org/node/6261?">Drubuntu Howto</a> a Wiki Page that explains how to install and configure an Ubuntu/LAMP/Eclipse Drupal development environment.</li>
	<li><a href="http://groups.drupal.org/node/6260?">Drupal Dev on VMWare</a> - including Eclipse setup.</li>
</ul></li>
	<li><a href="http://www.lullabot.com/videocast/install-local-web-server-ubuntu">Install a Local Web Server on Ubuntu</a> (11/2007) - screencast using Ubuntu desktop version, covers Drupal install.</li>
	<li><a href="http://drupal.org/node/483">Installing PHP, MySQL and Apache under Linux</a><a href="http://drupal.org/node/483"></a> on Drupal.org (Developing for Drupal » Setting up a development environment » Local server setup » Linux specific ) - covers enabling mod_rewrite which you'll need for clean URLs.</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://23rdworld.com/2008/04/09/drupal-5x-on-ubuntu-lamp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Installing Plone 3.0 on Ubuntu 6.06</title>
		<link>http://23rdworld.com/2007/11/02/installing-plone-30-on-ubuntu-606/</link>
		<comments>http://23rdworld.com/2007/11/02/installing-plone-30-on-ubuntu-606/#comments</comments>
		<pubDate>Sat, 03 Nov 2007 04:36:49 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[fortechhelpblog]]></category>
		<category><![CDATA[Plone]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://23rdworld.com/2007/11/02/installing-plone-30-on-ubuntu-606/</guid>
		<description><![CDATA[Plone 3.0.2 on an 32-bit Ubuntu 6.06 LTS &#8216;Dapper Drake&#8217; LAMP What is Plone? &#8211; Plone is a pretty cool content management system (CMS). Well, I think it&#8217;s cool based on some videos and documentation on their site. After comparing a lot of CMS options (including some really expensive closed-source stuff and 2 weeks of [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://23rdworld.com/2007/11/02/installing-plone-30-on-ubuntu-606/plone-on-ubuntu/' rel='attachment wp-att-122' title='Plone on Ubuntu'><img src='http://23rdworld.com/wp-content/uploads/2007/11/plone_ubuntu.jpg' alt='Plone on Ubuntu' /></a><br />
Plone 3.0.2 on an 32-bit Ubuntu 6.06 LTS &#8216;Dapper Drake&#8217; <a href="http://en.wikipedia.org/wiki/LAMP_(software_bundle)">LAMP</a></p>
<p><strong>What is Plone?</strong> &#8211; <a href="http://plone.org/">Plone</a> is a pretty cool content management system (CMS). Well, I think it&#8217;s cool based on <a href="http://plone.org/about/movies">some videos</a> and <a href="http://plone.org/about/plone">documentation</a> on their site. After comparing <a href="http://www.oscom.org/matrix/index.html">a lot of CMS options</a> (including some really expensive closed-source stuff and 2 weeks of developer training on Sharepoint) I&#8217;m trying out Plone because a) <a href="http://en.wikipedia.org/wiki/Open_source">open source</a> is cool. b) Google people are smart, c) it supports <a href="http://plone.org/products/ploneldap">LDAP authentication</a> which I need for my all-M$ work enviro, d) there&#8217;s <a href="http://plone.org/events/training">training</a>/<a href="http://plone.org/events/conferences">conferences</a>/<a href="http://plone.org/documentation/books">books</a>/<a href="http://plone.net/">commercial support!?</a> available and d) I&#8217;ve read some great reviews and CMS comparisons that rated it #1.</p>
<p>That was the good, now the most common complaint: hellish learning curve. Well, if you&#8217;re a developer and you&#8217;re going to customize beyond the existing system and available plugins. Why? Well, you&#8217;ll have to learn some python and the database is the rather obscure Zope instead of MySQL or SQL. In fact, I just read this on <a href="http://www.456bereastreet.com/archive/200503/content_management_with_plone/">456 Berea St</a> (one of my fav dev blogs) and it gave me the shivers:</p>
<blockquote><p>And the inital learning curve, even though I was a fairly good python programmer, was insane.</p>
</blockquote>
<p>Then again, people told me Perl was insane too and I loved working with Perl. Besides, we&#8217;re just playing right now, right?</p>
<p><strong>What is Ubuntu? </strong>- <a href="http://www.ubuntu.com/">Ubuntu</a> is a community developed, linux-based operating system that I use for a web server. &#8216;Dapper Drake&#8217; is the release name for 6.06 LTS. (Keyword: LTS &#8211; long term support). It&#8217;s surprisingly easy to install. If you&#8217;re bored, geeky and/or have extra VMs or boxes lying around you should try a LAMP install and get your web server up in 15 minutes!</p>
<p>There&#8217;s already a <a href="http://ubuntuforums.org/showthread.php?t=50925&#038;highlight=plone">Plone From Scratch HOWTO</a> on the Ubuntu Forums, however it is for a previous version of Plone (2.0.5) and uses the apt-get method which I&#8217;ve noticed a lot of people in the forums having trouble with. <span class="alert">Disclaimer: I do not provide &#8216;undo/uninstall&#8217; instructions, other than, whip up a a LAMP on VMware and test it first or backup your system. I would welcome uninstall directions if someone who knows what they are doing could provide them.</span></p>
<p><strong>Doesn&#8217;t Plone provide installation instructions?</strong> Well, <a href="http://plone.org/documentation/tutorial/installing-plone-3-with-the-unified-installer">yes</a>. But when I started to read them I got real nervous. What the heck is gcc? libssl? TLS? etc. Those poor geeks at Plone don&#8217;t realize how noob <a href="http://en.wikipedia.org/wiki/Newbie">noob</a> can be! I tried to find better instructions (for me) at the <a href="http://ubuntuforums.org/">Ubuntu Forums</a> and instead I found a lot of people having problems trying to install Plone via Synaptic or apt-get instead of using Plone&#8217;s instructions. So here ya go.</p>
<p>You should already have gcc, g++, make and tar installed by default, but if you want to be anal do this:</p>
<p><code>sudo apt-get update<br />
sudo apt-get install gcc g++ make tar</code></p>
<blockquote><p><em>Sidetrack</em> > (Possibly totally unnecessary step!) If you&#8217;re a fair server noob like me you have no idea what libssl and readline libraries and development headers are and what the heck is TLS? Google suggests it has something to do with mail encryption. I read some confusing stuff on Ubuntu Forums about RPM and a program called Alien that converts RPMs to DEB packages seemed probably unrelated but like a handy utility to have and so:</p>
<p><code>sudo apt-get install alien</code></p></blockquote>
<p>Download the Plone Installer Package. I saved it in my home folder &#8211; it doesn&#8217;t really matter where you put it so long as you can find it.</p>
<p><code>wget -c http://plone.googlecode.com/files/Plone-3.0.2-UnifiedInstaller-Rev2.tar.gz<br />
tar zxf Plone-3.0.2-UnifiedInstaller-Rev2.tar.gz<br />
cd Plone-3.0.2-UnifiedInstaller<br />
</code></p>
<p>Here&#8217;s where you have to pay attention. You can do a ZEO or Stand-Alone install. &#8220;WTF?&#8221; you say? Yeah, well just pick your poison after reading all about it. Me, I&#8217;m doing a Stand-Alone as root install.</p>
<p>According to the README.TXT in the installation package my choice of standalone instance installed as root will result in Plone being installed to /opt/Plone-3.0.2 and libz and libjpeg libraries getting built in /user/local. A &#8220;plone&#8221; user will be added and Zope will be configured to run under that user id. You need to start Zope as root user (via sudo).</p>
<p><code>sudo ./install.sh standalone</code></p>
<p>Then a whole bunch of stuff happens. Lots of gcc (compiling) and checking for things (lots of yes and a few no-s in my case). Just wait, watch, hail Mary and knock on wood. This is a good time to read about the rest of this tutorial or <a href="http://plone.org/documentation/tutorial/installing-plone-3-with-the-unified-installer/creating-new-instances">creating new Zope/Plone instances</a> if you want to do that. Or just catch up on your RSS feeds and I&#8217;ll hold your hand some more ;o)</p>
<p>If you&#8217;re real lucky, this is what you&#8217;ll see when it&#8217;s all said and done:</p>
<p><code><br />
#####################################################################<br />
######################  Installation Complete  ######################<br />
Use the account information below to log into the Zope Management Interface<br />
The account has full 'Manager' privileges.<br />
  Username: admin<br />
  Password: XXXXXXX<br />
Before you start Plone, you should review the settings in:<br />
 /opt/Plone-3.0.2/zinstance/etc/zope.conf<br />
Adjust the ports Plone uses before starting the site, if necessary<br />
To start Plone, issue the following command in a Terminal window:<br />
 sudo /opt/Plone-3.0.2/zinstance/bin/zopectl start<br />
To stop Plone, issue the following command in a Terminal window:<br />
 sudo /opt/Plone-3.0.2/zinstance/bin/zopectl stop<br />
Plone successfully installed at /opt/Plone-3.0.2<br />
See /opt/Plone-3.0.2/zinstance/adminPassword.txt<br />
for password and startup instructions<br />
Ask for help on plone-users list or #plone<br />
Submit feedback and report errors at http://dev.plone.org/plone<br />
This installer was created by Kamal Gill (kamalgill at mac.com)<br />
Maintainers for Plone 3 are Kamal Gill and Steve McMahon (steve at dcn.org)</code></p>
<p>First, write down your admin password!! Then, check zope.conf to &#8216;review settings&#8217;. I&#8217;m not familiar with them, so I just scanned for the port. Found it on line 969 (YMMV), set to the default Zope/Plone standalone install grabs, port 8080.</p>
<p><code>sudo vi /opt/Plone-3.0.2/zinstance/etc/zope.conf</code></p>
<p>Use :q! to quit vi without messing anything up</p>
<p>Use netcat to see what ports you have open already. (Netcat comes with Ubuntu install)</p>
<p><code>nc -z -v -w2 localhost 1-65535</code></p>
<p>After confirming that 8080 is avail (or changing it in zope.conf if it is not available) continue following directions.</p>
<p><code>sudo /opt/Plone-3.0.2/zinstance/bin/zopectl start  #that last part is an L not a 1, took me a while...</code></p>
<p>Then go to: http://localhost:8080 (or sub servername for localhost to test from other computer). If you&#8217;re lucky AGAIN you&#8217;ll see the Zope Quick Start page!! Wahoo! Hii Fiiiiveh to self! Then look at the example site: http://localhost:8080/Plone, and then check out the management interface at http://localhost:8080/manage. Have fun. I hope it was as good for you as it was for me!</p>
<p>BTW: I suggest the <a href="http://ubuntuforums.org/">Ubuntu Support Forum</a> and <a href="http://www.nabble.com/Plone-f6741.html">Plone Support Forum</a> for help. I am totally new at server administration, I prolly shouldn&#8217;t even publish this and I definitely can&#8217;t support your lazy arse!</p>
]]></content:encoded>
			<wfw:commentRss>http://23rdworld.com/2007/11/02/installing-plone-30-on-ubuntu-606/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>How To Make Your MediaWiki Private</title>
		<link>http://23rdworld.com/2007/03/30/how-to-make-your-mediawiki-private/</link>
		<comments>http://23rdworld.com/2007/03/30/how-to-make-your-mediawiki-private/#comments</comments>
		<pubDate>Fri, 30 Mar 2007 21:11:37 +0000</pubDate>
		<dc:creator>mahalie</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[mediawiki]]></category>
		<category><![CDATA[pim]]></category>
		<category><![CDATA[private]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://23rdworld.com/2007/03/30/how-to-make-your-mediawiki-private/</guid>
		<description><![CDATA[USE THIS INFORMATION AT YOUR OWN RISK. Any information found on this website is offered only as informational and includes no warranty, guarantees or support. The author claims no authority on any subject whatsoever. I've been using an amalgamation of hacks to track all the information I want to be able to recall later: del.icio.us [...]]]></description>
			<content:encoded><![CDATA[<p class="warning"><strong>USE THIS INFORMATION AT YOUR OWN RISK.</strong>  Any information found on this website is offered only as informational and includes no warranty, guarantees or support. The author claims no authority on any subject whatsoever.</p>
<p>I've been using an amalgamation of hacks to track all the information I want to be able to recall later: del.icio.us for bookmarks, gmail for contacts and random notes, private blog entries for some organized content, and tracks for tracking projects. Blech. It's just too much. My memory is too weak. What I really want is a comprehensive PIM (Personal Informatio Manager). And so I installed MediaWiki because that's what Wikipedia uses and that's what <a href="http://www.dreamhost.com/r.cgi?mahalie">Dreamhost</a> offers as a One-Click Install (e.g. the path of least resistance).</p>
<p>I thought I'd share with you all the the process of customizing the default install to create a private wiki. Following are the specifics to my install but this will probably be helpful to many with a different host or newer version.
<ul>
<li><a href="https://panel.dreamhost.com/index.cgi?tree=domain.manage&#038;current_step=Index&#038;next_step=ShowAddhttp&#038;domain=">Create a subdomain</a> for your MediaWiki install, such as, wiki.yourdomain.com. Select PHP 5.x (not 4.4.2) and leave Extra Web Security. </li>
<li><a href="https://panel.dreamhost.com/index.cgi?tree=goodies.installer&#038;">Install MediaWiki</a>. Dreamhost walks you through this and it's also covered at the <a href="http://wiki.dreamhost.com/index.php/MediaWiki#Getting_Started">Dreamhost Wiki</a> so I'm not going to go into detail here. But be sure to move the newly generated LocalSettings.php to the parent directory, and delete the config directory with its content.</li>
<li>Chmod  LocalSettings.php to 600</li>
<li>Create a backup copy of LocalSettings.php, rename it something like .BAK instead of .PHP or something. Put it back in your Wiki install directory right away so it's safe and available if you need it later.</li>
</ul>
<h2>Restrict Wiki Access</h2>
</p><p>Before bothering to put up our own cute logo or other fun stuff like enabling image linking and using clean urls, we're going to lock down our install. I didn't find a lot for this particular intent on the official MediaWiki Docs or the Dreamhost Wiki, but I did find this old <a href="http://meta.wikimedia.org/wiki/Preventing_Access">Meta Wiki Article</a></p>
<ul>
<li>Prevent new user registrations. Add the following line to the bottom of LocalSettings.PHP:<br />
<code># This snippet prevents new registrations from anonymous users<br />
# (Sysops can still create user accounts)<br />
$wgGroupPermissions['*']['createaccount'] = false;</code>
</li>
<li>Make sure it's working by trying to create an account. You should receive an error message that says username not found, please create an account. To change the message login as yourself (you should have set up a Sysop login when you configured your wiki) and point your browser to wiki.yourdomain.com/index.php?title=MediaWiki:Nosuchuser&#038;action=edit.<br />I changed my message to:<blockquote>There is no user by the name "$1". This wiki is private and therefore closed to new accounts. Please contact Mahalie if you have any questions.</blockquote>I intentionally failed to provide contact information. If a user doesn't even know how to contact me, they really don't need an account on my private wiki!</li>
<li>Prevent anonymous users from reading by adding the following to LocalSettings.php:
<code># Disable reading line, for anonymous (not-logged-in => * ) :<br />
$wgGroupPermissions['*']['read'] = false;<br />
<br />
# ... and enable anonymous to read the followings pages :<br />
$wgWhitelistRead = array( &quot;Main Page&quot;, &quot;Special:Userlogin&quot;, &quot;-&quot;, &quot;MediaWiki:Monobook.css&quot; );<br />
<br />
# ... same in an other language (French, with one UTF-8 special characteres) :<br />
# $wgWhitelistRead = array( &quot;Page Principale&quot;, &quot;Special:Userlogin&quot;, utf8_encode('Aide en français'));<br />
</code>
</li>
<li>Verify setting by logging out of your wiki and attempting to browse. You should get a 'Login Required. You must login to view other pages.' when clicking on any local link and the page should redirect to the main page after a few seconds.</li>
<li>If you want to hide the side navigation if the user isn't logged in (because, perhaps you have private project names or something) edit includes/Skin.php and change the function buildSidebar(). Add these lines near the very top, after the globals.:
<code>
global $wgUser;
if (! $wgUser->isLoggedIn()) {
        return array();
}
</code>
This will hide the navigation on sup-pages (not the default main page)</li>
</ul>
<p>p.s. WebWorkerDaily just published <a href="http://webworkerdaily.com/2007/07/13/15-productive-uses-for-a-wiki/">15 Productive Uses for a Wiki</a> in case you're wondering why someone would want to do this!</p>
<p class="warning">Update: Check out a new tutorial on Lifehacker, <a href="http://lifehacker.com/5396832/customize-mediawiki-into-your-ultimate-collaborative-web-site">Customize Mediawiki Into Your Ultimate Collaborative Website</a> - it's not a PIM implementation but it offers some good information on quickly re-skinning and mods to consider.</p>]]></content:encoded>
			<wfw:commentRss>http://23rdworld.com/2007/03/30/how-to-make-your-mediawiki-private/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
	</channel>
</rss>

