<?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>Lasse Bunk&#039;s weblog &#187; Migration</title>
	<atom:link href="http://lassebunk.dk/tag/migration/feed/" rel="self" type="application/rss+xml" />
	<link>http://lassebunk.dk</link>
	<description>Ruby on Rails, programming, and SEO</description>
	<lastBuildDate>Sat, 04 Feb 2012 12:51:41 +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>Creating your own WordPress plugin database migration framework</title>
		<link>http://lassebunk.dk/2012/01/14/wordpress-plugin-database-migration-framework/</link>
		<comments>http://lassebunk.dk/2012/01/14/wordpress-plugin-database-migration-framework/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 22:58:42 +0000</pubDate>
		<dc:creator>lassebunk</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[How-to]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://lassebunk.dk/?p=2413</guid>
		<description><![CDATA[How to create a database migration framework for WordPress that automatically migrates changes to your plugin database structure.]]></description>
			<content:encoded><![CDATA[<p>So, how do you migrate changes to your database structure from one version to another (like you may know it from <a href="http://guides.rubyonrails.org/migrations.html">Ruby on Rails</a>) when you are writing a WordPress plugin? Here&#8217;s one way to do it.</p>
<p>Let&#8217;s assume that the database migration should take place when the plugin is activated. Assuming your plugin is named <strong>myplugin</strong>, put this code in the <strong>myplugin.php</strong> file:</p>
<pre class="brush: php; title: ; notranslate">
register_activation_hook(__FILE__, 'myplugin_install');
</pre>
<p>This makes WordPress execute the <code>myplugin_install()</code> method when the user activates your plugin.</p>
<p>Next, add this method:</p>
<pre class="brush: php; title: ; notranslate">
function myplugin_install() {
  myplugin_migrate();
}
</pre>
<p>And our migration method:</p>
<pre class="brush: php; title: ; notranslate">
function myplugin_migrate() {
  global $wpdb;

  $migs = myplugin_migrations();

  $current_migration = get_option('myplugin_current_migration', 0);
  $needed_migration = count($migs);

  for ($i = $current_migration; $i &lt; $needed_migration; $i++) {
    $mig = $migs[$i];
    $wpdb-&gt;query($mig);
  }

  if ($current_migration == 0) {
    add_option('myplugin_current_migration', $needed_migration);
  } else {
    update_option('myplugin_current_migration', $needed_migration);
  }
}
</pre>
<p>What this does is that it runs through database statements (queries) returned from the <code>myplugin_migrations()</code> method. Let&#8217;s implement the actual migrations – add this method:</p>
<pre class="brush: php; title: ; notranslate">
function myplugin_migrations() {
  global $wpdb;

  $migs = array();

  // Create example table
  $migs[] = '
  CREATE TABLE '.$wpdb-&gt;prefix.'myplugin_examples (
    id int(11) NOT NULL AUTO_INCREMENT,
    name varchar(255) NOT NULL,
    PRIMARY KEY (id)
  )';

  // Add examples
  $migs[] = &quot;INSERT INTO &quot;.$wpdb-&gt;prefix.&quot;myplugin_examples SET name='First example'&quot;;
  $migs[] = &quot;INSERT INTO &quot;.$wpdb-&gt;prefix.&quot;myplugin_examples SET name='Second example'&quot;;

  // Return the migrations
  return $migs;
}
</pre>
<p>That would create an example table and insert some values.</p>
<p>Now imagine that two months later you need a <strong>description</strong> field in your <strong>examples</strong> table. What do you do? It&#8217;s as easy as adding one line of code to the migrations:</p>
<pre class="brush: php; title: ; notranslate">
// Add description field to examples
$migs[] = &quot;ALTER TABLE &quot;.$wpdb-&gt;prefix.&quot;myplugin_examples ADD description VARCHAR( 255 ) NOT NULL&quot;;
</pre>
<p>Deactivate and activate the plugin, and you table now has an extra field. Easy as cake! <img src='http://lassebunk.dk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Share your thoughts, opinions, and suggestions below.</p>
<p>
<a href="http://twitter.com/lassebunk" onclick="abtest.trackGoal(21, this);" class="icon twitter">Follow me on Twitter</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://lassebunk.dk/2012/01/14/wordpress-plugin-database-migration-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Three months on the Mac stack</title>
		<link>http://lassebunk.dk/2009/09/24/three-months-on-the-mac-stack/</link>
		<comments>http://lassebunk.dk/2009/09/24/three-months-on-the-mac-stack/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 13:39:45 +0000</pubDate>
		<dc:creator>lassebunk</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Amiga]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[C64]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[Github]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[Netbooks]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Slicehost]]></category>
		<category><![CDATA[Slices]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[TextMate]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware Fusion]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://lassebunk.dk/?p=221</guid>
		<description><![CDATA[I started out using Windows and ended up using OS X and Linux.]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">It’s actually four months now – since May 1st – but I’ve been wanting to write this article for a month. Hence the – somewhat misleading – title.</p>
<p>I bought my <a href="http://www.apple.com/macbook/">MacBook</a> on May 1th after viewing a <a href="http://rubyonrails.org/screencasts">screencast where a guy sets up a blog in 15 minutes</a> using <a href="http://rubyonrails.org">Ruby on Rails</a>. I immediately said to my stepdad: “I’m going to buy a Mac and learn Ruby on Rails!”</p>
<p>And so I did &#8211; the day after, I bought a Mac.</p>
<p>I’ve always been a dedicated user of <a href="http://www.microsoft.com">Microsoft</a>&#8216;s products. First <a href="http://en.wikipedia.org/wiki/Commodore_64">C64</a>, then <a href="http://en.wikipedia.org/wiki/Amiga">Amiga</a>, then <a href="http://en.wikipedia.org/wiki/Power_Macintosh_5300">Mac</a>, then PC. I liked the way everything was tested and came from one place, unlike <a href="http://en.wikipedia.org/wiki/Open_source">open source</a>. I’ve always been saying stuff like “I like to pay for my software because then I&#8217;m be sure about the quality.” – but in reality, everyone who uses Windows and other Microsoft products know that this isn’t always the case.</p>
<p>So I bought the Mac, and the first thing that surprised me, was how much of day-to-day work was done in the <a href="http://en.wikipedia.org/wiki/Apple_Terminal">Terminal</a>, or <a href="http://en.wikipedia.org/wiki/Command-line_interface">command line</a>. When I installed Ruby on Rails, it was via command line; when I installed plugins, it was via command line. Evererything command line. <img src='http://lassebunk.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Over the next few days I began to get a hang of it. I bought a couple of <a href="http://en.wikipedia.org/wiki/Domain_name">domain names</a> and signed up for a <a href="http://en.wikipedia.org/wiki/Slice_%28disk%29">slice</a> at <a href="http://www.slicehost.com">Slicehost</a> – because I had read some <a href="http://railswork.com">job description</a> that said that you should&#8217;ve at least tried to use a whole day of setting a slice.</p>
<p>Coming from Windows, Linux is a whole other deal to setup. I used a lot of the <a href="http://articles.slicehost.com/">Slicehost articles</a> that guides you through the whole process from setup and security to getting your slice to run as a <a href="http://www.apache.org">webserver</a>.</p>
<p>In the beginning I was a little nervous about all the command lines, if they would really work and so one. But the more you try it, the more calm you get. It just works! And lucky me there was a lot of helpful articles about Unix and Linux commands out there (just search for the command on <a href="http://www.google.com">Google</a>).</p>
<p>Since starting out on the Mac, I’ve learned a multitude of things:</p>
<ul>
<li> Setting up an <a href="http://www.ubuntu.com/">Ubuntu</a> <a href="http://en.wikipedia.org/wiki/Slice_%28disk%29">slice</a> at <a href="http://www.slicehost.com">Slicehost</a>.</li>
<li>Setting up a <a href="http://www.apache.org">web server</a>.</li>
<li>Setting up <a href="http://www.ubuntu.com/GetUbuntu/download-netbook">Ubuntu Netbook Remix</a> on my <a href="http://eeepc.asus.com/">netbook</a>.</li>
<li>Setting up <a href="http://www.ubuntu.com/getubuntu/download-server">Ubuntu server</a> at home, also on my netbook – which now functions as my testing server.</li>
<li>Programming a little <a href="http://www.php.net">PHP</a> – see Tweet My Cam.</li>
<li>Programming <a href="http://rubyonrails.org">Ruby on Rails</a>.</li>
<li>Tweaking some <a href="http://www.java.com">Java</a> code, <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javac.html">compiling</a> and <a href="http://forums.sun.com/thread.jspa?threadID=174214">signing</a> a <a href="http://en.wikipedia.org/wiki/Java_applet">java applet</a> in one day – see a demo <a href="http://lassebunk.dk/2009/07/19/using-the-clipboard-to-post-images/">here</a>.</li>
<li>Download and compile software (<a href="http://tldp.org/LDP/LG/current/smith.html">configure, make, make install</a>).</li>
<li><a href="http://railsontherun.com/2008/3/3/how-to-use-github-and-submit-a-patch">Submitted a patch</a> to a Ruby on Rails <a href="http://github.com/technoweenie/restful-authentication">plugin</a> on <a href="http://github.com">Github</a>.</li>
<li>Setting up <a href="http://wordpress.org">WordPress</a> and <a href="http://mu.wordpress.org/">WordPress Mu</a> blogs and making my own <a href="http://lassebunk.dk">theme</a> – see <a href="http://lassebunk.dk">my private blog</a> and <a href="http://userdriven.dk">private work blog</a>.</li>
<li>Setting up a <a href="http://subversion.tigris.org/">Subversion</a> repository at <a href="http://www.xp-dev.com/">XP-Dev.com</a>.</li>
<li>Using the Subversion repository <img src='http://lassebunk.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Loving <a href="http://macromates.com/">Textmate</a> as my favorite editor – also over <a href="http://www.microsoft.com/visualstudio">Visual Studio</a>.</li>
<li>Plus a bunch of other things.</li>
</ul>
<p>In short I’ve learned so much about the open source world that just wasn’t that easy on the Microsoft platform.</p>
<p>I still use Microsoft Windows and other products, but now it’s through <a href="http://www.vmware.com/products/fusion/">VMware Fusion</a> on the Mac.</p>
<p>I’m happy about the Mac because <a href="http://www.apple.com/macosx/">OS X</a> is very unobtrusive, fast operating system and what it does, it does very good. But at the same time, I also want a netbook that’s easier to carry, so I may end up running both systems for different purposes (unless I&#8217;m just installing Ubuntu on the netbook too <img src='http://lassebunk.dk/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ).</p>
<p>Hope you found this post interesting – I wrote it to tell about a beautiful (yak, I know) progress from Windows to Mac and Linux. Thumbs up if this has made you want to try it too. And please tell me in the comments. <img src='http://lassebunk.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>
<a href="http://twitter.com/lassebunk" onclick="abtest.trackGoal(21, this);" class="icon twitter">Follow me on Twitter</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://lassebunk.dk/2009/09/24/three-months-on-the-mac-stack/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

