<?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>Botsko.net - Web Development in Portland, Oregon &#187; Uncategorized</title>
	<atom:link href="http://www.botsko.net/blog/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.botsko.net/blog</link>
	<description>continuing education</description>
	<lastBuildDate>Thu, 15 Dec 2011 20:07:58 +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>jQuery Form Builder 0.4</title>
		<link>http://www.botsko.net/blog/2011/12/15/jquery-form-builder-0-4/</link>
		<comments>http://www.botsko.net/blog/2011/12/15/jquery-form-builder-0-4/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 20:07:58 +0000</pubDate>
		<dc:creator>Michael Botsko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.botsko.net/blog/?p=982</guid>
		<description><![CDATA[I need to write an extension application on top of my popular jQuery Form Builder plugin so I finally took the time necessary to perform some long-wanted updates. The xml-based form loading system is finally gone, replaced by a pure JSON solution. There&#8217;s a lot more code cleanup, some bug fixes, and now some sample [...]]]></description>
			<content:encoded><![CDATA[<p>I need to write an extension application on top of my popular <a href="http://www.botsko.net/blog/2009/04/07/jquery-form-builder-plugin/">jQuery Form Builder</a> plugin so I finally took the time necessary to perform some long-wanted updates. The xml-based form loading system is finally gone, replaced by a pure JSON solution. There&#8217;s a lot more code cleanup, some bug fixes, and now some sample MySQL integration in addition to existing static data loading examples.</p>
<p>The extension layer I&#8217;m working on will add functionality for building basic quizzes and scoring them, and hopefully, some MongoDB support. When completed I&#8217;ll push that functionality as well. But for now, I need your help in testing the changes in 0.4.</p>
<p>As usual, <a href="https://github.com/botskonet/jquery.formbuilder">source code and downloads</a> are on GitHub.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.botsko.net/blog/2011/12/15/jquery-form-builder-0-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Hosted Bug and Issue Tracking</title>
		<link>http://www.botsko.net/blog/2011/06/11/web-hosted-bug-and-issue-tracking/</link>
		<comments>http://www.botsko.net/blog/2011/06/11/web-hosted-bug-and-issue-tracking/#comments</comments>
		<pubDate>Sat, 11 Jun 2011 16:17:15 +0000</pubDate>
		<dc:creator>Michael Botsko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bugzilla]]></category>
		<category><![CDATA[issue tracking]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[snowy]]></category>
		<category><![CDATA[trellis]]></category>

		<guid isPermaLink="false">http://www.botsko.net/blog/?p=970</guid>
		<description><![CDATA[I&#8217;ve never been satisfied with issue tracking software. It essentially boils down to the fact that developers seem to sacrifice a clean design and usable product for features or vice versa &#8211; the tools our clients would find usable were never the same tools that the developers and designers could find usable. This will never [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve never been satisfied with issue tracking software. It essentially boils down to the fact that developers seem to sacrifice a clean design and usable product for features or vice versa &#8211; the tools our clients would find usable were never the same tools that the developers and designers could find usable.</p>
<p>This will never be a problem again, thanks to Snowy Evening. Snowy-Evening.com has been in development for almost two years and despite an amazing list of features (all listed on the home page) it has an incredibly clean and very easy to understand design. Our clients have been using it for a year and there are several well known web companies already using it for their projects.</p>
<p>I highly recommend you checkout <a href="https://snowy-evening.com/">Snowy Evening</a> &#8211; it&#8217;s free while it&#8217;s in beta.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.botsko.net/blog/2011/06/11/web-hosted-bug-and-issue-tracking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sizing Text to Container with jQuery ExpandText</title>
		<link>http://www.botsko.net/blog/2011/05/23/sizing-text-to-container-with-jquery-expandtext/</link>
		<comments>http://www.botsko.net/blog/2011/05/23/sizing-text-to-container-with-jquery-expandtext/#comments</comments>
		<pubDate>Tue, 24 May 2011 04:48:35 +0000</pubDate>
		<dc:creator>Michael Botsko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[expandtext]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.botsko.net/blog/?p=958</guid>
		<description><![CDATA[A frequent problem with text on the web is that there&#8217;s no way to automatically adjust the font size based on the dimensions of it&#8217;s containing element &#8211; at least in a way that changes size when the container does. There are a few plugins that automatically size the text (like FitText) but they only [...]]]></description>
			<content:encoded><![CDATA[<p>A frequent problem with text on the web is that there&#8217;s no way to automatically adjust the font size based on the dimensions of it&#8217;s containing element &#8211; at least in a way that changes size when the container does.</p>
<p><span id="more-958"></span></p>
<p>There are a few plugins that automatically size the text (like <a href="http://fittextjs.com/">FitText</a>) but they only increase the font size, and the font sizes don&#8217;t adjust when the parent is adjusted.</p>
<p>Enter my newest plugin <a href="https://github.com/botskonet/jquery.expandtext">ExpandText</a>. You can provide a minimum and maximum font size and the plugin will adjust the font when the container element changes dimensions. It uses the width and height of an auto-inserted <code>span</code> which wraps the text directly.</p>
<p>Simply attach the plugin to the text element selector inside of a document ready and window resize:</p>
<pre class="brush: jscript; title: ; notranslate">$(function(){
	$(window).resize(function(){
		$('.text').expandText();
	}).trigger('resize');
});</pre>
<p>The benefit of the <code>span</code> technique is that we can avoid trying to measure the characters themselves which change dramatically with each font type and style.</p>
<p><a href="https://github.com/botskonet/jquery.expandtext">Download the code via GitHub</a> and <a href="http://experiments.botsko.net/tests/jquery.expandtext/">try out the demo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.botsko.net/blog/2011/05/23/sizing-text-to-container-with-jquery-expandtext/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing Sphinx Search Server</title>
		<link>http://www.botsko.net/blog/2011/05/07/installing-sphinx-search-server/</link>
		<comments>http://www.botsko.net/blog/2011/05/07/installing-sphinx-search-server/#comments</comments>
		<pubDate>Sun, 08 May 2011 04:34:38 +0000</pubDate>
		<dc:creator>Michael Botsko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[installing]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sphinx]]></category>

		<guid isPermaLink="false">http://www.botsko.net/blog/?p=741</guid>
		<description><![CDATA[I&#8217;ve always used MySQL fulltext indexes with a match query for keyword searches but I&#8217;ve never been happy with the results and lack of configuration choices. The limited nature of word interpretation and the boolean searches were useless when visitors didn&#8217;t know how to use search operators. Fulltext indexes require the MyISAM table structure &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always used MySQL <code>fulltext</code> indexes with a <code>match</code> query for keyword searches but I&#8217;ve never been happy with the results and lack of configuration choices. The limited nature of word interpretation and the boolean searches were useless when visitors didn&#8217;t know how to use search operators. Fulltext indexes require the MyISAM table structure &#8211; yet we generally prefer InnoDB because of performance and foreign key constraints.</p>
<p>For a recent project I decided to finally (long overdue, I know) make the the transition to an external search and indexing application called <a href="http://sphinxsearch.com/">Sphinx</a>.</p>
<p><span id="more-741"></span></p>
<p>Sphinx is a separate server that will index content from a variety of sources (in our case, MySQL) and provides an API that allows you to search the content more effectively.</p>
<p>If you&#8217;re using it with MySQL, you need to ensure that the <code>mysql-devel</code> package has been installed. Since this project was on CentOS, this is a simple yum call:</p>
<pre class="brush: bash; title: ; notranslate">$ yum mysql-devel</pre>
<p>Once that&#8217;s installed you&#8217;re ready to install Sphinx:</p>
<pre class="brush: bash; title: ; notranslate">$ wget http://sphinxsearch.com/files/sphinx-1.10-beta.tar.gz
$ tar xzvf sphinx-1.10-beta.tar.gz
$ cd sphinx*
$ ./configure --prefix=/usr/local/sphinx
$ make
$ make install
$ sudo mkdir -p /var/data/sphinx</pre>
<p>Once installed, you need to create a configuration file that will dictate where the data is indexed from, and how the search server will behave.</p>
<pre class="brush: bash; title: ; notranslate">$ vi /usr/local/etc/sphinx.conf</pre>
<p>Sphinx needs to know about two things &#8211; where to find the data for indexing, and how to index it. The <code>source</code> needs to point to a database or content source &#8211; in this case it points to our MySQL database.</p>
<pre class="brush: bash; title: ; notranslate">
source name_your_source
{
    type                            = mysql
    sql_host                        = 127.0.0.1
    sql_user                        = mysql_user
    sql_pass                        = mysql_pass
    sql_db                          = mysql_database
    sql_sock                        = /var/run/mysqld/mysqld.sock
    sql_port                        = 3306

    # indexer query
    # document_id MUST be the very first field
    # document_id MUST be positive (non-zero, non-negative)
    # document_id MUST fit into 32 bits
    # document_id MUST be unique
    sql_query = SELECT id, field1, field2 FROM ourtable;

    # document info query
    # ONLY used by search utility to display document information
    # MUST be able to fetch document info by its id, therefore
    # MUST contain '$id' macro
    sql_query_info  = SELECT * FROM ourtable WHERE id=$id
}
index name_your_index
{
    source                  = name_your_source
    path                    = /var/data/sphinx/name_your_source
    morphology              = stem_en
    min_word_len            = 3
    min_prefix_len          = 0
#    min_infix_len           = 3
}
searchd
{
	port				= 3312
	log					= /var/log/searchd/searchd.log
	query_log			= /var/log/searchd/query.log
	pid_file			= /var/log/searchd/searchd.pid
}
</pre>
<p>The first few lines clearly setup the database connection credentials. The <code>sql_query</code> statement is what pulls in the data for indexing. Everything you need indexed needs to be pulled with this query. It&#8217;s also possible to pull fields that won&#8217;t be indexed, but will actually be used for filtering the data. These are called <a href="http://sphinxsearch.com/docs/1.10/attributes.html">attributes</a>.</p>
<p>The <code>index</code> component configures the index itself and how searches will be processed. Features like the minimum word length, and morphology (how variations of the word are matched) are defined here.</p>
<p>The <code>searchd</code> component simply sets some configurations for the daemon itself.</p>
<p>Once configured, run the following command and Sphinx will build all of the indexes:</p>
<pre class="brush: bash; title: ; notranslate">$ /usr/local/sphinx/bin/indexer --config /usr/local/etc/sphinx.conf --all </pre>
<p>If the configuration file is loaded properly and the database connection/queries work, you will see the indexer output:</p>
<pre class="brush: bash; title: ; notranslate">using config file '/usr/local/etc/sphinx.conf'...
indexing index 'yournamedindex'...
collected 1421 docs, 0.1 MB
sorted 0.0 Mhits, 100.0% done
total 1421 docs, 75457 bytes
total 0.188 sec, 400587 bytes/sec, 7543.82 docs/sec
total 2 reads, 0.000 sec, 22.6 kb/call avg, 0.0 msec/call avg
total 6 writes, 0.000 sec, 17.1 kb/call avg, 0.0 msec/call avg</pre>
<p>Once the index is complete, you can run a test search directly without starting the daemon:</p>
<pre class="brush: bash; title: ; notranslate">/usr/local/sphinx/bin/search --config /usr/local/etc/sphinx.conf searchtermhere</pre>
<p>You will see a dump of every matching document. Once you&#8217;ve got the search running, it&#8217;s time to start the daemon. First, we need to create a directory for the log files we asked for in the config:</p>
<pre class="brush: bash; title: ; notranslate">sudo mkdir -p /var/log/searchd</pre>
<p>Then, start the daemon:</p>
<pre class="brush: bash; title: ; notranslate">/usr/local/sphinx/bin/searchd --config /usr/local/etc/sphinx.conf</pre>
<p>Keep watching for more posts &#8211; I&#8217;ll discuss how to to work with the search from PHP, how to run incremental index updates, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.botsko.net/blog/2011/05/07/installing-sphinx-search-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git Push/Pull Alias Functions</title>
		<link>http://www.botsko.net/blog/2011/05/07/git-pushpull-alias-functions/</link>
		<comments>http://www.botsko.net/blog/2011/05/07/git-pushpull-alias-functions/#comments</comments>
		<pubDate>Sat, 07 May 2011 23:42:35 +0000</pubDate>
		<dc:creator>Michael Botsko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.botsko.net/blog/?p=929</guid>
		<description><![CDATA[I&#8217;ve been using Git for just over two years now. It&#8217;s one of the few systems left that doesn&#8217;t have a graphical user interface I prefer. In the past years, many choices have either been launched or announced but I&#8217;m still a command-line only person. I grew tired of typing the full push/pull commands so [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using Git for just over two years now. It&#8217;s one of the few systems left that doesn&#8217;t have a graphical user interface I prefer. In the past years, many choices have either been launched or announced but I&#8217;m still a command-line only person.</p>
<p>I grew tired of typing the full push/pull commands so I&#8217;ve finally spent some time searching for the best bash function on the net&#8230; which appears to be <a href="http://forrst.com/posts/My_gitstuff_bash_shortcuts_for_working_with_g-BwI">http://forrst.com/posts/My_gitstuff_bash_shortcuts_for_working_with_g-BwI</a></p>
<p>Edit your bash profile and place the &#8220;gpush&#8221; and &#8220;gpull&#8221; functions after anything that currently exists. I personally didn&#8217;t use the aliases shown in the pasted code sample, as I already use a different set.</p>
<pre class="brush: bash; title: ; notranslate">vi ~/.bash_profile</pre>
<p>When running <code>gpush</code> or <code>gpull</code> they will activate the associated commands on the current branch.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.botsko.net/blog/2011/05/07/git-pushpull-alias-functions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Best &amp; The Essential WordPress Plugins</title>
		<link>http://www.botsko.net/blog/2011/04/30/the-best-the-essential-wordpress-plugins/</link>
		<comments>http://www.botsko.net/blog/2011/04/30/the-best-the-essential-wordpress-plugins/#comments</comments>
		<pubDate>Sun, 01 May 2011 05:17:11 +0000</pubDate>
		<dc:creator>Michael Botsko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[essential]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.botsko.net/blog/?p=911</guid>
		<description><![CDATA[I&#8217;ve worked with WordPress for at least six years now &#8211; on both personal and client projects. As a company we&#8217;ve been focusing on larger custom-built projects in the past few years so staying current in the WP community has been a lot more difficult. Because of this, I&#8217;m transitioning the WordPress courses to a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve worked with WordPress for at least six years now &#8211; on both personal and client projects. As a company we&#8217;ve been focusing on larger custom-built projects in the past few years so staying current in the WP community has been a lot more difficult.</p>
<p>Because of this, I&#8217;m transitioning the WordPress courses to a new instructor so that I can focus on my series of web development courses (which are my primary focus anyway). Before I put the materials I&#8217;ve developed for the WordPress courses into eternal digital storage I thought it would be best for me to share the list of tips and plugins used or mentioned in any of these courses.</p>
<p><span id="more-911"></span>I&#8217;d love your comments or recommendations on any plugins I&#8217;ve missed.</p>
<p><strong>Essential Plugins &#8211; For Every WP Install<br />
</strong></p>
<ol>
<li><a href="http://wordpress.org/extend/plugins/wp-db-backup/">WP-DB-Backup</a> &#8211; You can always re-download WordPress, and you&#8217;ll most likely be able to find your theme again. But you don&#8217;t have any backups of your database, which is the most important part. Install this plugin and schedule a backup so that if something happens, your <em>content</em> is still safe.</li>
<li><a href="http://wordpress.org/extend/plugins/google-sitemap-generator/">Google XML Sitemaps</a> &#8211; An XML-based sitemap is simply a directory of every page, post, and other information that search engines should be immediately aware of. It&#8217;s an amazing plugin working with an awesome standard  &#8211; and it&#8217;s done wonders for SEO on every website.</li>
<li><a href="http://akismet.com/">Akismet</a> &#8211; It even comes with WP. Comment spam is bad, and annoying but Akismet will handle it all for you. Free for personal use, with a small recurring fee for commercial.</li>
<li><a href="http://wordpress.org/extend/plugins/all-in-one-seo-pack/">All in One SEO Pack</a> &#8211; This tool modifies some basic functionality so that you can improve your search engine indexing. By making minor changes to the page titles, and meta information, your content is better suited for spidering.</li>
<li><a href="http://wordpress.org/extend/plugins/w3-total-cache/">W3 Total Cache</a> &#8211; WordPress isn&#8217;t exactly the fastest the piece of software, and with enough incoming traffic (usually unexpected traffic when someone popular links to you) it can quickly consume your server resources. The total cache plugin has a huge number of options that all help speed everything up. As the name implies, it caches page content so that php and apache aren&#8217;t churning as hard with <em>every single request</em>. Some great options for css, javascript, and html compression as well. Speed is worth every penny.</li>
</ol>
<p><strong>Statistics Plugins</strong></p>
<ol>
<li><a href="http://ronaldheft.com/code/analyticator/">Google Analyticator</a> &#8211; Google Analytics is the current leader in website statistic software. Even though adding the necessary javascript to your theme isn&#8217;t difficult, it&#8217;s still a pain especially if you&#8217;re not familiar with FTP software. Plugins like Analyticator insert the code for you, no matter the theme.</li>
<li><a href="http://wordpress.org/extend/plugins/clicky/">GetClicky</a> &#8211; Google Analytics is the leader, but I don&#8217;t see that lasting forever with the rise of real-time analytics tools. Clicky is pretty neat service and in many cases, better suited for clients who a) have small sites, b) want real-time information, and c) find G.A. too complex to work with.</li>
<li><a href="http://wordpress.org/extend/plugins/feedburner-plugin/">Feedburner</a> &#8211; The analytics tools are great, but they typically fall short when determining who&#8217;s subscribed to the RSS feeds of your website. If you have your feeds routed through <a href="http://www.feedburner.com">FeedBurner.com</a>, they can.</li>
</ol>
<p><strong>Social Media Integration</strong></p>
<ol>
<li><a href="http://wordpress.org/extend/plugins/twitter-widget-pro/">Twitter Widget Pro</a> &#8211; This plugin ads a widget (requires themes with widget support) that will display your last <em>x</em> tweets.</li>
<li>Facebook &#8211; There are so many plugins now for Facebook, and so many for posting info as well as reading, I&#8217;d recommend just browsing the <a href="http://wordpress.org/extend/plugins/tags/facebook">Facebook Plugin directory</a>.</li>
<li><a href="http://wordpress.org/extend/plugins/facebook-comments-for-wordpress/">Facebook Comments</a> &#8211; This plugin uses the Facebook comments API to load their commenting system onto your posts. Users with Facebook accounts can immediately discuss your post without messing around with the WordPress name/email and spam protection system.</li>
<li><a href="http://alexking.org/projects/wordpress">ShareThis</a> &#8211; Personally I despise seeing tools like these on a website, but they are still in high demand. ShareThis and a few similar plugins allow users to share your content on dozens of social networking websites. A range of icons and logos are displayed and the users choose which network to &#8220;share this&#8221; on.</li>
</ol>
<p><strong>Contact</strong></p>
<ol>
<li><a href="http://wordpress.org/extend/plugins/replyme/">ReplyMe</a> &#8211; This plugin will send an email to users when a comment they&#8217;ve made has been replied directly to. If you need more control, and you need to let them opt-in to such a service, <a href="http://wordpress.org/extend/plugins/subscribe-to-comments/">Subscribe to Comments</a> may work better.</li>
<li><a href="http://contactform7.com/">ContactForm7</a> &#8211; By far the most popular contact form builder. Before this plugin showed up in the repository, developers were essentially building such forms manually &#8211; whether they were directly in theme or wrapped inside of custom plugins. ContactForm7 is now the leader and offers a lot more than just basic contact form support.</li>
<li><a href="http://www.campaignmonitor.com/downloads/wordpress-contact-form-7-plugin/">Contact Form 7 Campaign Monitor Addon</a> &#8211; There are many popular email campaign services out there &#8211; MailChimp, Constant Contact, etc. They all have some basic WordPress plugins. Campaign Monitor is one of the most popular, but it&#8217;s even easier to setup because of this plugin which is simply an addon to ContactForm7.</li>
</ol>
<p><strong>Other</strong></p>
<ol>
<li><a href="http://www.bravenewcode.com/store/plugins/wptouch-pro/">WP Touch</a> &#8211; If your WordPress theme doesn&#8217;t have any mobile device support, WP Touch and WP Touch Pro are cheaper alternatives. These plugins create mobile-friendly versions of your content (independent of your theme however).</li>
<li><a href="http://wordpress.org/extend/plugins/syntaxhighlighter/">Syntax Highlighter Evolved</a> &#8211; For those of you who need the ability to display code snippets in your posts (like us) then you need this plugin. By providing a series of WordPress shortcodes, you can add proper syntax highlighting, line numbering, and the ability to copy the entire snippet to any block of code. Even better is the fact that it works in the comments too!</li>
<li><a href="http://wordpress.org/extend/plugins/yet-another-related-posts-plugin/">Yet Another Related Posts Plugin</a> (Related Entries) &#8211; There are several plugins that attempt to automatically link related posts, but this one seems to work out the best when properly configured. Still, changing the title of the link lists to &#8220;Possibly related&#8221; gives you a lot more leeway when things go wrong.</li>
<li><a href="http://wordpress.org/extend/plugins/mappress-google-maps-for-wordpress/">MapPress</a> &#8211; I&#8217;ve spent a lot of time working with the Google Maps API, so being able to add in a simple map directly from the posts page is extremely helpful. The free version has all of the important features but the pro version adds some more advanced functionality. Now that Google doesn&#8217;t require an API key, it&#8217;s even easier.</li>
</ol>
<p><strong>Resources</strong></p>
<ol>
<li><a href="http://codex.wordpress.org/Main_Page">The WordPress documentation</a>.<strong></strong></li>
<li><a href="http://www.wpbeginner.com/">http://www.wpbeginner.com/</a></li>
<li><a href="http://www.wp-tutorials.org/">http://www.wp-tutorials.org/</a></li>
<li><a href="http://wordpress.tv/">http://wordpress.tv/</a></li>
</ol>
<p>I&#8217;m sure there are hundreds of useful plugins that I haven&#8217;t listed. I&#8217;m always interested in trying out new plugins, so feel free to post any suggestions in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.botsko.net/blog/2011/04/30/the-best-the-essential-wordpress-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sharing a Snippets Library through Dropbox</title>
		<link>http://www.botsko.net/blog/2011/04/30/sharing-a-snippets-library-through-dropbox/</link>
		<comments>http://www.botsko.net/blog/2011/04/30/sharing-a-snippets-library-through-dropbox/#comments</comments>
		<pubDate>Sun, 01 May 2011 00:17:39 +0000</pubDate>
		<dc:creator>Michael Botsko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[1password]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[snippets]]></category>

		<guid isPermaLink="false">http://www.botsko.net/blog/?p=914</guid>
		<description><![CDATA[I&#8217;ve been using the Mac application Snippets and it&#8217;s been getting better with each new release. One essential feature that&#8217;s still missing is any support for syncing a library through a service other than MobileMe. I&#8217;ve even contacted them about the issue, as many have. However, I&#8217;ve recently learned that there is a way to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using the Mac application <a href="http://www.snippetsapp.com/">Snippets</a> and it&#8217;s been getting better with each new release. One essential feature that&#8217;s still missing is any support for syncing a library through a service other than MobileMe. I&#8217;ve even contacted them about the issue, as many have.</p>
<p>However, I&#8217;ve recently learned that there is a way to <em>share</em> the library using <a href="http://www.dropbox.com/">Dropbox</a> &#8211; not <em>sync</em> it, but share it. Simply move the library itself. I had considered this option before (since it&#8217;s how I use <a href="http://agilewebsolutions.com/onepassword">1Password</a>) but there seemed to be no way to move the Snippets library.</p>
<p><span id="more-914"></span>The last item on their FAQ however, describes what we need:</p>
<ol>
<li>Copy the library from ~/Library/Application  Support/Snippets/Snippets.xml to your Dropbox account. (~ = Your user folder.)</li>
<li>Launch the application while holding the <code>option</code> key.</li>
<li>Click the &#8220;Choose a library&#8221; button, and select the new xml file in your Dropbox folder.</li>
</ol>
<p>You&#8217;re done! You can now use this same library from any of your machines with access to the same Dropbox folder.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.botsko.net/blog/2011/04/30/sharing-a-snippets-library-through-dropbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 &amp; CSS3 &#8211; Wireframing in the final product</title>
		<link>http://www.botsko.net/blog/2011/04/26/html5-css3-wireframing-in-the-final-product/</link>
		<comments>http://www.botsko.net/blog/2011/04/26/html5-css3-wireframing-in-the-final-product/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 14:50:57 +0000</pubDate>
		<dc:creator>Michael Botsko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[articles]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://www.botsko.net/blog/?p=909</guid>
		<description><![CDATA[I began writing a few web development articles for WebDesignerDepot.com a few months back, and the first of the series has been published this morning. Head on over to read HTML5 &#38; CSS3: Wireframing in the final product. I&#8217;ve already turned in the next two articles and I have a few more underway.]]></description>
			<content:encoded><![CDATA[<p>I began writing a few web development articles for WebDesignerDepot.com a few months back, and the first of the series has been published this morning. Head on over to read <a href="http://www.webdesignerdepot.com/2011/04/html5-and-css3-wireframing-in-the-final-product/">HTML5 &amp; CSS3: Wireframing in the final product</a>. I&#8217;ve already turned in the next two articles and I have a few more underway.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.botsko.net/blog/2011/04/26/html5-css3-wireframing-in-the-final-product/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Development Course Updates</title>
		<link>http://www.botsko.net/blog/2011/04/22/web-development-course-updates/</link>
		<comments>http://www.botsko.net/blog/2011/04/22/web-development-course-updates/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 23:26:43 +0000</pubDate>
		<dc:creator>Michael Botsko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[pcc]]></category>

		<guid isPermaLink="false">http://www.botsko.net/blog/?p=755</guid>
		<description><![CDATA[At the end of the current term, it will be two years since I began teaching evening web development courses for Portland Community College. I&#8217;ve taught a wide range of topics including Javascript, jQuery, HTML5, CSS2 &#38; 3, PHP, MySQL, and WordPress. In the past few months I&#8217;ve also been involved in planning a new [...]]]></description>
			<content:encoded><![CDATA[<p>At the end of the current term, it will be two years since I began teaching evening web development courses for Portland Community College. I&#8217;ve taught a wide range of topics including Javascript, jQuery, HTML5, CSS2 &amp; 3, PHP, MySQL, and WordPress. In the past few months I&#8217;ve also been involved in planning a new structure and flow of courses for Summer 2011 and beyond.</p>
<p><span id="more-755"></span></p>
<p>I&#8217;m primarily condensing a jumble of older web-related classes into a single flow. We had several classes with overlapping content and misleading titles, so the new structure will make a lot more sense for students beginning their web development careers. I&#8217;ve also decided not to teach any of the WordPress courses after the summer term, allowing me to focus on my continuing and new courses.</p>
<p>Web Development 101 and 102 will begin again in Summer 2011 and will repeat every term. Javascript/jQuery will begin in the Fall and will likely repeat every term.</p>
<p>I&#8217;ve enjoyed this more than I expected because my teaching style really seems to fit well with our students. I&#8217;ve never had an average whole-class evaluation score lower than 4.19 out of 5 and my mean scores are around 4.5. From my understanding, these are difficult scores to maintain for any department.</p>
<p>For my Web 101 courses &#8211; which I enjoy teaching the most &#8211; I&#8217;m earning a 4.64 average score which feels great considering every single student is evaluating my performance.</p>
<p>I&#8217;ve had some <a href="http://www.botsko.net/examples/#course_reviews">reviews from students</a> that really encourage me to continue these courses. From these reviews and discussions with the students and management, I feel that I&#8217;ve been able to do so well because:</p>
<ul>
<li>I enjoy working with web technology, and I enjoy teaching it.</li>
<li>I work with it daily so I&#8217;m aware of current trends, what&#8217;s becoming outdated, and what to expect in the neat future.</li>
<li>I&#8217;ve been doing this long enough, and on such a wide variety of projects that I am able to easily answer any question that comes up. I always back up my recommendations with logic and reasoning that makes sense for all students.</li>
<li>I&#8217;ve been both an employee and a business owner in this field, and I have a unique perspective from both career paths.</li>
<li>I seem to have a knack for taking difficult to understand topics and explaining them very clearly to first-time students.</li>
</ul>
<p>While I&#8217;m not paid for time spent developing course materials, I&#8217;ve found that I really enjoy that time because I&#8217;m able to put in as much <em>iteration</em> time as I want. I&#8217;m constantly refining my course materials based on how students react to the labs. I have a very strict no-slide-presentation rule except for a very short introduction on the first day. The rest of our time is spent in our code editors, building and trying each lesson.</p>
<p>If you&#8217;re interested, I&#8217;ve made all of my <a href="https://github.com/botskonet/pcc-courses">course materials available on GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.botsko.net/blog/2011/04/22/web-development-course-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing MongoDB on CentOS 5</title>
		<link>http://www.botsko.net/blog/2011/04/21/installing-mongodb-on-centos-5/</link>
		<comments>http://www.botsko.net/blog/2011/04/21/installing-mongodb-on-centos-5/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 21:21:07 +0000</pubDate>
		<dc:creator>Michael Botsko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[installing]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.botsko.net/blog/?p=636</guid>
		<description><![CDATA[I&#8217;ve recently been exploring alternatives to SQL-based databases, primarily MongoDB. MongoDB essentially stores records as JSON-encoded values and you interact with those records through the API rather than running any SQL. The following instructions are for getting mongodb installed on CentOS 5, along with the extension necessary for PHP support. Naturally the first step is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently been exploring alternatives to SQL-based databases, primarily <a href="http://www.mongodb.org/">MongoDB</a>.</p>
<p>MongoDB essentially stores records as JSON-encoded values and you interact with those records  through the API rather than running any SQL. The following instructions are for getting mongodb installed on CentOS 5, along with the extension necessary for PHP support.</p>
<p><span id="more-636"></span>Naturally the first step is to install MongoDB&#8230;</p>
<pre class="brush: bash; title: ; notranslate"> $ wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.6.3.tgz
$ tar xzf mongo*.tgz
$ mv mongodb-linux-i686-1.6.3 /mongodb</pre>
<p>No configure/make/install process is needed, so we simply move it to a directory from which we&#8217;ll run it. Mongo uses the /data/db directory to store the actual databases so we need to create and set the proper permissions.</p>
<pre class="brush: bash; title: ; notranslate">$ sudo mkdir -p /data/db/
$ sudo chown `id -u` /data/db</pre>
<p>Once Mongo is installed we need to install the appropriate extension so that we can begin using it from within PHP. Luckily we can find the mongo extension through pecl.</p>
<pre class="brush: bash; title: ; notranslate">$ pecl install mongo</pre>
<p>Once the installation is complete you&#8217;ll be asked to add the new extension to your php.ini file.</p>
<pre class="brush: plain; title: ; notranslate">extension=mongo.so</pre>
<p>Be sure to restart Apache and check your phpinfo to ensure everything installed correctly.</p>
<p>Next, start Mongo:</p>
<pre class="brush: bash; title: ; notranslate">./mongodb/bin/mongod --fork --logpath /var/log/mongodb.log --logappend</pre>
<p>I&#8217;d recommend reading up on Mongo first (go this instant to <a href="http://www.mongly.com/">Mongly</a>), and then using the <a href="http://php.net/manual/en/book.mongo.php">php extension</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.botsko.net/blog/2011/04/21/installing-mongodb-on-centos-5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

