<?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>Evolution Systems &#187; Matts Blog</title>
	<atom:link href="http://evolution-systems.co.uk/category/matts-blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://evolution-systems.co.uk</link>
	<description>Web Development, Software Development and Linux Consultancy services</description>
	<lastBuildDate>Fri, 08 Aug 2025 09:18:44 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Codeigniter REST server with Tank auth</title>
		<link>http://evolution-systems.co.uk/2014/04/18/codeigniter-rest-server-with-tank-auth/</link>
		<comments>http://evolution-systems.co.uk/2014/04/18/codeigniter-rest-server-with-tank-auth/#comments</comments>
		<pubDate>Fri, 18 Apr 2014 10:36:07 +0000</pubDate>
		<dc:creator><![CDATA[Matthew Jakeman]]></dc:creator>
				<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[Matts Blog]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://evolution-systems.co.uk/?p=736</guid>
		<description><![CDATA[I&#8217;ve just had the need within codeigniter to integrate basic auth in Phil Sturgeons REST server with the tank auth authentication library. As it turns out it is quite a trivial task. In application/libraries/REST_Controller.php find the following function: And replace it with the following: If you are not auto loading the tank auth library, be sure [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve just had the need within codeigniter to integrate basic auth in <a href="https://github.com/philsturgeon/codeigniter-restserver">Phil Sturgeons REST server</a> with the <a href="http://konyukhov.com/soft/tank_auth/">tank auth authentication library</a>. As it turns out it is quite a trivial task.</p>
<p>In application/libraries/REST_Controller.php find the following function:</p>
<pre class="brush: php; title: ; notranslate">protected function _check_login($username = '', $password = NULL)&lt;/pre&gt;
 {
 if (empty($username))
 {
 return FALSE;
 }

 $auth_source = strtolower($this-&gt;config-&gt;item('auth_source'));

if ($auth_source == 'ldap')
 {
 log_message('debug', 'performing LDAP authentication for $username');
 return $this-&gt;_perform_ldap_auth($username, $password);
 }

$valid_logins = &amp; $this-&gt;config-&gt;item('rest_valid_logins');

if ( ! array_key_exists($username, $valid_logins))
 {
 return FALSE;
 }

// If actually NULL (not empty string) then do not check it
 if ($password !== NULL AND $valid_logins[$username] != $password)
 {
 return FALSE;
 }
 return TRUE;
 }</pre>
<p>And replace it with the following:</p>
<pre class="brush: php; title: ; notranslate">protected function _check_login($username = '', $password = NULL)&lt;/pre&gt;
{
 if (empty($username))
 {
 return FALSE;
 }
 return $this-&gt;tank_auth-&gt;login($username, $password, FALSE, FALSE, TRUE);
 }</pre>
<p>If you are not auto loading the tank auth library, be sure to do that in your constructor as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolution-systems.co.uk/2014/04/18/codeigniter-rest-server-with-tank-auth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter Bootstrap Navbar and Multiple Level Dropdowns</title>
		<link>http://evolution-systems.co.uk/2012/06/23/twitter-bootstrap-navbar-and-multiple-level-dropdowns/</link>
		<comments>http://evolution-systems.co.uk/2012/06/23/twitter-bootstrap-navbar-and-multiple-level-dropdowns/#comments</comments>
		<pubDate>Sat, 23 Jun 2012 13:03:15 +0000</pubDate>
		<dc:creator><![CDATA[Matthew Jakeman]]></dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Matts Blog]]></category>

		<guid isPermaLink="false">http://evolution-systems.co.uk/?p=689</guid>
		<description><![CDATA[Twitter bootstrap is a regular addition to many sites I make at the moment. It has some great features and is extremely simple to use. The first drawback I have found with it though is a lack of support for multiple level dropdowns. These can be quite useful on navbar&#8217;s where you have a lot [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Twitter bootstrap is a regular addition to many sites I make at the moment. It has some great features and is extremely simple to use. The first drawback I have found with it though is a lack of support for multiple level dropdowns. These can be quite useful on navbar&#8217;s where you have a lot of options.</p>
<p>Whilst doing a bit of research into this, I came across this discussion on the bootstrap github page:</p>
<p><a href="https://github.com/twitter/bootstrap/issues/424">https://github.com/twitter/bootstrap/issues/424</a></p>
<p>There are a few additions you can include in the bootstrap CSS file to easily enable support for multi level dropdowns. The CSS is shown below:</p>
<pre class="brush: css; title: ; notranslate">

.nav li.dropdown ul.dropdown-menu li:HOVER ul

{

display:block;

position:absolute;

left:100%;

-webkit-border-radius: 3px;

-moz-border-radius: 3px;

border-radius: 3px;

}

&amp;nbsp;

.nav li.dropdown ul.dropdown-menu ul

{

display: none;

float:right;

position: relative;

top: auto;

margin-top: -30px;

}

&amp;nbsp;

.nav li.dropdown ul.dropdown-menu .dropdown-menu::before

{

content: '';

display: inline-block;

border-top: 7px solid transparent;

border-bottom: 7px solid transparent;

border-right:7px solid #CCC;

border-right-color: rgba(0, 0, 0, 0.2);

position: absolute;

top: 9px;

left: -14px;

}

&amp;nbsp;

.nav li.dropdown ul.dropdown-menu .dropdown-menu::after

{

content: '';

display: inline-block;

border-top: 6px solid transparent;

border-bottom: 6px solid transparent;

border-right:6px solid white;

position: absolute;

top: 10px;

left: -12px;

}

</pre>
<p>Once this has been added you can easily place an extra level of dropdown in your HTML like so:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;ul class=&quot;nav&quot;&gt;

&lt;li class=&quot;active&quot;&gt;&lt;a href=&quot;#&quot;&gt;Regular link&lt;/a&gt;&lt;/li&gt;

&lt;li class=&quot;dropdown&quot; id=&quot;menu1&quot;&gt;

&lt;a class=&quot;dropdown-toggle&quot; data-toggle=&quot;dropdown&quot; href=&quot;#menu1&quot;&gt;

Dropdown

&lt;b class=&quot;caret&quot;&gt;&lt;/b&gt;

&lt;/a&gt;

&lt;ul class=&quot;dropdown-menu&quot;&gt;

&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Action&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Another action&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Something else here&lt;/a&gt;&lt;/li&gt;

&lt;li class=&quot;divider&quot;&gt;&lt;/li&gt;

&lt;li&gt;

&lt;a href=&quot;#&quot;&gt;Separated link&lt;/a&gt;

&lt;ul class=&quot;dropdown-menu&quot;&gt;

&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Sub Menu&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&amp;nbsp;

</pre>
<p>Thanks to all the guys on that thread who posted solutions to this. It has come in very useful.</p>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">.nav li.dropdown ul.dropdown-menu li:HOVER ul</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">{</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>display:block;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>position:absolute;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>left:100%;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>-webkit-border-radius: 3px;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>-moz-border-radius: 3px;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>border-radius: 3px;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">}</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">.nav li.dropdown ul.dropdown-menu ul</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">{</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>display: none;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>float:right;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>position: relative;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>top: auto;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>margin-top: -30px;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">}</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">.nav li.dropdown ul.dropdown-menu .dropdown-menu::before</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">{</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">content: &#8221;;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">display: inline-block;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">border-top: 7px solid transparent;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">border-bottom: 7px solid transparent;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">border-right:7px solid #CCC;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">border-right-color: rgba(0, 0, 0, 0.2);</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">position: absolute;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">top: 9px;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">left: -14px;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">}</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">.nav li.dropdown ul.dropdown-menu .dropdown-menu::after</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">{</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">content: &#8221;;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">display: inline-block;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">border-top: 6px solid transparent;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">border-bottom: 6px solid transparent;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">border-right:6px solid white;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">position: absolute;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">top: 10px;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">left: -12px;</div>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">}.nav li.dropdown ul.dropdown-menu li:HOVER ul&nbsp;</p>
<p>{</p>
<p>display:block;</p>
<p>position:absolute;</p>
<p>left:100%;</p>
<p>-webkit-border-radius: 3px;</p>
<p>-moz-border-radius: 3px;</p>
<p>border-radius: 3px;</p>
<p>}</p>
<p>.nav li.dropdown ul.dropdown-menu ul</p>
<p>{</p>
<p>display: none;</p>
<p>float:right;</p>
<p>position: relative;</p>
<p>top: auto;</p>
<p>margin-top: -30px;</p>
<p>}</p>
<p>.nav li.dropdown ul.dropdown-menu .dropdown-menu::before</p>
<p>{</p>
<p>content: &#8221;;</p>
<p>display: inline-block;</p>
<p>border-top: 7px solid transparent;</p>
<p>border-bottom: 7px solid transparent;</p>
<p>border-right:7px solid #CCC;</p>
<p>border-right-color: rgba(0, 0, 0, 0.2);</p>
<p>position: absolute;</p>
<p>top: 9px;</p>
<p>left: -14px;</p>
<p>}</p>
<p>.nav li.dropdown ul.dropdown-menu .dropdown-menu::after</p>
<p>{</p>
<p>content: &#8221;;</p>
<p>display: inline-block;</p>
<p>border-top: 6px solid transparent;</p>
<p>border-bottom: 6px solid transparent;</p>
<p>border-right:6px solid white;</p>
<p>position: absolute;</p>
<p>top: 10px;</p>
<p>left: -12px;</p>
<p>}</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://evolution-systems.co.uk/2012/06/23/twitter-bootstrap-navbar-and-multiple-level-dropdowns/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Center Bullet Points On Centered UL</title>
		<link>http://evolution-systems.co.uk/2012/06/20/center-bullet-points-on-centered-ul/</link>
		<comments>http://evolution-systems.co.uk/2012/06/20/center-bullet-points-on-centered-ul/#comments</comments>
		<pubDate>Wed, 20 Jun 2012 11:36:09 +0000</pubDate>
		<dc:creator><![CDATA[Matthew Jakeman]]></dc:creator>
				<category><![CDATA[Matts Blog]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://evolution-systems.co.uk/?p=683</guid>
		<description><![CDATA[If you center an unordered list within any section on an HTML page you might notice that although the text gets centered, the bullet points remain on the left side of the page. There is a quick and easy CSS fix for this:]]></description>
				<content:encoded><![CDATA[<p>If you center an unordered list within any section on an HTML page you might notice that although the text gets centered, the bullet points remain on the left side of the page. There is a quick and easy CSS fix for this:</p>
<pre class="brush: css; title: ; notranslate">

#your_containing_div ul

{

display: inline-block;

text-align:left;

}

</pre>
]]></content:encoded>
			<wfw:commentRss>http://evolution-systems.co.uk/2012/06/20/center-bullet-points-on-centered-ul/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nice PHP print_r Formatted Table Function</title>
		<link>http://evolution-systems.co.uk/2012/01/16/nice-php-print_r-formatted-table-function/</link>
		<comments>http://evolution-systems.co.uk/2012/01/16/nice-php-print_r-formatted-table-function/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 18:58:46 +0000</pubDate>
		<dc:creator><![CDATA[Matthew Jakeman]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP Functions]]></category>
		<category><![CDATA[print_r]]></category>

		<guid isPermaLink="false">http://evolution-systems.co.uk/?p=654</guid>
		<description><![CDATA[Whilst looking through php.net I stumbled across the following function that will print out an array in a nicely formatted table. When dealing with lots of nested array something like this makes it much easier to see all of the data contained within an array.]]></description>
				<content:encoded><![CDATA[<p>Whilst looking through php.net I stumbled across the following function that will print out an array in a nicely formatted table. When dealing with lots of nested array something like this makes it much easier to see all of the data contained within an array.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
 function print_nice($elem,$max_level=10,$print_nice_stack=array()){
 if(is_array($elem) || is_object($elem)){
 if(in_array(&amp;$elem,$print_nice_stack,true)){
 echo &quot;&lt;font color=red&gt;RECURSION&lt;/font&gt;&quot;;
 return;
 }
 $print_nice_stack[]=&amp;$elem;
 if($max_level&lt;1){
 echo &quot;&lt;font color=red&gt;nivel maximo alcanzado&lt;/font&gt;&quot;;
 return;
 }
 $max_level--;
 echo &quot;&lt;table border=1 cellspacing=0 cellpadding=3 width=100%&gt;&quot;;
 if(is_array($elem)){
 echo '&lt;tr&gt;&lt;td colspan=2  style=&quot;background-color:#333333;&quot;&gt;&lt;strong&gt;&lt;font  color=white&gt;ARRAY&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;';
 }else{
 echo '&lt;tr&gt;&lt;td colspan=2 style=&quot;background-color:#333333;&quot;&gt;&lt;strong&gt;';
 echo '&lt;font color=white&gt;OBJECT Type: '.get_class($elem).'&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;';
 }
 $color=0;
 foreach($elem as $k =&gt; $v){
 if($max_level%2){
 $rgb=($color++%2)?&quot;#888888&quot;:&quot;#BBBBBB&quot;;
 }else{
 $rgb=($color++%2)?&quot;#8888BB&quot;:&quot;#BBBBFF&quot;;
 }
 echo '&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;width:40px;background-color:'.$rgb.';&quot;&gt;';
 echo '&lt;strong&gt;'.$k.&quot;&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&quot;;
 print_nice($v,$max_level,$print_nice_stack);
 echo &quot;&lt;/td&gt;&lt;/tr&gt;&quot;;
 }
 echo &quot;&lt;/table&gt;&quot;;
 return;
 }
 if($elem === null){
 echo &quot;&lt;font color=green&gt;NULL&lt;/font&gt;&quot;;
 }elseif($elem === 0){
 echo &quot;0&quot;;
 }elseif($elem === true){
 echo &quot;&lt;font color=green&gt;TRUE&lt;/font&gt;&quot;;
 }elseif($elem === false){
 echo &quot;&lt;font color=green&gt;FALSE&lt;/font&gt;&quot;;
 }elseif($elem === &quot;&quot;){
 echo &quot;&lt;font color=green&gt;EMPTY STRING&lt;/font&gt;&quot;;
 }else{
 echo str_replace(&quot;\n&quot;,&quot;&lt;strong&gt;&lt;font color=red&gt;*&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;\n&quot;,$elem);
 }
 }
 ?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://evolution-systems.co.uk/2012/01/16/nice-php-print_r-formatted-table-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VGA Multi Head Monitor Switching Off And On &#8211; Radeon X1300 Pro</title>
		<link>http://evolution-systems.co.uk/2011/05/27/vga-multi-head-monitor-switching-off-and-on-radeon-x1300-pro/</link>
		<comments>http://evolution-systems.co.uk/2011/05/27/vga-multi-head-monitor-switching-off-and-on-radeon-x1300-pro/#comments</comments>
		<pubDate>Fri, 27 May 2011 01:22:51 +0000</pubDate>
		<dc:creator><![CDATA[Matthew Jakeman]]></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Matts Blog]]></category>
		<category><![CDATA[Monitors]]></category>
		<category><![CDATA[Multi Head]]></category>
		<category><![CDATA[Radeon]]></category>
		<category><![CDATA[upowerd]]></category>
		<category><![CDATA[xorg.conf]]></category>

		<guid isPermaLink="false">http://evolution-systems.co.uk/?p=647</guid>
		<description><![CDATA[I was setting up a fourth monitor on my system today and when I finally got my xorg.conf correct the new monitor (VGA) was switching itself off and then straight back on again approximately every 30 seconds. At first I thought it was the monitor itself so swapped it for another one but as it [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I was setting up a fourth monitor on my system today and when I finally got my xorg.conf correct the new monitor (VGA) was switching itself off and then straight back on again approximately every 30 seconds.</p>
<p>At first I thought it was the monitor itself so swapped it for another one but as it turns out it was s daemon called &#8216;upowerd&#8217; causing the problem. Thanks to the guys over at #radeon on freenode for pointing this out.</p>
<p>upowerd polls the monitor every 30 seconds and on some VGA setups this causes the monitor to briefly switch off and then on again. Killing the upowerd process stops the monitor doing so but within a couple of minutes the process starts back up again. In the end I just moved the binary somewhere else so it couldn&#8217;t be started and it has cured the problem. From what I can tell upowerd not running isn&#8217;t a huge problem but time will tell if it comes back to bite me in the future&#8230;</p>
<p>** EDIT &#8211; Well there is a problem with not running upowerd it would seem. The PC won&#8217;t go into standby without it running. I have decided to look into sorting this out properly but in the short term I am just running upowerd before I put the machine into standby and killing it when I switch it back on. This seems to do the job OK but not an ideal long term solution&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://evolution-systems.co.uk/2011/05/27/vga-multi-head-monitor-switching-off-and-on-radeon-x1300-pro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XEmacs window height 0 too small bug and a fix</title>
		<link>http://evolution-systems.co.uk/2011/02/10/xemacs-window-height-0-too-small-bug-and-a-fix/</link>
		<comments>http://evolution-systems.co.uk/2011/02/10/xemacs-window-height-0-too-small-bug-and-a-fix/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 22:20:42 +0000</pubDate>
		<dc:creator><![CDATA[Matthew Jakeman]]></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Matts Blog]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Workaround]]></category>
		<category><![CDATA[xemacs]]></category>

		<guid isPermaLink="false">http://evolution-systems.co.uk/?p=618</guid>
		<description><![CDATA[I am an avid user of XEmacs and have recently started using it for my LaTeX editing as well after getting fed up with a few limitations of my old editor. I ran into a bug in it however that can halt usage of it rather quickly which occurs when you already have one .tex [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I am an avid user of XEmacs and have recently started using it for my LaTeX editing as well after getting fed up with a few limitations of my old editor. I ran into a bug in it however that can halt usage of it rather quickly which occurs when you already have one .tex file open and try to open another file.</p>
<p>If you attempt this with some versions of XEmacs the open file dialog will not appear and you will see the following error:</p>
<p><em>window height 0 too small (after splitting)</em></p>
<p>There is a workaround for this bug (which hopefully will be fixed in an upcoming XEmacs release).</p>
<p>First you have to locate the file <em>minibuf.elc</em>. In Ubuntu 10.10 (with XEmacs version 21.4.22) this file is located in :</p>
<pre class="brush: bash; title: ; notranslate">
/usr/share/xemacs-21.4.22/lisp/minibuf.elc
</pre>
<p>Open this file and within it you need to search for the following string:</p>
<pre class="brush: bash; title: ; notranslate">
split-window frame-height 3
</pre>
<p>Replace the 3 in that line with a 5. After this open your init.el file. This is usually in ~/.xemacs &#8211; In this file add the following line:</p>
<pre class="brush: bash; title: ; notranslate">
(load-library &quot;minibuf.elc&quot;)
</pre>
<p>Et Voila! After you have done all this you should be able to get the open file dialog to appear.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolution-systems.co.uk/2011/02/10/xemacs-window-height-0-too-small-bug-and-a-fix/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Image File Conversion Script</title>
		<link>http://evolution-systems.co.uk/2011/01/12/image-file-conversion-script/</link>
		<comments>http://evolution-systems.co.uk/2011/01/12/image-file-conversion-script/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 14:45:34 +0000</pubDate>
		<dc:creator><![CDATA[Matthew Jakeman]]></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Matts Blog]]></category>
		<category><![CDATA[Conversion]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[JPG]]></category>
		<category><![CDATA[PDF]]></category>

		<guid isPermaLink="false">http://evolution-systems.co.uk/?p=612</guid>
		<description><![CDATA[Here&#8217;s a nice simple script to convert all the pdf files in a directory to jpg files using the convert program. To use this you will need ImageMagick installed on your Linux/Unix host.]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s a nice simple script to convert all the pdf files in a directory to jpg files using the convert program. To use this you will need ImageMagick installed on your Linux/Unix host.</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash

for file in `ls *.pdf`
do
   convert $file `echo $file | sed 's/\.pdf$/\.jpg/'`
done
</pre>
]]></content:encoded>
			<wfw:commentRss>http://evolution-systems.co.uk/2011/01/12/image-file-conversion-script/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ubuntu On Lenovo Thinkpad X201 (Blank Screen Problem)</title>
		<link>http://evolution-systems.co.uk/2010/04/26/ubuntu-on-lenovo-thinkpad-x201-blank-screen-problem-2/</link>
		<comments>http://evolution-systems.co.uk/2010/04/26/ubuntu-on-lenovo-thinkpad-x201-blank-screen-problem-2/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 19:49:01 +0000</pubDate>
		<dc:creator><![CDATA[Matthew Jakeman]]></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Matts Blog]]></category>
		<category><![CDATA[Blank Screen]]></category>
		<category><![CDATA[Thinkpad]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://evolution-systems.co.uk/wordpress/?p=463</guid>
		<description><![CDATA[Just got myself one of these and had a few problems getting Ubuntu to even boot from a USB stick on it. Although it sounded like everything was going smoothly the screen was blank for some reason. A quick google about brought up this bug: Launchpad Bug Report The solution to the problem is in [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Just got myself one of these and had a few problems getting Ubuntu to even boot from a USB stick on it. Although it sounded like everything was going smoothly the screen was blank for some reason.</p>
<p>A quick google about brought up this bug:</p>
<p><a href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/554569">Launchpad Bug Report</a></p>
<p>The solution to the problem is in comment #8 on there. Basically you need to use the following boot option to get the display working correctly</p>
<p><code>xforcevesa i915.modeset=0</code><br />
Just stick this in at the bootloader and it should be fine. When Ubuntu is fully installed just put the same line into /etc/default/grub to make the change permanent.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolution-systems.co.uk/2010/04/26/ubuntu-on-lenovo-thinkpad-x201-blank-screen-problem-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resizing An Image With PHP</title>
		<link>http://evolution-systems.co.uk/2010/04/08/risizing-an-image-with-php-2/</link>
		<comments>http://evolution-systems.co.uk/2010/04/08/risizing-an-image-with-php-2/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 18:32:24 +0000</pubDate>
		<dc:creator><![CDATA[Matthew Jakeman]]></dc:creator>
				<category><![CDATA[Matts Blog]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Resizing]]></category>

		<guid isPermaLink="false">http://evolution-systems.co.uk/wordpress/?p=464</guid>
		<description><![CDATA[I came across this PHP class today that is great for resizing images. It is extremely easy to use and quite a small class. The class file can be downloaded here: SimpleImage.php A quick example usage to show how simple it is&#8230; include('SimpleImage.php'); $image = new SimpleImage(); $image->load('picture.jpg'); $image->resize(250,400); $image->save('picture2.jpg'); The last time I had [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I came across this PHP class today that is great for resizing images. It is extremely easy to use and quite a small class. The class file can be downloaded here:</p>
<p><a href="http://www.evolution-systems.co.uk/files/SimpleImage.php">SimpleImage.php</a></p>
<p>A quick example usage to show how simple it is&#8230;</p>
<p><code>   include('SimpleImage.php');<br />   $image = new SimpleImage();<br />   $image->load('picture.jpg');<br />   $image->resize(250,400);<br />   $image->save('picture2.jpg');</code><br />
The last time I had to do some image resizing with PHP was a number of years ago and I seem to remember it being a lot more complicated than this.</p>
<p>Thanks to <a href="http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php">White Hat Web Design</a> for making this little class and making it available.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolution-systems.co.uk/2010/04/08/risizing-an-image-with-php-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenWRT default blocking of ICMP</title>
		<link>http://evolution-systems.co.uk/2010/01/29/openwrt-default-blocking-of-icmp/</link>
		<comments>http://evolution-systems.co.uk/2010/01/29/openwrt-default-blocking-of-icmp/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 20:10:21 +0000</pubDate>
		<dc:creator><![CDATA[Matthew Jakeman]]></dc:creator>
				<category><![CDATA[Matts Blog]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Configs]]></category>
		<category><![CDATA[ICMP]]></category>
		<category><![CDATA[OpenWRT]]></category>

		<guid isPermaLink="false">http://evolution-systems.co.uk/wordpress/?p=412</guid>
		<description><![CDATA[I have been setting up an OpenWRT router at home specifically because I wanted to use it as an end point for a]]></description>
				<content:encoded><![CDATA[<p>I have been setting up an OpenWRT router at home specifically because I wanted to use it as an end point for a <a href="http://www.tunnelbroker.net>Hurrican Electric IPv6 Tunnel</a>. I need this so I can do some tests using my <a href="https://sourceforge.net/projects/npplusplus/">NP++ Source Code</a> between home and the office.</p>
<p>To be able to configure your tunnels IPv4 end point (ie the IP address of the router on your home network) the IP address you are setting needs to be pingable. First this was a bit of a pain as I needed to set up my BT Router so put the Linksys in the DMZ. After messing with that for a bit it was all working.</p>
<p>Despite everything being set up correctly I still wasn&#8217;t able to ping my home IP. After a bit of digging on the net I discovered that OpenWRT blocks all ICMP traffic by default which is a bit of a pain in the arse really.</p>
<p>Anyway, here is the config change that you need to make to /etc/config/firewall to enable all ICMP traffic through the firewall:</p>
<p><code>config rule</p>
<p>    option proto ICMP<br />
    option target ACCEPT</code></p>
]]></content:encoded>
			<wfw:commentRss>http://evolution-systems.co.uk/2010/01/29/openwrt-default-blocking-of-icmp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
