<?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 Ruten</title>
	<atom:link href="http://ruten.ca/feed/" rel="self" type="application/rss+xml" />
	<link>http://ruten.ca</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Wed, 16 May 2012 15:53:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Programming Exercise: Conway&#8217;s Game of Life in JavaScript and Canvas</title>
		<link>http://ruten.ca/2012/02/24/programming-exercise-conways-game-of-life-in-javascript-and-canvas/</link>
		<comments>http://ruten.ca/2012/02/24/programming-exercise-conways-game-of-life-in-javascript-and-canvas/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 18:39:31 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://matthewruten.com/?p=663</guid>
		<description><![CDATA[Demo: http://nomatteus.github.com/conway-game-of-life-js/examples/ Code: https://github.com/nomatteus/conway-game-of-life-js What is Conway&#8217;s Game of Life? Wikipedia has a good article. Excerpt: The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970. The &#8220;game&#8221; is a zero-player game, meaning that its evolution is determined by its initial state, requiring no further [...]]]></description>
			<content:encoded><![CDATA[<p>Demo: <a href="http://nomatteus.github.com/conway-game-of-life-js/examples/" target="_blank">http://nomatteus.github.com/conway-game-of-life-js/examples/</a></p>
<p>Code: <a href="https://github.com/nomatteus/conway-game-of-life-js" target="_blank">https://github.com/nomatteus/conway-game-of-life-js</a></p>
<h2>What is Conway&#8217;s Game of Life?</h2>
<p>Wikipedia has a good <a href="http://en.wikipedia.org/wiki/Conway's_Game_of_Life" target="_blank">article</a>. Excerpt:</p>
<blockquote><p>The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970. The &#8220;game&#8221; is a zero-player game, meaning that its evolution is determined by its initial state, requiring no further input. One interacts with the Game of Life by creating an initial configuration and observing how it evolves.</p>
<p><strong>Rules</strong></p>
<p>The universe of the Game of Life is an infinite two-dimensional orthogonal grid of square cells, each of which is in one of two possible states, alive or dead. Every cell interacts with its eight neighbours, which are the cells that are horizontally, vertically, or diagonally adjacent. At each step in time, the following transitions occur:</p>
<p>1. Any live cell with fewer than two live neighbours dies, as if caused by under-population.<br />
2. Any live cell with two or three live neighbours lives on to the next generation.<br />
3. Any live cell with more than three live neighbours dies, as if by overcrowding.<br />
4. Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.</p></blockquote>
<h2>Coding</h2>
<p>I remember playing around with the Game of Life many years ago, and have always thought it would be fun to program it. It&#8217;s a relatively simple programming exercise&#8211;you just need a grid of cells, and then apply the 4 rules of the Game of Life.</p>
<p>After finishing the main coding, I added an option to make the grid &#8220;colourful&#8221;. All this does is use a random color for each cell, instead of making everything black, but I like the results!</p>
<p>Some other things I could add:</p>
<ul>
<li>Work on creating a more efficient algorithm, i.e. don&#8217;t check each cell in areas that you know won&#8217;t change in the next few generations</li>
<li>Make an interface to create/draw grids, and a way to import/share them</li>
<li>Similar to the above, create a better way to make grids in code, to avoid having to have huge arrays of 0&#8242;s</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://ruten.ca/2012/02/24/programming-exercise-conways-game-of-life-in-javascript-and-canvas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Heroku Cheatsheet (Useful Heroku Commands Reference)</title>
		<link>http://ruten.ca/2012/02/15/heroku-cheatsheet-useful-heroku-commands-reference/</link>
		<comments>http://ruten.ca/2012/02/15/heroku-cheatsheet-useful-heroku-commands-reference/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 20:36:48 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[How To]]></category>

		<guid isPermaLink="false">http://matthewruten.com/?p=639</guid>
		<description><![CDATA[Basics Update Command-line Tool heroku update Help heroku help Get Started Create App heroku create --stack cedar [&#60;appname&#62;] Deploy App git push heroku master Open App in Web Browser heroku open Useful Info About Your App Basic App Info heroku info View App Config heroku config Show State of App heroku ps Show App Logs [...]]]></description>
			<content:encoded><![CDATA[<h3><a href="http://ruten.ca/wp-content/uploads/2012/02/heroku_cheatsheet.png"><img class="alignnone size-full wp-image-648" title="heroku_cheatsheet" src="http://ruten.ca/wp-content/uploads/2012/02/heroku_cheatsheet.png" alt="" width="616" height="574" /></a></h3>
<h3>Basics</h3>
<pre><strong>Update Command-line Tool</strong>
 heroku update</pre>
<pre><strong>Help</strong>
 heroku help</pre>
<h3>Get Started</h3>
<pre><strong>Create App</strong>
 heroku create --stack cedar [&lt;appname&gt;]</pre>
<pre><strong>Deploy App</strong>
 git push heroku master</pre>
<pre><strong>Open App in Web Browser</strong>
 heroku open</pre>
<h3>Useful Info About Your App</h3>
<pre><strong>Basic App Info</strong>
 heroku info</pre>
<pre><strong>View App Config</strong>
 heroku config</pre>
<pre><strong>Show State of App</strong>
 heroku ps</pre>
<pre><strong>Show App Logs</strong>
 heroku logs</pre>
<h3>Advanced (Run Tasks/Database/Scaling)</h3>
<pre><strong>Run task on Heroku (i.e. Rake tasks)</strong>
 heroku run rake task:name</pre>
<pre><strong>Pull/Push Database (Use with Caution! Potentially Destructive.)</strong>
 heroku db:pull</pre>
<pre> heroku db:push</pre>
<pre><strong>Scale Web Process</strong>
 heroku ps:scale web=1</pre>
<pre><strong>Set timezone for app. (Use TZ time zones from <a href="http://en.wikipedia.org/wiki/List_of_tz_database_time_zones" target="_blank">here</a> [wikipedia].)</strong>
 heroku config:add TZ=America/Vancouver</pre>
<p>For more, see here: <a href="http://devcenter.heroku.com/categories/command-line" target="_blank">http://devcenter.heroku.com/categories/command-line</a></p>
<p><em>Bonus Tip!</em></p>
<p><strong>Avoid Free App (1 Web Dyno) Idling</strong></p>
<p>Install New Relic Addon (Free): <a href="http://addons.heroku.com/newrelic" target="_blank">http://addons.heroku.com/newrelic</a><br />
And Configure: <a href="http://devcenter.heroku.com/articles/newrelic" target="_blank">http://devcenter.heroku.com/articles/newrelic</a><br />
And then setup Availability Monitoring in &#8220;Menu &gt; Settings &gt; Availability Monitoring&#8221;</p>
<p><a href="http://ruten.ca/wp-content/uploads/2012/02/heroku_cheatsheet.pdf" target="_blank">Download PDF Version (heroku_cheatsheet.pdf)</a></p>
<p><a href="https://docs.google.com/spreadsheet/ccc?key=0An-JXZUc9FFldGhfM2N1MWgtZzFEU3FtaXRxMmtIUkE#gid=0" target="_blank">View on Google Docs</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://ruten.ca/2012/02/15/heroku-cheatsheet-useful-heroku-commands-reference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Standing Desk Experiment: Week 1 (Or, How I Hacked Together A Standing Desk for Free)</title>
		<link>http://ruten.ca/2011/11/20/my-standing-desk-experiment-week-1-or-how-i-hacked-together-a-standing-desk-for-free/</link>
		<comments>http://ruten.ca/2011/11/20/my-standing-desk-experiment-week-1-or-how-i-hacked-together-a-standing-desk-for-free/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 07:32:53 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://matthewruten.com/?p=609</guid>
		<description><![CDATA[In the past couple years, I&#8217;ve read many blog posts and news stories about how sitting is killing us, and we were not made to sit stationary for hours at a time. Along with that, more and more people are trying out standing desks, to avoid some of the pitfalls of sitting. I like the [...]]]></description>
			<content:encoded><![CDATA[<p>In the past couple years, I&#8217;ve <a href="http://www.marksdailyapple.com/standing-at-work/" target="_blank">read</a> <a href="http://hivelogic.com/articles/sitting-standing-balance-ball/" target="_blank">many</a> <a href="http://nerdfitness.com/blog/2011/08/15/standing/" target="_blank">blog</a> <a href="http://smarterware.org/7102/how-and-why-i-switched-to-a-standing-desk" target="_blank">posts</a> and <a href="http://opinionator.blogs.nytimes.com/2010/02/23/stand-up-while-you-read-this/" target="_blank">news stories</a> about how sitting is killing us, and we were not made to sit stationary for hours at a time. Along with that, <a href="http://jessenoller.com/2011/04/25/switching-to-a-standing-desk-thoughts/" target="_blank">more</a> and <a href="http://lifebyexperimentation.com/2011/03/experiment-the-standing-desk/" target="_blank">more</a> people are trying out standing desks, to avoid some of the pitfalls of sitting.</p>
<p>I like the idea of standing desks, but don&#8217;t really want to invest any money into it until I try it out, so I hacked one together with stuff I already have:</p>
<p><a href="http://ruten.ca/wp-content/uploads/2011/11/standing-desk.jpg"><img class="alignnone size-full wp-image-610" title="standing-desk" src="http://ruten.ca/wp-content/uploads/2011/11/standing-desk.jpg" alt="" width="288" height="451" /></a></p>
<p>It&#8217;s just a table on a table, with some stuff on the ground to stand on, to reach the right height.</p>
<p>Some initial notes:</p>
<ul>
<li>Sore feet! I&#8217;ve only spent a few hours standing so far, but my feet get quite sore. Walking around once in a while helps!</li>
<li>Typing feels much more natural. I think this is the first time I&#8217;m actually typing in an ergonomically-correct way, and it feels great!</li>
<li>I probably need a stand for my monitor, so I don&#8217;t have to look down at it.</li>
<li>I walk around a lot more, and can easily pace back and forth when I need to think about a problem.</li>
</ul>
<p>Where to go from here?</p>
<ul>
<li>Standing desk or not, I need to get an actual desk. The <a href="http://www.ikea.com/ca/en/catalog/products/60111123/" target="_blank">Frederik</a> desk from Ikea is adjustable, so it should work as either a standing or sitting desk.</li>
<li>I&#8217;ll try this out for a few weeks and see how it goes! I only use this computer on evenings and weekends, so it&#8217;s not too crazy to stand for those times.</li>
</ul>
<p><em>Side note: Also visible in the photo is the exercise ball I was using as a chair previously. </em></p>
]]></content:encoded>
			<wfw:commentRss>http://ruten.ca/2011/11/20/my-standing-desk-experiment-week-1-or-how-i-hacked-together-a-standing-desk-for-free/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Github vs Codebase vs Gitorious &#8211; Best Options for Hosting Personal Projects</title>
		<link>http://ruten.ca/2011/10/30/github-vs-codebase-vs-gitorious-best-options-for-hosting-personal-projects/</link>
		<comments>http://ruten.ca/2011/10/30/github-vs-codebase-vs-gitorious-best-options-for-hosting-personal-projects/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 19:04:58 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://matthewruten.com/?p=574</guid>
		<description><![CDATA[First of all, I love Github. We use it at work, and it works great. The code browsing, and ability to make quick edits and commit them within Github are awesome features. I&#8217;ve been using it for some personal projects, but it quickly gets expensive if you want to host more than 10 repos. Here&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>First of all, I love Github. We use it at work, and it works great. The code browsing, and ability to make quick edits and commit them within Github are awesome features. I&#8217;ve been using it for some personal projects, but it quickly gets expensive if you want to host more than 10 repos.</p>
<p>Here&#8217;s a quick comparison of the features I care about the most:</p>
<table class="clearfix" style="clear: both; border-width: 0px; border-color: #fcfcfc !important; border-style: solid;" border="0" cellspacing="0" cellpadding="4">
<tbody>
<tr>
<td style="border-width: initial; border-color: initial; border-style: none;"></td>
<td><a href="https://github.com/plans" target="_blank">Github</a></td>
<td><a href="http://www.codebasehq.com/packages" target="_blank">Codebase</a></td>
</tr>
<tr>
<td>Repositories</td>
<td>5</td>
<td>Unlimited</td>
</tr>
<tr>
<td>Disk Space</td>
<td>~615MB</td>
<td>500MB</td>
</tr>
<tr>
<td>Collaborators</td>
<td>1</td>
<td>9</td>
</tr>
<tr>
<td>Price</td>
<td>$7/month</td>
<td>$7.56/month</td>
</tr>
</tbody>
</table>
<p>The key is unlimited repositories, with only a limit on space. This is perfect for hosting a large amount of small projects. Most of my repos are only a few MB.</p>
<p>It turns out there are a ton of repository hosting sites&#8211;Codebase was the only one I found that had a limit on space, instead of number of repositories, and also had extra project features, like time tracking, code browsing/editing, etc.</p>
<p>So the plan for now is to move all my private Github repos to Codebase.</p>
<p>One last option is to host your Git repos on your own server. I looked into a few self-hosted options, <a href="http://gitorious.org/gitorious/pages/Installation" target="_blank">Gitorious </a>looks the most promising, but is apparently a bit tricky to install. I&#8217;m adding it to the &#8220;look in to someday&#8221; list.</p>
<p>Links:</p>
<ul>
<li>Codebase: <a href="http://www.codebasehq.com/">http://www.codebasehq.com/</a></li>
<li>Github: <a href="https://github.com/">https://github.com/</a></li>
<li>Gitorious Self-Hosted: <a href="http://gitorious.org/gitorious/pages/Installation">http://gitorious.org/gitorious/pages/Installation</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://ruten.ca/2011/10/30/github-vs-codebase-vs-gitorious-best-options-for-hosting-personal-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Access 1Password.html Locally in Google Chrome</title>
		<link>http://ruten.ca/2011/04/19/how-to-access-1password-html-locally-in-google-chrome/</link>
		<comments>http://ruten.ca/2011/04/19/how-to-access-1password-html-locally-in-google-chrome/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 00:47:57 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[How To]]></category>

		<guid isPermaLink="false">http://matthewruten.com/?p=500</guid>
		<description><![CDATA[1Password is a great program, but one thing it doesn&#8217;t handle well is multiple password databases. I use 1Password at work and at home, and sometimes I want to access my home password database. To view another database, you have to go to &#8220;Preferences&#8220;, and &#8220;Choose Another Data File&#8230;&#8220;, find your file, then repeat to [...]]]></description>
			<content:encoded><![CDATA[<p>1Password is a great program, but one thing it doesn&#8217;t handle well is multiple password databases. I use 1Password at work and at home, and sometimes I want to access my home password database. To view another database, you have to go to &#8220;<em>Preferences</em>&#8220;, and &#8220;<em>Choose Another Data File&#8230;</em>&#8220;, find your file, then repeat to switch back to your main database. Pretty clunky.</p>
<p>Luckily, for read-only access, you can open the <em>1Password.html</em> file and view your passwords in a basic interface using a web browser (if you&#8217;re using Finder on Mac OS X, right-click your <em>1Password.agilekeychain</em> file and choose &#8220;<em>Show Package Contents</em>&#8221; to see the HTML file).</p>
<p>However, if you&#8217;re using Google Chrome, you will see this:</p>
<p><a href="http://ruten.ca/wp-content/uploads/2011/04/Screen-shot-2011-04-19-at-8.13.38-PM.png"></a><a href="http://ruten.ca/wp-content/uploads/2011/04/Screen-shot-2011-04-19-at-8.13.38-PM.png"><img class="alignnone size-full wp-image-501" title="1Password error in Google Chrome" src="http://ruten.ca/wp-content/uploads/2011/04/Screen-shot-2011-04-19-at-8.13.38-PM.png" alt="" width="533" height="190" /></a></p>
<h3>How to Fix the &#8220;Problem loading 1Password data file&#8221; Error</h3>
<p>A simple solution is on the <a href="http://help.agile.ws/1Password3/1passwordanywhere_troubleshooting.html" target="_blank">1Password web site</a>:</p>
<blockquote><p>The easiest way to workaround this is to store your 1Password.agilekeychain file on a web server or service like Dropbox. If you need offline access to 1PasswordAnywhere you will need to use another browser or modify Chrome’s settings by adding the –allow-file-access-from-files command line option.</p></blockquote>
<p>A more complex solution is below.</p>
<p><span id="more-500"></span></p>
<p>The end result is being able to <strong>access your 1Password at http://1p.local</strong> (or domain of your choosing). This is probably only worth doing if you already run a web server locally.</p>
<p>1.<strong> Add a line to your <a href="http://en.wikipedia.org/wiki/Hosts_(file)#Location_in_the_file_system" target="_blank">hosts</a> file </strong>(<em>/etc/hosts</em> on Mac OS X/*nix, <em>c:windowssystem32driversetc</em> on Windows) to point the address you choose to your local computer:</p>
<blockquote>
<pre>127.0.0.1    1p.local</pre>
</blockquote>
<p>The <em>1p.local</em> address can be whatever you like. I like this address because Chrome will remember it and I can launch it by pressing <em>1</em> then <em>return</em>.</p>
<p>2.<strong> Add a virtual host to your Apache httpd.conf file</strong>:</p>
<blockquote>
<pre>&lt;VirtualHost *:80&gt;
    DirectoryIndex 1Password.html
    DocumentRoot /Users/myusername/Dropbox/1Password.agilekeychain/
    ServerName 1p.local # Change this if you like
&lt;/VirtualHost&gt;</pre>
</blockquote>
<p>Make sure the DocumentRoot is the correct path to your 1Password.agilekeychain.</p>
<p>I also added another few lines (still in the httpd.conf file) to disallow anyone on the same network from accessing the file (even though it&#8217;s not too likely):</p>
<blockquote>
<pre>&lt;Directory "/Users/myusername/Dropbox/1Password.agilekeychain/"&gt;
    Options All
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1 # localhost
&lt;/Directory&gt;</pre>
</blockquote>
<p>3. <strong>That&#8217;s it!</strong> Make sure to restart Apache so the changes will take effect.</p>
<p>Now, you should be able to access your 1Password HTML file through any browser (including Chrome!) at http://1p.local.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://ruten.ca/2011/04/19/how-to-access-1password-html-locally-in-google-chrome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Move the Cursor in Mac OS X Terminal (Bash)</title>
		<link>http://ruten.ca/2011/03/29/how-to-move-the-cursor-in-mac-os-x-terminal-bash/</link>
		<comments>http://ruten.ca/2011/03/29/how-to-move-the-cursor-in-mac-os-x-terminal-bash/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 02:30:37 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[How To]]></category>

		<guid isPermaLink="false">http://matthewruten.com/?p=450</guid>
		<description><![CDATA[Moving around the terminal one character at a time is slow and gets annoying, so here&#8217;s how to move around word by word: ctrl-a: move to front of line ctrl-e: move to end of line ctrl-w: delete word before cursor &#160; By default, the shortcuts for moving left and right are Esc-b and Esc-f. It&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Moving around the terminal one character at a time is slow and gets annoying, so here&#8217;s how to move around word by word:</p>
<blockquote>
<pre><strong>ctrl-a</strong>: move to front of line
<strong>ctrl-e</strong>: move to end of line
<strong>ctrl-w</strong>: delete word before cursor</pre>
</blockquote>
<p>&nbsp;</p>
<p>By default, the shortcuts for moving left and right are Esc-b and Esc-f. It&#8217;s much handier to use Alt/Option-left and -right, so this is how you can configure terminal to do that:</p>
<blockquote>
<pre>To configure it to <strong>Alt + left</strong> and <strong>right</strong>:</pre>
<pre> - Open Terminal preferences (<strong>command + ,</strong>);</pre>
<pre> - At Keyboard tab, select "<strong>control cursor left (or right)</strong>" and doubleclick it;</pre>
<pre>      - Left: Select the combo "<strong>modifier</strong>" to "<strong>option</strong>" and the <strong>action</strong> to <strong> 33b</strong></pre>
<pre>      - Right: Select the combo "<strong>modifier</strong>" to "<strong>option</strong>" and the <strong>action</strong> to <strong> 33f</strong></pre>
</blockquote>
<p>&nbsp;</p>
<p>Sources:</p>
<p><a href="http://www.infoentropy.com/terminal_window_keyboard_shortcuts_mac_linux" target="_blank">http://www.infoentropy.com/terminal_window_keyboard_shortcuts_mac_linux</a></p>
<p><a href="http://snipplr.com/view/28113/config-terminal-to-move-wordbyword/" target="_blank">http://snipplr.com/view/28113/config-terminal-to-move-wordbyword/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ruten.ca/2011/03/29/how-to-move-the-cursor-in-mac-os-x-terminal-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Backup iPhone SMS Messages for Free (No Jailbreak Needed)</title>
		<link>http://ruten.ca/2009/11/05/how-to-backup-iphone-sms-messages-for-free-no-jailbreak-needed/</link>
		<comments>http://ruten.ca/2009/11/05/how-to-backup-iphone-sms-messages-for-free-no-jailbreak-needed/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 23:08:16 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.mightymatty.com/?p=216</guid>
		<description><![CDATA[Recently, I did a full restore on my iPhone to try and fix some of the many problems I&#8217;ve been having (we&#8217;ll save that list for another day). While SMS messages are generally temporary in nature, I decided to find out if I could export them somehow. There are a few programs out there that [...]]]></description>
			<content:encoded><![CDATA[<div style="margin:20px 0;">
<script type="text/javascript"><!--
google_ad_client = "ca-pub-8862997495982254";
/* matthewruten.com */
google_ad_slot = "0662650401";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
<p>Recently, I did a full restore on my iPhone to try and fix some of the many problems I&#8217;ve been having (we&#8217;ll save that list for another day). While SMS messages are generally temporary in nature, I decided to find out if I could export them somehow. There are a few programs out there that claim to be able to do this for you, such as <a title="MobileSyncBrowser" href="http://homepage.mac.com/vaughn/msync/" target="_blank">MobileSyncBrowser</a> (Mac/PC, free trial/$10/$20),  <a title="iPhone / iPod Touch Backup Extractor" href="http://supercrazyawesome.com/" target="_blank">iPhone / iPod Touch Backup Extractor</a> (Mac, free), or an online tool like <a title="iphone backup sms extractor" href="http://insend.de/" target="_blank">iphone backup sms extractor</a>. I didn&#8217;t try any of these because I don&#8217;t want to pay, I am not on a Mac, and I don&#8217;t want to upload my private messages to some random site. Luckily, I discovered that it&#8217;s not too hard to do it yourself. Grab your iPhone, put on your techie hat, and follow the 3 easy steps after the break!</p>
<p><span id="more-216"></span></p>
<h3>Step 0 &#8211; Before You Start:</h3>
<p>A couple things you need to take care of before diving in to the tutorial:</p>
<ul>
<li>Make sure to do a sync/backup of your iPhone in iTunes before starting to ensure all messages will be extracted.</li>
<li>Download <a title="SQLite Database Browser" href="http://sqlitebrowser.sourceforge.net/" target="_blank">SQLite Database Browser</a> as you will need this to browse/export the database once finding it.</li>
</ul>
<h3>Step 1 &#8211; Find the Backup File:</h3>
<p>The SMS messages are stored in an SQLite database file that is located in a backup folder somewhere on your computer. The file is (most likely) named</p>
<blockquote><p>3d0d7e5fb2ce288813306e4d4636395e047a3d28.mddata</p></blockquote>
<p><span>On Windows, the path to the folder should resemble something like the following: </span></p>
<blockquote><p><span>C:Documents and Settings[username]Application DataApple ComputerMobileSyncBackup[some random id]</span></p></blockquote>
<p><span>On a Mac, you should find it at: </span></p>
<blockquote><p><span>home/Library/MobileSync/backup/[some random id]/</span></p></blockquote>
<p><span>Or just search your computer for </span><em>3d0d7e5fb2ce288813306e4d4636395e047a3d28</em><span>.</span></p>
<p>Once you find the file, you can verify that it is an SQLite database by opening it in a text editor and making sure the first characters of the file are &#8220;SQLite format 3&#8243;.</p>
<p>Just to be safe and, copy the file to your desktop or another folder and rename it something shorter like <em>sms.sqlite.</em></p>
<h3>Step 2 &#8211; Browsing the SMS SQLite Database</h3>
<p><span>You will need the <a title="SQLite Database Browser" href="http://sqlitebrowser.sourceforge.net/" target="_blank">SQLite Database Browser</a> as mentioned above, so go download it now if you haven&#8217;t already!</span></p>
<p><span>Once you have it downloaded, extract the program and run it! Click </span><em>File &gt; Open</em> and navigate to where you saved the copy of the backup file. When you open this file you will see an interface that should be familiar if you&#8217;ve ever used any sort of database management tool.</p>
<p>From the <em>Table</em> drop-down menu, choose the <em>message</em> table. This is the main table we&#8217;re interested in and you don&#8217;t really need to use the other tables at all but go ahead and take a look if you&#8217;re interested!</p>
<p>There are a few fields that we are interested in:</p>
<ul>
<li><span><em>address</em>: This holds the phone number of the person that sent you or you sent the message to.</span></li>
<li><span><em>date:</em> This is a Unix timestamp of when the message was sent.</span></li>
<li><span><em>text:</em> The actual message.</span></li>
<li><span><em>flags: </em>This should be either <em>2</em> or <em>3</em>. The messages flagged <em>3</em> are messages that you sent (outgoing), while the messages flagged <em>2</em> are incoming messages.</span></li>
</ul>
<h3>Step 3 &#8211; Exporting:</h3>
<p>Still using SQLite Database Browser program, click <em>File &gt; Export &gt; Table as CSV File</em>. Choose the <em>messages</em> table and click <em>Export</em>. Choose a filename like <em>sms.csv</em>, hit <em>Save</em>, and you&#8217;re done!</p>
<p>Now you can open the CSV using Excel (or equivalent) and laugh/cry/look at all the funny/angry/crazy messages you have sent and received over the years/weeks/days!</p>
<p>To convert the datestamp to a human readable format in Excel, use the following formula (from <a title="Spreadsheet Page Excel Tips: Converting Unix Timestamps" href="http://spreadsheetpage.com/index.php/tip/converting_unix_timestamps/" target="_blank">SpreadsheetPage.com</a>):</p>
<blockquote>
<pre>=(((A1/60)/60)/24)+DATE(1970,1,1)+(-5/24)</pre>
</blockquote>
<p>where <em>A1</em> is the cell holding the datestamp, and <em>-5</em> is your timezone GMT offset.</p>
<p>You can also duplicate (copy/paste) the address column and then do a find and replace of the phone number with the person&#8217;s actual name (useful at least for the people you text the most with).</p>
<h3>Notes:</h3>
<p>This will not export emoticons/emoji/MMS messages. There may be a way to grab these (table <em>msg_pieces</em> may give some hints), but I&#8217;m not really worried about losing this info.</p>
<p>You will only get the phone numbers of the messages, not the names (though it&#8217;s easy enough to do a find and replace for your most used phone numbers).</p>
<p><em>That&#8217;s it! </em>I hope this will be useful to someone, and if you have any questions or comments, or find any errors in this post just leave a comment!</p>
<div style="margin:20px 0;">
<script type="text/javascript"><!--
google_ad_client = "ca-pub-8862997495982254";
/* matthewruten.com - 2 */
google_ad_slot = "9148270821";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ruten.ca/2009/11/05/how-to-backup-iphone-sms-messages-for-free-no-jailbreak-needed/feed/</wfw:commentRss>
		<slash:comments>84</slash:comments>
		</item>
	</channel>
</rss>

