<?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>Craig Hooghiem</title>
	<atom:link href="http://www.craighooghiem.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.craighooghiem.com</link>
	<description>Musings &#38; Application Development</description>
	<lastBuildDate>Tue, 12 Mar 2013 14:30:42 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<item>
		<title>Deleting Orphan Records in MySQL</title>
		<link>http://www.craighooghiem.com/deleting-orphan-records-in-mysql/</link>
		<comments>http://www.craighooghiem.com/deleting-orphan-records-in-mysql/#comments</comments>
		<pubDate>Mon, 17 Dec 2012 15:23:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.craighooghiem.com/?p=159</guid>
		<description><![CDATA[Recently I ran into an issue with an application I had developed where I made the mistake of not deleting some child table records when the parent record was deleted. After the app had been in beta for a month or two, I realized that I had thousands of records in the child tables that [...]]]></description>
				<content:encoded><![CDATA[<p>Recently I ran into an issue with an application I had developed where I made the mistake of not deleting some child table records when the parent record was deleted. After the app had been in beta for a month or two, I realized that I had thousands of records in the child tables that had no parents and were thus &#8220;orphan&#8221; records.</p>
<p>After juggling a few ideas in my head, I decided the best approach to this would be to make a temporary table of just the orphan items and then delete from the child table where the ID matches an ID in my orphans table. What does this look like in MySQL?</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TEMPORARY</span> <span style="color: #993333; font-weight: bold;">TABLE</span> Orphans <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #66cc66;">&#40;</span>
  <span style="color: #993333; font-weight: bold;">SELECT</span> ChildTable<span style="color: #66cc66;">.</span>id <span style="color: #993333; font-weight: bold;">FROM</span> ChildTable
  <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">OUTER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> ParentTable <span style="color: #993333; font-weight: bold;">ON</span> ChildTable<span style="color: #66cc66;">.</span>RelationKey <span style="color: #66cc66;">=</span> ParentTable<span style="color: #66cc66;">.</span>RelationKey
  <span style="color: #993333; font-weight: bold;">WHERE</span>  ParentTable<span style="color: #66cc66;">.</span>RelationKey <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span>
<span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&lt;/</span>p<span style="color: #66cc66;">&gt;</span>
&nbsp;
<span style="color: #66cc66;">&lt;</span>p<span style="color: #66cc66;">&gt;</span><span style="color: #993333; font-weight: bold;">DELETE</span> <span style="color: #993333; font-weight: bold;">FROM</span> ChildTable <span style="color: #993333; font-weight: bold;">WHERE</span> ChildTable<span style="color: #66cc66;">.</span>id <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> id <span style="color: #993333; font-weight: bold;">FROM</span> Orphans<span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">DROP</span> <span style="color: #993333; font-weight: bold;">TABLE</span> Orphans;</pre></td></tr></table></div>

</p>
<p><strong>How Does it Work?</strong><br />
Essentially, the first line of the query makes a new temporary table that we will delete when we are done:<br />
<code>CREATE TEMPORARY TABLE Orphans AS (</code></p>
<p>The second line selects the primary key (id) of every record in Child Table.<br />
The third line creates a Left Outer Join with the parent table that used to have records associated with your orphaned records, based on whichever field you use to associate the two tables (RelationKey).<br />
The fourth line specifies that we only want to select the ones where the RelationKey we provide is NULL, meaning it couldn&#8217;t find a parent element.</p>
<p>At this point we build the table and we now have a table of all orphaned records.<br />
The last command just runs a DELETE query telling the database to delete any records that exist in both the ChildTable and the new Orphans table. Once that&#8217;s done, delete the Orphans table and the operation is done.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.craighooghiem.com/deleting-orphan-records-in-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Composer with FuelPHP</title>
		<link>http://www.craighooghiem.com/composer-with-fuelphp/</link>
		<comments>http://www.craighooghiem.com/composer-with-fuelphp/#comments</comments>
		<pubDate>Fri, 14 Dec 2012 07:17:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[fuelPHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.craighooghiem.com/?p=151</guid>
		<description><![CDATA[As I noted in an earlier post about my switch from CodeIgniter to FuelPHP, I have since started moving much of my development from FuelPHP to Laravel. Most recently I have been using Laravel 4 and have become acquainted and infatuated with Composer packages. Composer is bringing the package functionality that PHP needs and PEAR [...]]]></description>
				<content:encoded><![CDATA[<p>As I noted in an earlier post about my switch from <a href="http://www.craighooghiem.com/fuelphp-the-switch-from-codeigniter/">CodeIgniter to FuelPHP</a>, I have since started moving much of my development from FuelPHP to Laravel. Most recently I have been using Laravel 4 and have become acquainted and infatuated with Composer packages. Composer is bringing the package functionality that PHP needs and PEAR can&#8217;t possibly deliver to the current PHP community. Unfortunately, the current version (1.4 as I write this) of FuelPHP doesn&#8217;t have Composer baked in yet. The beauty of Composer is that installing it into an application is so simple that this is no longer a barrier.</p>
<p><em>Note: FuelPHP 2.0, which is major milestone and change for FuelPHP, will supposedly include Composer. There is talk of a 1.x version including Composer in order to bridge the gap between the current releases and the much changed 2.0 release.</em></p>
<p><strong>Setting Up Composer to Work With FuelPHP 1.x</strong></p>
<p>1) Download Composer. Although obvious, this is a necessary step. I find that command line installation is easiest. Navigate to the root directory of your application and run the following code:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;">curl <span style="color: #339933;">-</span>s https<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//getcomposer.org/installer | php</span></pre></td></tr></table></div>

<p>2) At this point you should have a composer.phar file installed in your application&#8217;s root directory. The next step is telling Composer what packages you want to add to your project. Composer uses a file named <em>composer.json</em>, so create this file in the root directory. The most basic example is laid out below, but look for more examples and information in the <a href="http://getcomposer.org/doc/00-intro.md">Composer documentation</a>.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
     <span style="color: #0000ff;">&quot;config&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">&quot;vendor-dir&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;fuel/app/vendor&quot;</span>
     <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
     <span style="color: #0000ff;">&quot;require&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">&quot;monolog/monolog&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;1.2.*&quot;</span>
     <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>3) Now that we have the composer.phar file and a composer.json file with the packages we need, run the composer installation, which will download the packages and place them in the vendor directory specified in composer.json (in this case the default fuel vendor directory).</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;">php composer<span style="color: #339933;">.</span>phar install</pre></td></tr></table></div>

<p>4) Once the installation has finished (may take some time, depending on the number of packages you have) we can assume that all packages are installed to the fuel/app/vendor directory and now we need to tell FuelPHP to look at this directory for our new packages.<br />
Open your bootstrap file (fuel/app/bootstrap.php) and add the following code after the <em>AutoLoader::register()</em> that is already there:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require</span> APPPATH<span style="color: #339933;">.</span><span style="color: #0000ff;">'vendor/autoload.php'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>At this point you have finished the setup and installation of Composer.<br />
The next step is to read the Composer getting started guide to make sure you&#8217;re up to speed with how it works.<br />
The basics you will need to know right off the bat:</p>
<ul>
<li><em>php composer.phar update</em> &#8211; this command will update all your packages to the latest version based on criteria specified in your composer.json file. </li>
<li><em>php composer.phar dump-autoload</em> &#8211; run this command whenever you add or remove packages so your autoload.php file can be updated.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.craighooghiem.com/composer-with-fuelphp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Headaches of Synchronizing Servers</title>
		<link>http://www.craighooghiem.com/the-headaches-of-synchronizing-servers/</link>
		<comments>http://www.craighooghiem.com/the-headaches-of-synchronizing-servers/#comments</comments>
		<pubDate>Sat, 01 Dec 2012 01:23:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[file transfers]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[scp]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://www.craighooghiem.com/?p=132</guid>
		<description><![CDATA[Imagine this crazy situation: I have two servers. One has the files I want and the other is empty. I need to move all the files from A to B. I have SSH access to both servers. Easy, right? Not so much. rsync &#8211; this is a great little tool for syncing two servers over [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Imagine this crazy situation:</strong><br />
I have two servers. One has the files I want and the other is empty. I need to move all the files from A to B. I have SSH access to both servers.<br />
Easy, right? Not so much.</p>
<p><span style="color: #000080;"><em>rsync</em></span> &#8211; this is a great little tool for syncing two servers over SSH. The whole thing is just dreamy, with one glaring exception: when it goes to mkdir the new directories on server B it doesn&#8217;t throw the mkdir -p flag and therefore can only create 1 child directory.<br />
ie: If I am syncing opt/git/repos/test to /opt/ on B and server B has nothing in opt, rsync will attempt to create a new directory /git/repos/test and will fail because mkdir can&#8217;t make 3 directories at once.</p>
<p><span style="color: #000080;"><em>scp</em></span> &#8211; this is another great tool for transferring files securely over SSH. It easily solves the rsync problem by being able to create any necessary directories into any sub-levels necessary. So, what&#8217;s the catch? It won&#8217;t check for existing files, which means you have to transfer every single file, every single time. When I&#8217;m transferring over 20gigs in files, this just won&#8217;t cut it.</p>
<p><span style="color: #000080;"><em>wget</em></span> &#8211; as bad as it sounds, wget started looking like a great option for what I need to do. wget will FTP into a server and recursively download everything. The entire process is fairly quick and it&#8217;s great about ignoring files if the exist locally. The first time I ran this I believed I had the solution I needed. Unfortunately, after working with Server B for a while I started to notice that some files were missing. Ends up that, despite apparently completing successfully, the command missed hundreds of files. Running it again continues to find more files that weren&#8217;t transferred, but the logs don&#8217;t explain why it&#8217;s ending prematurely.</p>
<p><span style="color: #000080;"><em>unison</em></span> &#8211; unison is a tool I installed based on it&#8217;s promising attempts to fix the limitations of rsync and other tools. Unfortunately, after installing and reading through the user manual, it appears that unison is a heavier tool than I wanted or needed and requires logic based on what files had previously been transferred, which had changed, etc. I may have missed something here, but the logic was far different than what I was looking for &#8220;out of the box&#8221; so I moved on.</p>
<p><strong>The Solution?<br />
</strong>If you can address this correctly the first time it makes much more sense:</p>
<ol>
<li>First Run &#8211; Use SCP to securely transfer all the files from Server A to Server B the first time.</li>
<li>Future Runs &#8211; Use rsync to compare the two servers and only download new/changed files.</li>
</ol>
<p>The only downside to this situation is the fact that if you create two new child directories (ie: uploads/new/new2/) then rsync will still fail as it tries to create the two new directories at once. Alternatively, if the files are not substantial in size, you can <span style="color: #000080;">tar</span> them up and transfer as one large file.</p>
<p><span style="color: #000080;">What am I missing?</span> There must be a better solution somewhere. All I&#8217;m asking for is rsync with a mkdir -p flag to create all the parent directories before it creates a child directory.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.craighooghiem.com/the-headaches-of-synchronizing-servers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Task Management</title>
		<link>http://www.craighooghiem.com/task-management/</link>
		<comments>http://www.craighooghiem.com/task-management/#comments</comments>
		<pubDate>Thu, 06 Sep 2012 02:03:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.craighooghiem.com/?p=109</guid>
		<description><![CDATA[Task Management is one thing that I have always been extremely particular about. I have used everything from the pencil and paper combo to mobile apps that sync with my desktop apps. I intended to compile a list of all the apps I had tried with a blurb on each one and why I started [...]]]></description>
				<content:encoded><![CDATA[<p>Task Management is one thing that I have always been extremely particular about. I have used everything from the pencil and paper combo to mobile apps that sync with my desktop apps. I intended to compile a list of all the apps I had tried with a blurb on each one and why I started using it and now no longer use it. However, the list is so long that that post no longer makes sense, but a quick overview of what I have discovered for myself is what follows.</p>
<h3>Get Things Done</h3>
<p>I don&#8217;t claim to be an expert on this idea by any stretch, but for quite a while I thought that GTD was the best method for tracking tasks and staying motivated to get them done. Unfortunately, over time I found that the over simplification of GTD apps and implementations meant that when I wanted or needed additional layers or organization they obviously weren&#8217;t there. Most of the time this was a good thing, but when it came down to finding an app that could handle all my tasks and projects, GTD no longer managed to cut it.</p>
<h3>Project Management</h3>
<p>After a stint with the overly simple GTD apps, I decided to take the polar opposite approach and try using Project Management applications and suites. Specifically, I tried Asana, Orchestra, activeCollab, Microsoft Project and a few others. I found that for my own projects and tasks, the extra features and levels of organization were a welcome change from the Get Things Done model. After a few months of dedication to this method, I had very few issues with this system &#8211; the only real issue I had was the time invested in updating and maintaining the projects. With every additional level of detail allowed, there was additional work involved in simple maintenance.</p>
<h3>Hybrid</h3>
<p>Attempting to find a healthy mix between GTD and Project Management eventually led me to Wunderkit. Wunderkit is an extension of sorts on the concepts that Wunderlist brought about. I spent signficant time with Wunderlist when I was trying GTD apps, but had never heard of Wunderkit. The switch to Wunderkit, in a nut shell, means that you have multiple instances of Wunderlist organized into projects. Each project also includes collaboration methods and sharing of your tasks and progress. For me, it became GTD with an additional level to separate out all the different projects, departments or contacts that I did business with. This solution is still in use today, but I can&#8217;t honestly say that it is my primary solution at this point as I rarely keep it updated and use it more for long term tasks and tracking only ongoing projects.</p>
<h3>Where Does This Leave Me?</h3>
<p>This leaves me with my current state, which came about by a quick Google search for creating tasks from emails automatically. I found that more often than not, when I wanted to remember something I would send myself an email reminder, which would sit in my inbox until I addressed it. As a proud advocate of the 0-inbox, my inbox has always been my bottom line task list of things that need attention. I decided that since this was the one task list that I never failed to use, it would make sense to try and find a way to integrate a task list with my emails themselves. This led me to <a href="http://www.taskforceapp.com/">TaskForce</a>, a browser plugin that allows me to convert any email into a Task with follow-ups, notes and associated email tracking. It&#8217;s only been a few days, but so far this has helped to move all of my communication and task management into one specific area, allowing me to manage everything from my Gmail account. There are some definite downsides, including the fact that it is a browser plug-in that needs to be installed on each system you want to use it with and the fact that I have yet to find any additional apps or support for mobile integration, but so far the experience has been very simple and hassle-free, while letting me use emails themselves to add additional information and communications to tasks.</p>
<p><strong>Update:</strong> It appears that the day after I posted this I received an email letting me know that <a href="http://christianreber.com/blog/how-we-shifted-6wunderkinder-to-wunderlist-again">Wunderkit development has been halted</a> and it will likely never leave beta. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.craighooghiem.com/task-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FuelPHP &#8211; The Switch From CodeIgniter</title>
		<link>http://www.craighooghiem.com/fuelphp-the-switch-from-codeigniter/</link>
		<comments>http://www.craighooghiem.com/fuelphp-the-switch-from-codeigniter/#comments</comments>
		<pubDate>Sun, 17 Jun 2012 02:32:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.craighooghiem.com/?p=101</guid>
		<description><![CDATA[I&#8217;m certainly not the first to make the switch and I&#8217;m certain I won&#8217;t be the last. For years, CodeIgniter was my framework of choice for PHP applications of almost any size. The URI classes, simple helper integration and MVC structure were easy to use and light enough to stay out of the way during [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m certainly not the first to make the switch and I&#8217;m certain I won&#8217;t be the last. For years, CodeIgniter was my framework of choice for PHP applications of almost any size. The URI classes, simple helper integration and MVC structure were easy to use and light enough to stay out of the way during application development. For my most recent project, I needed something more modular, possibly with a full blown HMVC integration.</p>
<p>After extensive research into HMVC options for CodeIgniter, I stumbled upon fuel and the core functions they had built in from the bottom up. After a few days of reading, I was sold on the idea of using fuel for my newest project. It&#8217;s been a few weeks now and I can definitely say that this was a decision I will never regret. Rather than going into a discussion of the differences between CodeIgniter and fuelPHP (which has been done before quite well), I will just summarize some of my favourite features.</p>
<ol>
<li><strong>Built in Modular structure</strong> &#8211; this was the reason that led to me stumble upon fuelPHP in the first place. Fuel doesn&#8217;t force you into using modules or an HMVC file structure, but if you choose to implement them the process is <a href="http://docs.fuelphp.com/general/hmvc.html">well documented</a> and quite easy to integrate. Once you start creating apps in a modular fashion, it becomes obvious why this structure has clear benefits. I won&#8217;t go into the benefits of HMVC, but a <a href="http://stackoverflow.com/questions/2308570/what-can-i-use-the-hmvc-architecture-for">quick read</a> around will find various questions and answers on this topic.</li>
<li><strong>ORM in the Core &#8211; </strong>When reading about the ORM Class in the core of fuel, I had no intentions of using it for my applications; I was always comfortable using models to extend standard SQL queries or using the Active Record class in CodeIgniter. I decided to give the ORM package a chance for one module in the new application and ended up using it for every module so far. The ORM maps a model to each table in the database, establishes the fields of the table and the relationships to other tables.</li>
<li><strong>Complete Flexibility</strong> &#8211; One of the many benefits of fuel is that there are very few restrictions on how you write code. Classes can be in any file structure you want, you can declare any folder as a &#8220;modules&#8221; folder, you can easily extend native classes and there are countless other examples of how fuel lets you write code in your own way.</li>
<li><strong>Rockstar Team Running the Show </strong>- One thing I often heard about with CodeIgniter was that EllisLab was creating CodeIgniter more to fit it&#8217;s own needs than those of the community. The slow process for change was also blamed on restrictions on community development put in place by EllisLab. It was refreshing to read up on fuelPHP and know that not only is the team made up of <a href="http://fuelphp.com/about">incredible minds</a>, but community was the focus of development.</li>
<li><strong>PHP 5.3</strong> &#8211; Although this may cause issues for some hosting environments (I had to update my own VPS to the latest version manually), the use of PHP 5.3 means that fuelPHP can take advantage of all the latest features that PHP introduced since the times of PHP 4.</li>
<li><strong>Community Enthusiasm</strong> &#8211; One of the biggest reasons I fell in love with CodeIgniter was the massive community following and development. Libraries and modifications were being developed and released constantly, which was helping to keep the framework moving forward when the core was moving at a slower pace. This is the same reason I have fallen in love with fuel; the community is <a href="http://lexx.gr/post/why-fuelphp-rocks">on</a> <a href="http://jaequery.tumblr.com/post/12152767918/i-think-fuelphp-will-be-the-new-phps-framework-leader">fire </a><a href="http://twitter.com/obrignoni/status/62656645565648896">about</a> <a href="http://blog.utahcon.com/computers/code/frameworks/fuelphp/fuelphp-my-new-favorite-framework">fuel</a>. Not only are they excited about it, but they&#8217;re helping develop modules, packages and the core at an incredible pace.</li>
</ol>
<p>There are countless other things I have found myself loving about fuel, but these are the most obvious ones at a general level. At this point I have begun developing all my applications in a modular structure. I have been scouring GitHub for fantastic packages (like <a href="https://github.com/dre1080/warden">Warden</a>) that I can extend to save time and use to learn from other <a href="http://philsturgeon.co.uk/">experts</a>.</p>
<p><strong>Update:</strong><br />
I feel it is only fair to disclose the fact that much of this love has since passed. Although I still think fuelPHP has some great features and functionality, the community, development speed and brilliance over at Laravel has converted me. See you in #laravel on Freenode.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.craighooghiem.com/fuelphp-the-switch-from-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Life With the iPad</title>
		<link>http://www.craighooghiem.com/life-with-the-ipad/</link>
		<comments>http://www.craighooghiem.com/life-with-the-ipad/#comments</comments>
		<pubDate>Mon, 11 Jun 2012 02:41:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.craighooghiem.com/?p=106</guid>
		<description><![CDATA[For years I eyed iPad owners with envy. This slick slab of hardware has been on my wish list for years. With the launch of the new iPad, I finally made the jump. From day 1, I have used my iPad multiple times on a daily basis and have attempted to move as many of [...]]]></description>
				<content:encoded><![CDATA[<p>For years I eyed iPad owners with envy. This slick slab of hardware has been on my wish list for years. With the launch of the new iPad, I finally made the jump. From day 1, I have used my iPad multiple times on a daily basis and have attempted to move as many of my daily tasks to the iPad as possible. This process has been enhanced by the incredible number of productivity, note taking and various other planning apps available. I intend to get into some more &#8220;app breakdowns&#8221; in the future, but suffice it to say I am incredibly hooked on Wunderlist, Things, Paper and Mint Personal Finance.</p>
<p>All things considered, the iPad is a fantastic investment that gets me away from the computer and keeps me organized more than I ever expected.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.craighooghiem.com/life-with-the-ipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
