<?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>Wade Womersley - Leeds based web developer &#187; Programming</title>
	<atom:link href="http://www.xcitestudios.com/blog/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xcitestudios.com/blog</link>
	<description>Giving in to the online blogosphere</description>
	<lastBuildDate>Thu, 15 Jul 2010 21:29:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Reset MySQL root password if you forgot it #mysql</title>
		<link>http://www.xcitestudios.com/blog/2010/04/12/reset-mysql-root-password-if-you-forgot-it-mysql/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.xcitestudios.com/blog/2010/04/12/reset-mysql-root-password-if-you-forgot-it-mysql/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 11:32:56 +0000</pubDate>
		<dc:creator>Wade</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Support]]></category>

		<guid isPermaLink="false">http://www.xcitestudios.com/blog/?p=463</guid>
		<description><![CDATA[<p>Just had a need to reset the mysql root login password for a server, did a bit of Googling and found out this is how you do it (I work on Ubuntu so you may have to tinker with the lines slightly depending on your distribution):</p>
<p><a href="http://www.xcitestudios.com/blog/2010/04/12/reset-mysql-root-password-if-you-forgot-it-mysql/#utm_source=feed&#38;utm_medium=feed&#38;utm_campaign=feed" class="more-link">Read more on Reset MySQL root password if you forgot it #mysql&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/09/03/todays-musings/' rel='bookmark' title='Permanent Link: Today&#8217;s musings'>Today&#8217;s musings</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/09/03/todays-musings/' rel='bookmark' title='Permanent Link: Today&#8217;s musings'>Today&#8217;s musings</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Just had a need to reset the mysql root login password for a server, did a bit of Googling and found out this is how you do it (I work on Ubuntu so you may have to tinker with the lines slightly depending on your distribution):</p>
<ol>
<li>Stop the current MySQL instance from running:<br />
<em>/etc/init.d/mysql stop</em></li>
<li>Run mysql with &#8211;skip-grant-tables<br />
<em>/usr/bin/mysqld_safe &#8211;basedir=/usr &#8211;datadir=/var/lib/mysql &#8211;user=mysql &#8211;pid-file=/var/run/mysqld/mysqld.pid &#8211;socket=/var/run/mysqld/mysqld.sock &#8211;port=3306 &#8211;skip-grant-tables &amp;</em></li>
<li>Log into mysql, straight into the mysql database<em><br />
mysql -u root mysql</em></li>
<li>Reset the root password.<br />
<em>UPDATE user SET Password=PASSWORD(‘newrootpassword’) WHERE User=’root’;</em></li>
<li>Flush privileges<br />
<em>flush privileges;</em></li>
<li>Shut down the new running mysql.<br />
<em>/etc/init.d/mysql stop</em></li>
<li>Start up mysql as usual.<br />
<em>/etc/init.d/mysql start</em></li>
</ol>
<p>Et voila, you now have a new root password without needing to know the old one!</p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/09/03/todays-musings/' rel='bookmark' title='Permanent Link: Today&#8217;s musings'>Today&#8217;s musings</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.xcitestudios.com/blog/2010/04/12/reset-mysql-root-password-if-you-forgot-it-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Regex-fu #PHPUK2010</title>
		<link>http://www.xcitestudios.com/blog/2010/02/26/regex-fu-phpuk2010/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.xcitestudios.com/blog/2010/02/26/regex-fu-phpuk2010/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 16:02:41 +0000</pubDate>
		<dc:creator>Wade</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP Conference 2010]]></category>

		<guid isPermaLink="false">http://www.xcitestudios.com/blog/?p=456</guid>
		<description><![CDATA[<p>Good start: don&#8217;t use it unless you need to, there&#8217;s plenty of alternatives, e.g. DOMXML, str_replace, etc. Also PHP5+ has lots of filters for email validation and URL validation etc, function calls you can make rather than complex regular expressions. Regular expressions can slow down quickly due to back tracking, pattern complexity and long strings.</p>
<p><a href="http://www.xcitestudios.com/blog/2010/02/26/regex-fu-phpuk2010/#utm_source=feed&#38;utm_medium=feed&#38;utm_campaign=feed" class="more-link">Read more on Regex-fu #PHPUK2010&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-1/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 1'>#PHPUK2010 Part 1</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-1/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 1'>#PHPUK2010 Part 1</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Good start: don&#8217;t use it unless you need to, there&#8217;s plenty of alternatives, e.g. DOMXML, str_replace, etc. Also PHP5+ has lots of filters for email validation and URL validation etc, function calls you can make rather than complex regular expressions. Regular expressions can slow down quickly due to back tracking, pattern complexity and long strings.</p>
<p>Then the talk has become abstract, each point is prefixed with an odd statement such as &#8220;Only elephants remember everything&#8221; and &#8220;Not all matches are made in heaven&#8221; &#8211; people are getting it, but everything needs explaining before they get it!</p>
<p>One very good point I have seen ignored many times is &#8220;try not to be greedy.&#8221; For example <strong>/&lt;(.+)&gt;/</strong> in the string &lt;a href=&#8221;"&gt;fdsfsd&lt;/a&gt; will match the entire thing. To make it ungreedy, either use <strong>/&lt;(.+?)&gt;/</strong> or <strong>/&lt;([^&gt;]+)</strong><strong>/</strong> . Greedy matches can be 20+ times slower.</p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-1/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 1'>#PHPUK2010 Part 1</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.xcitestudios.com/blog/2010/02/26/regex-fu-phpuk2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#PHPUK2010 Part 2 (MySQL stuff)</title>
		<link>http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 11:37:58 +0000</pubDate>
		<dc:creator>Wade</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP Conference 2010]]></category>

		<guid isPermaLink="false">http://www.xcitestudios.com/blog/?p=453</guid>
		<description><![CDATA[<p>Just picked up a nice tid-bit on creating a unique index on a two column table where the values in each column may be either way around but you only ever want one instance of the value in that row. So what this means is, inserting 2,1 and 1,2 for example would result in only the first of the two inserts succeeding.</p>
<p><a href="http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/#utm_source=feed&#38;utm_medium=feed&#38;utm_campaign=feed" class="more-link">Read more on #PHPUK2010 Part 2 (MySQL stuff)&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-1/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 1'>#PHPUK2010 Part 1</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-1/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 1'>#PHPUK2010 Part 1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Just picked up a nice tid-bit on creating a unique index on a two column table where the values in each column may be either way around but you only ever want one instance of the value in that row. So what this means is, inserting 2,1 and 1,2 for example would result in only the first of the two inserts succeeding.</p>
<p><code>CREATE UNIQUE INDEX ON tablename (LEAST(col1,col2),  GREATEST(col1,col2));</code></p>
<p>Also, WITH, I&#8217;ll be honest, never thought about using it to create temporary views. This is a bad example but shows the structure rather well:</p>
<p><code>WITH tempView (a,b) AS (<br />
SELECT table1.col1, table2.col2<br />
FROM table1<br />
LEFT JOIN table2<br />
ON table1.id=table2.id<br />
)<br />
SELECT a,b FROM tempView;</code></p>
<p>Better yet is changing this to WITH RECURSIVE tempView and then adding in a select inside the WITH that recalls tempView. The great example he gave is for getting flights from A to B with a varying  amount of stops, it would be possible to get all routes from A to B with one MySQL query, as long as the data stored all connecting routes.</p>
<p>Incidentally, while there is some great stuff coming out of this RDBMS talk, I think the queries are really hurting a lot of people&#8217;s heads. Good stuff though.</p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-1/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 1'>#PHPUK2010 Part 1</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#PHPUK2010 Part 1</title>
		<link>http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-1/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-1/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 10:16:08 +0000</pubDate>
		<dc:creator>Wade</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP Conference 2010]]></category>

		<guid isPermaLink="false">http://www.xcitestudios.com/blog/?p=451</guid>
		<description><![CDATA[<p>Josh began by using the dictionary definition of simplicity (as given by Wikipedia) pointing out that the word is often used as a derogatory statement. He then went onto &#8220;clarity of expression&#8221; and that striving for it while programming is something a lot of people do but never quite seem to achieve.</p>
<p><a href="http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-1/#utm_source=feed&#38;utm_medium=feed&#38;utm_campaign=feed" class="more-link">Read more on #PHPUK2010 Part 1&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/regex-fu-phpuk2010/' rel='bookmark' title='Permanent Link: Regex-fu #PHPUK2010'>Regex-fu #PHPUK2010</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/regex-fu-phpuk2010/' rel='bookmark' title='Permanent Link: Regex-fu #PHPUK2010'>Regex-fu #PHPUK2010</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Josh began by using the dictionary definition of simplicity (as given by Wikipedia) pointing out that the word is often used as a derogatory statement. He then went onto &#8220;clarity of expression&#8221; and that striving for it while programming is something a lot of people do but never quite seem to achieve.</p>
<p>He spoke of an example where a user comes to a programmer asking for a report, and the usual first reaction is &#8220;ah, you need a reporting system.&#8221; He also said that&#8217;s not always the case, at the end of the day, the user just wanted a report, at this point I heard quite a few people take a breath in through their teeth (particularly the guy sitting to the right of me, he knows who he is.) That is a hard problem, particularly at Stickyeyes where we really do get a lot of people saying &#8220;I want a report&#8221; and often we have to build a system, simply because of the sheer amount of similar repetitious reports.</p>
<p>He made a very good point about developers having a tendency to go for the newest, shinyest tools (such as HipHop for PHP.) The reason for this is to point out that these tools exist because they solve a particular type of problem, so unless the tool actually helps you, do you really need to use it?</p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/regex-fu-phpuk2010/' rel='bookmark' title='Permanent Link: Regex-fu #PHPUK2010'>Regex-fu #PHPUK2010</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</title>
		<link>http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 09:40:25 +0000</pubDate>
		<dc:creator>Wade</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP Conference 2010]]></category>

		<guid isPermaLink="false">http://www.xcitestudios.com/blog/?p=437</guid>
		<description><![CDATA[<p>I recently posted an article about using BINARY(16) for storing MD5&#8217;s as unique identifiers instead of simple integer ID&#8217;s (usually auto increment); in that article I touched on one of the benefits, reducing JOIN&#8217;s, but there are other reasons for doing it too, so I thought I&#8217;d post an article discussing purely the reasons behind using BINARY(16).</p>
<p><a href="http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/#utm_source=feed&#38;utm_medium=feed&#38;utm_campaign=feed" class="more-link">Read more on MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/04/12/reset-mysql-root-password-if-you-forgot-it-mysql/' rel='bookmark' title='Permanent Link: Reset MySQL root password if you forgot it #mysql'>Reset MySQL root password if you forgot it #mysql</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/04/12/reset-mysql-root-password-if-you-forgot-it-mysql/' rel='bookmark' title='Permanent Link: Reset MySQL root password if you forgot it #mysql'>Reset MySQL root password if you forgot it #mysql</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I recently posted an article about using BINARY(16) for storing MD5&#8217;s as unique identifiers instead of simple integer ID&#8217;s (usually auto increment); in that article I touched on one of the benefits, reducing JOIN&#8217;s, but there are other reasons for doing it too, so I thought I&#8217;d post an article discussing purely the reasons behind using BINARY(16).</p>
<p>As I discussed in my previous article, an MD5 string is actually a hexadecimal number capable of storing values as large as 340,282,366,920,938,463,463,374,607,431,768,211,456. MySQL doesn&#8217;t have any efficient integer field for storing numbers this big so you have two choices for storage, a CHAR(32) or a BINARY(16). If you convert a hexadecimal MD5 into a unhexed character string, it will become 16 bytes rather than 32. MySQL handily has a feature built in for this called <a href="http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_unhex" target="_blank">UNHEX</a>.</p>
<p>So, why use binary(16) as a unique field for data storage? Databases like MySQL have superb functionality such as JOIN, allowing you to query one table and &#8220;join&#8221; the results of that query to another table. However, when you get to 10&#8217;s, 100&#8217;s or even 1000&#8217;s of millions of rows of data, JOIN&#8217;s become expensive, especially when the join only exists because you need an ID field from one table to query against on another. From tests at work, replacing a JOIN by using a binary(16) unique identifier has seen noticeable improvements to speed, noticeable here being human noticeable, not iterate it a million times and you&#8217;ll see 1.5 as opposed to 1.9 seconds noticeable.</p>
<p>The main benefits include:</p>
<ul>
<li>Fast queries against any table where you know the formula that was used to create the MD5 binary(16) using human-readable English and no integers.</li>
<li>Complete disassociation of relational data values</li>
<li>Ability to use INSERT IGNORE to avoid duplicate data without having to use overly large indexes</li>
<li>More unique values than even a BIGINT.</li>
</ul>
<p>The main drawbacks include:</p>
<ul>
<li>12 bytes more storage for the ID (INT is 4 bytes)</li>
<li>No auto-incrementation</li>
<li>Completely unreadable to humans when the data is in BINARY(16) form.</li>
</ul>
<p>One thing I just mentioned was disassociation of relational data values. What does this mean exactly? Well it means exactly the same as what people do now with MySQL and unique integer ID&#8217;s to be honest! The difference here is you can query against it without those pesky JOIN&#8217;s a lot of the time. For example, say you are storing every town in the UK in a database and how they link together (i.e. if there is a direct route from one to another.) You&#8217;d have a table named towns probably, with a unique ID and the town name. You&#8217;d then have a separate table with 2 columns, both columns would store a town ID which would basically mean &#8220;this town has a direct route to this town.&#8221; If you were to use integers as the town&#8217;s unique ID, every time you wanted to get the town&#8217;s linked to said town, you&#8217;d have to query against the towns table first to get the town ID you want to get links to, then again to get the names of the towns that link to it.<br />
If you were to use a binary(16) representation of the town you could scrap the first join, instead you could query by saying &#8220;get me any towns that link to UNHEX(MD5(&#8216;Town Name&#8217;))&#8221;. You&#8217;d still have to do the second join to get the town names, but you&#8217;ve instantly dropped a JOIN and simplified the whole experience as you can now query more naturally.<br />
Basically, all you&#8217;re doing is replacing any place in your database that is a string that is usually more than 16 characters in length with a binary(16) of it, then storing the strings elsewhere for when you actually need to read the output. This effectively gives you a look-up table that can contain any string whatsoever and a database that stores relationships of strings without requiring special tables and integers for every string.</p>
<p>As a note, a table with 100 million rows of data with two columns &#8211; BINARY(16), TEXT &#8211; to look-up the textual value of a binary(16) string takes 0.0019 seconds for us and having that table of text has meant we&#8217;ve severely de-duped our database as the data we store often is identical, even when the source is completely different. Even if we do a WHERE BINARY(16) IN (list,of,values), the time sticks at 0.0019 up to the maximum test I&#8217;ve done so far which is 100 MD5&#8217;s.</p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/04/12/reset-mysql-root-password-if-you-forgot-it-mysql/' rel='bookmark' title='Permanent Link: Reset MySQL root password if you forgot it #mysql'>Reset MySQL root password if you forgot it #mysql</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL &#8211; Binary(16) and scalability</title>
		<link>http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 12:13:04 +0000</pubDate>
		<dc:creator>Wade</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP Conference 2010]]></category>

		<guid isPermaLink="false">http://www.xcitestudios.com/blog/?p=431</guid>
		<description><![CDATA[<p>Over the past few months at work, we&#8217;ve seen our database grown from silly big to really silly big, it&#8217;s still a way to go to get to the size of the big boys such as Facebook etc. but it&#8217;s still a database stored in MySQL that most day-to-day PHP programmers would avoid like a midget cannibal.</p>
<p><a href="http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/#utm_source=feed&#38;utm_medium=feed&#38;utm_campaign=feed" class="more-link">Read more on MySQL &#8211; Binary(16) and scalability&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/04/12/reset-mysql-root-password-if-you-forgot-it-mysql/' rel='bookmark' title='Permanent Link: Reset MySQL root password if you forgot it #mysql'>Reset MySQL root password if you forgot it #mysql</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/04/12/reset-mysql-root-password-if-you-forgot-it-mysql/' rel='bookmark' title='Permanent Link: Reset MySQL root password if you forgot it #mysql'>Reset MySQL root password if you forgot it #mysql</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Over the past few months at work, we&#8217;ve seen our database grown from silly big to really silly big, it&#8217;s still a way to go to get to the size of the big boys such as Facebook etc. but it&#8217;s still a database stored in MySQL that most day-to-day PHP programmers would avoid like a midget cannibal.</p>
<p>One of the great things about using something like MySQL (and any other &#8220;real&#8221; database) is the ability to cross-query data, i.e. to grab data from one data-set (table) and join it to another data-set (table) to get a single set of results, either as a combination of the data or the result of an exclusion due to the join. *</p>
<p>However, as tables grow, the time taken to perform queries, particularly in the realm of joins, grows rather quickly. So for example take this query:</p>
<pre>SELECT *
FROM table2
LEFT JOIN table1
    ON table1.columnB = table2.columnA
WHERE table1.columnC = 'John.Doe';</pre>
<p>Let&#8217;s say table1 is a list of all employees in a small business and table2 is a list of their days off, so it&#8217;s a one-to-many relationship. Running the above query to get the days off for person 5 would be pretty quick and most developers would be happy with that, even if the columns weren&#8217;t indexed, the performance of that query (as it&#8217;s a small business &#8211; therefore small dataset) would be more than suitable for any real-world application.</p>
<p>Now imagine a table where rather than a couple of hundred rows, you have millions or (such as ours) billions of rows of data; as for why we have that much data, that&#8217;s for another topic. That join could could result in a rather painful execution time. The problem you&#8217;ve got is, you have to first query table1 to get the ID of user &#8216;John.Doe&#8217; and then use that ID for table2 to get the actual data.</p>
<p>So how can you optimise this? Well you&#8217;ve got three choices, the first would be two queries, one to grab the users ID from table1, then the next to grabs the users data from table2; but that&#8217;s 2 queries now. In a lot of places that wouldn&#8217;t matter, but we want speed here and reduction of hits to MySQL. The second is have the users name in table2 for each day off &#8211; that&#8217;s duplicating data though and because (in this case) you&#8217;d have a string, it&#8217;s not the fastest lookup and creates rather large indexes when people&#8217;s usernames are quite long.</p>
<p>The third option? A unique hash associated with that user. In this case, MD5 the username and store it as binary(16). MD5 is, after all, a 128-bit number basically. Most people are used to seeing it as a 32 character string, e.g. 7ecb9bba8130abe56cfd9a8430ca969c. That is just a hexadecimal number though, albeit a very very big one &#8211; capable of storing the value 340,282,366,920,938,463,463,374,607,431,768,211,456, for those in the UK that&#8217;s 340 <span>sextillion. MySQL Doesn&#8217;t really have a suitable INT type for storing a number that big so it&#8217;s best to either store it as a 32-byte string (hexadecimal MD5) or better yet, as a binary string of 16 characters.</span></p>
<p><span>So how does that change our query now?</span></p>
<pre>SELECT *
FROM table2
WHERE table2.columnA = UNHEX(MD5('John.Doe'));</pre>
<p><span>No more join and only one select. It means you can look up days off for any user simply by knowing the username. MySQL has UNHEX(MD5()) to md5 a string and convert to its binary equivalent. In PHP you&#8217;d use md5(&#8217;string&#8217;, true) or pack(&#8216;H*&#8217;, md5(&#8217;string&#8217;)); </span></p>
<p><span>In all honesty, this isn&#8217;t the best use of binary(16), but it&#8217;s a relatively simple example to follow. For us though, moving away from auto-incrementing ID&#8217;s towards binary hashes has allowed use to do blind inserts (insert ignore) and lightning fast selects where they used to take minutes or even hours. INSERT IGNORE has to be one of the biggest benefits we&#8217;ve seen. By setting the primary key to the BINARY(16) column, you can easily guarantee unique data without wasted extra index space and you only need to query that table when you actually need to data associated with that unique hash, the rest of the time, you can query other tables that relate to that hash without having to do a join.<br />
</span></p>
<p style="font-size: 80%">* I would like to point out I am fully aware of people who store data without a dedicated database and use Map-Reduce due to the sheer size of it, however databases like MySQL allow a quick line of text to get the results you want, there&#8217;s no further effort involved.</p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/02/26/phpuk2010-part-2-mysql-stuff/' rel='bookmark' title='Permanent Link: #PHPUK2010 Part 2 (MySQL stuff)'>#PHPUK2010 Part 2 (MySQL stuff)</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/04/12/reset-mysql-root-password-if-you-forgot-it-mysql/' rel='bookmark' title='Permanent Link: Reset MySQL root password if you forgot it #mysql'>Reset MySQL root password if you forgot it #mysql</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Superb VPS (Virtual Private Server) Provider &#8211; VPS.net Review</title>
		<link>http://www.xcitestudios.com/blog/2009/11/18/superb-vps-virtual-private-server-provider-vps-net/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.xcitestudios.com/blog/2009/11/18/superb-vps-virtual-private-server-provider-vps-net/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 20:47:49 +0000</pubDate>
		<dc:creator>Wade</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Support]]></category>
		<category><![CDATA[PHP Conference 2010]]></category>

		<guid isPermaLink="false">http://www.xcitestudios.com/blog/?p=337</guid>
		<description><![CDATA[<p><img class="alignright" title="3d servers over a white background" src="/blog/wp-content/uploads/crestockimages/229473-ms.jpg" alt="3d servers over a white background" width="243" height="178" />A few months ago at work we realised the need for lots of &#8220;nodes&#8221; (servers) in the UK and in the US initially. We have a lot of data processing that we need to do and we worked out it would be faster and cheaper if we could distribute the work over lots of servers rather than a few beefy servers. <a href="http://www.dancryer.com/" target="_blank">Dan</a> started looking around and found <a href="http://www.vps.net/?bid=190&#38;aid=CD3056&#38;opt=" target="_blank">VPS.net</a>, they looked good so we thought we&#8217;d give them a go. Of course we didn&#8217;t want to &#8220;put all our eggs in one basket&#8221; so we took out some VPS servers with different companies too. A few months later, the only servers we&#8217;ve been continuously happy with are the <a href="http://www.vps.net/?bid=190&#38;aid=CD3056&#38;opt=" target="_blank">VPS.net</a> servers.</p>
<p><a href="http://www.xcitestudios.com/blog/2009/11/18/superb-vps-virtual-private-server-provider-vps-net/#utm_source=feed&#38;utm_medium=feed&#38;utm_campaign=feed" class="more-link">Read more on Superb VPS (Virtual Private Server) Provider &#8211; VPS.net Review&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="3d servers over a white background" src="/blog/wp-content/uploads/crestockimages/229473-ms.jpg" alt="3d servers over a white background" width="243" height="178" />A few months ago at work we realised the need for lots of &#8220;nodes&#8221; (servers) in the UK and in the US initially. We have a lot of data processing that we need to do and we worked out it would be faster and cheaper if we could distribute the work over lots of servers rather than a few beefy servers. <a href="http://www.dancryer.com/" target="_blank">Dan</a> started looking around and found <a href="http://www.vps.net/?bid=190&amp;aid=CD3056&amp;opt=" target="_blank">VPS.net</a>, they looked good so we thought we&#8217;d give them a go. Of course we didn&#8217;t want to &#8220;put all our eggs in one basket&#8221; so we took out some VPS servers with different companies too. A few months later, the only servers we&#8217;ve been continuously happy with are the <a href="http://www.vps.net/?bid=190&amp;aid=CD3056&amp;opt=" target="_blank">VPS.net</a> servers.</p>
<p>There pricing is one of their best features, you can get a &#8220;single node&#8221; VPS with some basic specs of 400Mhz processor, 256MB RAM, 10GB storage and 250GB bandwidth (what this site is running on currently) for £15 a month. £15 may seem a little steep to some people to start with but when you realise this is for your own root access Virtual Server (i.e. you can pretty much do anything you want with it like it was at home) it isn&#8217;t that bad at all! What makes it better though is, as you buy more nodes, the price comes down for each additional node, so the first node may be £15, but the second is only £14 and so on all the way down to £9 per node.</p>
<p><a href="http://www.vps.net/?bid=190&amp;aid=CD3056&amp;opt=" target="_blank">VPS.net</a>&#8217;s idea of nodes is also very cool. You can buy up to 16 nodes that work as one VPS, and you can change this at any time. Lets say you were me with one node and suddenly you got a surge of visitors and it just couldn&#8217;t handle the load anymore, not a problem, simply buy an extra node, attach it to the VPS and you&#8217;ll immediately get the benefit of it, no need to re-install your VPS or anything!</p>
<p>They also have automated full node backups for £4 a month too, they take a daily, weekly and monthly backup that you can restore from at any time, so if you totally screw up your server, just hit yesterday&#8217;s backup and voila! Back to normal again. Not only that, if the actual server your VPS is on decides it&#8217;s time to die, they&#8217;ll boot your VPS up on another server within minutes, that doesn&#8217;t cost and is part of the service.</p>
<p>If your demands are for a webserver, they have free DNS management tools as well so you don&#8217;t have to use an external service, just point your domain at their nameservers.</p>
<p>So in summary, if you&#8217;re looking for a reliable, fast, cheap place to host a website or host nodes to perform data analysis, I&#8217;d certainly give <a href="http://www.vps.net/?bid=190&amp;aid=CD3056&amp;opt=" target="_blank">VPS.net</a> a go.</p>
<p>Review ends <img src='http://www.xcitestudios.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/01/29/mysql-binary16-and-scalability/' rel='bookmark' title='Permanent Link: MySQL &#8211; Binary(16) and scalability'>MySQL &#8211; Binary(16) and scalability</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.xcitestudios.com/blog/2009/11/18/superb-vps-virtual-private-server-provider-vps-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>For PuTTY Users &#8211; PuTTY Connection Manager</title>
		<link>http://www.xcitestudios.com/blog/2009/11/18/for-putty-users-putty-connection-manager/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.xcitestudios.com/blog/2009/11/18/for-putty-users-putty-connection-manager/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 12:13:13 +0000</pubDate>
		<dc:creator>Wade</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.xcitestudios.com/blog/?p=328</guid>
		<description><![CDATA[<p>I was just Googling trying to find out if anyone had wrote an application that wraps PuTTY enabling it to support stored sessions in its taskbar icon right click menu when I came across this extremely useful program instead: <a href="http://puttycm.free.fr/cms/" target="_blank">PuTTY Connection Manager</a>. It&#8217;s a very simple application for Windows that sits over PuTTY but provides 2 extremely useful features.</p>
<p><a href="http://www.xcitestudios.com/blog/2009/11/18/for-putty-users-putty-connection-manager/#utm_source=feed&#38;utm_medium=feed&#38;utm_campaign=feed" class="more-link">Read more on For PuTTY Users &#8211; PuTTY Connection Manager&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2009/11/18/superb-vps-virtual-private-server-provider-vps-net/' rel='bookmark' title='Permanent Link: Superb VPS (Virtual Private Server) Provider &#8211; VPS.net Review'>Superb VPS (Virtual Private Server) Provider &#8211; VPS.net Review</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2009/11/18/superb-vps-virtual-private-server-provider-vps-net/' rel='bookmark' title='Permanent Link: Superb VPS (Virtual Private Server) Provider &#8211; VPS.net Review'>Superb VPS (Virtual Private Server) Provider &#8211; VPS.net Review</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I was just Googling trying to find out if anyone had wrote an application that wraps PuTTY enabling it to support stored sessions in its taskbar icon right click menu when I came across this extremely useful program instead: <a href="http://puttycm.free.fr/cms/" target="_blank">PuTTY Connection Manager</a>. It&#8217;s a very simple application for Windows that sits over PuTTY but provides 2 extremely useful features.</p>
<p><a rel="lightbox[91118]" href="http://www.xcitestudios.com/blog/wp-content/uploads/2009/11/puttycm.JPG#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignright size-thumbnail wp-image-329" title="puttycm" src="http://www.xcitestudios.com/blog/wp-content/uploads/2009/11/puttycm-150x150.jpg" alt="puttycm" width="150" height="150" /></a>The first feature is a list of all saved sessions so you can just double click and it opens a new PuTTY session inside the application.</p>
<p>The second feature (and this one is great if you&#8217;re like us at work and manage lots of nodes) is a simultaneous command function &#8211; run the same command across as many PuTTY sessions as you want at once. Yes, type it in once and watch as it&#8217;s done on all the PuTTY sessions you specify &#8211; marvellous!</p>
<p>For anyone who uses PuTTY, I highly recommend trying this out.</p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2009/11/18/superb-vps-virtual-private-server-provider-vps-net/' rel='bookmark' title='Permanent Link: Superb VPS (Virtual Private Server) Provider &#8211; VPS.net Review'>Superb VPS (Virtual Private Server) Provider &#8211; VPS.net Review</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.xcitestudios.com/blog/2009/11/18/for-putty-users-putty-connection-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Epic Games releases Unreal Development Toolkit for FREE</title>
		<link>http://www.xcitestudios.com/blog/2009/11/07/epic-games-releases-unreal-development-toolkit-for-free/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.xcitestudios.com/blog/2009/11/07/epic-games-releases-unreal-development-toolkit-for-free/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 12:51:04 +0000</pubDate>
		<dc:creator>Wade</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.xcitestudios.com/blog/?p=276</guid>
		<description><![CDATA[<p>Yes, you heard it right, the game engine that usually costs to license is now totally free for anyone to use (without any payments at all for non-commercial use). If you decide to make a game and release it, they&#8217;ll let you earn $5,000 dollars gratis, after that they want a 25% royalty &#8211; I would say that&#8217;s a pretty fair deal considering you spend nothing if you make nothing!</p>
<p><a href="http://www.xcitestudios.com/blog/2009/11/07/epic-games-releases-unreal-development-toolkit-for-free/#utm_source=feed&#38;utm_medium=feed&#38;utm_campaign=feed" class="more-link">Read more on Epic Games releases Unreal Development Toolkit for FREE&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/07/15/fond-memories-of-a-modding-past/' rel='bookmark' title='Permanent Link: Fond memories of a modding past'>Fond memories of a modding past</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/10/26/square-enix-releases-eight-new-final-fantasy-xiii-screenshots/' rel='bookmark' title='Permanent Link: Square Enix releases eight new Final Fantasy XIII screenshots.'>Square Enix releases eight new Final Fantasy XIII screenshots.</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/10/22/link-checker-free-tool-launched-on-site/' rel='bookmark' title='Permanent Link: Link Checker &#8211; Free Tool Launched on Site'>Link Checker &#8211; Free Tool Launched on Site</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/07/15/fond-memories-of-a-modding-past/' rel='bookmark' title='Permanent Link: Fond memories of a modding past'>Fond memories of a modding past</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/10/26/square-enix-releases-eight-new-final-fantasy-xiii-screenshots/' rel='bookmark' title='Permanent Link: Square Enix releases eight new Final Fantasy XIII screenshots.'>Square Enix releases eight new Final Fantasy XIII screenshots.</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/10/22/link-checker-free-tool-launched-on-site/' rel='bookmark' title='Permanent Link: Link Checker &#8211; Free Tool Launched on Site'>Link Checker &#8211; Free Tool Launched on Site</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Yes, you heard it right, the game engine that usually costs to license is now totally free for anyone to use (without any payments at all for non-commercial use). If you decide to make a game and release it, they&#8217;ll let you earn $5,000 dollars gratis, after that they want a 25% royalty &#8211; I would say that&#8217;s a pretty fair deal considering you spend nothing if you make nothing!</p>
<p style="text-align: center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/YNNhZrE1KN8&amp;rel=0&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/YNNhZrE1KN8&amp;rel=0&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p style="text-align: left;">Years ago, before I went full thrust into PHP programming I did a lot of game development work in the community spirit. Free mods for games, free 3D models, free maps for games etc. Of course through all that I was doing it for existing games, if this had been released then, I may have just switched to developing my own game!</p>
<p style="text-align: left;">You can find out more about the <a href="http://www.udk.com/index.html" target="_blank">UDK at the official website</a>.</p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2010/07/15/fond-memories-of-a-modding-past/' rel='bookmark' title='Permanent Link: Fond memories of a modding past'>Fond memories of a modding past</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/10/26/square-enix-releases-eight-new-final-fantasy-xiii-screenshots/' rel='bookmark' title='Permanent Link: Square Enix releases eight new Final Fantasy XIII screenshots.'>Square Enix releases eight new Final Fantasy XIII screenshots.</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/10/22/link-checker-free-tool-launched-on-site/' rel='bookmark' title='Permanent Link: Link Checker &#8211; Free Tool Launched on Site'>Link Checker &#8211; Free Tool Launched on Site</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.xcitestudios.com/blog/2009/11/07/epic-games-releases-unreal-development-toolkit-for-free/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Link Checker Update &#8211; Download Meta Data, Errors, Redirects as CSV</title>
		<link>http://www.xcitestudios.com/blog/2009/11/05/link-checker-update-download-meta-data-errors-redirects-as-csv/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.xcitestudios.com/blog/2009/11/05/link-checker-update-download-meta-data-errors-redirects-as-csv/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 15:59:40 +0000</pubDate>
		<dc:creator>Wade</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.xcitestudios.com/blog/?p=273</guid>
		<description><![CDATA[<p>I&#8217;ve updated my Link Checker (site crawler) located at <a href="http://www.xcitestudios.com/tools/linkchecker" target="_blank">http://www.xcitestudios.com/tools/linkchecker</a> to allow downloading of the data it finds as CSV files. So all redirect URL&#8217;s, 404&#8217;s and meta data for all pages can be downloaded.</p>
<p><a href="http://www.xcitestudios.com/blog/2009/11/05/link-checker-update-download-meta-data-errors-redirects-as-csv/#utm_source=feed&#38;utm_medium=feed&#38;utm_campaign=feed" class="more-link">Read more on Link Checker Update &#8211; Download Meta Data, Errors, Redirects as CSV&#8230;</a></p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2009/10/22/link-checker-free-tool-launched-on-site/' rel='bookmark' title='Permanent Link: Link Checker &#8211; Free Tool Launched on Site'>Link Checker &#8211; Free Tool Launched on Site</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/09/04/hidden-things-lack-of-fries-and-pointless-data/' rel='bookmark' title='Permanent Link: Hidden things, lack of fries and pointless data'>Hidden things, lack of fries and pointless data</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
</ol></p>


Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2009/10/22/link-checker-free-tool-launched-on-site/' rel='bookmark' title='Permanent Link: Link Checker &#8211; Free Tool Launched on Site'>Link Checker &#8211; Free Tool Launched on Site</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/09/04/hidden-things-lack-of-fries-and-pointless-data/' rel='bookmark' title='Permanent Link: Hidden things, lack of fries and pointless data'>Hidden things, lack of fries and pointless data</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve updated my Link Checker (site crawler) located at <a href="http://www.xcitestudios.com/tools/linkchecker" target="_blank">http://www.xcitestudios.com/tools/linkchecker</a> to allow downloading of the data it finds as CSV files. So all redirect URL&#8217;s, 404&#8217;s and meta data for all pages can be downloaded.</p>
<p>The links are at the bottom of the page after the initial output of data.</p>
<p><a href="http://www.xcitestudios.com/tools/linkchecker" target="_blank">Use the Link Checker here</a>.</p>


<p>Related posts:<ol><li><a href='http://www.xcitestudios.com/blog/2009/10/22/link-checker-free-tool-launched-on-site/' rel='bookmark' title='Permanent Link: Link Checker &#8211; Free Tool Launched on Site'>Link Checker &#8211; Free Tool Launched on Site</a></li>
<li><a href='http://www.xcitestudios.com/blog/2009/09/04/hidden-things-lack-of-fries-and-pointless-data/' rel='bookmark' title='Permanent Link: Hidden things, lack of fries and pointless data'>Hidden things, lack of fries and pointless data</a></li>
<li><a href='http://www.xcitestudios.com/blog/2010/01/31/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql/' rel='bookmark' title='Permanent Link: MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)'>MySQL and Binary(16) &#8211; The Reasons/Benefits/Drawbacks (#mysql)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.xcitestudios.com/blog/2009/11/05/link-checker-update-download-meta-data-errors-redirects-as-csv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
