<?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>Skin of Stars &#187; Programming &amp; Design</title>
	<atom:link href="http://skinofstars.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://skinofstars.com</link>
	<description>Machines, Media and Miscellanea</description>
	<lastBuildDate>Fri, 03 Feb 2012 21:12:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
<cloud domain='skinofstars.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Eclipse PyDev on Ubuntu</title>
		<link>http://skinofstars.com/2010/12/eclipse-pydev-on-ubuntu/</link>
		<comments>http://skinofstars.com/2010/12/eclipse-pydev-on-ubuntu/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 21:04:03 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming & Design]]></category>

		<guid isPermaLink="false">http://skinofstars.com/?p=4950</guid>
		<description><![CDATA[I had a bit of a moment earlier in getting PyDev up and running in Eclipse. Installing is easy enough through Marketplace in Helios, but when I went to open a project I was denied! Anyway, figured it out, just needed to select my interpreter. When you go to open a new python project hit the &#8216;Please configure an interpreter..&#8217;<a href="http://skinofstars.com/2010/12/eclipse-pydev-on-ubuntu/"> ...&#160;Read the remaining 45 words</a>]]></description>
			<content:encoded><![CDATA[<p>I had a bit of a moment earlier in getting PyDev up and running in Eclipse. Installing is easy enough through Marketplace in Helios, but when I went to open a project I was denied! Anyway, figured it out, just needed to select my interpreter.</p>
<p>When you go to open a new python project hit the &#8216;Please configure an interpreter..&#8217; link. Then click the Auto Config button. Ok. Apply. Ok. I&#8217;m on Ubuntu Lucid 10.04 so my grammar is 2.6 (you can find your version in the terminal via:$ python &#8211;version ). Your interpreter is Python. Finish. And you&#8217;re done <img src='http://skinofstars.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://skinofstars.com/2010/12/eclipse-pydev-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dConstruct 2010 &#8211; Brendan Dawes &#8211; Boil, Simmer, Reduce</title>
		<link>http://skinofstars.com/2010/11/dconstruct-2010-brendan-dawes-boil-simmer-reduce/</link>
		<comments>http://skinofstars.com/2010/11/dconstruct-2010-brendan-dawes-boil-simmer-reduce/#comments</comments>
		<pubDate>Wed, 24 Nov 2010 23:29:39 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Media]]></category>
		<category><![CDATA[Programming & Design]]></category>
		<category><![CDATA[dConstruct2010]]></category>

		<guid isPermaLink="false">http://skinofstars.com/?p=5206</guid>
		<description><![CDATA[Another dConstruct2010 post, this time: Brendan Dawes &#8211; Boil, Simmer, Reduce Brendan didn’t really have as structured a talk, and one wonders if perhaps he relied more on gimmicks in his slides than the message he was trying to convey. The method he calls ‘Boil, Simmer, Reduce’ is basically his three part plan in creating a product. Frankly it seems<a href="http://skinofstars.com/2010/11/dconstruct-2010-brendan-dawes-boil-simmer-reduce/"> ...&#160;Read the remaining 588 words</a>]]></description>
			<content:encoded><![CDATA[<p>Another dConstruct2010 post, this time: Brendan Dawes &#8211; Boil, Simmer, Reduce</p>
<p>Brendan didn’t really have as structured a talk, and one wonders if perhaps he relied more on gimmicks in his slides than the message he was trying to convey. The method he calls ‘Boil, Simmer, Reduce’ is basically his three part plan in creating a product. Frankly it seems a very logical, if not slightly fluffy minded way to work.</p>
<p><strong>Boil</strong><br />
This is basically filling your head with stuff. So it’s just about throwing anything and everything in to the ideas pot. When you embark on a development process you are already indirectly thinking about it all the time, whether you are watching a film, reading a fictional book or just contemplating the meaning of life. The premise is just to be grabbing ideas from all over the place and throwing them all in.</p>
<p>He also pointed out when discussing shots from films he likes that symmetry in itself makes things pretty.</p>
<p><strong>Simmer</strong><br />
This is looking at all considerations of what you want. It is important that you’re not considering technical restrictions, but rather getting down to the nub of what you’d like to do. As with the Boil stage, there are no rules, you can really just do whatever you like.</p>
<p>Around this point Brendan suggested that good design can breed good behaviour. He spoke of work he did for a tourist information office using Microsoft Surface as a map display. There were discs which they would place on the surface which would represent hotels, and by placing that on the map it would create a ring around that item with dots showing where the hotels are in that surrounding area. By turning the disc it would amplify the area of interest. This was in Manchester and it was quite a rough area of the centre of town &#8211; “a high proportion of scallies”. The place was concerned that the discs would get stolen. But it was a beautiful space that they created through design, and nothing was stolen. He argued that this proved his belief that “good design can bring good behaviour”.</p>
<p><strong>Reduce</strong><br />
“A design is finished when there is nothing left to take away”. Take the iPhone. It’s such a simple design, one button, an absolute minimum and it’s the sort of thing where anything can be placed on it. It can be anything you want it to be.</p>
<p>You should justify everything shown on a screen. This doesn’t necessarily mean that everything must serve a purposeful action. His favourite thing about the iPhone was that when you scroll up  and get to the top, it creates a little bit of space with nothing underneath which simply springs back when you let go. This doesn’t really serve a purpose, bar perhaps a small mental indicator. It is just a little piece of aesthetic satisfaction. It’s just nice. That in itself can justify the feature.</p>
<p>He talked a bit about how he made something for the iPhone which was born out of a need. He wanted to watch a film on a train journey and couldn’t get his iPhone to sit in a good position, so he made a simple piece of cardboard that evening that would just clip onto the side. They thought it was sell-able and went through a few iterations. There was one which was so close to being right but it just wasn’t quite there. They then decided to apply Da Vinci’s Golden Ratio to the position of the cut in the rectangle. That was it. Fixed.</p>
<p>He also mentioned how he thinks the pencil is absolutely wonderful in design. A few of reasons he mentioned were:</p>
<p>1) It has a big arrow pointing to which end you use.<br />
2) Built-in progress bar.<br />
3) You can cut it up, and make many more of the same with it.</p>
<p>New ideas like this still apply to the old and best designed products.</p>
]]></content:encoded>
			<wfw:commentRss>http://skinofstars.com/2010/11/dconstruct-2010-brendan-dawes-boil-simmer-reduce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dConstruct 2010 &#8211; Marty Neumeier &#8211; The Designful Company</title>
		<link>http://skinofstars.com/2010/11/dconstruct-2010-marty-neumeier/</link>
		<comments>http://skinofstars.com/2010/11/dconstruct-2010-marty-neumeier/#comments</comments>
		<pubDate>Sat, 06 Nov 2010 18:31:46 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Media]]></category>
		<category><![CDATA[Programming & Design]]></category>
		<category><![CDATA[dConstruct2010]]></category>

		<guid isPermaLink="false">http://skinofstars.com/?p=3107</guid>
		<description><![CDATA[The theme of dConstruct 2010 was Design &#38; Creativity. Marty Neumeier &#8211; The Designful Company As I’m sure you can imagine, I only made some quick notes as I was listening to the talk, so what you will find here is an amalgamation of the talk and my own thoughts. Please do not consider this as their words or even<a href="http://skinofstars.com/2010/11/dconstruct-2010-marty-neumeier/"> ...&#160;Read the remaining 1204 words</a>]]></description>
			<content:encoded><![CDATA[<p>The theme of <a href="http://2010.dconstruct.org/">dConstruct 2010</a> was Design &amp; Creativity.</p>
<p>Marty Neumeier &#8211; The Designful Company</p>
<p>As  I’m sure you can imagine, I only made some quick notes as I was  listening to the talk, so what you will find here is an amalgamation of  the talk and my own thoughts. Please do not consider this as their words  or even mine.</p>
<p>I  don&#8217;t know much about any of the dConstruct speakers &#8211; Marty from first  appearance was a middle aged gentleman, smart with suit jacket, jeans  and shoes.  This seemed to be a common style amongst the new media gang.  Fashion aside, Marty&#8217;s talk was a discussion on branding and getting a  good product within a brand. To this end he reference many tech business  luminaries, though like most people there he was an Apple-afficianado.  For example, he was fond of a particular Steve Jobs anecdote. ‘After a  marked increase in sales, Jobs was asked “how do you intend to keep this  up?” To which he replied: “we intend to keep innovating”’. Marty had a  theme which he both uses as his opener and closer, very neatly done too,  and it is simply this: &#8220;If you wanna innovate, you gotta design&#8221;.</p>
<p>Marty’s  assertion was that Harvard business school teaches by case study,  solving problems by looking how they have been solved previously. This  is counter to successful tech businesses and brands, as is testament  with Jobs’ statement of the importance of innovation.</p>
<p>So  he talked about what really gets a product there is where you need to  be designing, on that edge between radical and useful, those differences  between what&#8217;s good and different. He talks about that traditional  style brand-development where to go for something different is a risk,  and many a CEO wouldn&#8217;t take that risk. The problem is if you don&#8217;t take  that risk, there is a good chance of the brand dropping into obscurity.  Consider the ubiquity of swoosh logos and then globe logos and how  their commonness means the brand becomes unmemorable.</p>
<p>So,  what are some of the most successful brands and how does one get there?  Marty presents a path to follow in brand development where you have the  vision at one end of the scale, and the product at the other end of the  scale. He suggests that to be successful you&#8217;ve got to get from one end  of that scale to the other. The path to follow has three stages:  knowing, making and doing. It is to this end that you need a clear  visionary that can manage these stages. One needs a leader who can  picture the goal, has the resources available to build the product and  impetus to actually put this together without diluting the vision or  compromising on the product development.</p>
<p>Marty  also talked about how business is speeding up&#8230;  I&#8217;ll be honest, I&#8217;m  doubtful, I feel this is a cliche statement that many people make based  on regurgitation. Still, he made a fair point and one that is difficult  to dispute, but it could do with some kind of citation. &#8220;There are now  more financial transactions in one day than the whole of 1965&#8243;.</p>
<p>So,  what do consumers want? Well, we&#8217;ve always said these things: Pick two;  good, cheap or fast. What he pointed out though, is that consumers have  a new demand, they want free, perfect, now. So if you want your product  to be successful you&#8217;ve got to give it everything. Let’s be honest,  this is something we expect when one considers products like Google  docs.  He then pointed out that just to be free, perfect and now isn’t  necessarily enough! In an ever-cluttered market place you have to be really  different, not just a little bit different, but really different. He  talked about how we organise information in our mind using categories  and compartmentalisation. So what you’re ideally looking for in a  product is to get it in one of those compartments by itself.  So take  the example of a smart phone &#8211; you want to have your product there by  itself, like the iPhone, which for some time everyone thought of as the  only smart phone. A successful brand is a walled category.</p>
<p>Historically,  to make your product a successful one you would have started with  factories. By having factories you can product more than anyone else,  you can supply for the demand, you’d be at an advantage. When others  realised this and everyone built factories, the next step was to get the  most capital, allowing you to buy out the competition. After capital  was patents. Patents were a means of securing your market. Of course  they can only work for so long. So the final stage is where we are at  now, brands. This saves a certain amount of process because in people’s  own minds they will compartmentalise and protect your brand for you as a  consumer. So, to summarise, we are talking about how in the past it was  very much physical &#8211; factories and a physical present which keeps your  product dominant in the market, whereas now it’s a mental thing within  the mind of the consumer.</p>
<p>If  a brand is good and different, it’s a gut feeling. Your brand is what  the consumer says it is and for you to stand out, that’s where you have  to be really different. Example &#8211; if we have Nike, do we need Reebok? Do  we need Wimpy if we have McDonald’s?  A brand has to be truly radical  and good, which is indeed a big risk.</p>
<p>I  think in all the Apple-loving I heard on this day there is a tech brand  that is more ubiquitous than iProducts will ever be: Linux. How  different is that? Totally radical, and it’s everywhere. Just my 2p.</p>
<p>Marty  presented a scale with which to measure brand success using the  variables of good versus different on the z and y axes. He believed a  brand generally fell into one of four sectors:</p>
<p>1) good, not different &#8211; common, does well in tests, and at first sales, but never really dominates its market.<br />
2)  good and different &#8211; this is the sweet spot. Often does poorly in  tests, which means if often won’t get to market, slow in market, but  customers will in time equate the weirdness to good : and eventually it  will take a dominant position in the market. Example: Aeron chairs.  (btw, I love Aeron chairs <img src='http://skinofstars.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
3) not good and different &#8211; won’t do well in tests, and won’t be successful, people will equate weird to bad.<br />
4)  not good and not different &#8211; you just don’t want to be here, do you?  But, this one often does well in tests because it’s not different, so  it’s familiar to people. But it doesn’t challenge.  A surprising amount  of products sit here, like Gillette fusion razors. Five blades. Five.  Whoop-de-doop. Not exactly going to dominate the market.</p>
<p>As your brand visionary leader man, there are four key things you need:<br />
1) empathy<br />
2) intuition<br />
3) experience<br />
4) judgement</p>
<p>Let’s finish how Marty did. If you wanna innovate, you gotta design.</p>
]]></content:encoded>
			<wfw:commentRss>http://skinofstars.com/2010/11/dconstruct-2010-marty-neumeier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixing Eclipse ctrl+click Problem</title>
		<link>http://skinofstars.com/2010/09/fixing-eclipse-ctrlclick-problem/</link>
		<comments>http://skinofstars.com/2010/09/fixing-eclipse-ctrlclick-problem/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 20:30:16 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Programming & Design]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://skinofstars.com/?p=382</guid>
		<description><![CDATA[Sometimes, for no clear reason, Eclipse&#8217;s ctrl+click function to find a methods source fails. This bugs the hell out of me, but is simple enough to fix. Unfortunately it doesn&#8217;t happen often enough for me to remember and having to search each time with &#8216;just right&#8217; keywords is also annoying. Anyway, here it is: Close Eclipse. Delete:  /path/to/workplace/.metadata/.plugins/org.eclipse.jdt.core Open eclipse<a href="http://skinofstars.com/2010/09/fixing-eclipse-ctrlclick-problem/"> ...&#160;Read the remaining 5 words</a>]]></description>
			<content:encoded><![CDATA[<p>Sometimes, for no clear reason, Eclipse&#8217;s ctrl+click function to find a methods source fails. This bugs the hell out of me, but is simple enough to fix. Unfortunately it doesn&#8217;t happen often enough for me to remember and having to search each time with &#8216;just right&#8217; keywords is also annoying. Anyway, here it is:</p>
<p>Close Eclipse.</p>
<p>Delete:  /path/to/workplace/.metadata/.plugins/org.eclipse.jdt.core</p>
<p>Open eclipse and let it rebuild its indexes. Job done.</p>
]]></content:encoded>
			<wfw:commentRss>http://skinofstars.com/2010/09/fixing-eclipse-ctrlclick-problem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP Script for RSS auto-discovery and OPML file generation</title>
		<link>http://skinofstars.com/2010/03/php-script-rss-auto-discovery-opml-file/</link>
		<comments>http://skinofstars.com/2010/03/php-script-rss-auto-discovery-opml-file/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 19:21:40 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Programming & Design]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[gpl]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[opml]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://skinofstars.com/?p=369</guid>
		<description><![CDATA[Hey All, I recently got a reasonable size list of blog URLs. What I wanted was to import all these into a feed reader (via OPML). There seemed to be a lack of conversion scripts for batch URL-&#62;find RSS link-&#62;feed reader import file (I may be wrong, please let me know if I am , so I made one in<a href="http://skinofstars.com/2010/03/php-script-rss-auto-discovery-opml-file/"> ...&#160;Read the remaining 654 words</a>]]></description>
			<content:encoded><![CDATA[<p>Hey All,</p>
<p>I recently got a reasonable size list of blog URLs. What I wanted was to import all these into a feed reader (via OPML). There seemed to be a lack of conversion scripts for batch URL-&gt;find RSS link-&gt;feed reader import file (I may be wrong, please let me know if I am <img src='http://skinofstars.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , so I made one in PHP. I guess this is like an automatic-blogroller. I have just used this as a command line script, I&#8217;m not recommending you use this in &#8216;the wild&#8217; as one might say, I have made little concession to security as I had a trusted list of URLs.</p>
<p>There are basically three steps to this</p>
<ol>
<li>Take an input file of newline seperated URLs, in my case blogs.</li>
<li>Find (auto-discover) associated RSS feed of each blog URL</li>
<li>Output an OPML file that you can use to import into a feed reader</li>
</ol>
<p>What it does:</p>
<ul>
<li>Takes a well formed list of newline separated URLs of blogs and turns it into an OPML</li>
<li>If the URL source doesn&#8217;t contain a &lt;link&gt; to an RSS feed in the head it doesn&#8217;t add it to the OPML</li>
<li>Detects the &lt;title&gt; and adds that to the OPML text field, or uses the URL if &lt;title&gt; isn&#8217;t present</li>
</ul>
<p>What it doesn&#8217;t:</p>
<ul>
<li>Check the RSS feed is validated XML</li>
<li>Any other checking really <img src='http://skinofstars.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>Come with any sort of warranty/guarantee</li>
</ul>
<p>Some of the key functions are from <a href="http://keithdevens.com/weblog/archive/2002/Jun/03/RSSAuto-DiscoveryPHP">Keith Devens</a> work. Thanks.<br />
<span id="more-369"></span><br />
Without any further ado, here is the script:</p>
<pre>&lt;?php
/*
 * @author @skinofstars Kevin Carmody
 * GPLv3 - http://www.gnu.org/copyleft/gpl.html
 *
 * this is really a command line app with no flags
 * for turning a bunch ofurls into an OPML file
 *
 * 1.takes input file of newline seperated urls, normally blogs
 * 2.finds (autodiscovery) associated rss of each url
 * 3.outputs an OPML file for you to use in a feed reader
 */

// file config
$inputFile = "/path/to/URLlist.txt";
$outputFile = "/path/to/blogroll.opml";

// OPML config
$opmlTitle = "Some Select Blogs";
$opmlOwnerName = "Kevin Carmody";
$opmlOwnerEmail = "kevin@skinofstars.com";

/** no need to edit after this <img src='http://skinofstars.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  **/
$inHandle = @fopen($inputFile, "r");//read-only
$outHandle = @fopen($outputFile, "a");//append

if ($inHandle &amp;&amp; $outHandle) {
	$headerOut = opmlHeader($opmlTitle,$opmlOwnerName,$opmlOwnerEmail);
	fwrite($outHandle,$headerOut);

	while (!feof($inHandle)) {
		$buffer = fgets($inHandle, 4096);
		$source = getFile($buffer);
		$rssURL = getRSSLocation($source, $buffer);
		$rssTitle = htmlentities(getTitleAlt($source));
		if($rssURL){
			if($rssTitle){
				$entryOut = opmlEntry($rssURL,$rssTitle);
				fwrite($outHandle,$entryOut);
			} else {
				$entryOut = opmlEntry($rssURL,$rssURL);
				fwrite($outHandle,$entryOut);
			}
			//echo ".";//uncomment to print a dot to screen on each success, nice for seeing progress
		} else {
			echo "Fail on: ".$buffer;
		}
	}
	$footerOut = opmlFooter();
	fwrite($outHandle,$footerOut);

	fclose($inHandle);
	fclose($outHandle);
} else {
	if(!$inHandle){
		echo 'not got a handle on input file: '.$inputFile."\n";
		die;
	}
	if(!$outHandle){
		echo 'not got a got handle on output file: '.$outputFile."\n";
		die;
	}
}

echo "\nAll done <img src='http://skinofstars.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> \n";

/**
 * basic opml header
 * @param string $opmlTitle
 * @param string $opmlOwnerName
 * @param string $opmlOwnerEmail
 * @return string
 */
function opmlHeader($opmlTitle,$opmlOwnerName,$opmlOwnerEmail){
	$oheader = "&lt;?xml version=\"1.0\" encoding=\"ISO-8859-1\"?&gt;\n"
	."&lt;opml version=\"1.1\"&gt;\n"
	."	&lt;head&gt;\n"
	."		&lt;title&gt;".$opmlTitle."&lt;/title&gt;\n"
	."		&lt;dateCreated&gt;".date("r")."&lt;/dateCreated&gt;\n"
	."		&lt;ownerName&gt;".$opmlOwnerName."&lt;/ownerName&gt;\n"
	."		&lt;ownerEmail&gt;".$opmlOwnerEmail."&lt;/ownerEmail&gt;\n"
	."		&lt;/head&gt;\n"
	."	&lt;body&gt;\n";
	return $oheader;
}

/**
 * just returns a test footer
 * @return string
 */
function opmlFooter(){
	$ofooter = "  &lt;/body&gt;\n"
	."&lt;/opml&gt;";
	return $ofooter;
}

/**
 * creates an XML entry for the OPML file
 * @param string $feedURL
 * @param string $feedTitle
 * @return string
 */
function opmlEntry($feedURL,$feedTitle){
	$outline = "    &lt;outline text=\"".$feedTitle."\" type=\"rss\" xmlUrl=\"".$feedURL."\"/&gt;\n";
	return $outline;
}

/**
 * returns the page title extracted from source
 * @param string $html
 * @return string
 */
function getTitleAlt($html) {
	if (preg_match('/&lt;title&gt;(.*?)&lt;\/title&gt;/is',$html,$found)) {
		$title = $found[1];
		return $title;
	} else {
		return;
	}
}

/**
 * http://keithdevens.com/weblog/archive/2002/Jun/03/RSSAuto-DiscoveryPHP
 * public domain
 */
function getFile($location){
	$ch = curl_init($location);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: close'));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_TIMEOUT, 15);
	$response = curl_exec($ch);
	curl_close($ch);
	return $response;
}

/**
 * http://keithdevens.com/weblog/archive/2002/Jun/03/RSSAuto-DiscoveryPHP
 * public domain
 */
function getRSSLocation($html, $location){
	if(!$html or !$location){
		return false;
	}else{
		#search through the HTML, save all &lt;link&gt; tags
		# and store each link's attributes in an associative array
		preg_match_all('/&lt;link\s+(.*?)\s*\/?&gt;/si', $html, $matches);
		$links = $matches[1];
		$final_links = array();
		$link_count = count($links);
		for($n=0; $n&lt;$link_count; $n++){
			$attributes = preg_split('/\s+/s', $links[$n]);
			foreach($attributes as $attribute){
				$att = preg_split('/\s*=\s*/s', $attribute, 2);
				if(isset($att[1])){
					$att[1] = preg_replace('/([\'"]?)(.*)\1/', '$2', $att[1]);
					$final_link[strtolower($att[0])] = $att[1];
				}
			}
			$final_links[$n] = $final_link;
		}
		#now figure out which one points to the RSS file
		for($n=0; $n&lt;$link_count; $n++){
			if(strtolower($final_links[$n]['rel']) == 'alternate'){
				if(strtolower($final_links[$n]['type']) == 'application/rss+xml'){
					$href = $final_links[$n]['href'];
				}
				if(!$href and strtolower($final_links[$n]['type']) == 'text/xml'){
					#kludge to make the first version of this still work
					$href = $final_links[$n]['href'];
				}
				if($href){
					if(strstr($href, "http://") !== false){ #if it's absolute
						$full_url = $href;
					}else{ #otherwise, 'absolutize' it
						$url_parts = parse_url($location);
						#only made it work for http:// links. Any problem with this?
						$full_url = "http://$url_parts[host]";
						if(isset($url_parts['port'])){
							$full_url .= ":$url_parts[port]";
						}
						if($href{0} != '/'){ #it's a relative link on the domain
							$full_url .= dirname($url_parts['path']);
							if(substr($full_url, -1) != '/'){
								#if the last character isn't a '/', add it
								$full_url .= '/';
							}
						}
						$full_url .= $href;
					}
					return $full_url;
				}
			}
		}
		return false;
	}
}</pre>
<p>Though this was really a one time hit for me it may well be useful to others. Please let me know if you can think of ways to improve it and I will update accordingly.</p>
<p>Thanks,<br />
Kevin</p>
]]></content:encoded>
			<wfw:commentRss>http://skinofstars.com/2010/03/php-script-rss-auto-discovery-opml-file/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Moving hosted SVN, the trials and the tribulations</title>
		<link>http://skinofstars.com/2010/02/moving-hosted-svn-the-trials-and-the-tribulations/</link>
		<comments>http://skinofstars.com/2010/02/moving-hosted-svn-the-trials-and-the-tribulations/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 22:55:15 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming & Design]]></category>
		<category><![CDATA[hostedsvn]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[systems]]></category>

		<guid isPermaLink="false">http://skinofstars.com/?p=365</guid>
		<description><![CDATA[Over the last few weeks Mike Robinson and I have discussed and decided an SVN restructuring for improving our build and deployment processes. I would encourage you to read a bit more about that (and various other geekness) at his blog. So I&#8217;ve spent this week moving our company hosted SVN from Beanstalk to Springloops. I feel I&#8217;ve been swinging<a href="http://skinofstars.com/2010/02/moving-hosted-svn-the-trials-and-the-tribulations/"> ...&#160;Read the remaining 358 words</a>]]></description>
			<content:encoded><![CDATA[<p>Over the last few weeks <a href="http://akamike.net/">Mike Robinson</a> and I have discussed and decided an SVN restructuring for improving our build and deployment processes. I would encourage you to read a bit more about that (and various other geekness) at his blog.</p>
<p>So I&#8217;ve spent this week moving our company hosted <strong>SVN</strong> from <strong>Beanstalk</strong> to <strong>Springloops</strong>. I feel I&#8217;ve been swinging between hell and zen, but the learning has been awesome. As a summary of what I&#8217;ve found I thought I&#8217;d give a quick walk through how I did it.</p>
<p><span id="more-365"></span><br />
Most of this stuff was the usual <a href="http://subversion.apache.org/faq.html#dumpload">dump/load cycle</a>, but there are a couple of things which needed some extra attention.</p>
<p>Firstly, both Beanstalk and Springloops have the ability to export and import SVN dumps via easy-to-use web interfaces. This really could be as easy as download, upload. Try that first.</p>
<p>We had a couple of problems though. Previously we had a mishmash of company repos and project repos; these had to be merged and sorted. We also had different usernames on each system(!) which meant that during an import previous commits were not matched to current system users.  The author attribute needed to be updated for all previous revisions.</p>
<p>This was all done on OS X, but should be applicable to any Unix-like with the appropriate libraries, etc.  So we&#8217;ve got our dump from Beanstalk, now we just need to create a local repository to do our work on (always work on a backup!!).</p>
<pre>$ svnadmin create --pre-1.4-compatible newrepo</pre>
<p>We use the pre 1.4 compatible flag to overcome files system changes within SVN between versions. These changes can potentially cause errors (svn: Expected FS format &#8217;2&#8242;; found format &#8217;3&#8242;) when <a href="http://svnbook.red-bean.com/en/1.0/re23.html">propset</a>-ting revision histories, in my case, author/committer names.</p>
<p>Next job, import your dump file.</p>
<pre>$ svnadmin load newrepo &lt; dumpfile</pre>
<p>If you&#8217;re looking to do the merging, as I was, then you want to make yourself a directory in your repository (usual &#8216;svn mkdir&#8217; commands) and then load it in the following fashion:</p>
<pre>$ svnadmin load newrepo --parent-dir myfolder &lt; seconddumpfile</pre>
<p>Ok, we&#8217;ve done our merging, now we&#8217;re going to update our author histories.  Now the SVN manual gives you information on doing this one version at a time with a propset.  It also talks about other recursive actions such as deleting files, which isn&#8217;t our concern.  For changing authors, I found a tidy script called <a href="http://svn.apache.org/repos/asf/subversion/trunk/contrib/server-side/svn-tweak-author.py">svn-author-tweak.py</a> from CollabNet.</p>
<p>If you want to give your repository a check before you upload it, just checkout to a local test.</p>
<pre>$ svn co file:///path/to/newrepo /path/to/test/repo</pre>
<p>Once that&#8217;s done, dump the file.</p>
<pre>$ svnadmin dump newrepo &gt; my.dumpfile</pre>
<p>Upload</p>
<p>???</p>
<p>Profit</p>
]]></content:encoded>
			<wfw:commentRss>http://skinofstars.com/2010/02/moving-hosted-svn-the-trials-and-the-tribulations/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Has it really been that long?</title>
		<link>http://skinofstars.com/2010/01/has-it-really-been-that-long/</link>
		<comments>http://skinofstars.com/2010/01/has-it-really-been-that-long/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 22:05:31 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Programming & Design]]></category>
		<category><![CDATA[BBC]]></category>
		<category><![CDATA[me]]></category>
		<category><![CDATA[movabletype]]></category>
		<category><![CDATA[mt]]></category>
		<category><![CDATA[skinofstars]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://skinofstars.com/?p=361</guid>
		<description><![CDATA[Hello all, it&#8217;s been a while. The Skinofstars site has been languishing in disuse for some time now. Like I&#8217;m sure many others, I&#8217;ve found the transition to micoblogging is all too easy. Sometimes though, one wants to write something a little longer and long gaps are not helpful when you finally think of something. So I guess I&#8217;m just<a href="http://skinofstars.com/2010/01/has-it-really-been-that-long/"> ...&#160;Read the remaining 404 words</a>]]></description>
			<content:encoded><![CDATA[<p>Hello all, it&#8217;s been a while. The Skinofstars site has been languishing in disuse for some time now. Like I&#8217;m sure many others, I&#8217;ve found the transition to micoblogging is all too easy. Sometimes though, one wants to write something a little longer and long gaps are not helpful when you finally think of something. So I guess I&#8217;m just posting to get rid of some writers block really.</p>
<p>For the six months since my last post (my, that is a long time!) I&#8217;ve been working at <a href="http://studiolift.com">Studio Lift</a> in Reading. There are five of us; two designers, two coders and a multi-talented boss. We fill our days making like <a href="http://www.ciarb.org/">this</a> and like <a href="http://www.williamfiennes.com/">this</a> (bad linking! <img src='http://skinofstars.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  using <a href="http://www.movabletype.com">Movable Type</a>. This is the same blogging platform that is used by the BBC, The Guardian, ReadWriteWeb and various others. It comes in both Commercial and Open Source offerings and is perhaps one of the most venerable of blogging systems.</p>
<p>Does that mean I&#8217;m going to talk tech now?&#8230; sure (jump?). Movable Type (mt) has just released its 5th version. This places more emphasis on managing multiple blogs within a site structure. Very useful if you&#8217;ve ever tried to manage multiple blog instances (how many blogs do you think The Guardian has?). There is also a new emphasis on social communication (see <a href="http://www.movabletype.com/motion/">Motion</a>).</p>
<p>The system is written in Perl but because the publishing is static files you can drop pretty much any scripting language in without any problems. My current language of choice for server-side is PHP. You hook your language in with mt using their own markup derived syntax, and to be honest for a simple blog you never have to touch another language. Let&#8217;s look at an example which will iterate over a collection of the last five entries:</p>
<p>&lt;mt:Entries lastn=&#8221;5&#8243;&gt;<br />
&lt;h2&gt;&lt;mt:EntryTitle /&gt;&lt;/h2&gt;<br />
&lt;p&gt;&lt;mt:EntryBody /&gt;&lt;/p&gt;<br />
&lt;/mt:Entries&gt;</p>
<p>There is documentation, with my favourite page being the <a href="http://www.movabletype.org/documentation/appendices/tags/">tag reference</a>, but otherwise there certainly isn&#8217;t the same breadth of documentation as you would find with something like WordPress. Perhaps the strong ties with the commercial side of the software, it was increasingly license prudish at the Open Source blogging party, has been a hindrance to a warm and fuzzy community embrace. Still, some big media hitters use it so they&#8217;ve certainly got something right.</p>
<p>Well, as I said, I work in Reading and my crappy car&#8217;s wiper motor has broken so I&#8217;ve got to get up early and catch a bus. It&#8217;s been nice to talk to you again. Thanks for putting up with my tech chatter, I expect that you&#8217;ll get variation soon enough as we head towards the General Election <img src='http://skinofstars.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Night Night.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">http://www.williamfiennes.com/</div>
]]></content:encoded>
			<wfw:commentRss>http://skinofstars.com/2010/01/has-it-really-been-that-long/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A Website Apart</title>
		<link>http://skinofstars.com/2009/06/a-website-apart/</link>
		<comments>http://skinofstars.com/2009/06/a-website-apart/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 14:22:07 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming & Design]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://skinofstars.com/?p=338</guid>
		<description><![CDATA[Hey all, just a quick one today. I just had a job interview and I was asked the question &#8220;which design websites do I frequent&#8221;? I ummed and erred a little before mentioning Digg and Slashdot. Not very design focused I know (except maybe Digg&#8217;s design section). I also said that I trawl the blogs for Ideas, which is true.<a href="http://skinofstars.com/2009/06/a-website-apart/"> ...&#160;Read the remaining 53 words</a>]]></description>
			<content:encoded><![CDATA[<p>Hey all, just a quick one today. I just had a job interview and I was asked the question &#8220;which design websites do I frequent&#8221;? I ummed and erred a little before mentioning Digg and Slashdot. Not very design focused I know (except maybe Digg&#8217;s design section). I also said that I trawl the blogs for Ideas, which is true. I neglected to mention one of my favourite sites though, one which each and every one of you should have in your Feed Reader: <a href="http://www.alistapart.com/">A List Apart</a>. I love that site and I felt a little ashamed for forgetting it, so as penance I am reminding you all to check it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://skinofstars.com/2009/06/a-website-apart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Latest Web Design</title>
		<link>http://skinofstars.com/2009/05/latest-web-design/</link>
		<comments>http://skinofstars.com/2009/05/latest-web-design/#comments</comments>
		<pubDate>Mon, 04 May 2009 15:00:28 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Oxford]]></category>
		<category><![CDATA[Programming & Design]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://skinofstars.com/?p=309</guid>
		<description><![CDATA[Hey All, Just thought I would tell you all about a new site that I&#8217;ve created for homework. It&#8217;s for an Oxford based band called Branch Immersion, a three piece acoustic outfit, some friends of mine. The site is hosted on the uni servers at the moment but I expect we&#8217;ll host it here at SkinOfStars towers soon enough once<a href="http://skinofstars.com/2009/05/latest-web-design/"> ...&#160;Read the remaining 46 words</a>]]></description>
			<content:encoded><![CDATA[<p>Hey All,</p>
<p>Just thought I would tell you all about a new site that I&#8217;ve created for homework. It&#8217;s for an Oxford based band called Branch Immersion, a three piece acoustic outfit, some friends of mine. The site is hosted on the uni servers at the moment but I expect we&#8217;ll host it here at SkinOfStars towers soon enough once they&#8217;ve bought their domain name and I&#8217;ve ported the static pages to WordPress.</p>
<p>This is an original design and I must be honest, one I am very proud of. Please check it out at the temporary address (I&#8217;ll update with the final address later):</p>
<p><span style="text-decoration: line-through;"><a href="http://wwwusers.brookes.ac.uk/06021836/u75131">http://wwwusers.brookes.ac.uk/06021836/u75131</a></span></p>
<p><a href="http://skinofstars.com/branch_immersion">http://skinofstars.com/branch_immersion</a></p>
]]></content:encoded>
			<wfw:commentRss>http://skinofstars.com/2009/05/latest-web-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>One Day Blog Hack</title>
		<link>http://skinofstars.com/2009/04/one-day-blog-hack/</link>
		<comments>http://skinofstars.com/2009/04/one-day-blog-hack/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 21:19:59 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming & Design]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://localhost/slog/?p=290</guid>
		<description><![CDATA[Hey All, I&#8217;ve decided to do a blog hack in a day and here you see the result. I was struggling with Drupal as a blogging platform, and frankly an anything platform, so I decided to move to the decidedly easier WordPress. I&#8217;m not saying there is anything wrong with Drupal, it&#8217;s a great platform. The problem is that it&#8217;s<a href="http://skinofstars.com/2009/04/one-day-blog-hack/"> ...&#160;Read the remaining 439 words</a>]]></description>
			<content:encoded><![CDATA[<p>Hey All,</p>
<p>I&#8217;ve decided to do a blog hack in a day and here you see the result. I was struggling with Drupal as a blogging platform, and frankly an anything platform, so I decided to move to the decidedly easier WordPress. I&#8217;m not saying there is anything wrong with Drupal, it&#8217;s a great platform. The problem is that it&#8217;s built for so many tricks that you have to give it a real shove when you want something simple. For example, handling images. On a content sytem one would have thought that would be an obvious feature, but with drupal you have to go get a plugin. Madness I tell you! Not that getting WordPress means I&#8217;ll be bloggin frantically, but it makes life a lot easier.</p>
<p>So here is how I got from Drupal 6 to WordPress 2.7 in a day:</p>
<p>1. Backup the Drupal database &amp; import the data into WordPress</p>
<p>Moving around between platforms is quite common, so you&#8217;ll often find a script to aid you in moving database info from one structure to another. WordPress has many such scripts built in for many platforms, but for Drupal I got my assistance from <a href="http://www.mikesmullin.com/development/migrate-convert-import-drupal-5-to-wordpress-27/">Mike Smullin</a>. I had to make some minor changes, for example I added this SQL statement to change my Drupal post_type &#8216;story&#8217; to WordPress&#8217;s &#8216;post&#8217;</p>
<p>UPDATE wp_posts SET post_type = REPLACE(post_type,’story’,&#8217;post’);</p>
<p>Pretty easy stuff really. If you&#8217;re going to do it yourself, make sure you do it locally on backup copies. I hosed a few before I got it right.</p>
<p>2.Theme Hack</p>
<p>Ahh yes, the inevitable theme quandry. I had thought about what I wanted Skinofstars.com to look like for a while, but I wanted to do it reasonably quickly as I hate it when these things hang around. My layout plan was simple enough. Only one or two blog posts on the front page with info on my other nettyness, like tweets. I also knew that I&#8217;d want access to other pages (as you find in the Further section.. not sure on that name).  So I searched some WordPress themes and came across <a href="http://5thirtyone.com/grid-focus">Grid Focus</a>. It seemed to have the right level of minimalism that I was looking for as well as reasonably suitable layout. In order for it to work for me though I had to make a few hacks including some JQuery magic to include my further section (hope you like the transitions) and some layout hacks for the differences between a narrow and wide content column (you&#8217;ll see if you view this in single/comments mode).</p>
<p>3. Content Update</p>
<p>Probably one of the most time consuming parts. Much of my old content was Uncategorised for no reason and lacked any tags. Many posts from back in the Blogger days didn&#8217;t even have a title. I went through almost all of them  (I&#8217;ve taken a break from the 1996 stuff) and finally managed to put these years of outpourings into some kind of order.</p>
<p>4. Update to server</p>
<p>Well, that&#8217;s just a bit of FTP and MySQL. Job done.</p>
]]></content:encoded>
			<wfw:commentRss>http://skinofstars.com/2009/04/one-day-blog-hack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

