<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>The Lylo Files</title>
	
	<link>http://blog.lylo.co.uk</link>
	<description>Not very much at all, really</description>
	<lastBuildDate>Tue, 11 Aug 2009 10:47:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<geo:lat>51.492713</geo:lat><geo:long>-0.106773</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/lylo" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Paid to ignore</title>
		<link>http://feedproxy.google.com/~r/lylo/~3/_Y_JdLy8BlQ/</link>
		<comments>http://blog.lylo.co.uk/2009/07/20/paid-to-ignore/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 21:46:12 +0000</pubDate>
		<dc:creator>Olly</dc:creator>
				<category><![CDATA[quotations]]></category>

		<guid isPermaLink="false">http://blog.lylo.co.uk/?p=122</guid>
		<description><![CDATA[&#8220;It is difficult to get a man to understand something, when his salary depends upon his not understanding it!&#8221;
Upton Sinclair &#8211; I, Candidate for Governor: And How I Got Licked (1935)
]]></description>
			<content:encoded><![CDATA[<blockquote><p>&#8220;It is difficult to get a man to understand something, when his salary depends upon his not understanding it!&#8221;</p></blockquote>
<p><cite>Upton Sinclair &#8211; I, Candidate for Governor: And How I Got Licked (1935)</cite></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lylo.co.uk/2009/07/20/paid-to-ignore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.lylo.co.uk/2009/07/20/paid-to-ignore/</feedburner:origLink></item>
		<item>
		<title>The false economy of scale</title>
		<link>http://feedproxy.google.com/~r/lylo/~3/oVeD1kaaUmU/</link>
		<comments>http://blog.lylo.co.uk/2009/06/30/the-false-economy-of-scale/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 21:12:07 +0000</pubDate>
		<dc:creator>Olly</dc:creator>
				<category><![CDATA[quotations]]></category>

		<guid isPermaLink="false">http://blog.lylo.co.uk/?p=119</guid>
		<description><![CDATA[Wherever something is wrong, something is too big.
Leopold Kohr, The Breakdown of Nations, 1957 
]]></description>
			<content:encoded><![CDATA[<blockquote><p>Wherever something is wrong, something is too big.</p></blockquote>
<p><cite>Leopold Kohr, <em>The Breakdown of Nations, 1957</em></cite> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lylo.co.uk/2009/06/30/the-false-economy-of-scale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.lylo.co.uk/2009/06/30/the-false-economy-of-scale/</feedburner:origLink></item>
		<item>
		<title>How to win well-priced client work</title>
		<link>http://feedproxy.google.com/~r/lylo/~3/XK2z7pMGdVc/</link>
		<comments>http://blog.lylo.co.uk/2009/06/04/how-to-win-well-priced-client-work/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 14:27:22 +0000</pubDate>
		<dc:creator>Olly</dc:creator>
				<category><![CDATA[commentary]]></category>
		<category><![CDATA[client work]]></category>
		<category><![CDATA[quotations]]></category>
		<category><![CDATA[spolsky]]></category>

		<guid isPermaLink="false">http://blog.lylo.co.uk/?p=103</guid>
		<description><![CDATA[For me, this perfectly sums up how you should approach client work and building meaningful client relationships.

Your first intuition is better specs and correctly priced jobs, like more nailed down specs.  I think that&#8217;s the obvious answer and obviously everybody&#8217;s been trying that and yet everybody always has this problem, so this is a [...]]]></description>
			<content:encoded><![CDATA[<p>For me, this perfectly sums up how you should approach client work and building meaningful client relationships.</p>
<blockquote><p>
Your first intuition is better specs and correctly priced jobs, like more nailed down specs.  I think that&#8217;s the obvious answer and obviously everybody&#8217;s been trying that and yet everybody always has this problem, so this is a consistent problem of the small to medium sized build-something-for-you kind of shops.  And for some reason you don&#8217;t hear about this happening with ten million dollar engagements that IBM Global Consulting Mega Services does for you, which is not to say they&#8217;re necessarily any more successful, but they don&#8217;t seem to get into this problem of, like, getting an infinite amount of work and never getting paid for it.  Maybe they do, maybe they do just as much.</p>
<p>Here&#8217;s my approach.  My approach is you have to understand that just spec&#8217;ing something is not gonna solve the problem. If we learn anything from the writers of agile software development, the one thing we should learn should be that the spec has to evolve as you develop the code. It just has to. I mean, you can write down as much as you want upfront, which I&#8217;m all in favor of, but to then freeze that so that it&#8217;s the only thing that we can possibly deliver, will guarantee that what you deliver will be unsatisfactory. &#8216;Cause as soon as you see it you discover these things. </p>
<p>You&#8217;re not going to solve somebody&#8217;s problem unless you do these things, so this conflict comes from the fact that the client needs you to solve a problem, they don&#8217;t need you to implement a spec even if they promise that all they need is for you to implement the spec.  You have to stop thinking of it as, &#8220;There&#8217;s a client and the client has a piece of software they need, and I&#8217;m the software builder.  That&#8217;s the relationship we&#8217;re going to have and I&#8217;m going to deliver the software product in exchange for some money&#8221;.  If you think about it that way you&#8217;re going to run into this conflict again and again and again. And if you think the way to fix it is to get the client to sign every page of the spec in blood &#8211; i.e. have a very detailed spec so you can say, &#8220;nerh nerh I delivered exactly the spec&#8221;, then, you know, you might win in a court of law but your not going to solve the clients problem, you&#8217;re not going to make them very happy, and their going to throw away your code and not ever hire you again.</p>
<p>So, the way to think about this instead is you have to take a slightly bigger picture.  Your job is not to deliver some code according to a spec, your job is to get into the clients shoes and figure out what their problem is, whatever their problem may be that can be solved with computers, or something that you can build, and propose to them a complete solution to their problem whatever it might be.  That means that you have to be involved in the design, and when you&#8217;re involved in the design you have to be looking at it from the clients perspective, not from your perspective as a software developer that just wants to get paid &#8211; and your perspective is, &#8220;gosh, I&#8217;m hiring these guys, I&#8217;m paying them the equivalent of $45 an hour, I&#8217;ve got charge at least $65 an hour just to break even, and therefore maybe I&#8217;ll charge $75 an hour for my profit, and lets say $80 an hour to include all the things that are going to go wrong.&#8221;</p>
<p>That&#8217;s not your clients perspective at all.  Your clients perspective is, &#8220;we are losing invoices left and right because the system that they&#8217;re going into just shreds them all in some bad way, and this is costing us money.&#8221;  And that&#8217;s the problem that you&#8217;re being hired to solve, so you go in there looking at that problem and you <em>have</em> to see it from the clients perspective.  You have to see it from, like, the clients return on investment, and you have to be thinking about, &#8220;What am I building?  How is this going to solve a client&#8217;s problem in a way that makes sense to their balance sheet?&#8221;.  You have to think about their business and you have to make sure that you&#8217;re building them something that is cost-effective for them and will have a positive ROI for them.  If you&#8217;re not thinking about it at that higher level, if your just coming in saying, &#8220;I dunno, I just write the code&#8221;, then you&#8217;re just a code monkey and your not doing anyone any good.  If you <em>are</em> thinking about it from their perspective, if you&#8217;re taking the same approach as the CEO of the company would take that hired you, which is, &#8220;this better be worth the money that I spend on it, or I&#8217;m going to be pissed&#8221;, then you&#8217;re going to have a successful engagement.
</p></blockquote>
<p><cite>&mdash; <a href="http://joelonsoftware.com">Joel Spolsky</a></cite></p>
<p>Edited from the <a href="https://stackoverflow.fogbugz.com/default.asp?W29053">StackOverflow Podcast #54 transcript</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lylo.co.uk/2009/06/04/how-to-win-well-priced-client-work/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.lylo.co.uk/2009/06/04/how-to-win-well-priced-client-work/</feedburner:origLink></item>
		<item>
		<title>On fashionistas</title>
		<link>http://feedproxy.google.com/~r/lylo/~3/iA8QlkaAB78/</link>
		<comments>http://blog.lylo.co.uk/2009/04/08/on-fashionistas/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 22:30:46 +0000</pubDate>
		<dc:creator>Olly</dc:creator>
				<category><![CDATA[quotations]]></category>

		<guid isPermaLink="false">http://blog.lylo.co.uk/?p=98</guid>
		<description><![CDATA[Nothing is so dangerous as being too modern; one is apt to grow old-fashioned quite suddenly
—Oscar Wilde
]]></description>
			<content:encoded><![CDATA[<blockquote><p>Nothing is so dangerous as being too modern; one is apt to grow old-fashioned quite suddenly</p></blockquote>
<p><cite>—Oscar Wilde</cite></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lylo.co.uk/2009/04/08/on-fashionistas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.lylo.co.uk/2009/04/08/on-fashionistas/</feedburner:origLink></item>
		<item>
		<title>How to display Twitter updates using PHP (and without using curl)</title>
		<link>http://feedproxy.google.com/~r/lylo/~3/rXAB1baeFhY/</link>
		<comments>http://blog.lylo.co.uk/2009/02/04/how-to-display-twitter-updates-using-php-and-without-using-curl/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 16:56:24 +0000</pubDate>
		<dc:creator>Olly</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.lylo.co.uk/?p=96</guid>
		<description><![CDATA[
This is something I needed to do recently.  The following code reads a user timeline from Twitter (I&#8217;ve chosen the RSS format) and puts the result into a &#60;ul&#62; block.  I&#8217;ve added a bunch of comments since PHP isn&#8217;t what I&#8217;d call a self-explanatory language.


&#60;?php
$doc = new DOMDocument&#40;&#41;;
&#160;
# load the RSS -- replace [...]]]></description>
			<content:encoded><![CDATA[<p>
This is something I needed to do recently.  The following code reads a user timeline from Twitter (I&#8217;ve chosen the RSS format) and puts the result into a <code>&lt;ul&gt;</code> block.  I&#8217;ve added a bunch of comments since PHP isn&#8217;t what I&#8217;d call a self-explanatory language.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$doc</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DOMDocument<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># load the RSS -- replace 'lylo' with your user of choice
</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$doc</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://twitter.com/statuses/user_timeline/lylo.rss'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;ul&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;"># number of &lt;li&gt; elements to display.  20 is the maximum
</span>  <span style="color: #000088;">$max_tweets</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>    
&nbsp;
  <span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$doc</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'item'</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$node</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;"># fetch the title from the RSS feed. 
</span>    <span style="color: #666666; font-style: italic;"># Note: 'pubDate' and 'link' are also useful (I use them in the sidebar of this blog)
</span>    <span style="color: #000088;">$tweet</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nodeValue</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># the title of each tweet starts with &quot;username: &quot; which I want to remove
</span>    <span style="color: #000088;">$tweet</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tweet</span><span style="color: #339933;">,</span> <span style="color: #990000;">stripos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tweet</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">':'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
&nbsp;
    <span style="color: #666666; font-style: italic;"># OPTIONAL: turn URLs into links
</span>    <span style="color: #000088;">$tweet</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@'</span><span style="color: #339933;">,</span> 
          <span style="color: #0000ff;">'&lt;a href=&quot;$1&quot;&gt;$1&lt;/a&gt;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tweet</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># OPTIONAL: turn @replies into links
</span>    <span style="color: #000088;">$tweet</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/@([0-9a-zA-Z]+)/&quot;</span><span style="color: #339933;">,</span> 
          <span style="color: #0000ff;">&quot;&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span>http://twitter.com/<span style="color: #006699; font-weight: bold;">$1</span><span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;@<span style="color: #006699; font-weight: bold;">$1</span>&lt;/a&gt;&quot;</span><span style="color: #339933;">,</span> 
          <span style="color: #000088;">$tweet</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;li&gt;&quot;</span><span style="color: #339933;">.</span> <span style="color: #000088;">$tweet</span>  <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;/li&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">++</span> <span style="color: #339933;">&gt;=</span> <span style="color: #000088;">$max_tweets</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;/ul&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lylo.co.uk/2009/02/04/how-to-display-twitter-updates-using-php-and-without-using-curl/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://blog.lylo.co.uk/2009/02/04/how-to-display-twitter-updates-using-php-and-without-using-curl/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.602 seconds --><!-- Cached page served by WP-Cache -->
