<?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>Matt Banks</title>
	<atom:link href="http://mattbanks.me/feed/" rel="self" type="application/rss+xml" />
	<link>http://mattbanks.me</link>
	<description>thoughts on web development</description>
	<lastBuildDate>Mon, 06 Feb 2017 16:44:56 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.3</generator>
<site xmlns="com-wordpress:feed-additions:1">30698778</site>	<item>
		<title>Using Gulp for WordPress Theme Development</title>
		<link>http://mattbanks.me/gulp-wordpress-development/</link>
		<comments>http://mattbanks.me/gulp-wordpress-development/#comments</comments>
		<pubDate>Tue, 04 Feb 2014 20:57:19 +0000</pubDate>
		<dc:creator><![CDATA[Matt Banks]]></dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[genesis]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[grunt]]></category>
		<category><![CDATA[gruntjs]]></category>
		<category><![CDATA[gulp]]></category>
		<category><![CDATA[gulpjs]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://mattbanks.me/?p=2212</guid>
		<description><![CDATA[<p>Gulp is the new kid on the block when it comes to JavaScript task runners. It&#8217;s gotten off the ground running extremely quickly with its emphasis on code over configuration when compared with Grunt. While still a very young product, I&#8217;ve switched my development away from Grunt and am now using gulp for all of [&#8230;]</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/gulp-wordpress-development/">Using Gulp for WordPress Theme Development</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></description>
				<content:encoded><![CDATA[<p><a href="http://gulpjs.com/">Gulp</a> is the new kid on the block when it comes to JavaScript task runners. It&#8217;s gotten off the ground running extremely quickly with its emphasis on code over configuration when compared with <a href="http://gruntjs.com/">Grunt</a>. While still a very young product, I&#8217;ve switched my development away from Grunt and am now using gulp for all of my new coding.</p>
<p>Keep reading to find out how to use gulp with your WordPress themes to speed up your development and stay on the bleeding edge.</p>
<p><span id="more-2212"></span></p>
<h2>What is gulp?</h2>
<p>gulp is a Node.js based task runner, similar to Grunt, but built for speed and efficiency. gulp uses Node streams, meaning it can build faster as it doesn&#8217;t need to read and write temporary files as it pipes things through the tasks. If you want to learn all about streams, <a href="https://github.com/substack/stream-handbook">check out this great write-up on Github</a>. Breaking it down, gulp allows you to configure your actual tasks, such as processing your styles or processing your JavaScript, with code instead of configuring each option by itself.</p>
<p>It makes sense to look at how it works compared to Grunt, since that&#8217;s how I wrapped my head around gulp.</p>
<p><img data-attachment-id="2225" data-permalink="http://mattbanks.me/gulp-wordpress-development/gulp/" data-orig-file="https://i2.wp.com/mattbanks.me/wp-content/uploads/2014/02/gulp.png?fit=228%2C514" data-orig-size="228,514" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="gulp" data-image-description="" data-medium-file="https://i2.wp.com/mattbanks.me/wp-content/uploads/2014/02/gulp.png?fit=228%2C514" data-large-file="https://i2.wp.com/mattbanks.me/wp-content/uploads/2014/02/gulp.png?fit=228%2C514" class="alignnone size-full wp-image-2225 aligncenter" src="https://i2.wp.com/mattbanks.me/wp-content/uploads/2014/02/gulp.png?resize=228%2C514" alt="gulp" data-recalc-dims="1" /></p>
<h2>How is gulp different than Grunt?</h2>
<p>I first saw <a href="http://markgoodyear.com/2014/01/getting-started-with-gulp/">a great comparison of Grunt and gulp from Mark Goodyear</a> and my interest was piqued. What really clicked for me was seeing that I&#8217;m writing one block of code to process my CSS, one block of code to process my images, and another block of code to process my JavaScript. Compare that to Grunt, where I&#8217;m configuring Compass and Autoprefixer separately for my CSS, Uglify and JSHint separately for my JavaScript, and Imagemin for my images. Instead of configuring a plugin, you&#8217;re writing short, manageable blocks of code that are logically separated based on what you need to do with your development environment.</p>
<p>Let&#8217;s dive right in and see how to use gulp for developing WordPress themes.</p>
<h2>Using gulp with WordPress Themes</h2>
<p>I have two WordPress starter themes setup that I use and you can watch, fork or download as well: <a href="https://github.com/mattbanks/WordPress-Starter-Theme">one for use with most WordPress themes</a> and <a href="https://github.com/mattbanks/Genesis-Starter-Child-Theme">one for use with the Genesis Framework</a>. The master branch on Github currently uses Grunt, as broken down in my article on <a title="Using Grunt for WordPress Theme Development and Deployments" href="http://mattbanks.me/grunt-wordpress-development-deployments/">Using Grunt for WordPress Theme Development and Deployments</a>, but there are separate &#8220;gulp&#8221; branches for each configured to use gulp tasks (<a href="https://github.com/mattbanks/WordPress-Starter-Theme/tree/gulp">WordPress Starter Theme gulp branch</a> / <a href="https://github.com/mattbanks/Genesis-Starter-Child-Theme/tree/gulp">Genesis Starter Child Theme gulp branch</a>). I plan on merging the gulp branches into the master branch at some point in the near future as I plan on using gulp going forward.</p>
<p>First, make sure Node and gulp are installed on your system, and then create a <code>package.json</code> file in the root of your theme to define your dependencies.</p>
<p>View the code on <a href="https://gist.github.com/mattbanks/8811514">Gist</a>.</p>
<p><em>[* Please note, package.json is subject to change. <a title="WordPress and Drupal Starter Themes Using Grunt on Github" href="http://mattbanks.me/wordpress-drupal-starter-themes-grunt/">Check my Grunt WordPress and Drupal repositories on Github for the latest versions</a>]</em></p>
<p>With that in your theme, you can then open the theme folder in your Terminal and run:</p>
<pre class="brush: plain; title: ; notranslate">npm install</pre>
<p>This will tell NPM to download all dependencies and put them in a <code>node_modules</code> folder. Now we&#8217;re ready to create our <code>gulpfile.js</code>.</p>
<p>View the code on <a href="https://gist.github.com/mattbanks/8811514">Gist</a>.</p>
<p><em>[* Please note, Gruntfile.js is subject to change. <a title="WordPress and Drupal Starter Themes Using Grunt on Github" href="http://mattbanks.me/wordpress-drupal-starter-themes-grunt/">Check my Grunt WordPress and Drupal repositories on Github for the latest versions</a>]</em></p>
<p>We first load all of our plugins and setup the <code>livereload</code> server. You&#8217;ll need to install the LiveReload browser extension to connect, which you can get for Chrome, Firefox or Safari. Next, we setup our tasks for our stylesheets. The <code>gulp.src</code> of the tasks defines which files will be processed when the task runs. Here, we specify all SCSS files inside <code>assets/styles/source</code> (but not files in subfolders). We then use Node.js piping to take those files and process them with SASS, run Autoprefixer to put in vendor prefixes as needed, copy the files into a build directory uncompressed, then minify the stylesheets and place them in the theme root, as well as triggering a LiveReload in the browser.</p>
<p>Instead of configuring SASS, Autoprefixer, Minification and LiveReload separately, we have them all piped together in code block for our stylesheets. For me, this is so much more logical and easier to use, maintain and extend. Plus, piping makes it extremely fast!</p>
<p>Separate script processing blocks are setup for vendor plugins and app/site scripts to spit out <code>plugins.min.js</code> and <code>main.min.js</code> files. In those blocks, we&#8217;re concatenating plugins and scripts, running them through JSHint to check for syntax issues and Uglify to compress everything, and then copying files to proper destinations and triggering a LiveReload.</p>
<p>Images are processed in the next gulp task, where any new images are passed through Imagemin to compress JPG, GIF and PNG images down before triggering a LiveReload. The <code>cache</code> plugin makes sure that images aren&#8217;t processed multiple times, so you don&#8217;t need to worry about tasks bogging down every time you add a new image.</p>
<p>You&#8217;ll notice that each task has a <code>notify</code> plugin associated at the end, which triggers an operating system notification to let you know the task is complete (in Mac, it&#8217;s in Notification Center). You can safely remove them if you don&#8217;t want to be bothered every time gulp processes a file.</p>
<p>We next setup our <code>watch</code> task, where we&#8217;re monitoring files for changes and triggering our appropriate gulp tasks as needed. Lastly, we define our default task to run each of the tasks initially and then start watching our files for changes.</p>
<p>To get going, fire up your Terminal and navigate to your theme directory and run:</p>
<pre class="brush: plain; title: ; notranslate">gulp</pre>
<p><img data-attachment-id="2226" data-permalink="http://mattbanks.me/gulp-wordpress-development/rocket/" data-orig-file="https://i2.wp.com/mattbanks.me/wp-content/uploads/2014/02/rocket.png?fit=202%2C202" data-orig-size="202,202" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="rocket" data-image-description="" data-medium-file="https://i2.wp.com/mattbanks.me/wp-content/uploads/2014/02/rocket.png?fit=202%2C202" data-large-file="https://i2.wp.com/mattbanks.me/wp-content/uploads/2014/02/rocket.png?fit=202%2C202" class="size-full wp-image-2226 aligncenter" src="https://i2.wp.com/mattbanks.me/wp-content/uploads/2014/02/rocket.png?resize=202%2C202" alt="rocket" srcset="https://i2.wp.com/mattbanks.me/wp-content/uploads/2014/02/rocket.png?w=202 202w, https://i2.wp.com/mattbanks.me/wp-content/uploads/2014/02/rocket.png?resize=150%2C150 150w" sizes="(max-width: 202px) 100vw, 202px" data-recalc-dims="1" /></p>
<h2>Gulp could use more tasks</h2>
<p>One thing you might notice that&#8217;s missing from gulp here compared to my Grunt setup is deployments. Right now, there is no rsync task for gulp to deploy files. There is <a href="https://github.com/sindresorhus/gulp-ftp">a really nice FTP deployment task</a> from <a href="https://twitter.com/sindresorhus">Sindre Sorhus</a> that&#8217;s available to use if FTP is your deployment tool. Being that gulp is still early in its life cycle, the plugin community is still growing and developing content that people need. I fully expect all of the best Grunt plugins to be ported over to gulp shortly as it seems that the JavaScript community is moving in that direction.</p>
<h2>Wrap Up</h2>
<p>I&#8217;m really enjoying gulp as a task runner, particularly for speed and efficiency of setting up the <code>gulpfile</code>. Yes, WordPress Core uses Grunt for development now, and the beauty of both systems is that you can use either wherever you choose. I have both installed on my Mac and use both daily for multiple projects. Grunt v0.5 looks to bring Node.js streams and piping into play, which will make the JavaScript task runner landscape even more interesting. For now, I&#8217;m a big of gulp!</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/gulp-wordpress-development/">Using Gulp for WordPress Theme Development</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattbanks.me/gulp-wordpress-development/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">2212</post-id>	</item>
		<item>
		<title>Adding Conditional Classes to the HTML Tag in Genesis 2.0</title>
		<link>http://mattbanks.me/conditional-html-classes-genesis-2-0/</link>
		<comments>http://mattbanks.me/conditional-html-classes-genesis-2-0/#respond</comments>
		<pubDate>Mon, 19 Aug 2013 14:47:01 +0000</pubDate>
		<dc:creator><![CDATA[Matt Banks]]></dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[genesis]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 boilerplate]]></category>
		<category><![CDATA[old ie]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://mattbanks.me/?p=2190</guid>
		<description><![CDATA[<p>Have you upgraded to Genesis 2.0 and love the new HTML5 features, but want to target older Internet Explorer versions with classes like with HTML5 Boilerplate? Just drop this code into your child theme&#8217;s functions.php file and you&#8217;re off and running. View the code on Gist. If you want to target IE7 or below, you [&#8230;]</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/conditional-html-classes-genesis-2-0/">Adding Conditional Classes to the HTML Tag in Genesis 2.0</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></description>
				<content:encoded><![CDATA[<p>Have you upgraded to <a href="http://my.studiopress.com/themes/genesis/">Genesis 2.0</a> and love the new HTML5 features, but want to target older Internet Explorer versions with classes like with <a href="http://html5boilerplate.com/">HTML5 Boilerplate</a>? Just drop this code into your child theme&#8217;s functions.php file and you&#8217;re off and running.</p>
<p>View the code on <a href="https://gist.github.com/mattbanks/6269841">Gist</a>.</p>
<p>If you want to target IE7 or below, you can add those classes in as well (I&#8217;m only targeting IE8 here since I don&#8217;t support IE7 and below).</p>
<p>This code is part of my <a href="https://github.com/mattbanks/Genesis-Starter-Child-Theme">base Genesis Child Theme on Github</a> as well.</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/conditional-html-classes-genesis-2-0/">Adding Conditional Classes to the HTML Tag in Genesis 2.0</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattbanks.me/conditional-html-classes-genesis-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">2190</post-id>	</item>
		<item>
		<title>WordPress and Drupal Starter Themes Using Grunt on Github</title>
		<link>http://mattbanks.me/wordpress-drupal-starter-themes-grunt/</link>
		<comments>http://mattbanks.me/wordpress-drupal-starter-themes-grunt/#comments</comments>
		<pubDate>Wed, 13 Mar 2013 14:42:10 +0000</pubDate>
		<dc:creator><![CDATA[Matt Banks]]></dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[genesis]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[grunt]]></category>
		<category><![CDATA[gruntjs]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://mattbanks.me/?p=2152</guid>
		<description><![CDATA[<p>Yesterday, I wrote an article on how I use Grunt with my WordPress theme development and deployment. I casually mentioned the starter themes I have, both for core WordPress development and for use with the Genesis Framework. Being that I use Drupal for clients as well, I figured I would push my latest Drupal 7 [&#8230;]</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/wordpress-drupal-starter-themes-grunt/">WordPress and Drupal Starter Themes Using Grunt on Github</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></description>
				<content:encoded><![CDATA[<p>Yesterday, I wrote an article on <a title="Using Grunt for WordPress Theme Development and Deployments" href="http://mattbanks.me/grunt-wordpress-development-deployments/">how I use Grunt with my WordPress theme development and deployment</a>. I casually mentioned the starter themes I have, both for core WordPress development and for use with the Genesis Framework. Being that I use Drupal for clients as well, I figured I would push my latest Drupal 7 Starter Theme up to <a href="https://github.com/mattbanks">Github</a> so everyone can use it as they see fit.</p>
<h2>Theme Links</h2>
<p><a href="https://github.com/mattbanks/WordPress-Starter-Theme">WordPress Starter Theme on Github</a></p>
<p><a href="https://github.com/mattbanks/Genesis-Starter-Child-Theme">Genesis Starter Child Theme on Github</a></p>
<p><a href="https://github.com/mattbanks/Drupal-7-Starter-Theme">Drupal 7 Starter Theme on Github</a></p>
<p><span id="more-2152"></span></p>
<p>All three use SCSS and Compass for preprocessing and are setup with the same Gruntfile and folder structure to keep things clean. If you&#8217;re looking for recommended plugins/modules, check out the Readme&#8217;s for each repository for what I use on most projects. More information and instructions can be found there as well.</p>
<p>Feel free to clone, fork, create an issue and send pull requests with anything you&#8217;d like to see changed or added!</p>
<p><img data-attachment-id="2165" data-permalink="http://mattbanks.me/wordpress-drupal-starter-themes-grunt/wordpress-drupal-grunt/" data-orig-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-drupal-grunt.jpg?fit=740%2C287" data-orig-size="740,287" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="WordPress Drupal and Grunt Logos" data-image-description="" data-medium-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-drupal-grunt.jpg?fit=565%2C219" data-large-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-drupal-grunt.jpg?fit=740%2C287" class="alignnone size-full wp-image-2165" alt="WordPress Drupal and Grunt Logos" src="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-drupal-grunt.jpg?resize=740%2C287" srcset="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-drupal-grunt.jpg?w=740 740w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-drupal-grunt.jpg?resize=565%2C219 565w" sizes="(max-width: 740px) 100vw, 740px" data-recalc-dims="1" /></p>
<h2>Using Grunt with the WordPress and Drupal Themes</h2>
<p>Just as a quick recap, to use Grunt with the themes, open the theme directory in your Terminal and run</p>
<pre class="brush: plain; title: ; notranslate">npm install</pre>
<p>Once that installs all dependencies, just run</p>
<pre class="brush: plain; title: ; notranslate">grunt</pre>
<p>which will start the watch tasks to monitor and update your files as you go along. Your SCSS will be processed and your JavaScript will be linted, concatenated and minified. Image optimization and rsync deployments are there as well &#8211; refer back to <a title="Using Grunt for WordPress Theme Development and Deployments" href="http://mattbanks.me/grunt-wordpress-development-deployments/">my article on using Grunt for WordPress deployments</a> for how that works.</p>
<p>If you have any questions or suggestions for using Grunt with your CMS, leave a comment or send me a message on <a href="https://twitter.com/mattbanks">Twitter</a> or <a href="https://alpha.app.net/mattbanks">App.net</a>.</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/wordpress-drupal-starter-themes-grunt/">WordPress and Drupal Starter Themes Using Grunt on Github</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattbanks.me/wordpress-drupal-starter-themes-grunt/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">2152</post-id>	</item>
		<item>
		<title>Using Grunt for WordPress Theme Development and Deployments</title>
		<link>http://mattbanks.me/grunt-wordpress-development-deployments/</link>
		<comments>http://mattbanks.me/grunt-wordpress-development-deployments/#comments</comments>
		<pubDate>Tue, 12 Mar 2013 15:36:49 +0000</pubDate>
		<dc:creator><![CDATA[Matt Banks]]></dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[genesis]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[grunt]]></category>
		<category><![CDATA[gruntjs]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://mattbanks.me/?p=2118</guid>
		<description><![CDATA[<p>[Update 2013-05-15: I&#8217;m now using grunt-contrib-watch instead of grunt-regarde and grunt-livereload. It has a built in LiveReload server and is more streamlined. I updated the Gists, the tutorials, and my WordPress Starter Theme, Genesis Starter Child Theme, and Drupal 7 Starter Theme.] There are plenty of options if you&#8217;re looking to use CSS preprocessors and [&#8230;]</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/grunt-wordpress-development-deployments/">Using Grunt for WordPress Theme Development and Deployments</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></description>
				<content:encoded><![CDATA[<p><em>[<strong>Update 2013-05-15:</strong> I&#8217;m now using <a href="https://github.com/gruntjs/grunt-contrib-watch">grunt-contrib-watch</a> instead of grunt-regarde and grunt-livereload. It has a built in LiveReload server and is more streamlined. I updated the Gists, the tutorials, and my <a href="https://github.com/mattbanks/WordPress-Starter-Theme">WordPress Starter Theme</a>, <a href="https://github.com/mattbanks/Genesis-Starter-Child-Theme">Genesis Starter Child Theme</a>, and <a href="https://github.com/mattbanks/Drupal-7-Starter-Theme">Drupal 7 Starter Theme</a>.]</em></p>
<p>There are plenty of options if you&#8217;re looking to use CSS preprocessors and JavaScript linting in your development workflow, but none as flexible and extensible as <a href="http://gruntjs.com/">Grunt</a>. In the past, I used <a href="http://incident57.com/codekit/">CodeKit</a> to handle all of this work, but Grunt has since taken over, giving me additional options such as deployments with greater control over the entire process. With one JavaScript file in the root of my WordPress theme, I can control Compass output paths, JSHint options, UglifyJS concatenation and minification, setup browser live reloading and multiple server deployments, allowing for easy expansion and adaption as things continue to change and grow.</p>
<p>Keep reading to find out how to use Grunt with your WordPress themes to speed up your development and allow you to deploy your code to your servers.</p>
<p><span id="more-2118"></span></p>
<h2>What is Grunt?</h2>
<p>Grunt is an elegant task runner from <a href="http://benalman.com/">Ben Alman</a> written in <a href="http://nodejs.org/">Node</a>. In it&#8217;s latest version 0.4, Grunt has become an elegant wrapper for any task you can imagine. There is a large community behind Grunt with many  contributed plugins that you can add to your projects. Whether you&#8217;re looking to create a full build process or just watch files for changes, Grunt has you covered.</p>
<p>I&#8217;m not going to get too in depth on how to install Grunt &#8211; <a href="http://gruntjs.com/getting-started">check out their Getting Started guide</a> for getting up and running on your system.</p>
<h2>What Can Grunt Do?</h2>
<p>There are countless tasks that Grunt can do for you, but in this case, we&#8217;re going to focus on those that will help our WordPress theme development: <a href="https://github.com/gruntjs/grunt-contrib-compass">Compass</a> preprocessing, <a href="https://github.com/gruntjs/grunt-contrib-jshint">JSHint</a> to check out JavaScript, <a href="https://github.com/gruntjs/grunt-contrib-uglify">UglifyJS</a> to concatenate and minify all JavaScript files, <a href="https://github.com/gruntjs/grunt-contrib-watch">Watch</a> to watch files for changes, trigger our tasks and <a href="https://github.com/gruntjs/grunt-contrib-livereload">LiveReload</a> the browser, <a href="https://github.com/gruntjs/grunt-contrib-imagemin">ImageMin</a> to optimize all PNG and JPG images, and <a href="https://github.com/jedrichards/grunt-rsync">Rsync</a> to deploy our files to remote servers.</p>
<p>All of this is accomplished by adding two files to your theme, a <code>package.json</code> to define which Grunt plugins to use as dependencies, and a <code>Gruntfile.js</code> to define our tasks and options. For more information on getting that all setup, my friend <a href="http://mondaybynoon.com/20130310/grunt-wordpress-theme-development/">Jonathan Christopher has a great article about using Grunt with WordPress</a>.</p>
<h2>Using Grunt with WordPress Themes</h2>
<p>Before we begin, I&#8217;d like to note that I have two WordPress starter themes setup that you use: <a href="https://github.com/mattbanks/WordPress-Starter-Theme">one for use with most WordPress themes</a> and <a href="https://github.com/mattbanks/Genesis-Starter-Child-Theme">one for use with the Genesis Framework</a>. Both utilize all of the Grunt tasks we&#8217;re going to go talk about in this article, with plenty of theme functions and grids to get you started.</p>
<p>Let&#8217;s get going, shall we? Make sure Node and Grunt are installed on your system, and then create a <code>package.json</code> file in the root of your theme to define your dependencies.</p>
<p>View the code on <a href="https://gist.github.com/5143411">Gist</a>.</p>
<p><em>[* Please note, package.json is subject to change. <a title="WordPress and Drupal Starter Themes Using Grunt on Github" href="http://mattbanks.me/wordpress-drupal-starter-themes-grunt/">Check my Grunt WordPress and Drupal repositories on Github for the latest versions</a>]</em></p>
<p>With that in your theme, you can then open the theme folder in your Terminal and run:</p>
<pre class="brush: plain; title: ; notranslate">npm install</pre>
<p>This will tell NPM to download all dependencies and put them in a <code>node_modules</code> folder. Now we&#8217;re ready to create our <code>Gruntfile.js</code>.</p>
<p>View the code on <a href="https://gist.github.com/5143298">Gist</a>.</p>
<p><em>[* Please note, Gruntfile.js is subject to change. <a title="WordPress and Drupal Starter Themes Using Grunt on Github" href="http://mattbanks.me/wordpress-drupal-starter-themes-grunt/">Check my Grunt WordPress and Drupal repositories on Github for the latest versions</a>]</em></p>
<p><del>We first setup the <code>livereload</code> task, but give it no options (you can change the port here if you feel the need).</del> <em>[<strong>Update:</strong> This is now handled the Watch task.]</em> You&#8217;ll need to install the LiveReload browser extension to connect, which you can get for Chrome, Firefox or Safari. Next, we give JSHint our options for how to lint our JavaScript and tell it which files to check in the <code>all</code> setting, followed by configuring Uglify to create source maps and concatenate and minify our files. In my setup, I have it automatically pull <code>assets/js/source/plugins.js</code> and all files inside <code>assets/js/vendor</code> other than Modernizr and put them into <code>assets/js/plugins.min.js</code>, as well as taking our main.js script and minifying.</p>
<p>Next, we tell Compass to use the settings in our external <code>config.rb</code> file for processing our SCSS. I chose to break <code>config.rb</code> out into a separate file instead of putting the options directly inside the <code>Gruntfile.js</code> in case I wanted to use the Compass ruby gem directly or use CodeKit, as both will work using the <code>config.rb</code> file.</p>
<p>The next section sets up Regarde for our watch task to monitor for changed files and triggering our tasks. The reason for using Regarde instead of <a href="https://github.com/gruntjs/grunt-contrib-watch">Grunt Watch</a> is that Watch doesn&#8217;t give access to changed files because it spawns tasks in subprocesses, which doesn&#8217;t play nice with LiveReload. It&#8217;s essentially a drop-in replacement, so swapping back to Watch won&#8217;t be an issue if the way it spawns processes changes. We tell Regarde to fire the <code>compass</code> and <code>livereload</code> tasks whenever an SCSS file is changed, and to fire <code>jshint</code>, <code>uglify</code> and <code>livereload</code> whenever a JS file is changed.</p>
<p><em>[<strong>Update:</strong> Watch now works with LiveReload and has it built in, so the above Regarde code is swapped out for Watch. It&#8217;s essentially the same code, we&#8217;re just adding an option to LiveReload the browser.]</em></p>
<p>The last task for this section is imagemin, which doesn&#8217;t automatically run as file are changed, but run manually with:</p>
<pre class="brush: plain; title: ; notranslate">grunt imagemin</pre>
<p>This will run <a href="http://optipng.sourceforge.net/">OptiPNG</a> and <a href="http://jpegclub.org/jpegtran/">jpegtran</a> on your images to optimize them before you deploy to save on bandwidth.</p>
<p>At the end of the <code>Gruntfile.js</code>, we load all our tasks and register our default task. To run Grunt, at the terminal, just enter</p>
<pre class="brush: plain; title: ; notranslate">grunt</pre>
<p>Now, let&#8217;s get right on the most fun part: using Grunt to deploy your theme to your servers.</p>
<p><img data-attachment-id="2142" data-permalink="http://mattbanks.me/grunt-wordpress-development-deployments/grunt-iterm/" data-orig-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/grunt-iterm.jpg?fit=1000%2C567" data-orig-size="1000,567" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Grunt running in iTerm2" data-image-description="" data-medium-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/grunt-iterm.jpg?fit=565%2C320" data-large-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/grunt-iterm.jpg?fit=1000%2C567" class="alignnone size-full wp-image-2142" alt="Grunt running in iTerm2" src="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/grunt-iterm.jpg?resize=1000%2C567" srcset="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/grunt-iterm.jpg?w=1000 1000w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/grunt-iterm.jpg?resize=565%2C320 565w" sizes="(max-width: 1000px) 100vw, 1000px" data-recalc-dims="1" /></p>
<h2>Deploying Your WordPress Theme with Grunt</h2>
<p>There are a number of deployment choices when it comes to Grunt tasks. <a href="https://github.com/andrewrjones/grunt-ssh">You can use SSH</a> to connect and run commands or transfer files over SFTP, <a href="https://github.com/zonak/grunt-ftp-deploy">you can use FTP</a> to transfer files if you don&#8217;t have SSH access, or <a href="https://github.com/jedrichards/grunt-rsync">you can use Rsync</a> to sync up your directories over an SSH connection. After trying all three, I settled on Rsync as it provided the best and quickest way to update my theme files on the servers I use most. I typically have SSH or SFTP access, so it&#8217;s not an issue for me, but if you have only have FTP access, it&#8217;s trivial to swap out the Rsync plugin with the FTP plugin for your deployments. I&#8217;ve used this method for client sites in the past and it works seemlessly.</p>
<p>In our <code>Gruntfile.js</code>, we have two servers setup: staging and production. Each sets the source as the root of our theme project locally and sets a destination and hostname for our remote server. Setting <code>recursive</code> tells rsync to traverse all subdirectories to make sure we&#8217;re getting all of our files, and <code>syncDest</code> will delete any files on the remote server that no longer exist in your local repository. I&#8217;m excluding a number of files as they aren&#8217;t needed for the theme to run on the server.</p>
<p>To trigger a deployment, at the Terminal, enter:</p>
<pre class="brush: plain; title: ; notranslate">grunt rsync:staging</pre>
<p>or</p>
<pre class="brush: plain; title: ; notranslate">grunt rsync:production</pre>
<p>And like that, you&#8217;ve now deployed your files to your server!</p>
<h2>Wrap Up</h2>
<p>I&#8217;ve changed over my deployments to using Grunt now instead of <a title="Managing WordPress Theme Deployments with Git" href="http://mattbanks.me/wordpress-deployments-with-git/">setting up Git post-commit hooks and bare repositories</a>. Having the general framework in Grunt makes it quicker than configuring post-commit hooks on multiple servers, and it works just as well. With so many tasks available to extend and customize Grunt, it&#8217;s an invaluable tool for any development process.</p>
<p>This method can be easily tweaked to work with any development process, from Drupal themes to ExpressionEngine sites to static site builds and use in other systems. I love the flexibility of Grunt and plan to keep using and evolving my Gruntfile going forward. I hope you do the same!</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/grunt-wordpress-development-deployments/">Using Grunt for WordPress Theme Development and Deployments</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattbanks.me/grunt-wordpress-development-deployments/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">2118</post-id>	</item>
		<item>
		<title>Genesis Framework: My new WordPress Starting Point</title>
		<link>http://mattbanks.me/genesis-framework-my-wordpress-starter/</link>
		<comments>http://mattbanks.me/genesis-framework-my-wordpress-starter/#comments</comments>
		<pubDate>Fri, 01 Mar 2013 16:34:00 +0000</pubDate>
		<dc:creator><![CDATA[Matt Banks]]></dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[genesis]]></category>
		<category><![CDATA[studiopress]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://mattbanks.me/?p=2087</guid>
		<description><![CDATA[<p>When it comes to developing WordPress themes, there are plenty of options. You can start from scratch every time, you can build you own starter theme as a base to tweak, or you can use a theme framework and create a child theme. In my time as a WordPress developer, I&#8217;ve gone through all stages, [&#8230;]</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/genesis-framework-my-wordpress-starter/">Genesis Framework: My new WordPress Starting Point</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></description>
				<content:encoded><![CDATA[<p>When it comes to developing WordPress themes, there are plenty of options. You can start from scratch every time, you can build you own starter theme as a base to tweak, or you can use a theme framework and create a child theme. In my time as a WordPress developer, I&#8217;ve gone through all stages, but have now settled on a theme framework, using <a href="http://my.studiopress.com/themes/genesis/">Genesis Framework</a> from <a href="http://www.studiopress.com/">StudioPress</a> for all of the sites I develop. Not only is it powerful with hooks for everything you can image, but it&#8217;s also secure as hell with each major release vetted by core WordPress team members. So what all does it offer? Let&#8217;s dig in, shall we?</p>
<p><span id="more-2087"></span></p>
<h2>Old Process: Write each theme from scratch</h2>
<p>Back in the old days, I would create a new folder and start coding a theme from scratch, adding every file as needed. Thinking back, I want to smack myself for writing the Loop in every template over and over, but I was young and things were just starting out for me in WordPress. Some of you may still be in this boat, and I would recommend moving up as soon as possible to speed up your development.</p>
<h2>Moving in the right direction: My starter theme</h2>
<p>It didn&#8217;t take long for me to create a starter theme to use on all sites. At first it just lived in a folder on my computer, then in Dropbox, and then <a href="https://github.com/mattbanks/WordPress-Starter-Theme">it went up on Github</a> when I started using git for version control (which everyone should be doing). It&#8217;s gone through many iterations, adding new functionality, refactored code, and streamlined the whole process.</p>
<p><img data-attachment-id="2106" data-permalink="http://mattbanks.me/genesis-framework-my-wordpress-starter/wordpress-starter-theme/" data-orig-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-starter-theme.jpg?fit=1200%2C415" data-orig-size="1200,415" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="WordPress Starter Theme Github" data-image-description="" data-medium-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-starter-theme.jpg?fit=565%2C195" data-large-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-starter-theme.jpg?fit=1024%2C354" class="alignnone size-large wp-image-2106" alt="WordPress Starter Theme Github" src="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-starter-theme.jpg?resize=740%2C255" srcset="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-starter-theme.jpg?resize=1024%2C354 1024w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-starter-theme.jpg?resize=565%2C195 565w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/wordpress-starter-theme.jpg?w=1200 1200w" sizes="(max-width: 740px) 100vw, 740px" data-recalc-dims="1" /></p>
<p>In its current form, my starter theme uses Compass and SASS (specifically SCSS) for all of the CSS wizardry &#8211; preprocessors make things so much easier, so I recommend checking them out if you haven&#8217;t yet. I added in a responsive grid framework from <a href="http://css-tricks.com/dont-overthink-it-grids/">Chris Coyier</a>, broke out most of the content into template parts, and built out theme functions to define everything I think is needed as a starting point for a new theme. Feel free to <a href="https://github.com/mattbanks/WordPress-Starter-Theme">clone or fork it on Github</a> and send pull requests with anything you think might make it better!</p>
<p>This technique has worked well for me, but then I found Genesis and it will be powering the vast majority of projects going forward.</p>
<h2>Genesis Framework: My new process</h2>
<p>Enter <a href="http://my.studiopress.com/themes/genesis/">Genesis Framework</a>, the core theme from <a href="http://www.studiopress.com/">StudioPress</a>. After hearing great things on Twitter from well respected WordPress developers such as <a href="http://www.twitter.com/billerickson">Bill Erickson</a> and <a href="http://twitter.com/jaredatch">Jared Atchison</a>, I decided to pick up a copy for myself. I grabbed the <a href="http://my.studiopress.com/themes/minimum/">Minimum child theme</a> with it (which is what powers this site) and went to town digging into the documentation, reading the source code, and adding functionality. I immediately loved what I saw &#8211; Genesis is rock solid!</p>
<p>In addition to the security and speed of the platform, it offers a full grid setup that I can easily implement to speed up theme development. With the numerous hooks available, it&#8217;s easily to drop in any additional content or modify things for any output needed. You can also change the page layout on the fly on a per-post/page basis, which makes it very easy for clients to tweak settings without breaking their site. It&#8217;s updated frequently, adding features, hooks and functions to make developing with Genesis even better.</p>
<p>To make things even quicker, <a href="https://github.com/mattbanks/Genesis-Starter-Child-Theme">I adapted my WordPress Starter Theme for Genesis and put it up on Github</a> &#8211; <a href="https://github.com/mattbanks/Genesis-Starter-Child-Theme">fork it and contribute</a> with anything that might make it better for everyone!</p>
<p><img data-attachment-id="2109" data-permalink="http://mattbanks.me/genesis-framework-my-wordpress-starter/genesis-starter-theme/" data-orig-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/genesis-starter-theme.png?fit=1918%2C640" data-orig-size="1918,640" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Genesis Starter Child Theme Github" data-image-description="" data-medium-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/genesis-starter-theme.png?fit=565%2C188" data-large-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/genesis-starter-theme.png?fit=1024%2C341" class="alignnone size-large wp-image-2109" alt="Genesis Starter Child Theme Github" src="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/genesis-starter-theme.png?resize=740%2C246" srcset="https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/genesis-starter-theme.png?resize=1024%2C341 1024w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2013/03/genesis-starter-theme.png?resize=565%2C188 565w" sizes="(max-width: 740px) 100vw, 740px" data-recalc-dims="1" /></p>
<p>Genesis fits my development style perfectly. The support included when you buy Genesis is also top notch, so if run into any issues, StudioPress is there to help you out.</p>
<h2>Where do we go from here?</h2>
<p>The one current limitation of Genesis for my development style is that it doesn&#8217;t have native HTML5 support. In my <a href="https://github.com/mattbanks/Genesis-Starter-Child-Theme">Genesis Starter Child Theme</a>, I have an HTML5 doctype in place, but it&#8217;s still not using header, nav, section, aside, footer and other HTML5 elements I typically use. There are ways to override each area in Genesis to use the elements, but I decided to leave it be since these are all coming in version 2.0 in the near future, so this won&#8217;t be an issue for much longer. My plan going forward is to use Genesis on every WordPress project I can, which should be all of them once full HTML5 support comes in version 2.0.</p>
<p>I would highly recommend buying a copy of Genesis if you do theme development for clients or yourself. It&#8217;s only $59.95 and you get updates and support for the life of the product, which is worth every single penny!</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/genesis-framework-my-wordpress-starter/">Genesis Framework: My new WordPress Starting Point</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattbanks.me/genesis-framework-my-wordpress-starter/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">2087</post-id>	</item>
		<item>
		<title>Managing WordPress Theme Deployments with Git</title>
		<link>http://mattbanks.me/wordpress-deployments-with-git/</link>
		<comments>http://mattbanks.me/wordpress-deployments-with-git/#comments</comments>
		<pubDate>Sat, 28 Jul 2012 15:03:58 +0000</pubDate>
		<dc:creator><![CDATA[Matt Banks]]></dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Bluehost]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[git remote]]></category>
		<category><![CDATA[iTerm 2]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[shared hosting]]></category>
		<category><![CDATA[Terminal]]></category>

		<guid isPermaLink="false">http://mattbanks.me/?p=2021</guid>
		<description><![CDATA[<p>You&#8217;re using version control for all of your code, right? One part of the process that took me longer than I would have liked to master is deployments via git. I use Bitbucket for all of my private repositories (I have a free unlimited account, so I haven&#8217;t found a need to pay for Github) [&#8230;]</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/wordpress-deployments-with-git/">Managing WordPress Theme Deployments with Git</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></description>
				<content:encoded><![CDATA[<p>You&#8217;re using version control for all of your code, right? One part of the process that took me longer than I would have liked to master is deployments via git. I use <a href="https://bitbucket.org/">Bitbucket</a> for all of my private repositories (I have a free unlimited account, so I haven&#8217;t found a need to pay for <a href="https://github.com/">Github</a>) and I wanted to find a way to deploy via the command line in the same way I push code to Bitbucket. After a lot of searching and trials and errors, I&#8217;ve come up with a good system that works for me. It might not be the best or most efficient, but it&#8217;s what makes the most sense to me. Most of my deployments will be <a href="http://wordpress.org">WordPress</a> themes and plugins that I <a href="http://www.kernelcreativemedia.com">develop for clients</a>, so that&#8217;s where I focused my efforts.</p>
<p>I read a lot of code examples and blog posts while searching for this technique and a few things never clicked for me, so I wanted to highlight the process for anyone that might have been in the same boat as me.</p>
<p><span id="more-2021"></span></p>
<p>Before we start, let&#8217;s get some requirements out of the way:</p>
<ul>
<li>You have SSH access to your server (if you have shared hosting, make sure you can get SSH access)</li>
<li>Git is installed on your local machine and on your server</li>
<li>You have a local git repository already setup with your code (I&#8217;ll be using a WordPress theme as an example)</li>
</ul>
<p>I&#8217;m using a Mac for local development, so if you&#8217;re using Windows, things will be slightly different in how you access the command line.</p>
<h2>What&#8217;s this Capistrano thing?</h2>
<p><a href="https://github.com/capistrano/capistrano">Capistrano</a> is a terrific deployment tool build on Ruby. You can use it to automate deployments, quickly roll back to previous versions, etc. I spent a good part of a day learning Capistrano and what it can do, only to find out it won&#8217;t work with shared hosting environments very well. Why is that?</p>
<p>Well, Capistrano creates a directory structure in your deployment location (using /public_html as an example):</p>
<pre class="brush: bash; title: ; notranslate">
public_html
-- releases
-- shared
-- current (symlink pointing to your latest deployed code in /releases)
</pre>
<p>The problem here is that to effectively use Capistrano, you need to change your Apache settings to point the DocumentRoot to <code>/public_html/current</code>, which isn&#8217;t possible with most shared hosts (or most hosts running cPanel). So, while it&#8217;s a great tool, it&#8217;s not the tool for what I need.</p>
<h2>Git Remotes to the Rescue</h2>
<p>You should be aware of git remotes by using Github, Bitbucket or some other repository management system. It&#8217;s a way to push your code changes somewhere offsite for sharing, collaboration, backup, etc. With any repository, you can add as many remotes as you&#8217;d like. So let&#8217;s get right to it.</p>
<p>In this example, I&#8217;m going to use a WordPress theme as my deployment code. I&#8217;m not using the entire WordPress structure as the repository for a few reasons (simplicity in the case of this example, and also for needs of the client website that I&#8217;m developing).</p>
<p>Here&#8217;s a look at the local repository:</p>
<p><a href="https://i1.wp.com/mattbanks.me/wp-content/uploads/2012/07/kernelmedia-git-repo.jpg"><img data-attachment-id="2030" data-permalink="http://mattbanks.me/wordpress-deployments-with-git/kernelmedia-git-repo/" data-orig-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2012/07/kernelmedia-git-repo.jpg?fit=885%2C604" data-orig-size="885,604" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="kernelmedia git repo" data-image-description="" data-medium-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2012/07/kernelmedia-git-repo.jpg?fit=565%2C385" data-large-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2012/07/kernelmedia-git-repo.jpg?fit=885%2C604" class="size-medium wp-image-2030" title="kernelmedia git repo" alt="" src="https://i1.wp.com/mattbanks.me/wp-content/uploads/2012/07/kernelmedia-git-repo.jpg?resize=565%2C385" srcset="https://i1.wp.com/mattbanks.me/wp-content/uploads/2012/07/kernelmedia-git-repo.jpg?resize=565%2C385 565w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2012/07/kernelmedia-git-repo.jpg?resize=439%2C300 439w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2012/07/kernelmedia-git-repo.jpg?w=885 885w" sizes="(max-width: 565px) 100vw, 565px" data-recalc-dims="1" /></a></p>
<p>To create your repository, open Terminal (or <a href="https://github.com/capistrano/capistrano">iTerm 2</a>, which I strongly prefer) and navigate to your code directory:</p>
<pre class="brush: bash; title: ; notranslate">
cd your-project
git init
git add .
git commit -m &quot;initial commit&quot;
</pre>
<p>We&#8217;re now ready to create a remote repository. I&#8217;m using a shared hosting environment with <a href="http://www.bluehost.com/track/mattbanks">Bluehost</a> for this example deployment, where I have an SSH connection setup with public key authentication. The big thing to remember here, which took me a while to grasp, is that the remote repository you&#8217;re going to push to will be a <em><strong>separate directory</strong></em> than the actual WordPress theme we&#8217;re deploying. Locally, the repository is always the code directory, but for remote deployments, we need to do things a bit differently.</p>
<p>So, let&#8217;s connect to our server (replace your user details and directory structure). We&#8217;re going to a create a folder named <code>repos</code> outside of the <code>public_html</code> directory that will house our remote repositories.</p>
<pre class="brush: bash; title: ; notranslate">
ssh user@example.org
mkdir repos &amp;&amp; cd repos
mkdir your-project.git &amp;&amp; cd your-project.git
git --bare init
</pre>
<p>We&#8217;ve now created a bare repository on our web server that we will use as our remote location. Still with me? We&#8217;re getting closer! The next step is to setup our post-receive hook. This is a script that will run every time you push code to the remote repository. Here&#8217;s how to set that up (I&#8217;m going to use vim, but you can use any editor you choose &#8211; you&#8217;ll run this while still connected to your server by SSH):</p>
<pre class="brush: bash; title: ; notranslate">vim hooks/post-receive</pre>
<p>Now, put this code into your <code>post-receive</code> file (replacing the path with the full path to where you want the code deployed).</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/sh
GIT_WORK_TREE=/home/myuser/public_html/wp-content/themes/mytheme git checkout -f
</pre>
<p>After that&#8217;s done, you&#8217;ll need to give the <code>post-receive</code> file execute rights so it&#8217;ll actually do the work:</p>
<pre class="brush: bash; title: ; notranslate">
chmod +x hooks/post-receive
</pre>
<p><em>[UPDATE: Thanks to <a href="http://www.martinsjastad.com/" rel="external nofollow">Martin Sjåstad</a> for pointing out I forgot the chmod +x line!]</em></p>
<p>That&#8217;s it! We&#8217;re now ready to deploy our code by just using:</p>
<pre class="brush: bash; title: ; notranslate">git push</pre>
<h2>Let&#8217;s Deploy that WordPress Theme</h2>
<p>Back on our local machine, let&#8217;s add our server to the git remote (replace <code>myserver</code> with whatever name you&#8217;d like to give the remote and add your login credentials):</p>
<pre class="brush: bash; title: ; notranslate">
cd your-project
git remote add myserver ssh://username@your-website.com/~/repos/your-project.git
git push myserver +master:refs/heads/master
</pre>
<p>Your code will now be pushed to the bare repository you created, and then the post-receive hook will checkout the code to the location you specified. In my case, that&#8217;s my theme directory:</p>
<pre class="brush: bash; title: ; notranslate">/public_html/wp-content/themes/mytheme</pre>
<p>To update your code later with a new push, just run:</p>
<pre class="brush: bash; title: ; notranslate">
git push myserver
</pre>
<h2>That wasn&#8217;t so bad, was it?</h2>
<p>While it might be daunting for those new to version control, it&#8217;s really a quite simple process once you wrap your mind around keeping your bare repository separate from your deployed code. I&#8217;ve used services like <a href="http://beanstalkapp.com/">Beanstalk</a> in the past for deployments, but decided I didn&#8217;t want to pay for that when I can do it myself easily from the command line.</p>
<p>Hopefully this helped some of you that were in the same position I was while setting up remote deployments. A lot of credit is due to <a href="http://toroid.org/ams/git-website-howto">an article I found from Abhijit Menon-Sen</a>. Also thanks to <a href="http://www.twitter.com/mubashariqbal">Mubashar Iqbal</a>, <a href="https://twitter.com/jackmcdade">Jack McDade</a> and <a href="https://twitter.com/jchristopher">Jonathan Christopher</a> for tips. If you have thoughts on how to do this better, by all means let me know in the comments or send me a message on <a href="https://twitter.com/mattbanks">Twitter (@mattbanks)</a>.</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/wordpress-deployments-with-git/">Managing WordPress Theme Deployments with Git</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattbanks.me/wordpress-deployments-with-git/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">2021</post-id>	</item>
		<item>
		<title>Contributing to WordPress Core &#8211; It&#8217;s Time to Give Back</title>
		<link>http://mattbanks.me/contributing-wordpress/</link>
		<comments>http://mattbanks.me/contributing-wordpress/#respond</comments>
		<pubDate>Wed, 21 Dec 2011 17:18:44 +0000</pubDate>
		<dc:creator><![CDATA[Matt Banks]]></dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[coda]]></category>
		<category><![CDATA[contribute]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://mattbanks.me/?p=1965</guid>
		<description><![CDATA[<p>[Update 2012-07-28: It&#8217;s been almost 3/4 a year since I wrote this and time hasn&#8217;t been on my side for getting involved in WordPress core/trac. Hopefully soon&#8230;] I&#8217;ve been using WordPress for a number of years now. What started as hobby has turned into a business, as Kernel Creative Media uses WordPress for the majority [&#8230;]</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/contributing-wordpress/">Contributing to WordPress Core &#8211; It&#8217;s Time to Give Back</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></description>
				<content:encoded><![CDATA[<p><em>[<strong>Update 2012-07-28</strong>: It&#8217;s been almost 3/4 a year since I wrote this and time hasn&#8217;t been on my side for getting involved in WordPress core/trac. Hopefully soon&#8230;]</em></p>
<p>I&#8217;ve been using <a href="http://www.wordpress.org">WordPress</a> for a number of years now. What started as hobby has turned into a business, as <a href="http://www.kernelcreativemedia.com">Kernel Creative Media</a> uses WordPress for the majority of our projects. Seeing as I&#8217;m constantly writing PHP, CSS and JavaScript to extend and customize the content management system, I figured it&#8217;s about time I start giving back. Yesterday, I decided that I would begin contributing to WordPress core. What all does that mean? A lot, actually.<br />
<span id="more-1965"></span></p>
<h2>History with WordPress</h2>
<p>My first foray with WordPress came about 7 years ago, before I really knew much about the platform. I wanted to write a blog, which no one ended up reading (hopefully people read this, but that&#8217;s another can of worms). Then I started <a href="http://www.loot-ninja.com">Loot Ninja</a>, a video game reviews and editorial website, and we chose WordPress as our platform. It was pretty sparse at first, just grabbing some off the shelf themes and plugins. As time went on, I wrote a couple custom themes, functions and plugins to suit the site&#8217;s needs. Fast forward to today, where client projects for Kernel Creative Media are bending and shaping WordPress in ways I never would have imagined in those early days. I&#8217;ve used more content management systems than I&#8217;d care to count and I always come back to WordPress as my go-to favorite.</p>
<p>Deciding to contribute wasn&#8217;t just an &#8220;oh, I&#8217;ll do that&#8221; decision. It requires time and dedication to make the platform and code better. The first thing I did was read up on the ways to <a href="http://codex.wordpress.org/Contributing_to_WordPress">contribute to WordPress</a>. I already participate in the IRC chat (I&#8217;m &#8220;mattbanks&#8221; on Freenode), and post occasionally in the <a href="http://www.wordpress.org/support">Support Forums</a>, but I wanted to do even more, so I decided I would take a look at WordPress Core and see if I could work and test any patches. There are some caveats if you&#8217;re in a similar situation, which are all fine by me. You have to be familiar and comfortable working from the command line. You have to be able to articulate and document bugs and patches. You have to be patient enough to know that anything broken can be fixed. I feel it&#8217;s time for me to help.</p>
<p>As you&#8217;re reading this, keep in mind that I&#8217;m a beginner at contributing to WordPress. If you&#8217;re a seasoned vet, you&#8217;ll know this already, but I wanted to document my experiences so others might join in and contribute as well.</p>
<h2>Subversion on Mac &#8211; It&#8217;s Just That Easy</h2>
<p><img data-attachment-id="1993" data-permalink="http://mattbanks.me/contributing-wordpress/mac-terminal-subversion-screenshot/" data-orig-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/12/Mac-Terminal-Subversion-screenshot.png?fit=892%2C564" data-orig-size="892,564" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Mac Terminal Subversion screenshot" data-image-description="" data-medium-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/12/Mac-Terminal-Subversion-screenshot.png?fit=565%2C357" data-large-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/12/Mac-Terminal-Subversion-screenshot.png?fit=892%2C564" class="alignnone size-medium wp-image-1993" title="Mac Terminal Subversion screenshot" alt="" src="https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/12/Mac-Terminal-Subversion-screenshot.png?resize=565%2C357" srcset="https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/12/Mac-Terminal-Subversion-screenshot.png?resize=565%2C357 565w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/12/Mac-Terminal-Subversion-screenshot.png?resize=474%2C300 474w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/12/Mac-Terminal-Subversion-screenshot.png?w=892 892w" sizes="(max-width: 565px) 100vw, 565px" data-recalc-dims="1" /></p>
<p>If you&#8217;re running Windows, I&#8217;m sorry. I&#8217;m a big Mac fan and use them both at work at home. Things are just easier and the tools you need are readily at your disposal. And with a Mac, checking out the source code with Subversion is a snap. One of the WordPress lead developers, Mark Jaquith, <a href="http://markjaquith.wordpress.com/2005/11/02/my-wordpress-toolbox/">has a lovely tutorial for getting setup quickly on his blog</a>. The gist of is that you want to create a folder to house the WordPress files (I made one on Dropbox so I can use multiple machines easily), and then run the following command from Terminal:</p>
<pre class="brush: bash; title: ; notranslate">svn co http://svn.automattic.com/wordpress/trunk/ .</pre>
<p>Note the space and period at the end there. When I first ran the command without them, a sub-folder called &#8220;trunk&#8221; was created to separate the trunk branch from any other branches I might check out. Since I&#8217;ll only be working from trunk, having it an extra folder level deep isn&#8217;t necessary, so I started over. Once I had the files downloaded, it&#8217;s just a matter of updating my local files before I start any work. A simple command from Terminal takes care of that:</p>
<pre class="brush: bash; title: ; notranslate">svn up</pre>
<p>So why use Terminal for all of this instead of an app like <a href="http://versionsapp.com/">Versions</a> or <a href="http://www.zennaware.com/cornerstone/index.php">Cornerstone</a>? Being a comfortable git fan who uses <a href="http://www.git-tower.com/">Tower</a>, <a href="http://mac.github.com/">Github&#8217;s Mac App</a> as well as the git command line, my first instinct was to grab a copy of either Versions of Cornerstone and go to work, but Andrew Nacin, another core developer for WordPress, let me know about issues with patching and creating diff files with the Mac software.</p>
<blockquote class="twitter-tweet" width="500">
<p><a href="https://twitter.com/mattbanks">@mattbanks</a> There isn&#39;t a good one out there, AFAIK. Versions can&#39;t create patches. Most tough it out and use the CLI: <a href="http://t.co/aSI2Hkvy">http://t.co/aSI2Hkvy</a></p>
<p>&mdash; Andrew Nacin (@nacin) <a href="https://twitter.com/nacin/statuses/145305649788628992">December 10, 2011</a></p></blockquote>
<p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<h2>Patching, Diffs, and the World of Contribution</h2>
<p>So what are these diff files? When you change something to create a patch, you want to create a diff file to send the differences to the <a href="http://trac.wordpress.org/">WordPress Trac</a> for testing. This patch allows other developers to test what you&#8217;ve just written to make sure it&#8217;s secure, has good performance, and actually fixes what you say it does. Creating diff files is easy with Subversion in Terminal. You can either make a patch for a particular filename:</p>
<pre class="brush: bash; title: ; notranslate">svn diff filename.php &gt; filename.diff</pre>
<p>Or you can make a big patch for all the files you&#8217;ve changed:</p>
<pre class="brush: bash; title: ; notranslate">svn diff &gt; big_patch.diff</pre>
<p>Once you&#8217;re ready, post an issue over at the WordPress Trac with your diff file to queue it up for testing. You&#8217;ll get responses form other developers, possibly some debate on whether the change is necessary, and it&#8217;ll either get approved or not.</p>
<p>Many times, though, you&#8217;ll be testing other people&#8217;s patches. Reading through the issue list is a great way to find out what needs fixing. If something needs a patch, hop in and code it if it you can, or test a patch that someone else submitted. Again, it&#8217;s a simple process at the command line. Download the file, place it in the WordPress directory you cloned earlier, and drop this bad boy into Terminal (obviously, with all of these examples, you need to replace paths and filenames to suit your environment):</p>
<pre class="brush: bash; title: ; notranslate">patch -p0 &lt; patch.diff</pre>
<p>If you find problems applying the patch or bugs afterwards, posting back in Trac lets everyone know. It&#8217;s a fairly simple process if you&#8217;re comfortable with all of the tools.</p>
<h2>What&#8217;s in it for Me?</h2>
<p>So why did I decide this was for me? Like I said earlier, I wanted to give back and help make the system I use on a daily basis better for myself and all of its users. I had a patch ready to go for a bug I&#8217;ve been noticing (rel=&#8221;category tag&#8221; causing HTML5 validation errors), but someone beat me to it and patched it in already. I tested the patch and am moving on to some other issues that I&#8217;d like to assist with. Overall, it just makes me feel good.</p>
<p>If you know how to write code and love WordPress like I do, why don&#8217;t you jump on it and help in the development process? You just might end up getting your name in the Credits page on everyone&#8217;s dashboard!</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/contributing-wordpress/">Contributing to WordPress Core &#8211; It&#8217;s Time to Give Back</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattbanks.me/contributing-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">1965</post-id>	</item>
		<item>
		<title>I&#8217;m Addicted to Mortal Kombat &#8211; My Favorite Fighting Game Ever</title>
		<link>http://mattbanks.me/im-addicted-to-mortal-kombat/</link>
		<comments>http://mattbanks.me/im-addicted-to-mortal-kombat/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 16:31:38 +0000</pubDate>
		<dc:creator><![CDATA[Matt Banks]]></dc:creator>
				<category><![CDATA[Video Games]]></category>
		<category><![CDATA[DLC]]></category>
		<category><![CDATA[Fighting Games]]></category>
		<category><![CDATA[Mortal Kombat]]></category>
		<category><![CDATA[Online Gaming]]></category>
		<category><![CDATA[PS3]]></category>

		<guid isPermaLink="false">http://www.mjbanks.com/?p=1930</guid>
		<description><![CDATA[<p>Since Loot Ninja is no longer operating, I&#8217;ve had a chance to go back and play games that eluded me for quite some time. I finally finished Uncharted 2, and while I still want to play Red Dead Redemption and go through Mass Effect 2 on PS3 to get my game save how I&#8217;d like [&#8230;]</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/im-addicted-to-mortal-kombat/">I&#8217;m Addicted to Mortal Kombat &#8211; My Favorite Fighting Game Ever</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></description>
				<content:encoded><![CDATA[<p>Since Loot Ninja is no longer operating, I&#8217;ve had a chance to go back and play games that eluded me for quite some time. I finally finished <em>Uncharted 2</em>, and while I still want to play <em>Red Dead Redemption</em> and go through <em>Mass Effect 2</em> on PS3 to get my game save how I&#8217;d like going in to <em>Mass Effect 3</em>, I&#8217;ve shelved those for a bit and have spent most of my gaming time with <em>Mortal Kombat</em>. <a href="http://loot-ninja.com/2011/05/03/review-mortal-kombat/" target="_blank">I reviewed the game for Loot Ninja</a> (link will only be active through July 31, 2011), but being as I needed to move forward with other titles, I didn&#8217;t have as much chance as I would have liked at the time to dig deep into the game. Over the long July 4th weekend, I put in quite a few hours with the game. I&#8217;m hooked.</p>
<p><span id="more-1930"></span></p>
<h2>Mortal Kombat Gameplay, Story Mode and Online Play</h2>
<p><img data-attachment-id="1941" data-permalink="http://mattbanks.me/im-addicted-to-mortal-kombat/mortal-kombat-king-of-the-hill/" data-orig-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-King-of-the-Hill.jpg?fit=1276%2C717" data-orig-size="1276,717" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Mortal Kombat &#8211; King of the Hill" data-image-description="" data-medium-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-King-of-the-Hill.jpg?fit=565%2C317" data-large-file="https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-King-of-the-Hill.jpg?fit=1024%2C575" class="alignnone size-medium wp-image-1941" title="Mortal Kombat - King of the Hill" alt="" src="https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-King-of-the-Hill.jpg?resize=565%2C317" srcset="https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-King-of-the-Hill.jpg?resize=565%2C317 565w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-King-of-the-Hill.jpg?resize=1024%2C575 1024w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-King-of-the-Hill.jpg?resize=500%2C280 500w, https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-King-of-the-Hill.jpg?w=1276 1276w" sizes="(max-width: 565px) 100vw, 565px" data-recalc-dims="1" /></p>
<p>While I did cover everything in my review at Loot Ninja, I didn&#8217;t go extremely in depth in each area of the game. We had a short-form review system at the site, which works perfectly for reviews (who really wants to sit and read an overly long multi-page review and not just get to the point?), so writing on my own blog gives me the chance to go a bit more in-depth into each of my favorite areas. The gameplay itself in <em>Mortal Kombat</em> is some of the most balanced, intuitive and deep fighting gameplay I&#8217;ve ever experienced. Many fighting games excel in one of those areas, but <em>Mortal Kombat</em> nails the whole spectrum. Beginners can hop in and enjoy themselves while seasoned vets can perfect their combo juggling forever. It&#8217;s setup perfectly to cater to everyone while still being insanely fun &#8211; enough credit cannot be given to Ed Boon and his team at NetherRealm Studios.</p>
<p>Story Mode in <em>Mortal Kombat</em> is one of the areas where I spent the most amount of time initially. While being the best Story mode in any fighting game, it serves an even greater purpose &#8211; you are forced to use and get used to almost every character. While some my scoff at the idea, being handed each character to try is something many people just don&#8217;t do in a fighting game (or at least use more than once). Having four or more fights each gives you a chance to hone your skills and find out which Kombatants are your cream of the crop. Had I not played through the Story mode, I don&#8217;t think I would have been nearly as proficient with some of the characters as I am now (more on that later). There isn&#8217;t a whole lot of replay value to Story Mode, even at higher difficulties, but it did give me reason to use some new Kombatants in the Arcade Ladders.</p>
<p>Online play has always been odd in fighting games on consoles &#8211; multiplayer is where fighting games shine, but lag and disconnects kill it right from the start. <em>Mortal Kombat</em> has its fair share of both (even moreso right now as we&#8217;re awaiting a patch to fix a DLC-related issue), but overall I&#8217;ve had a better time online with this game than others recently. <em>Super Street Fighter IV</em> is good, but <em>Mortal Kombat</em> is better &#8211; aside from not having a Spectator mode, which annoys the crap out of me. King of the Hill does the best job I&#8217;ve seen of replicating the arcade experience of earlier days in the online realm and excels when you have a private room with all your friends. Just keep taunting each other while you perform Fatalities left and right. It&#8217;s a blast.</p>
<h2>The Krypt</h2>
<p><img data-attachment-id="1938" data-permalink="http://mattbanks.me/im-addicted-to-mortal-kombat/mortal-kombat-the-krypt/" data-orig-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-The-Krypt.jpg?fit=620%2C349" data-orig-size="620,349" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Mortal Kombat &#8211; The Krypt" data-image-description="" data-medium-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-The-Krypt.jpg?fit=565%2C318" data-large-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-The-Krypt.jpg?fit=620%2C349" class="alignnone size-medium wp-image-1938" title="Mortal Kombat - The Krypt" alt="" src="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-The-Krypt.jpg?resize=565%2C318" srcset="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-The-Krypt.jpg?resize=565%2C318 565w, https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-The-Krypt.jpg?resize=500%2C281 500w, https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-The-Krypt.jpg?w=620 620w" sizes="(max-width: 565px) 100vw, 565px" data-recalc-dims="1" /></p>
<p>I&#8217;m usually not a completionist in games, but The Krypt has taken hold of me and won&#8217;t let go. I initially started with going section by section unlocking things in order, but decided after spending 40,000 Coins to cherry-pick my way through the disturbing unlockables. Watching birds peck open a distended undead corpse stomach to let loose a green ball of whatnot is both blood-curdling and yet addicting. Anyway, I went online and <a href="http://www.ripten.com/2011/04/21/mortal-kombat-krypt-kompletion-guide-alternate-costumes-fatalities-and-kodes-mauler/" target="_blank">found a terrific guide to The Krypt from Ripten</a> that highlights all the areas of major importance, particularly the Fatalities and costumes. I&#8217;m 95% done with unlocking everything and will be playing through more of the Challenge Tower (another amazing fighting game mode) to get enough Coins to finish.</p>
<h2>My Favorite Kombatants</h2>
<p><img data-attachment-id="1939" data-permalink="http://mattbanks.me/im-addicted-to-mortal-kombat/mortal-kombat-cyrax-sector/" data-orig-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Cyrax-Sector.jpg?fit=800%2C450" data-orig-size="800,450" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Mortal Kombat Cyrax Sector" data-image-description="" data-medium-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Cyrax-Sector.jpg?fit=565%2C317" data-large-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Cyrax-Sector.jpg?fit=800%2C450" class="alignnone size-medium wp-image-1939" title="Mortal Kombat Cyrax Sector" alt="" src="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Cyrax-Sector.jpg?resize=565%2C317" srcset="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Cyrax-Sector.jpg?resize=565%2C317 565w, https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Cyrax-Sector.jpg?resize=500%2C281 500w, https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Cyrax-Sector.jpg?w=800 800w" sizes="(max-width: 565px) 100vw, 565px" data-recalc-dims="1" /></p>
<p>I quickly found that some of my old favorites just didn&#8217;t do the trick in the new <em>Mortal Kombat</em>. Mainstays of my <em>Mortal Kombat 2</em> days included Lui Kang, Baraka and Sub Zero. However, their move sets, timings and combos just didn&#8217;t jive with how my fighting style has evolved. I&#8217;m not saying they&#8217;re bad, because I&#8217;ve seen some amazing fights with those characters, but they just don&#8217;t work for me right now. Thanks to the Story mode throwing me in the shoes of other Kombatants, I was able to fall in love with Kitana, Cyrax and Smoke. I&#8217;ve become pretty deadly with chaining together some massive combos with Kitana, so watch out if we play online. A few others I&#8217;m dabbling in of late include Kung Lao, Ermac, Noob Saibot, and Scorpion. I like to keep a stable of 4-5 characters to rotate and keep things fresh, along with making sure I have the best weapons at my disposal given each opponent&#8217;s character choice.</p>
<h2>DLC &#8211; Bring it On</h2>
<p><img data-attachment-id="1940" data-permalink="http://mattbanks.me/im-addicted-to-mortal-kombat/mortal-kombat-skarlet/" data-orig-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Skarlet.jpg?fit=685%2C300" data-orig-size="685,300" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Mortal Kombat Skarlet" data-image-description="" data-medium-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Skarlet.jpg?fit=565%2C247" data-large-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Skarlet.jpg?fit=685%2C300" class="alignnone size-medium wp-image-1940" title="Mortal Kombat Skarlet" alt="" src="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Skarlet.jpg?resize=565%2C247" srcset="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Skarlet.jpg?resize=565%2C247 565w, https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Skarlet.jpg?resize=500%2C218 500w, https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Skarlet.jpg?w=685 685w" sizes="(max-width: 565px) 100vw, 565px" data-recalc-dims="1" /></p>
<p>Some may poo-poo DLC on all fronts, but I&#8217;ve always been a fan&#8230; if priced right. Warner Bros. announced the <em>Mortal Kombat</em> Season Pass, but made it an Xbox 360 exclusive, which was rather disappointing. Being someone who plays all fighting games on PS3 due to the superior D-pad on the controller, I would have loved to save some cash to get all four characters. Oh well, we got Kratos, who is much better than every other outsider I&#8217;ve played in a fighting game.</p>
<p>As of now, I haven&#8217;t purchased any DLC. I plan to buy Kenshi when he&#8217;s released on the PlayStation Store tonight &#8211; I was always a fan of him in the previous generation&#8217;s <em>Mortal Kombat</em> titles. His sword-play and move-set look to be fairly unique and should be a nice addition to the fighters I already use. While I haven&#8217;t purchase Skarlet yet, I do plan to buy her DLC as well tonight as I&#8217;ve seen more and more that indicates she&#8217;s not just a skin-swap of Kitana (where she originated as glitch). With a vast move list and ability to create massive combos, she might be good to have around. I&#8217;m hoping Rain turns out to the same and not just a skin-swap of Smoke and other ninjas, but we&#8217;ll have to wait and see. Who knows who the fourth character will be, but I&#8217;ll most likely buy him or her too. Keep bringing it on and I&#8217;ll keep buying it. Costumes on the other hand, I won&#8217;t buy.</p>
<p><img data-attachment-id="1944" data-permalink="http://mattbanks.me/im-addicted-to-mortal-kombat/mortal-kombat-noob-ermac/" data-orig-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Noob-Ermac.jpg?fit=800%2C450" data-orig-size="800,450" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Mortal Kombat Noob Ermac" data-image-description="" data-medium-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Noob-Ermac.jpg?fit=565%2C317" data-large-file="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Noob-Ermac.jpg?fit=800%2C450" class="alignnone size-medium wp-image-1944" title="Mortal Kombat Noob Ermac" alt="" src="https://i1.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Noob-Ermac-565x317.jpg?resize=565%2C317" srcset="https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Noob-Ermac.jpg?resize=565%2C317 565w, https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Noob-Ermac.jpg?resize=500%2C281 500w, https://i0.wp.com/mattbanks.me/wp-content/uploads/2011/07/Mortal-Kombat-Noob-Ermac.jpg?w=800 800w" sizes="(max-width: 565px) 100vw, 565px" data-recalc-dims="1" /></p>
<p>With the plethora of gameplay modes to keep me busy along with the fun online play, I can see myself dumping countless hours into <em>Mortal Kombat</em> over the Summer and Fall. There are quite a few other games in the wings waiting to be played &#8211; <em>inFAMOUS</em>, <em>inFAMOUS 2</em>, <em>Mass Effect 2</em> and <em>Red Dead Redemption</em> are all currently waiting at home, while I&#8217;ve already preordered <em>Uncharted 3</em>, <em>Gears of War 3</em> and <em>Battlefield 3</em> &#8211; but I have a feeling even when I move on to those games, I&#8217;ll still keep coming back to <em>Mortal Kombat</em>. Not having to keep pressing forward in gaming can be good thing sometimes, it seems. In this case, I&#8217;m happy I can devote a metric ton of time into a single game. If you want to show your skills online on the PS3, drop me a line and we&#8217;ll throw down.</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/im-addicted-to-mortal-kombat/">I&#8217;m Addicted to Mortal Kombat &#8211; My Favorite Fighting Game Ever</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattbanks.me/im-addicted-to-mortal-kombat/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">1930</post-id>	</item>
		<item>
		<title>Please Excuse the Mess &#8211; Working on a New WordPress Theme</title>
		<link>http://mattbanks.me/please-excuse-the-mess-working-on-a-new-wordpress-theme/</link>
		<comments>http://mattbanks.me/please-excuse-the-mess-working-on-a-new-wordpress-theme/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 17:40:47 +0000</pubDate>
		<dc:creator><![CDATA[Matt Banks]]></dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[I'm Sad]]></category>
		<category><![CDATA[Loot Ninja]]></category>
		<category><![CDATA[WooThemes]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.mjbanks.com/?p=1908</guid>
		<description><![CDATA[<p>You may have noticed that the site looks quite a bit different&#8230; and rather bland. I&#8217;m in the process of totally revamping my personal site here with a new WordPress theme, so bear with me. It&#8217;s been a rough day. If you didn&#8217;t hear, today we shut down Loot Ninja, my now former video game [&#8230;]</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/please-excuse-the-mess-working-on-a-new-wordpress-theme/">Please Excuse the Mess &#8211; Working on a New WordPress Theme</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></description>
				<content:encoded><![CDATA[<p>You may have noticed that the site looks quite a bit different&#8230; and rather bland. I&#8217;m in the process of totally revamping my personal site here with a new WordPress theme, so bear with me.</p>
<p>It&#8217;s been a rough day. If you didn&#8217;t hear, <a href="http://loot-ninja.com/2011/06/24/goodbye-from-loot-ninja-our-last-entry/" target="_blank">today we shut down Loot Ninja</a>, my now former video game news, editorial and review website. It&#8217;s been my baby for almost six years, but it&#8217;s time to say goodbye.</p>
<p>With <a href="http://loot-ninja.com/" target="_blank">Loot Ninja</a> gone, I&#8217;ll be writing more here &#8211; something I&#8217;ve been meaning to do for quite a long time. Now I&#8217;ll have time to write about things outside of video gaming (and some games too, for sure). Stay tuned!</p>
<p>And if you have any suggestions for things for this site, by all means let me know. I&#8217;m using WooThemes wonderful Canvas theme as the basis for my new WordPress theme. They have an amazing framework to build from, so this should be fun <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/please-excuse-the-mess-working-on-a-new-wordpress-theme/">Please Excuse the Mess &#8211; Working on a New WordPress Theme</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattbanks.me/please-excuse-the-mess-working-on-a-new-wordpress-theme/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">1908</post-id>	</item>
		<item>
		<title>I Love my iPad, but it&#8217;s Incomplete</title>
		<link>http://mattbanks.me/i-love-my-ipad-but-its-incomplete/</link>
		<comments>http://mattbanks.me/i-love-my-ipad-but-its-incomplete/#comments</comments>
		<pubDate>Tue, 25 May 2010 18:26:08 +0000</pubDate>
		<dc:creator><![CDATA[Matt Banks]]></dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Video Games]]></category>
		<category><![CDATA[E3 2010]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://www.mjbanks.com/?p=52</guid>
		<description><![CDATA[<p>I picked up a 32GB WiFi iPad about two weeks after it was released and, while I&#8217;m generally in love, there are a few things clearly missing. One of my intentions was to cover E3 in Los Angeles this June with only the iPad, leaving my MacBook Pro at home. Sadly this won&#8217;t work out [&#8230;]</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/i-love-my-ipad-but-its-incomplete/">I Love my iPad, but it&#8217;s Incomplete</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></description>
				<content:encoded><![CDATA[<p>I picked up a 32GB WiFi iPad about two weeks after it was released and, while I&#8217;m generally in love, there are a few things clearly missing. One of my intentions was to cover E3 in Los Angeles this June with only the iPad, leaving my MacBook Pro at home. Sadly this won&#8217;t work out as a few key apps have not yet been updated or released.</p>
<p>One of the big apps I needed for this coverage is a Flickr app to upload all of my photos to post at <a href="http://www.loot-ninja.com">Loot Ninja</a>. With that not yet available, I&#8217;m stuck bringing my laptop to display all of my imagery. Sure, the iPhone app will run on the iPad, but it&#8217;s overly cumbersome and doesn&#8217;t offer much in the way to grabbing images to put into WordPress. To the same extent, the WordPress app for iPad is a buggy mess &#8211; crashing at will if you so much as think about another platform. Since those are key elements to covering these events, I have little choice than to pack my laptop for the trip.</p>
<p>I have a lot of faith in the development community that all the apps will come and/or get updated in fair amount of time. But for now, the iPad won&#8217;t serve the purpose as a video game conference coverage beast in my travel bag. I&#8217;ll still it use as an eBook reader, movie viewer, internet browser and game player, but all of my major writing and photo uploading will be relegated back to the Mac. One day&#8230; one day.</p>
<p>This post "<a rel="nofollow" href="http://mattbanks.me/i-love-my-ipad-but-its-incomplete/">I Love my iPad, but it&#8217;s Incomplete</a>" was featured on <a rel="nofollow" href="http://mattbanks.me">Matt Banks - thoughts on web development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattbanks.me/i-love-my-ipad-but-its-incomplete/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">52</post-id>	</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: https://www.w3-edge.com/products/

Object Caching 3821/4061 objects using apc
Page Caching using disk: enhanced
Database Caching 4/49 queries in 0.011 seconds using disk

 Served from: mattbanks.me @ 2017-04-02 17:29:21 by W3 Total Cache -->