<?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>Jon Cairns</title>
	<atom:link href="http://joncairns.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://joncairns.com</link>
	<description>Web dev, musical experimenter, design enthusiast and committed Christian.</description>
	<lastBuildDate>Tue, 15 May 2012 14:21:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Using Vim as a PHP IDE</title>
		<link>http://joncairns.com/2012/05/using-vim-as-a-php-ide/</link>
		<comments>http://joncairns.com/2012/05/using-vim-as-a-php-ide/#comments</comments>
		<pubDate>Wed, 09 May 2012 13:34:49 +0000</pubDate>
		<dc:creator>joonty</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpqa]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://joncairns.com/?p=448</guid>
		<description><![CDATA[This isn&#8217;t a blog about why you should use Vim. That&#8217;s obvious. If it isn&#8217;t, read Why do those nutheads use Vi? Instead, this a tutorial about using Vim as a fully-fledged IDE, and specifically for PHP projects. Many Vim users &#8230; <a href="http://joncairns.com/2012/05/using-vim-as-a-php-ide/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This isn&#8217;t a blog about why you should use Vim. That&#8217;s obvious. If it isn&#8217;t, read <a title="Why you should use Vi" href="http://www.viemu.com/a-why-vi-vim.html" target="_blank">Why do those nutheads use Vi?</a> Instead, this a tutorial about using Vim as a fully-fledged IDE, and specifically for PHP projects. Many Vim users would only use it for dipping in and out of the odd file on their computer, or maybe just on a remote server during an SSH session. I&#8217;m here to tell you that it can be configured to be more efficient and productive than your favourite IDE.</p>
<ol>
<li><a href="#why">Why bother?</a></li>
<li><a href="#starting">Starting out with Vim</a></li>
<li><a href="#highlighting">PHP syntax highlighting</a></li>
<li><a href="#syntax">PHP syntax checking/linting</a></li>
<li><a href="#tags">Tags and auto-completion</a></li>
<li><a href="#csmd">Codesniffer and mess detector support</a></li>
<li><a href="#phpunit">PHPUnit support</a></li>
<li><a href="#xdebug">Xdebug integration</a></li>
<li><a href="#myvim">Everything in a neat package</a></li>
</ol>
<p>If you&#8217;re impatient and want to start tinkering straight away, jump to <a href="#myvim">section 9</a> to install my Vim configuration.</p>
<h2><a name="why" href="#"></a>1. Why bother?</h2>
<p>I&#8217;ve used a number of IDEs for PHP projects over the past few years: Eclipse, Aptana, Komodo Edit/IDE, Netbeans and PHPStorm. The problem with many of them is speed and resource usage: they eat away at your memory and hog your CPU. Another problem is keyboard shortcuts and commands: it is impossible to do everything using the keyboard, and many things are quicker with the mouse, requiring you to constantly swap between keyboard and mouse. This may not sound like a big deal, but spend a few months learning Vim and it will be a big source of frustration.</p>
<p>So, the answer to that question is this: in the long run, you will be a lot more efficient. Jump to exactly the right place in a file in just a couple of key strokes; open a horizontal split window comparing two files with a command as simple as <code>&lt;Ctrl-w&gt; + s</code>; swap between open files by number (the order of opening); and my favourite &#8211; view and navigate a directory tree with all the usual Vim functionality.</p>
<h2><a name="starting" href="#"></a>2. Starting out with Vim</h2>
<p>If you&#8217;ve never used Vim before, try<a href="http://www.viemu.com/a-why-vi-vim.html" target="_blank"> the tutorial</a> I mentioned at the top of this post. Also, take a look at the <a title="Vim cheat sheet" href="http://www.tuxfiles.org/linuxhelp/vimcheat.html" target="_blank">Vim cheat sheet</a>.</p>
<p>The rest of this tutorial assumes that you have a working knowledge of Vim and know how to configure it on at least a basic level (i.e. you know where your <em>vimrc</em> file is, and you know how to install vim scripts). It also assumes that you&#8217;re running at least version 7.0 of Vim.</p>
<p>If you don&#8217;t know how to install Vim scripts I&#8217;d recommend using <a title="Vundle package manager for Vim" href="https://github.com/gmarik/vundle" target="_blank">Vundle</a>, which will manage all your plugins for you and make installing/removing a breeze.</p>
<h2><a name="highlighting" href="#"></a>3. PHP syntax highlighting</h2>
<p>Vim understands PHP by itself, but you can get improved highlighting and basic syntax checking with the <a title="php.vim plugin for improved PHP syntax highlighting" href="http://www.vim.org/scripts/script.php?script_id=1571" target="_blank">php.vim</a> plugin. This will add better support for certain PHP keywords like <strong>define</strong> and <strong>static</strong>, etc., and will allow you to apply custom colours to these keywords. Also, it puts some basic checks in place for invalid syntax, and will highlight the line if you don&#8217;t close your brackets, for instance.</p>
<h2><a name="syntax" href="#"></a>4. PHP syntax checking/linting</h2>
<p>Most IDEs will run the PHP parser on the file periodically, and warn you of any errors such as invalid syntax and multiple declarations of classes/functions within the same file. One of the beautiful things about Vim is that you can run files through command line programs with total ease, so to check your PHP file you could just run:</p>
<pre class="brush: vimscript; title: ; notranslate">
:!php -l %
</pre>
<p>This prints out any error message to the screen. However, we can do better. Vim has a feature called <em>signs</em>, which are used to mark and highlight lines in a file. Wouldn&#8217;t it be nice if we could take the PHP parser&#8217;s error message and highlight the right line in the file?</p>
<p>It would be nice. And it <em>is</em> nice, because it&#8217;s been done. <strong>&lt;shameless plug&gt;</strong> I have a plugin that does it, called <a title="PHPQA tools for Vim" href="https://github.com/joonty/vim-phpqa" target="_blank">PHP QA tools</a> <strong>&lt;/shameless plug&gt;</strong>. Install this, and every time you write a file it will check it for syntax errors and highlight any offending lines in the file. It will also open a quickfix window that displays the error. This window is specially made for listing errors, and you can read about how to use it in <a title="Vim quickfix documentation" href="http://vimdoc.sourceforge.net/htmldoc/quickfix.html" target="_blank">the documentation</a>.</p>
<div id="attachment_459" class="wp-caption aligncenter" style="width: 283px"><a href="http://joncairns.com/wp-content/uploads/2012/05/vim-php-lint.png"><img class="size-medium wp-image-459" title="PHP syntax errors are highlighted and shown in the quickfix window" src="http://joncairns.com/wp-content/uploads/2012/05/vim-php-lint-273x300.png" alt="PHP lint error in Vim window" width="273" height="300" /></a><p class="wp-caption-text">PHP syntax errors are highlighted and shown in the quickfix window</p></div>
<p>The same plugin will be useful for some things that appear later, so read on&#8230;</p>
<h2><a name="tags" href="#"></a>5. Tags and auto-completion</h2>
<p>Code-completion is a feature that most large IDEs provide, along with the ability to jump to class and function definitions within multiple files. All IDEs do this by creating a database of the definitions, and updating this database as you change the code. Many people think that this is a reason not to change to using Vim, as the support isn&#8217;t there; this isn&#8217;t true.</p>
<p>Omnicompletion is a feature of Vim 7+, and it works by reading a tag file generated by a command-line program called <em>ctags</em>. This file contains definitions for all the classes, functions and variables in your project. You then use <code>&lt;c-x&gt;&lt;c-o&gt;</code> (read that as: <code>Ctrl+x</code> followed by <code>Ctrl+o</code> &#8211; that&#8217;s Vim&#8217;s way of showing a Ctrl modifier shortcut) to bring up a list of completions when you are in insert mode. Here&#8217;s a screenshot showing it at work:</p>
<div id="attachment_467" class="wp-caption aligncenter" style="width: 775px"><img class="size-full wp-image-467" title="Omnicompletion in Vim" src="http://joncairns.com/wp-content/uploads/2012/05/omnicompletion.png" alt="Omnicompletion in Vim" width="765" height="400" /><p class="wp-caption-text">Omnicompletion at work</p></div>
<h3>A quick note</h3>
<p>Before we go on, I&#8217;d just like to say that I don&#8217;t use omnicompletion. Instead, I use Vim&#8217;s local keyword completion. There are several reasons for this:</p>
<ol>
<li>There&#8217;s a delay as the context for omnicompletion is determined, and the tags are collected together. This is the case in every IDE I&#8217;ve used &#8211; it makes logical sense that it as a project gets bigger, the impact on performance of autocompletion gets greater.</li>
<li>Local keyword completion is lightning fast, and in many cases saves me valuable seconds (or at least milliseconds!) in typing longer words. This is even more the case with the SuperTab plugin, which I&#8217;ll mention soon.</li>
<li>It only works for words defined in the current file, but it encourages me to be a better programmer by using consistent naming methods for functions and variables, for instance.</li>
</ol>
<div>Even so, the tags files are extremely useful even if not using omnicompletion, as they are used for jumping to definitions quickly. I&#8217;ll explain how to set-up the environment and start generating tag files.</div>
<div></div>
<h3>How to generate Ctags</h3>
<div>You&#8217;ll want to use exuberant-ctags (<a href="http://ctags.sourceforge.net/">http://ctags.sourceforge.net/</a>), which has support for over 40 programming languages, including PHP, of course. Installation is a doddle on Ubuntu (<code>sudo apt-get install exuberant-ctags</code>), otherwise follow the installation instructions on the website for your OS. After installation you should be able to run ctags-exuberant from the command line. Go to the top-level directory of a project containing PHP files and run:</div>
<pre class="brush: bash; title: ; notranslate">
ctags-exuberant -f php.tags --languages=PHP -R
</pre>
<p>This will create a file named php.tags, which contains a summary of all the definitions of PHP constructs in your project. You may need to tweak the parameters in this command: you may want to exclude certain files (e.g. build artefacts, documentation, etc.), or exclude whole languages like JavaScript from being parsed (<code>--languages=+PHP,-JavaScript</code>). When you&#8217;re happy with your tags file, you need to tell Vim to use it:</p>
<pre class="brush: vimscript; title: ; notranslate">
:set tags=~/path/to/php.tags
</pre>
<p>You can use more than one tag file at a time: I generate a tag file for my entire PHP include library (i.e. PEAR stuff), a tag file for the framework I&#8217;m using and then a tag file for each project, and set all three to be used with a comma separated list.</p>
<p>Now that you&#8217;ve set up your tags, try it out. Open up a new PHP file, set the tag file and start typing the name of a class that you know exists. After a few characters type <code>&lt;c-x&gt;&lt;c-o&gt;</code> (insert mode) and the omnicompletion will kick in. Then, on the completed class name in command mode, type <code>&lt;c-]&gt;</code>. You will be taken to the class definition, or given a list of definitions if it matches more than one.</p>
<p>Another neat feature is jumping to a tag from the Vim command line. For example, if you know you need to get to the file containing the class <code>MyLovelyClass</code>, just type:</p>
<pre class="brush: vimscript; title: ; notranslate">
:tag MyLovelyClass
</pre>
<p>And hit return. You will be taken straight to it. This is almost always quicker than trying to navigate a file tree to find the file you want. Also, this supports tab completion, so you could just type <code>:tag My&lt;tab&gt;</code> and you would get a list of options.</p>
<p>If you&#8217;re going to use omnicompletion, definitely install the <a title="phpcomplete Vim plugin" href="http://www.vim.org/scripts/script.php?script_id=3171">phpcomplete plugin</a>, as this adds better context awareness for omnicompletion in PHP. I&#8217;d also recommend installing <a title="SuperTab Vim plugin" href="http://www.vim.org/scripts/script.php?script_id=1643" target="_blank">SuperTab</a>, and adding this to your <em>vimrc</em>:</p>
<pre class="brush: vimscript; title: ; notranslate">
let g:SuperTabDefaultCompletionType = &quot;&quot;
</pre>
<p>Now you just press <code>Tab</code> to trigger omnicompletion.</p>
<h2><a name="csmd" href="#"></a>6. Codesniffer and mess detector support</h2>
<p>If you&#8217;re not familiar with these tools then you may want to skip this section, as you will only want this support if you already use them. Support for these comes bundled in the <a title="PHP QA tools Vim plugin on vim.org" href="http://www.vim.org/scripts/script.php?script_id=3980" target="_blank">PHP QA tools</a> plugin (view on <a title="PHP QA tools for Vim" href="https://github.com/joonty/vim-phpqa" target="_blank">github</a>), which you will already have installed if you&#8217;re following each step of this tutorial. The plugin parses their output, puts the violations into a quickfix window and puts line markers in the file (uses the marker <strong>S&gt; </strong>for codesniffer and <strong>M&gt;</strong> for mess detector violations). Nice and simple.</p>
<div id="attachment_461" class="wp-caption aligncenter" style="width: 310px"><a href="http://joncairns.com/wp-content/uploads/2012/05/vim-qatools.png"><img class="size-medium wp-image-461" title="Codesniffer and mess detector signs are shown in the margin, and messages in the quickfix window" src="http://joncairns.com/wp-content/uploads/2012/05/vim-qatools-300x259.png" alt="PHP mess detector and codesniffer support in Vim" width="300" height="259" /></a><p class="wp-caption-text">Codesniffer and mess detector signs are shown in the margin, and messages in the quickfix window</p></div>
<p>Everyone who uses these programs has their own set of configuration rules, and happily this plugin allows you to change the configuration to suit. You can set various options in your <em>vimrc</em> file:</p>
<h3>CODESNIFFER</h3>
<pre class="brush: vimscript; title: ; notranslate">
&quot; Pass arguments to phpcs binary
let g:phpqa_codesniffer_args = &quot;--standard=Zend&quot;
&quot; Another example
let g:phpqa_codesniffer_args = &quot;--standard=/path/to/xml/file.xml --tab-width=4&quot;

&quot; PHP codesniffer binary (default = phpcs)
let g:phpqa_codesniffer_cmd='/path/to/phpcs'

&quot; Run codesniffer on save (default = 1)
let g:phpqa_codesniffer_autorun = 0
</pre>
<h3>Mess detector</h3>
<pre class="brush: vimscript; title: ; notranslate">
let g:phpqa_messdetector_ruleset = &quot;/path/to/phpmd.xml&quot;

&quot; PHP mess detector binary (default = phpmd)
let g:phpqa_messdetector_cmd='/path/to/phpmd'

&quot; Run mess detector on save (default = 1)
let g:phpqa_messdetector_autorun = 0
</pre>
<h2><a name="phpunit" href="#"></a>7. PHPUnit support</h2>
<p>If you use PHPUnit then you can run tests from the Vim command window with another one of my plugins: <a title="PHPUnit QF plugin on vim.org" href="http://www.vim.org/scripts/script.php?script_id=4054" target="_blank">PHPUnitQF</a> (view on <a title="PHPUnit QF plugin for Vim" href="https://github.com/joonty/vim-phpunitqf" target="_blank">github</a>). This parses the output from PHPUnit tests, and any failures or errors are put into a quickfix window, allowing you to easily jump to the tests that weren&#8217;t successful.</p>
<p>To run the tests, just execute:</p>
<pre class="brush: vimscript; title: ; notranslate">
:Test
</pre>
<p>Where <em>&lt;arg&gt;</em> is passed straight to the <strong>phpunit</strong> command. For example, if you would normally run <code>phpunit MyClassTest</code> from a command line, you run <code>:Test MyClassTest</code> from Vim. If you have a standard set of arguments that you pass to phpunit (e.g. a configuration file), you can set a variable in your <em>vimrc</em> file. Here are the available configuration options:</p>
<pre class="brush: vimscript; title: ; notranslate">
&quot; Arguments to pass to the phpunit binary
let g:phpunit_args = &quot;--configuration /path/to/config&quot;

&quot; Location of phpunit
let g:phpunit_cmd = &quot;/usr/bin/mytest&quot;

&quot; Temporary file used by the plugin
&quot; (shouldn't need to change unless runing on Windows)
let g:phpunit_tmpfile = &quot;/my/new/tmp/file&quot;
</pre>
<p>You can use any test wrapper whose output is the same format as PHPUnit. For instance, I sometimes use the CakePHP framework which has a wrapper around the PHPUnit command, so I just change <code>g:phpunit_cmd</code> as shown above.</p>
<p>You can also view the full output of the last test run with:</p>
<pre class="brush: vimscript; title: ; notranslate">
:TestOutput
</pre>
<p>This opens the output in a split window.</p>
<h2><a name="xdebug" href="#"></a>8. Xdebug integration</h2>
<p>That&#8217;s right. You can use Vim as a debugger client with Xdebug, so it throws the same punches as the big boy IDEs. In fact, I think that the Xdebug plugin for Vim allows more flexibility and functionality than any other implementation I&#8217;ve found. It&#8217;s certainly easier to tweak and modify it. It&#8217;s also great out of the box, and you can get it up and running within a few minutes.</p>
<p>This plugin has a bit of a legacy: it started <a title="The original Vim Xdebug script" href="http://www.vim.org/scripts/script.php?script_id=1152" target="_blank">here</a>, a script by Seung Woo Shin, and has been modified and forked like mad. It goes without saying that I have my own version of it, which you can get from the <a href="https://github.com/joonty/vim-xdebug" target="_blank">github repository</a>.</p>
<p><em>Note: by all means use another version if you wish, but I have added quite a few features that I use all the time, so they might be useful to you too. Look at the README in the repository for a list of changes.</em></p>
<p>After installing the plugin you will need to set up Xdebug on your machine. To do this, follow step 1 and (optionally) 4 and 5 on my <a title="Set up Xdebug with Netbeans and LAMP (and CakePHP)" href="http://joncairns.com/2012/01/set-up-xdebug-with-netbeans-and-lamp-and-cakephp/" target="_blank">Xdebug, LAMP and Netbeans tutorial</a>.</p>
<p>Now you can set breakpoints in your code with <code>F1</code> or:</p>
<pre class="brush: vimscript; title: ; notranslate">
:Bp
</pre>
<p>Press <code>F5</code> to make Vim try and connect to the debugger (on port 9000 by default), where it waits for 30 seconds before timing out. During the 30 seconds, if you load the webpage or run the script then the session will start. One of my changes is to open the session in a new tab, to not disrupt the window configuration in your current tab, so you will see a new tab and a few windows open up. It will look something like this:</p>
<div id="attachment_475" class="wp-caption aligncenter" style="width: 310px"><a href="http://joncairns.com/wp-content/uploads/2012/05/vim-xdebug.png"><img class="size-medium wp-image-475" title="The Xdebug Vim plugin at work" src="http://joncairns.com/wp-content/uploads/2012/05/vim-xdebug-300x144.png" alt="Snapshot of a Xdebug session in Vim" width="300" height="144" /></a><p class="wp-caption-text">Windows from left, going clockwise: source code pane, watch window, current stack trace, command window</p></div>
<p>The left window shows the source code and typically the current execution point. The watch window is one of the key features, as it shows the result of getting the context (i.e. all the variables and their values at the current execution point) and <code>eval</code> results.</p>
<p>To start stepping through the program line-by-line, press <code>F3</code>. The <strong>-&gt;</strong> marker will move as the program moves on. Execution will pause at any breakpoints that you&#8217;ve set up. To step into a function on the current execution line press <code>F2</code>, and <code>F4</code> to step back out.</p>
<p>To get the current context, press <code>F11</code> &#8211; the watch window will show all variables and their values. You can also evaluate expressions, by typing:</p>
<pre class="brush: vimscript; title: ; notranslate">
e
</pre>
<p>(The <code>Leader</code> key is usually \ or <code>,</code>) You can then type a PHP expression (e.g. a variable, or any valid expression like <code>sqrt(100)</code>), press enter, and the result will be printed in the watch window.</p>
<p>When you&#8217;ve finished, press <code>F6</code> to end the session and close all the windows.</p>
<p>That&#8217;s enough to get you started, but you can read the README on the Github repository for more information.</p>
<h2><a href="#" name="myvim"></a>9. Everything in a neat package</h2>
<p>Maintaining a Vim configuration is a tricky business. Sometimes you make changes that you think will be helpful, find it annoying after a couple of weeks, and you want to revert back to an old version. That&#8217;s exactly why I keep mine under version control &#8211; you can view it <a title="My Vim configuration on Github" href="https://github.com/joonty/myvim" target="_blank">here</a>.</p>
<p>If you want to use this configuration, there are a couple of things you&#8217;ll need to install. You&#8217;ll need <em>exuberant-ctags</em>, as talked about in section 5. I&#8217;d also recommend installing the <a title="Anonymous Pro font" href="http://www.fontsquirrel.com/fonts/Anonymous-Pro" target="_blank">Anonymous Pro</a> font if you&#8217;re using GVim, as it&#8217;s the best code font I&#8217;ve come across.</p>
<p>To install, clone the repository to <em>~/.vim</em>, and initialize the submodule. Then, install the Vundle bundles:</p>
<pre class="brush: bash; title: ; notranslate">
git clone git://github.com/joonty/myvim.git ~/.vim --recurse-submodules
vim +BundleInstall +qall
</pre>
<p>What&#8217;s in the package? Along with everything mentioned in this tutorial, it has the following plugins:</p>
<ul>
<li><a title="NERDTree Vim plugin" href="http://www.vim.org/scripts/script.php?script_id=1658" target="_blank">NERDTree</a>: shows the directory tree, and allows for navigation and modification. Completely essential in my eyes.</li>
<li><a title="MiniBufExpl Vim plugin" href="http://www.vim.org/scripts/script.php?script_id=159" target="_blank">MiniBufExpl</a>: (Mini buffer explorer) shows the open buffers in a kind of tab format, allowing you to easily manage multiple files.</li>
<li><a title="Tag List Vim plugin" href="http://www.vim.org/scripts/script.php?script_id=273" target="_blank">Tag List</a>:  show definition summaries of classes, functions, variables, etc. for all open files.</li>
<li><a title="Fugitive plugin for Vim" href="http://www.vim.org/scripts/script.php?script_id=2975" target="_blank">Fugitive</a>: the definitive Git plugin.</li>
<li><a title="Command-T Vim plugin" href="http://www.vim.org/scripts/script.php?script_id=3025" target="_blank">Command-T</a>: super-fast file finding and opening.</li>
<li><a title="EasyMotion Vim plugin" href="http://www.vim.org/scripts/script.php?script_id=3526" target="_blank">EasyMotion</a>: quickly jump to any word or character in a file.</li>
</ul>
<p>To use Command-T you need to install a C library &#8211; follow the instructions on the plugin&#8217;s webpage to install on your system. Trust me, it&#8217;s worth it.</p>
<p>Here&#8217;s a word of warning: this is <em>my</em> configuration, and it&#8217;s likely to change on a fairly regular basis. I don&#8217;t guarantee that it will work on your system, and I certainly don&#8217;t guarantee that you&#8217;ll like it. Feel free to chop and change it as you please.</p>
<h2>The Final Word</h2>
<p>Hopefully this has been helpful. If you have any suggestions for things I should add to this list then just add a comment.</p>
<p>May the Vim be with you.</p>
]]></content:encoded>
			<wfw:commentRss>http://joncairns.com/2012/05/using-vim-as-a-php-ide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vim with PHP code sniffer, mess detector and code coverage</title>
		<link>http://joncairns.com/2012/03/vim-with-php-code-sniffer-mess-detector-and-code-coverage/</link>
		<comments>http://joncairns.com/2012/03/vim-with-php-code-sniffer-mess-detector-and-code-coverage/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 13:29:29 +0000</pubDate>
		<dc:creator>joonty</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpqa]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://joncairns.com/?p=443</guid>
		<description><![CDATA[Vim is a lot more powerful than people think. Many people who use it would do so just for quickly editing a single file, but would use an IDE for their main development. But I&#8217;ve discovered recently that Vim is &#8230; <a href="http://joncairns.com/2012/03/vim-with-php-code-sniffer-mess-detector-and-code-coverage/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vim is a lot more powerful than people think. Many people who use it would do so just for quickly editing a single file, but would use an IDE for their main development. But I&#8217;ve discovered recently that Vim is so extensible that it can do all the things that you thought it couldn&#8217;t: code completion, syntax checking, project management, debugger integration and more.</p>
<p>Check out <a href="http://vim.wikia.com/wiki/Use_Vim_like_an_IDE">http://vim.wikia.com/wiki/Use_Vim_like_an_IDE</a> and <a href="http://arstechnica.com/open-source/guides/2009/05/vim-made-easy-how-to-get-your-favorite-ide-features-in-vim.ars">http://arstechnica.com/open-source/guides/2009/05/vim-made-easy-how-to-get-your-favorite-ide-features-in-vim.ars</a> for more on that.</p>
<p>I now use Vim as my main PHP editor, and one thing that I&#8217;ve managed to get working better than any other IDE I&#8217;ve used is integration with quality assurance tools like <a title="PHP Code Sniffer" href="http://pear.php.net/package/PHP_CodeSniffer/redirected" target="_blank">PHP code sniffer</a>, <a title="PHP Mess Detector" href="http://phpmd.org/" target="_blank">PHP mess detector</a> and clover code coverage (produced from <a title="PHPUnit" href="https://github.com/sebastianbergmann/phpunit/" target="_blank">PHPUnit</a> tests). I&#8217;ve written <a title="PHPQA Vim plugin" href="https://github.com/joonty/vim-phpqa" target="_blank">phpqa</a> (vim script <a title="PHPQA vim plugin on vim.org" href="http://www.vim.org/scripts/script.php?script_id=3980" target="_blank">#3980</a>), a plugin for Vim that integrates these three tools with your code by highlighting and marking lines with violations and code coverage output. Here are some screenshots showing it at work:</p>
<div id="attachment_444" class="wp-caption aligncenter" style="width: 594px"><a href="http://joncairns.com/wp-content/uploads/2012/03/vim-phpqa2.png"><img class="size-large wp-image-444" title="vim-phpqa2" src="http://joncairns.com/wp-content/uploads/2012/03/vim-phpqa2-1024x568.png" alt="PHP syntax error marker" width="584" height="323" /></a><p class="wp-caption-text">Showing PHP syntax error caused by a missing semicolon</p></div>
<div id="attachment_446" class="wp-caption aligncenter" style="width: 594px"><a href="http://joncairns.com/wp-content/uploads/2012/03/Vim-phpqa1.png"><img class="size-large wp-image-446" title="vim-phpqa" src="http://joncairns.com/wp-content/uploads/2012/03/Vim-phpqa1-1024x654.png" alt="Showing code coverage and code sniffer violations" width="584" height="372" /></a><p class="wp-caption-text">Showing code coverage and code sniffer violations. The lines covered by tests have a yellow &quot;C&gt;&quot; marker, and lines not covered have a red marker.</p></div>
<p>For more information, including installation, configuration and usage, visit the <a title="PHPQA Github repository" href="https://github.com/joonty/vim-phpqa" target="_blank">github page</a>.</p>
<p>Hopefully this plugin will be useful to others, and maybe even convert some people to using it as their IDE replacement! (I know, I&#8217;m a dreamer)</p>
]]></content:encoded>
			<wfw:commentRss>http://joncairns.com/2012/03/vim-with-php-code-sniffer-mess-detector-and-code-coverage/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Status update</title>
		<link>http://joncairns.com/2012/03/status-update/</link>
		<comments>http://joncairns.com/2012/03/status-update/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 12:42:20 +0000</pubDate>
		<dc:creator>joonty</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://joncairns.com/?p=441</guid>
		<description><![CDATA[I&#8217;ve been fairly absent from most things over the past couple of months, due to the all-consuming experience of buying a house. Hopefully that will all change soon, and I&#8217;ll come back with some world-beating post. I wouldn&#8217;t hold your &#8230; <a href="http://joncairns.com/2012/03/status-update/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been fairly absent from most things over the past couple of months, due to the all-consuming experience of buying a house. Hopefully that will all change soon, and I&#8217;ll come back with some world-beating post. I wouldn&#8217;t hold your breath, though.</p>
]]></content:encoded>
			<wfw:commentRss>http://joncairns.com/2012/03/status-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meme Generator plugin for Jenkins</title>
		<link>http://joncairns.com/2012/03/meme-generator-plugin-for-jenkins/</link>
		<comments>http://joncairns.com/2012/03/meme-generator-plugin-for-jenkins/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 12:38:33 +0000</pubDate>
		<dc:creator>joonty</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[ci]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://joncairns.com/?p=438</guid>
		<description><![CDATA[Over the past few months I&#8217;ve been secretly working on a Jenkins plugin, partly because of my love for the chipper butler and all his efforts to improve the quality of your code, and partly because I wanted to take &#8230; <a href="http://joncairns.com/2012/03/meme-generator-plugin-for-jenkins/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Over the past few months I&#8217;ve been secretly working on a <a title="Jenkins Continuous Integration" href="http://jenkins-ci.org/" target="_blank">Jenkins</a> plugin, partly because of my love for the chipper butler and all his efforts to improve the quality of your code, and partly because I wanted to take a look at Java.</p>
<p>The plugin is a meme generator. Don&#8217;t know what a meme is? Take a look at <a title="Visit the meme generator" href="http://memegenerator.net" target="_blank">memegenerator.net</a>, and any one of those pictures is a meme. The plugin creates a new meme if your project&#8217;s build fails, using the memegenerator.net API, and posts it on the project page. Who broke the build? No more hiding &#8211; they&#8217;re immortalised in an image. Just a bit of fun.</p>
<p>If you fancy giving it a go, sign up for a free account at memegenerator.net and install the plugin from the update center in your Jenkins instance.</p>
<ul>
<li><strong>Wiki page: </strong><a href="https://wiki.jenkins-ci.org/display/JENKINS/Meme+Generator+Plugin">https://wiki.jenkins-ci.org/display/JENKINS/Meme+Generator+Plugin</a></li>
<li><strong>Source code: </strong><a title="Github repository for meme generator Jenkins plugin" href="https://github.com/jenkinsci/memegen-plugin/" target="_blank">https://github.com/jenkinsci/memegen-plugin</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://joncairns.com/2012/03/meme-generator-plugin-for-jenkins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make your Netbeans amazing with jVi</title>
		<link>http://joncairns.com/2012/03/make-your-netbeans-amazing-with-jvi/</link>
		<comments>http://joncairns.com/2012/03/make-your-netbeans-amazing-with-jvi/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 13:52:19 +0000</pubDate>
		<dc:creator>joonty</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://joncairns.com/?p=435</guid>
		<description><![CDATA[I&#8217;ve been a Vim user for a couple of years, and love it. After a steep learning curve, your coding speed increases dramatically. As good as IDEs like Netbeans and Eclipse can be, the normal operations &#8211; navigating round the &#8230; <a href="http://joncairns.com/2012/03/make-your-netbeans-amazing-with-jvi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been a Vim user for a couple of years, and love it. After a steep learning curve, your coding speed increases dramatically. As good as IDEs like Netbeans and Eclipse can be, the normal operations &#8211; navigating round the file, editing, copying, pasting, deleting &#8211; are never as efficient as they are when using Vim.</p>
<p>If you don&#8217;t agree with me about vim, or you don&#8217;t know what I&#8217;m talking about, read this article: <a title="Why oh why do those nutheads use vi?" href="http://www.viemu.com/a-why-vi-vim.html">Why, oh WHY, do those #?@! nutheads use vi?</a></p>
<p>Two worlds are about to collide: there&#8217;s a fantastic plugin for Netbeans called jVi (<a href="http://jvi.sourceforge.net/">http://jvi.sourceforge.net/</a>), which allows you to work with all the features of Netbeans and edit code as if you were using Vim. You can install it from <em>Tools -&gt; Plugin</em> in your Netbeans. It works beautifully, and any Vim user will immediately feel at home. In fact, I&#8217;m forgetting what it&#8217;s like to live without it.</p>
<p>If you give it the time it deserves, I promise you that you won&#8217;t want to go back to the way things used to be!</p>
]]></content:encoded>
			<wfw:commentRss>http://joncairns.com/2012/03/make-your-netbeans-amazing-with-jvi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Website: Deux Huit Huit</title>
		<link>http://joncairns.com/2012/02/website-deux-huit-huit/</link>
		<comments>http://joncairns.com/2012/02/website-deux-huit-huit/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 13:14:17 +0000</pubDate>
		<dc:creator>joonty</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[showcase]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://joncairns.com/?p=427</guid>
		<description><![CDATA[Deux Huit Huit is a design and branding firm who are producing very fresh, innovative sites, artwork and more. Also their website is very cool &#8211; kind of a multi-dimensional slideshow: http://www.deuxhuithuit.com/en/.]]></description>
			<content:encoded><![CDATA[<p><a title="Deux Huit Huit website" href="http://www.deuxhuithuit.com/en/">Deux Huit Huit</a> is a design and branding firm who are producing very fresh, innovative sites, artwork and more. Also their website is very cool &#8211; kind of a multi-dimensional slideshow: <a href="http://www.deuxhuithuit.com/en/">http://www.deuxhuithuit.com/en/</a>.</p>
<p style="text-align: center;"><a href="http://www.deuxhuithuit.com/en/"><img class="aligncenter  wp-image-429" title="Visit the Deux Huit Huit website" src="http://joncairns.com/wp-content/uploads/2012/02/deuxhuithuit.png" alt="Deux Huit Huit home page" width="543" height="309" /></a><a href="http://www.deuxhuithuit.com/en/"><img class="aligncenter size-full wp-image-430" title="Visit the Deux Huit Huit website" src="http://joncairns.com/wp-content/uploads/2012/02/deuxhuithuit2.png" alt="Interactive glossary page on the Deux Huit Huit website" width="543" height="613" /></a><a href="http://www.deuxhuithuit.com/en/"><img class="aligncenter size-full wp-image-431" title="Visit the Deux Huit Huit website" src="http://joncairns.com/wp-content/uploads/2012/02/deuxhuithuit3-e1328706757822.png" alt="The Saint-Catherines Projects on Deux Huit Huit" width="543" height="408" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://joncairns.com/2012/02/website-deux-huit-huit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Style changes</title>
		<link>http://joncairns.com/2012/02/style-changes/</link>
		<comments>http://joncairns.com/2012/02/style-changes/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 11:26:39 +0000</pubDate>
		<dc:creator>joonty</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://joncairns.com/?p=424</guid>
		<description><![CDATA[As you have probably noticed, I&#8217;ve made a few style changes to my site. I&#8217;m like that &#8211; I don&#8217;t stay happy for long.]]></description>
			<content:encoded><![CDATA[<p>As you have probably noticed, I&#8217;ve made a few style changes to my site. I&#8217;m like that &#8211; I don&#8217;t stay happy for long.</p>
]]></content:encoded>
			<wfw:commentRss>http://joncairns.com/2012/02/style-changes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Set up Xdebug with Netbeans and LAMP (and CakePHP)</title>
		<link>http://joncairns.com/2012/01/set-up-xdebug-with-netbeans-and-lamp-and-cakephp/</link>
		<comments>http://joncairns.com/2012/01/set-up-xdebug-with-netbeans-and-lamp-and-cakephp/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 13:42:04 +0000</pubDate>
		<dc:creator>joonty</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[LAMP]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://joncairns.com/?p=416</guid>
		<description><![CDATA[If you&#8217;re a regular user of Netbeans IDE then, like me, you might sometimes get the feeling that you&#8217;re not using it to its full potential. Take debugging for instance: did you know that you can use Netbeans to debug a &#8230; <a href="http://joncairns.com/2012/01/set-up-xdebug-with-netbeans-and-lamp-and-cakephp/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re a regular user of <a title="Netbeans IDE website" href="http://netbeans.org/" target="_blank">Netbeans IDE</a> then, like me, you might sometimes get the feeling that you&#8217;re not using it to its full potential. Take debugging for instance: did you know that you can use Netbeans to debug a web application by pausing at particular lines of code, and get a list of all the variables in the current scope? It takes a bit of setting up, but you can do it &#8211; here&#8217;s how.</p>
<p><em>I&#8217;ve written this tutorial using Ubuntu 11.10 with Netbeans IDE version 7. It&#8217;s recommended that you have this version of Netbeans, as certain things change pretty drastically from version to version. This tutorial mentions CakePHP specific set-up from time to time, but will work for non-Cake projects. I assume that you have a working LAMP environment (Linux, Apache, MySQL and PHP) with PHP 5+. If not, Google it ^_^</em></p>
<h2>1. Install Xdebug</h2>
<p>If you&#8217;re using Ubuntu, this is as gloriously easy as typing this in a terminal:</p>
<pre class="brush: bash; title: ; notranslate">$ sudo apt-get install php5-xdebug</pre>
<p>If you&#8217;re not, don&#8217;t worry &#8211; you can install it using <code>pecl</code>. (Having said that, I&#8217;ve frequently found that <code>pecl</code> doesn&#8217;t work the way it&#8217;s supposed to, and have had to compile extensions manually. Drop a comment if you have problems.)</p>
<pre class="brush: bash; title: ; notranslate">$ sudo pecl install xdebug</pre>
<p>Providing that one of the two previous commands worked, you need to add some configuration settings so that PHP can use Xdebug. Edit or create the file <code><strong>/etc/php5/conf.d/xdebug.ini</strong></code>, adding the following lines:</p>
<pre class="brush: bash; title: ; notranslate">
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
</pre>
<p>Xdebug should now be working &#8211; running <code>php -m</code> on its own should list xdebug as one of the loaded extensions.</p>
<h2>2. Configure Netbeans IDE</h2>
<p>Go to <strong>Tools -&gt; Options</strong>, then click the <strong>PHP</strong> tab. Under &#8220;Debugging&#8221;, the following options should be set:</p>
<ul>
<li>Debugger port: 9000</li>
<li>Session ID: netbeans-xdebug</li>
<li>Stop at first line: (ticked)</li>
</ul>
<p>This is all that&#8217;s needed to set up Netbeans in general, but it&#8217;s slightly more complex configuring each project.</p>
<h2>3. Configure Netbeans project</h2>
<p>There&#8217;s a huge variety of ways that you can set up a web project on your LAMP configuration, so I&#8217;ll try to make it clear what each option means. To edit the settings for an individual project, right click on the project in the Projects side bar, and choose <em>Properties</em>.</p>
<p>This panel has several categories on the right, and should have <em>Sources</em> selected. On this panel, set the <em>Web Root</em> to the directory containing your <strong>index.php</strong> file (for CakePHP projects this should be <strong>app/webroot </strong>- this is essential for making it work).</p>
<p>Next, select the <em>Run Configuration</em> panel. This is where you set up profiles for running your web application. You can have multiple profiles for different configurations, which can come in handy if you are using a framework that also supports command line execution. Choose &#8220;Local Web SIte (running on local web server)&#8221; as the <em>Run As</em> option, and then enter the local URL of your project (this could be <em>http://localhost</em>, or whatever host name you&#8217;ve given). The panel should now look like this:</p>
<div id="attachment_420" class="wp-caption aligncenter" style="width: 310px"><a href="http://joncairns.com/wp-content/uploads/2012/01/Screenshot-Project-Properties.png"><img class="size-medium wp-image-420" title="Project properties panel showing Run Configuration" src="http://joncairns.com/wp-content/uploads/2012/01/Screenshot-Project-Properties-300x212.png" alt="Project properties panel showing Run Configuration" width="300" height="212" /></a><p class="wp-caption-text">Run Configuration panel in project properties</p></div>
<p><em>Note: many people have one local website running at a time (i.e. http://localhost), and swap the Apache document root as and when they need. I prefer to set my sites up as virtual hosts, and give them each internal host names (e.g. http://joncairns.local).</em></p>
<p>Now, on the same panel, click &#8220;Advanced&#8221;, which will open up a new window. The most important thing you should do here is add &#8220;localhost&#8221; as the debugger proxy at the bottom of the window. Another thing that you would probably like to do is choose &#8220;Ask Every Time&#8221;  for the debug URL, which will ask you to specify the URL when running the debugger, otherwise it will always go to the root URL.</p>
<p>You should now be ready to run the debugger. Click on a line number somewhere in your code (a line that you know will be executed) to mark it as a breakpoint; this means that the execution will pause when it gets to this line. This is what a breakpoint looks like:</p>
<div id="attachment_421" class="wp-caption aligncenter" style="width: 297px"><img class="size-full wp-image-421" title="Click on the line number to activate a breakpoint" src="http://joncairns.com/wp-content/uploads/2012/01/Breakpoint.png" alt="Shows a breakpoint in Netbeans IDE" width="287" height="90" /><p class="wp-caption-text">Click on the line number to activate a breakpoint</p></div>
<p>One of the buttons at the top of the Netbeans window, below the menu, is the button to start the debugger (tooltip &#8220;Debug Main Project&#8221;) &#8211; click it. Your browser should open a tab with your project URL, and hang. You will then see that the breakpoint that you set has changed colour, meaning that the debugger has reached that point. You can use the debug windows to browse any variables in the current scope, which is totally awesome! I&#8217;ll leave it to you to use its full potential. When you&#8217;re ready to move on, click the icon that looks like a white arrow in a green circle, at the top of the Netbeans window. This will tell the debugger to move to the next breakpoint, or complete the execution if there aren&#8217;t any more set. You can stop the debugger at any point by clicking the big red square icon.</p>
<h2>4. Integrating with Chrome/Firefox (optional)</h2>
<p>Currently we can kick off a debug session from Netbeans, which opens a browser window. But what about if we want to go the other way, starting with our browser, and wake the debugger by reloading our website? This is possible for Google Chrome or Firefox, using plugins.</p>
<h3>Google CHrome</h3>
<p>This is my personal choice, and there&#8217;s a neat plugin called <a title="Xdebug helper" href="https://chrome.google.com/webstore/detail/eadndfjplgieldjbigjakmdgkmoaaaoc" target="_blank">Xdebug helper</a> that does a good job of linking your sites with Netbeans and Xdebug. Download and install, then go to <strong>Tools -&gt; Extensions </strong>and open the options for Xdebug helper. Under <strong>Domains</strong>, enter the domain of your site (e.g. <em>localhost </em>or <em>joncairns.local</em>). Then open up a tab with your site and click the little bug icon in the far right of the URL bar until he turns green. Start up the debugger in Netbeans, and leave it running. Now, every time you load your site it will use Xdebug.</p>
<h3>Firefox</h3>
<p>To be perfectly honest I haven&#8217;t tried it in Firefox, but I know that an extension exists &#8211; try <a title="Easy Xdebug for Firefox" href="https://addons.mozilla.org/en-US/firefox/addon/easy-xdebug/" target="_blank">Easy Xdebug</a>. If anyone fancies giving a step-by-step guide, then that would be welcome.</p>
<h2>5. Command-line debugging</h2>
<p>To start a debugging session from a command line script you need to set an environment variable before the PHP executable starts. I find that the easiest way to do this is to create a bash script that starts PHP with this variable set, and put it in <em>/usr/bin/php-xdebug</em>:</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
export XDEBUG_CONFIG=&quot;idekey=netbeans-xdebug&quot;
/usr/bin/php &quot;$@&quot;
</pre>
<p>Run <code>chmod +x</code> on the new file and run the PHP script with:</p>
<pre class="brush: bash; title: ; notranslate">
php-xdebug myscript.php
</pre>
<p>Happy debugging!</p>
]]></content:encoded>
			<wfw:commentRss>http://joncairns.com/2012/01/set-up-xdebug-with-netbeans-and-lamp-and-cakephp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JJ In Florida: Day Thirteen &#8211; Disney Hollywood Studios</title>
		<link>http://joncairns.com/2012/01/jj-in-florida-day-13-disney-hollywood-studios/</link>
		<comments>http://joncairns.com/2012/01/jj-in-florida-day-13-disney-hollywood-studios/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 18:32:40 +0000</pubDate>
		<dc:creator>joonty</dc:creator>
				<category><![CDATA[My Life]]></category>
		<category><![CDATA[disney]]></category>
		<category><![CDATA[florida]]></category>
		<category><![CDATA[orlando]]></category>

		<guid isPermaLink="false">http://joncairns.com/?p=405</guid>
		<description><![CDATA[This was our final park, and there was a palpable sadness (internally, obviously &#8211; after all, we are British). At the same time we felt like we&#8217;d had a great couple of weeks, and were approaching our limits of theme &#8230; <a href="http://joncairns.com/2012/01/jj-in-florida-day-13-disney-hollywood-studios/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This was our final park, and there was a palpable sadness (internally, obviously &#8211; after all, we are British). At the same time we felt like we&#8217;d had a great couple of weeks, and were approaching our limits of theme park stimulation. Hollywood Studios (previously MGM) is Disney&#8217;s version of Universal Studios, featuring the usual mix of shows and rides based on films belonging to the Disney Corporation. It&#8217;s also a celebration of Walt Disney and the effect that his life made to our TV screens in the 20th century. In fact, the park&#8217;s most obvious landmark is Mickey&#8217;s hat from the Sorcerer&#8217;s Apprentice.</p>
<div id="attachment_406" class="wp-caption aligncenter" style="width: 510px"><a href="http://joncairns.com/wp-content/uploads/2012/01/380094_10100107050382583_61202259_47977497_1785718829_n.jpg"><img class="size-full wp-image-406" title="A slightly bigger version of Mickey Mouse's hat" src="http://joncairns.com/wp-content/uploads/2012/01/380094_10100107050382583_61202259_47977497_1785718829_n-e1326562364770.jpg" alt="Mickey Mouse's hat from the Sorcerer's Apprentice at Disney's Hollywood Studios" width="500" height="666" /></a><p class="wp-caption-text">Mickey Mouse&#39;s hat from the Sorcerer&#39;s Apprentice</p></div>
<p>The recently updated Star Wars ride was our first port of call (believe it or not, this was a mutual decision and not my doing), which was another simulator. As good as it was, these simulators had a habit of making us both feel slightly ill. They&#8217;re almost worse than real roller-coasters, as you have the illusion of movement without actually moving. We then went to the Indiana Jones stunt show, which was absolutely fantastic: you&#8217;re given an insight into the way that stunts are executed in films, all within the context of the first Indiana Jones film, and with some amusing audience participation.</p>
<div id="attachment_407" class="wp-caption aligncenter" style="width: 510px"><a href="http://joncairns.com/wp-content/uploads/2012/01/393641_10100107069873523_61202259_47977545_91923096_n.jpg"><img class="size-full wp-image-407" title="Mickey and a broomstick" src="http://joncairns.com/wp-content/uploads/2012/01/393641_10100107069873523_61202259_47977545_91923096_n-e1326563579975.jpg" alt="A garden sculpture of Mickey Mouse and a broomstick at Disney's Hollywood Studios" width="500" height="375" /></a><p class="wp-caption-text">Mickey and a broomstick</p></div>
<p>A stand-out show was &#8220;Lights, Motors, Action!&#8221;, which featured stunt driving by professionals who do the car chases in films. It was pretty amazing to see how they did certain things: for instance, long periods of driving in reverse were done in a specially modified car that had the driving direction flipped, so that the driver was looking out the back window. Five cars at a time span around at high speed, synchronising their movements to the point where they passed each other with only inches to spare. Plus they had the usual cool stuff like explosions and driving through fire.</p>
<p>Another highlight was the Beauty and the Beast show, which was a beautifully crafted musical following the story of the classic film. As clichéd as it might seem, the best word for it is &#8220;enchanting&#8221;.</p>
<div id="attachment_408" class="wp-caption aligncenter" style="width: 510px"><a href="http://joncairns.com/wp-content/uploads/2012/01/383156_10100107066545193_61202259_47977539_1087157697_n.jpg"><img class="size-full wp-image-408" title="People with lots of spoons" src="http://joncairns.com/wp-content/uploads/2012/01/383156_10100107066545193_61202259_47977539_1087157697_n-e1326564396884.jpg" alt="The Beauty and the Beast show at Disney's Hollywood Studios" width="500" height="375" /></a><p class="wp-caption-text">Lots of people holding spoons</p></div>
<p>The finale was &#8220;Fantasmic&#8221;, a spectacle containing fireworks, walls of water, giant dragons and everyone&#8217;s favourite Disney characters. It was set in an outdoor theatre that held up to 7,000 people, and it was completely full when we were there. Even waiting for the show to start was entertaining, as the crowd managed to get a Mexican wave going: at its peak it looked like everyone was joining in, which is pretty impressive for a group that size. The show was a very memorable end to our theme park visits, and simply defies description (so I won&#8217;t try).</p>
<p>I think that we both felt like we&#8217;d seen enough after our sixth park. There was no way that we could have visited a park every day and, even though we could have fit another one in before the end of the holiday, we elected to spend the last day and a half by the pool at our resort. We will <del>probably</del> (elbow nudge from Joy) definitely go back in the future, and I&#8217;m sure we&#8217;ll see some of the things that we didn&#8217;t see this time, like the Kennedy Space Centre and Magic Kingdom. We&#8217;ve come away with lots of great memories of rest and relaxation, but also of discovery and new experiences.</p>
<p><em>Fin.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://joncairns.com/2012/01/jj-in-florida-day-13-disney-hollywood-studios/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JJ In Florida: Day Eleven &#8211; Sea World</title>
		<link>http://joncairns.com/2012/01/jj-in-florida-day-eleven-sea-world/</link>
		<comments>http://joncairns.com/2012/01/jj-in-florida-day-eleven-sea-world/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 14:18:03 +0000</pubDate>
		<dc:creator>joonty</dc:creator>
				<category><![CDATA[My Life]]></category>
		<category><![CDATA[holiday]]></category>
		<category><![CDATA[orlando]]></category>
		<category><![CDATA[sea world]]></category>

		<guid isPermaLink="false">http://joncairns.com/?p=398</guid>
		<description><![CDATA[Sea World is a sort of aquatic version of Animal Kingdom: they have a few rides, and some spectacular shows, but a lot of it leaves you to walk around and discover the animals for yourself. There were plenty of &#8230; <a href="http://joncairns.com/2012/01/jj-in-florida-day-eleven-sea-world/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sea World is a sort of aquatic version of Animal Kingdom: they have a few rides, and some spectacular shows, but a lot of it leaves you to walk around and discover the animals for yourself. There were plenty of fenced outdoor sections, containing animals like crocodiles, flamingos, dolphins and seals. There was a manta ray petting area, where you could touch a passing ray if you were quick enough &#8211; they&#8217;re a bit like touching a rubber wetsuit.</p>
<div id="attachment_399" class="wp-caption aligncenter" style="width: 510px"><a href="http://joncairns.com/wp-content/uploads/2011/12/387560_10100107022548363_61202259_47977310_670539242_n.jpg"><img class="size-full wp-image-399" title="A manta ray at Sea World" src="http://joncairns.com/wp-content/uploads/2011/12/387560_10100107022548363_61202259_47977310_670539242_n-e1324655381425.jpg" alt="A manta ray at Sea World" width="500" height="375" /></a><p class="wp-caption-text">A manta ray waving at us.</p></div>
<p>There were three main shows that we wanted to see: Clyde and Seamore Take Pirate Island, which was a seal, walrus and otter show; Blue Horizons, containing dolphins and people doing acrobatics; and the main event, Believe, with killer whales (and the iconic Shamu).</p>
<p>We saw the seal show first, which was great fun. The slapstick humour and silly story were just a platform for the animals showing their amazing talents and (almost) unvarying obedience to their trainers. Diving, back-flipping and even dancing were just a few of the things they were more than happy to do to earn a fishy snack. The walrus, due to its size, was less agile &#8211; in fact, it could barely move!</p>
<div id="attachment_400" class="wp-caption aligncenter" style="width: 510px"><a href="http://joncairns.com/wp-content/uploads/2011/12/385474_10100107024374703_61202259_47977341_975902384_n.jpg"><img class="size-full wp-image-400" title="Clyde and Seamore Take Pirate Island at Sea World Orlando" src="http://joncairns.com/wp-content/uploads/2011/12/385474_10100107024374703_61202259_47977341_975902384_n-e1324655956383.jpg" alt="Clyde and Seamore Take Pirate Island at Sea World Orlando" width="500" height="666" /></a><p class="wp-caption-text">Seal staring competition</p></div>
<p>Blue Horizons was amazing for dolphin lovers (like my wife) and the ambivalent (like me) alike. One of the most impressive tricks was when two dolphins would push a trainer (person, not a shoe) around under the water, eventually surfacing to throw them ten feet up into the air. This was mixed in with people doing acrobatics above the water, and divers jumping from unbelievable heights.</p>
<div id="attachment_401" class="wp-caption aligncenter" style="width: 510px"><a href="http://joncairns.com/wp-content/uploads/2011/12/387576_10100107026081283_61202259_47977368_231929251_n.jpg"><img class="size-full wp-image-401" title="Blue Horizons at Sea World, Orlando" src="http://joncairns.com/wp-content/uploads/2011/12/387576_10100107026081283_61202259_47977368_231929251_n-e1324656476950.jpg" alt="Blue Horizons at Sea World, Orlando" width="500" height="666" /></a><p class="wp-caption-text">&quot;Help, my upper body has turned into a dolphin&quot;</p></div>
<p>&#8220;Believe&#8221; is the park&#8217;s main attraction, and features half a dozen killer whales performing tricks in a water tank sitting in a stadium that seats five thousand people. We preceded it by buying pretzels in the shape of a killer whale, as we&#8217;d heard good things about American pretzels. To say they were a disappointment is an understatement; it was made entirely of thick, tasteless dough. Most of it wasn&#8217;t salted, and the tiny area that was seasoned was covered in gigantic shards of salt.</p>
<p>Fortunately, the show was fantastic. The whales were so obedient to their trainers, and seemed to experience human-like enjoyment when splashing the audience with large amounts of water. You can definitely see why it&#8217;s the iconic Sea World show.</p>
<p>We finished off the day by going on the Polar Express simulator, which was less impressive than the section afterwards that was like a miniature zoo of Arctic animals, containing seals, whales and polar bears.</p>
<p>All in all, Sea World was a more relaxed experience compared to the other parks, and unusually you came away with full use of your legs.</p>
<p><em>Next: <a title="JJ In Florida: Day 13 – Disney Hollywood Studios" href="http://joncairns.com/2012/01/jj-in-florida-day-13-disney-hollywood-studios/">Day Thirteen &#8211; Disney&#8217;s Hollywood Studios</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://joncairns.com/2012/01/jj-in-florida-day-eleven-sea-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

