<?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>The Code Train &#187; yahoo</title>
	<atom:link href="http://thecodetrain.co.uk/tag/yahoo/feed/" rel="self" type="application/rss+xml" />
	<link>http://thecodetrain.co.uk</link>
	<description>Where Neil Crosby talks about coding on the train...</description>
	<lastBuildDate>Sun, 03 Apr 2011 18:15:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Dev Checks &#8211; Improving code quality by getting developers to look at each other&#8217;s work</title>
		<link>http://thecodetrain.co.uk/2011/01/dev-checks/</link>
		<comments>http://thecodetrain.co.uk/2011/01/dev-checks/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 21:44:20 +0000</pubDate>
		<dc:creator>Neil Crosby</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[bbc]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[dev check]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[team]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://thecodetrain.co.uk/?p=492</guid>
		<description><![CDATA[<p>I&#8217;ve been working on the BBC&#8217;s Homepage for about a year now, leading a team of five front-end developers to create a high quality product.</p>

<p>One of the processes that I introduced to the team about six months ago was that of a formal &#8220;dev check&#8221; after every task that we completed from our backlog.  Whilst we call this process a dev check within our team, it could just as easily be called a peer review, or mini code review.</p>

<p>Up until the point that I introduced the dev check it had not been uncommon for a single person to work on a task, and for code to go through the testing environments and onto live without a single other human ever reading their code. Not the best situation to be in, and it meant that we ended up having more annoying bugs showing up on our test environments than we should have.  These bugs were often things that a simple bit of human scrutiny would have caught, and we ended up wasting time going back and fixing them after the fact.  Working this way also meant that we ended up with certain areas of the homepage that could only ever be worked on by certain people, because they were the only ones who had ever seen the code.</p>

<p>Like I said; not the best situation to be in.</p>

<p>So, six months ago, we introduced the formal dev check &#8211; a step to be completed for every single code related task in our backlog.  And, I&#8217;m happy to say it&#8217;s been a very successful process for us &#8211; we now have far fewer bugs getting to test, and we have a lot more shared knowledge within the team.</p>

<h2>What is a Dev Check?</h2>

<blockquote>
  <p>Before any task is committed to trunk, a developer who didn&#8217;t work on it must say that they are happy with  how it&#8217;s been completed.</p>
</blockquote>

<p>I&#8217;m hoping that if you&#8217;re still reading at this point that you&#8217;re wanting to find out what goes into a successful dev check&#8230;</p>

<ol>
<li><p>The task is &#8220;completed&#8221; by Rachel.</p>

<p>At this point she has not committed anything to the trunk of the project. Depending on the size of the task, she might have created a development branch which she&#8217;ll have been committing to.</p></li>
<li><p>Rachel asks another member of the development team to come and do a dev check. On this occasion she asks Jon.</p></li>
<li><p>Jon comes over to Rachel&#8217;s desk where she will talk through all the changes she has made.</p>

<p>As part of the discussion, Rachel may realise that some of the things she thought made sense in fact didn&#8217;t. This is great, and she&#8217;ll make the changes necessary and continue with the dev check.</p></li>
<li><p>After Rachel has finished explaining what she&#8217;s done for the task, and Jon&#8217;s asked as many questions as he feels is necessary he&#8217;ll either give the go ahead to commit the code to the trunk, or he&#8217;ll request various changes to be made to the codebase.</p></li>
<li><p>Rachel will then commit to trunk, build in the team&#8217;s test environment and pass off to the testers.</p></li>
</ol>

<p>And that&#8217;s a dev check.</p>

<p>Out of this process Jon has learnt about a bit of the codebase that he might not otherwise have seen, Jo realised that she needed to shore up a couple of her tests, and the codebase has come out feeling more healthy.  This is A Good Thing™.</p>

<h2>What sort of things will the dev checker ask?</h2>

<p>Up above there in the &#8220;What is a Dev Check&#8221; section you&#8217;ll have read about Jon asking &#8220;as many questions as he feels is necessary&#8221;, and I&#8217;m sure you&#8217;ll have said to yourself &#8220;But Neil, what are those questions? How will I know what&#8217;s sensible to ask?&#8221;.</p>

<p>Well, you&#8217;re in luck. By a process of trial and error, as a team we&#8217;ve come up with a bunch of questions that, if asked, will help to make sure that you both understand what&#8217;s going on and can confirm that the code written is of a high quality.</p>

<ul>
<li><p>Have new tests been written?</p>

<p>These might be Unit Tests, or Automated Front-End Tests, or Security Tests. What matters is that valid tests have been written to cover the new functionality. You should also make sure that any pre-existing tests make sense.</p></li>
<li><p>Do all the tests still pass?</p>

<p>It should be a no-brainer, but of course you should make sure that all the tests still pass. There&#8217;s nothing worse that breaking The Build for the entire team just because you forgot to run a bunch of tests on your development machine first.</p></li>
<li><p>Are standards adhered to?</p>

<ul>
<li>PHP Code Sniffer</li>
<li>HTML/CSS Validation</li>
<li>JSLint</li>
<li>Whatever else works in your team</li>
</ul>

<p>These are important to us. We fail our builds if our code isn&#8217;t of high enough quality. Just sayin&#8217;.</p></li>
<li><p>Does what you&#8217;ve written work across all the Level One browsers?</p>

<p>Obviously this one&#8217;s a bit web development specific as it is, but it&#8217;s important in other spheres as well. Every piece of software that&#8217;s written is expected to run in one or more environments, and you should at least smoke test in a known subset of them to make sure there are no nasty surprises for your dedicated testing team.</p></li>
<li><p>Can I see your diffs?</p>

<p>Again, fairly obvious, but you should take a look to see what&#8217;s changed since the last time the code was checked in. Don&#8217;t just rely on the developer to remember what they&#8217;ve changed &#8211; I know I can&#8217;t remember half the time. This is what machines are good at &#8211; make use of them!</p></li>
<li><p>Did any of the changes that were made affect any other code?</p>

<p>This one should be obvious as well, but unfortunately it isn&#8217;t. It&#8217;s all too easy to look at the lines of code that have changed without looking at the later lines which make use of them. Don&#8217;t forget to look at the whole system.</p></li>
<li><p>Is there anything that concerns you?</p>

<p>The final question to ask, and in many cases the most important one. Oftentimes a developer will know that something smells a bit fishy, but keeps quiet about it in the hope that they won&#8217;t get called on it.  By simply asking these questions though, we&#8217;ve found that these things end up getting talked about, and we end up with better code because of it.</p></li>
</ul>

<h2>How long does a dev check take?</h2>

<p>After reading all that, I wouldn&#8217;t be surprised if you&#8217;re thinking &#8220;Woah! But how long does that all take? That seems like a long list of questions…&#8221;.</p>

<p>Well, in my team, we find that a dev check will take a little less than 10% of the time that the code and tests took to write initially. So, if the task took an hour to complete, the dev check would take roughly 5 minutes. A three hour task would take 15 minutes, and so on.  It honestly doesn&#8217;t take much time once you get into the swing of things.</p>

<h2>The Power of Veto</h2>

<p>One of the most important things about dev checks is that everyone on the team is equal. Rachel may be the team leader, but Jon can still challenge her code and say that actually she hasn&#8217;t done everything required to &#8220;pass&#8221; the dev check.</p>

<p>The person performing a dev check <em>always</em> has power of veto to say that things, however small, need improving before code is allowed to be committed to the trunk.</p>

<p>Ultimately, the team is responsible for its own output, and everyone should be invested in that.</p>

<h2>What do dev checks achieve?</h2>

<p>As I&#8217;ve mentioned above, there are two main benefits to dev checking:</p>

<ul>
<li>Fewer bugs</li>
<li>More knowledge of the codebase by more of the team.</li>
</ul>

<p>Essentially the team will be more effective.</p>

<h2>How do you get buy in?</h2>

<p>Whilst there are obvious benefits to dev checks, sometimes you&#8217;ll need to gain buy-in from people before you can get started. Maybe it&#8217;ll be team members who think that this extra process is unnecessary, or maybe it&#8217;ll be The Boss who thinks that it&#8217;ll all just take far too long. What do you say to them?</p>

<h3>Getting Buy In From Team Members?</h3>

<ul>
<li>Everyone is equal.</li>
<li>Anyone is able to say that a dev check cannot yet be completed.</li>
<li>The team is responsible for the quality of the team&#8217;s output, not just one person.</li>
<li>You won&#8217;t end up getting stuck on a horrible portion of the codebase any more, just because you were the last person to write code for it.</li>
</ul>

<h3>Getting Buy In From The Boss?</h3>

<p>If you&#8217;re lucky, you won&#8217;t need to get buy-in from The Boss, but in case you do, here are a couple of pointers:</p>

<ul>
<li>Quality is improved, leading to fewer bugs and happier users.</li>
<li>The amount of time spent on dev checking is smaller than than that which would be spent fixing the bugs that would otherwise get through. The project will go live sooner, and you&#8217;ll have spent less money.</li>
</ul>

<h2>Improving the Dev Check</h2>

<blockquote>
  <p>Any bug that is found is an opportunity to learn and improve our process.</p>
</blockquote>

<p>Of course, sometimes bugs will still get through. When they do, you need to sit down and work out why that happened.</p>

<p>In the old world, we used to just accept that bugs happened, that they&#8217;d get found, and we would fix them. No more! Now, any bug that is found is an opportunity to learn and improve our process.</p>

<p>A real example of this happening came a few weeks ago. Tina had been doing her thing, updating a script that we use to help us with our release management. This was dev checked by Bradley, and as far as he was concerned the changes that had been made were good to go. So, he ticked off the dev check, and Tina carried on with her next task.</p>

<p>Fast forward to a week later, and Paul was getting <del>down on the floor</del> ready to give a presentation which required a screenshot of the script running. Unfortunately, it no longer worked &#8211; shock horror! </p>

<p>What had happened was that Bradley hadn&#8217;t realised that the line of code that was changed had impacted on further lines in the script. Moreover, he&#8217;d only seen the script run against the additional new requirements, and hadn&#8217;t confirmed that it still ran against the original requirements. Whoops.</p>

<p>What came out of this was an improvement to our dev checks &#8211; if code has changed we need to make sure that nothing else in our code has been affected by that change. It sounds simple, but it was a failing that we had, so we improved upon it.</p>

<h2>Why not just have a big code review?</h2>

<p>Big code reviews are great, and are something I very much enjoyed participating in when I was at Yahoo!. Unfortunately, whilst they&#8217;re very useful they&#8217;re also pretty time consuming, and require a fair amount of setup and teardown time in order to be useful.</p>

<p>Dev checks, on the other hand, are simple to get going with, only take a few minutes, and only have to involve a couple of people.</p>

<p>That&#8217;s not to say that you should get rid of larger code reviews. In my opinion they should still happen, but only for larger chunks of code. The formal dev check gives you the opportunity to review code and share knowledge often and with low cost.</p>

<h2>Go forth and Dev Check!</h2>

<p>And that&#8217;s it.  If you&#8217;re working in a team that has bugs, or has bottlenecks of a single person being the only person who knows about certain areas of your product, then start dev checking. You won&#8217;t regret it.</p>
<div style="display:block"><small><em><a href="http://neilcrosby.com">Neil Crosby</a> also blogs at about t-shirts at <a href="http://iwearcotton.com">I Wear Cotton</a>, writes <a href="http://thetenwordreview.com/users/workingwithme">Ten Word Reviews</a>, and uploads <a href="http://www.flickr.com/photos/thevoicewithin/">photos</a> to flickr.  You can follow a combined feed of posts at <a href="http://neilcrosby.com/">NeilCrosby.com</a>.</em></small></div>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on the BBC&#8217;s Homepage for about a year now, leading a team of five front-end developers to create a high quality product.</p>

<p>One of the processes that I introduced to the team about six months ago was that of a formal &#8220;dev check&#8221; after every task that we completed from our backlog.  Whilst we call this process a dev check within our team, it could just as easily be called a peer review, or mini code review.</p>

<p>Up until the point that I introduced the dev check it had not been uncommon for a single person to work on a task, and for code to go through the testing environments and onto live without a single other human ever reading their code. Not the best situation to be in, and it meant that we ended up having more annoying bugs showing up on our test environments than we should have.  These bugs were often things that a simple bit of human scrutiny would have caught, and we ended up wasting time going back and fixing them after the fact.  Working this way also meant that we ended up with certain areas of the homepage that could only ever be worked on by certain people, because they were the only ones who had ever seen the code.</p>

<p>Like I said; not the best situation to be in.</p>

<p>So, six months ago, we introduced the formal dev check &#8211; a step to be completed for every single code related task in our backlog.  And, I&#8217;m happy to say it&#8217;s been a very successful process for us &#8211; we now have far fewer bugs getting to test, and we have a lot more shared knowledge within the team.</p>

<h2>What is a Dev Check?</h2>

<blockquote>
  <p>Before any task is committed to trunk, a developer who didn&#8217;t work on it must say that they are happy with  how it&#8217;s been completed.</p>
</blockquote>

<p>I&#8217;m hoping that if you&#8217;re still reading at this point that you&#8217;re wanting to find out what goes into a successful dev check&#8230;</p>

<ol>
<li><p>The task is &#8220;completed&#8221; by Rachel.</p>

<p>At this point she has not committed anything to the trunk of the project. Depending on the size of the task, she might have created a development branch which she&#8217;ll have been committing to.</p></li>
<li><p>Rachel asks another member of the development team to come and do a dev check. On this occasion she asks Jon.</p></li>
<li><p>Jon comes over to Rachel&#8217;s desk where she will talk through all the changes she has made.</p>

<p>As part of the discussion, Rachel may realise that some of the things she thought made sense in fact didn&#8217;t. This is great, and she&#8217;ll make the changes necessary and continue with the dev check.</p></li>
<li><p>After Rachel has finished explaining what she&#8217;s done for the task, and Jon&#8217;s asked as many questions as he feels is necessary he&#8217;ll either give the go ahead to commit the code to the trunk, or he&#8217;ll request various changes to be made to the codebase.</p></li>
<li><p>Rachel will then commit to trunk, build in the team&#8217;s test environment and pass off to the testers.</p></li>
</ol>

<p>And that&#8217;s a dev check.</p>

<p>Out of this process Jon has learnt about a bit of the codebase that he might not otherwise have seen, Jo realised that she needed to shore up a couple of her tests, and the codebase has come out feeling more healthy.  This is A Good Thing™.</p>

<h2>What sort of things will the dev checker ask?</h2>

<p>Up above there in the &#8220;What is a Dev Check&#8221; section you&#8217;ll have read about Jon asking &#8220;as many questions as he feels is necessary&#8221;, and I&#8217;m sure you&#8217;ll have said to yourself &#8220;But Neil, what are those questions? How will I know what&#8217;s sensible to ask?&#8221;.</p>

<p>Well, you&#8217;re in luck. By a process of trial and error, as a team we&#8217;ve come up with a bunch of questions that, if asked, will help to make sure that you both understand what&#8217;s going on and can confirm that the code written is of a high quality.</p>

<ul>
<li><p>Have new tests been written?</p>

<p>These might be Unit Tests, or Automated Front-End Tests, or Security Tests. What matters is that valid tests have been written to cover the new functionality. You should also make sure that any pre-existing tests make sense.</p></li>
<li><p>Do all the tests still pass?</p>

<p>It should be a no-brainer, but of course you should make sure that all the tests still pass. There&#8217;s nothing worse that breaking The Build for the entire team just because you forgot to run a bunch of tests on your development machine first.</p></li>
<li><p>Are standards adhered to?</p>

<ul>
<li>PHP Code Sniffer</li>
<li>HTML/CSS Validation</li>
<li>JSLint</li>
<li>Whatever else works in your team</li>
</ul>

<p>These are important to us. We fail our builds if our code isn&#8217;t of high enough quality. Just sayin&#8217;.</p></li>
<li><p>Does what you&#8217;ve written work across all the Level One browsers?</p>

<p>Obviously this one&#8217;s a bit web development specific as it is, but it&#8217;s important in other spheres as well. Every piece of software that&#8217;s written is expected to run in one or more environments, and you should at least smoke test in a known subset of them to make sure there are no nasty surprises for your dedicated testing team.</p></li>
<li><p>Can I see your diffs?</p>

<p>Again, fairly obvious, but you should take a look to see what&#8217;s changed since the last time the code was checked in. Don&#8217;t just rely on the developer to remember what they&#8217;ve changed &#8211; I know I can&#8217;t remember half the time. This is what machines are good at &#8211; make use of them!</p></li>
<li><p>Did any of the changes that were made affect any other code?</p>

<p>This one should be obvious as well, but unfortunately it isn&#8217;t. It&#8217;s all too easy to look at the lines of code that have changed without looking at the later lines which make use of them. Don&#8217;t forget to look at the whole system.</p></li>
<li><p>Is there anything that concerns you?</p>

<p>The final question to ask, and in many cases the most important one. Oftentimes a developer will know that something smells a bit fishy, but keeps quiet about it in the hope that they won&#8217;t get called on it.  By simply asking these questions though, we&#8217;ve found that these things end up getting talked about, and we end up with better code because of it.</p></li>
</ul>

<h2>How long does a dev check take?</h2>

<p>After reading all that, I wouldn&#8217;t be surprised if you&#8217;re thinking &#8220;Woah! But how long does that all take? That seems like a long list of questions…&#8221;.</p>

<p>Well, in my team, we find that a dev check will take a little less than 10% of the time that the code and tests took to write initially. So, if the task took an hour to complete, the dev check would take roughly 5 minutes. A three hour task would take 15 minutes, and so on.  It honestly doesn&#8217;t take much time once you get into the swing of things.</p>

<h2>The Power of Veto</h2>

<p>One of the most important things about dev checks is that everyone on the team is equal. Rachel may be the team leader, but Jon can still challenge her code and say that actually she hasn&#8217;t done everything required to &#8220;pass&#8221; the dev check.</p>

<p>The person performing a dev check <em>always</em> has power of veto to say that things, however small, need improving before code is allowed to be committed to the trunk.</p>

<p>Ultimately, the team is responsible for its own output, and everyone should be invested in that.</p>

<h2>What do dev checks achieve?</h2>

<p>As I&#8217;ve mentioned above, there are two main benefits to dev checking:</p>

<ul>
<li>Fewer bugs</li>
<li>More knowledge of the codebase by more of the team.</li>
</ul>

<p>Essentially the team will be more effective.</p>

<h2>How do you get buy in?</h2>

<p>Whilst there are obvious benefits to dev checks, sometimes you&#8217;ll need to gain buy-in from people before you can get started. Maybe it&#8217;ll be team members who think that this extra process is unnecessary, or maybe it&#8217;ll be The Boss who thinks that it&#8217;ll all just take far too long. What do you say to them?</p>

<h3>Getting Buy In From Team Members?</h3>

<ul>
<li>Everyone is equal.</li>
<li>Anyone is able to say that a dev check cannot yet be completed.</li>
<li>The team is responsible for the quality of the team&#8217;s output, not just one person.</li>
<li>You won&#8217;t end up getting stuck on a horrible portion of the codebase any more, just because you were the last person to write code for it.</li>
</ul>

<h3>Getting Buy In From The Boss?</h3>

<p>If you&#8217;re lucky, you won&#8217;t need to get buy-in from The Boss, but in case you do, here are a couple of pointers:</p>

<ul>
<li>Quality is improved, leading to fewer bugs and happier users.</li>
<li>The amount of time spent on dev checking is smaller than than that which would be spent fixing the bugs that would otherwise get through. The project will go live sooner, and you&#8217;ll have spent less money.</li>
</ul>

<h2>Improving the Dev Check</h2>

<blockquote>
  <p>Any bug that is found is an opportunity to learn and improve our process.</p>
</blockquote>

<p>Of course, sometimes bugs will still get through. When they do, you need to sit down and work out why that happened.</p>

<p>In the old world, we used to just accept that bugs happened, that they&#8217;d get found, and we would fix them. No more! Now, any bug that is found is an opportunity to learn and improve our process.</p>

<p>A real example of this happening came a few weeks ago. Tina had been doing her thing, updating a script that we use to help us with our release management. This was dev checked by Bradley, and as far as he was concerned the changes that had been made were good to go. So, he ticked off the dev check, and Tina carried on with her next task.</p>

<p>Fast forward to a week later, and Paul was getting <del>down on the floor</del> ready to give a presentation which required a screenshot of the script running. Unfortunately, it no longer worked &#8211; shock horror! </p>

<p>What had happened was that Bradley hadn&#8217;t realised that the line of code that was changed had impacted on further lines in the script. Moreover, he&#8217;d only seen the script run against the additional new requirements, and hadn&#8217;t confirmed that it still ran against the original requirements. Whoops.</p>

<p>What came out of this was an improvement to our dev checks &#8211; if code has changed we need to make sure that nothing else in our code has been affected by that change. It sounds simple, but it was a failing that we had, so we improved upon it.</p>

<h2>Why not just have a big code review?</h2>

<p>Big code reviews are great, and are something I very much enjoyed participating in when I was at Yahoo!. Unfortunately, whilst they&#8217;re very useful they&#8217;re also pretty time consuming, and require a fair amount of setup and teardown time in order to be useful.</p>

<p>Dev checks, on the other hand, are simple to get going with, only take a few minutes, and only have to involve a couple of people.</p>

<p>That&#8217;s not to say that you should get rid of larger code reviews. In my opinion they should still happen, but only for larger chunks of code. The formal dev check gives you the opportunity to review code and share knowledge often and with low cost.</p>

<h2>Go forth and Dev Check!</h2>

<p>And that&#8217;s it.  If you&#8217;re working in a team that has bugs, or has bottlenecks of a single person being the only person who knows about certain areas of your product, then start dev checking. You won&#8217;t regret it.</p>
]]></content:encoded>
			<wfw:commentRss>http://thecodetrain.co.uk/2011/01/dev-checks/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Yahoo! Pipes: Munging, Mixing and Mashing</title>
		<link>http://thecodetrain.co.uk/2009/09/yahoo-pipes-munging-mixing-and-mashing/</link>
		<comments>http://thecodetrain.co.uk/2009/09/yahoo-pipes-munging-mixing-and-mashing/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 17:00:23 +0000</pubDate>
		<dc:creator>Neil Crosby</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[pipes]]></category>
		<category><![CDATA[talk]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[ydn tuesday]]></category>

		<guid isPermaLink="false">http://thecodetrain.co.uk/?p=300</guid>
		<description><![CDATA[<p>Now that my summer holidays are over, I thought I&#8217;d better start blogging again.  So, here we go.</p>

<p>Just after I left Yahoo!, I was asked by YDN if I&#8217;d mind still presenting the talk I was planning to do about Yahoo! Pipes.  Being the wonderful sort of chap I am, I happily agreed.  So, after a couple of months away from the company, on Tuesday I rolled up to give my presentation.  I&#8217;ve got to say, it felt a bit weird giving a talk for a company I no longer worked for.  But, it seemed to go okay.  People asked interesting questions, and they seemed to enjoy me talking about how to make Pipes, and sharing a few of the ones that I&#8217;d previously made with them.</p>

<p>The idea behind the talk was that whilst Pipes is a wonderful tool, it does have a fairly steep learning curve, and many people are dissuaded from using it before they&#8217;ve managed to do anything because of that.  When I started using Pipes two years ago, I wished I had someone who already used it to give me a few pointers, so by giving this talk I hope I helped a few people out in the way that I wish I had been two years previously.</p>

<div style="width:425px;text-align:left" id="__ss_1937195"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/neilcrosby/pipes" title="Yahoo! Pipes: Munging, Mixing and Mashing">Yahoo! Pipes: Munging, Mixing and Mashing</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pipestalk-090901094249-phpapp01&#038;stripped_title=pipes" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pipestalk-090901094249-phpapp01&#038;stripped_title=pipes" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/neilcrosby">Neil Crosby</a>.</div></div>

<p>All the pipes used within the talk are linked within the slide deck, and if you want to look at any of my other pipes, you can find them at <a href="http://pipes.yahoo.com/neilcrosby">pipes.yahoo.com/neilcrosby</a>.</p>
<div style="display:block"><small><em><a href="http://neilcrosby.com">Neil Crosby</a> also blogs at about t-shirts at <a href="http://iwearcotton.com">I Wear Cotton</a>, writes <a href="http://thetenwordreview.com/users/workingwithme">Ten Word Reviews</a>, and uploads <a href="http://www.flickr.com/photos/thevoicewithin/">photos</a> to flickr.  You can follow a combined feed of posts at <a href="http://neilcrosby.com/">NeilCrosby.com</a>.</em></small></div>]]></description>
			<content:encoded><![CDATA[<p>Now that my summer holidays are over, I thought I&#8217;d better start blogging again.  So, here we go.</p>

<p>Just after I left Yahoo!, I was asked by YDN if I&#8217;d mind still presenting the talk I was planning to do about Yahoo! Pipes.  Being the wonderful sort of chap I am, I happily agreed.  So, after a couple of months away from the company, on Tuesday I rolled up to give my presentation.  I&#8217;ve got to say, it felt a bit weird giving a talk for a company I no longer worked for.  But, it seemed to go okay.  People asked interesting questions, and they seemed to enjoy me talking about how to make Pipes, and sharing a few of the ones that I&#8217;d previously made with them.</p>

<p>The idea behind the talk was that whilst Pipes is a wonderful tool, it does have a fairly steep learning curve, and many people are dissuaded from using it before they&#8217;ve managed to do anything because of that.  When I started using Pipes two years ago, I wished I had someone who already used it to give me a few pointers, so by giving this talk I hope I helped a few people out in the way that I wish I had been two years previously.</p>

<div style="width:425px;text-align:left" id="__ss_1937195"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/neilcrosby/pipes" title="Yahoo! Pipes: Munging, Mixing and Mashing">Yahoo! Pipes: Munging, Mixing and Mashing</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pipestalk-090901094249-phpapp01&#038;stripped_title=pipes" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pipestalk-090901094249-phpapp01&#038;stripped_title=pipes" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/neilcrosby">Neil Crosby</a>.</div></div>

<p>All the pipes used within the talk are linked within the slide deck, and if you want to look at any of my other pipes, you can find them at <a href="http://pipes.yahoo.com/neilcrosby">pipes.yahoo.com/neilcrosby</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://thecodetrain.co.uk/2009/09/yahoo-pipes-munging-mixing-and-mashing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>End of the Line at Yahoo!</title>
		<link>http://thecodetrain.co.uk/2009/07/end-of-the-line-at-yahoo/</link>
		<comments>http://thecodetrain.co.uk/2009/07/end-of-the-line-at-yahoo/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 01:14:54 +0000</pubDate>
		<dc:creator>Neil Crosby</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[new challenge]]></category>
		<category><![CDATA[redundancy]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://thecodetrain.co.uk/?p=271</guid>
		<description><![CDATA[<p>So, after two years and nine months at Yahoo!, it&#8217;s time to move on.  For those of you who haven&#8217;t already heard on <a href="http://twitter.com/NeilCrosby">my twitter stream</a>, a couple of weeks ago I was told that I was going to be made redundant as the role that I was performing at the company was no longer required due to changing priorities.</p>

<p>When I tweeted about this, I was overwhelmed by the replies, and the positive feelings that came out of them.  There was a lot of &#8220;why on earth would they do that?&#8221;, along with plenty of &#8220;don&#8217;t worry, you&#8217;ll find something easily&#8221;.  I&#8217;d like to say a huge thank-you to everyone who&#8217;s shown support over the last couple of weeks — you&#8217;ve all been wonderful.</p>

<p>I don&#8217;t want it to sound like I feel I&#8217;ve been maligned by Yahoo! though — I honestly don&#8217;t feel that way about what&#8217;s happened.  Instead, I see this redundancy as an opportunity for me to take a little time to work on a couple of the projects that have been sitting in the back of my mind for the last few months, just waiting for a bit of time so that they can come forward and take shape.  With that in mind, I&#8217;m going to be taking the entirety of July and using it to build cool stuff.  I&#8217;m not even going to be thinking about paid work until August. Expect a few blog posts about stuff that I&#8217;ve built over the next month.</p>

<p>But what then?  I&#8217;m hoping to start doing some freelance work, with the crazy aim that this will allow me more time to work on my personal projects than doing a 9-5 would.  Well, I can hope, can&#8217;t I?</p>

<p>I&#8217;ve had a fantastic time at Yahoo! over the last couple of years.  I&#8217;ve worked with some truly awesome people, and I&#8217;ve learnt a huge amount.  The company has changed a lot in the time I was there, and there have been plenty of ups and downs.  Ultimately though, it was a fantastic place to be, and it was the people who made it that fantastic a place to be.  </p>

<p>When I arrived, I&#8217;d never really been let out in the community before.  The number of events I&#8217;d been to could be counted on my bad hand (with a finger to spare) &#8211; @media, the first WSG meetup, and d.construct.  Since I&#8217;ve been at Yahoo! though I&#8217;ve turned into an event junkie, constantly going to BarCamps and UnEvents, organising two <a href="http://biggeekdayout.com">Big Geek Days Out</a>, talking in London and Munich about SearchMonkey, and writing the <a href="http://github.com/NeilCrosby/frontend-test-suite/tree">Frontend Test Suite</a> that I also got to talk about for YDN.  I really feel I&#8217;ve blossomed at Yahoo!, and I can&#8217;t begin to express how much I&#8217;ve got out of my time there.</p>

<p>So thank-you to everyone who&#8217;s helped shape my experience over the last two years and nine months.  You&#8217;ve been awesome, and the fact that some of you think that <a href="http://isneilawesome.com">I&#8217;ve been awesome</a> as well makes it all worth while.</p>

<p>Thank-you.</p>
<div style="display:block"><small><em><a href="http://neilcrosby.com">Neil Crosby</a> also blogs at about t-shirts at <a href="http://iwearcotton.com">I Wear Cotton</a>, writes <a href="http://thetenwordreview.com/users/workingwithme">Ten Word Reviews</a>, and uploads <a href="http://www.flickr.com/photos/thevoicewithin/">photos</a> to flickr.  You can follow a combined feed of posts at <a href="http://neilcrosby.com/">NeilCrosby.com</a>.</em></small></div>]]></description>
			<content:encoded><![CDATA[<p>So, after two years and nine months at Yahoo!, it&#8217;s time to move on.  For those of you who haven&#8217;t already heard on <a href="http://twitter.com/NeilCrosby">my twitter stream</a>, a couple of weeks ago I was told that I was going to be made redundant as the role that I was performing at the company was no longer required due to changing priorities.</p>

<p>When I tweeted about this, I was overwhelmed by the replies, and the positive feelings that came out of them.  There was a lot of &#8220;why on earth would they do that?&#8221;, along with plenty of &#8220;don&#8217;t worry, you&#8217;ll find something easily&#8221;.  I&#8217;d like to say a huge thank-you to everyone who&#8217;s shown support over the last couple of weeks — you&#8217;ve all been wonderful.</p>

<p>I don&#8217;t want it to sound like I feel I&#8217;ve been maligned by Yahoo! though — I honestly don&#8217;t feel that way about what&#8217;s happened.  Instead, I see this redundancy as an opportunity for me to take a little time to work on a couple of the projects that have been sitting in the back of my mind for the last few months, just waiting for a bit of time so that they can come forward and take shape.  With that in mind, I&#8217;m going to be taking the entirety of July and using it to build cool stuff.  I&#8217;m not even going to be thinking about paid work until August. Expect a few blog posts about stuff that I&#8217;ve built over the next month.</p>

<p>But what then?  I&#8217;m hoping to start doing some freelance work, with the crazy aim that this will allow me more time to work on my personal projects than doing a 9-5 would.  Well, I can hope, can&#8217;t I?</p>

<p>I&#8217;ve had a fantastic time at Yahoo! over the last couple of years.  I&#8217;ve worked with some truly awesome people, and I&#8217;ve learnt a huge amount.  The company has changed a lot in the time I was there, and there have been plenty of ups and downs.  Ultimately though, it was a fantastic place to be, and it was the people who made it that fantastic a place to be.  </p>

<p>When I arrived, I&#8217;d never really been let out in the community before.  The number of events I&#8217;d been to could be counted on my bad hand (with a finger to spare) &#8211; @media, the first WSG meetup, and d.construct.  Since I&#8217;ve been at Yahoo! though I&#8217;ve turned into an event junkie, constantly going to BarCamps and UnEvents, organising two <a href="http://biggeekdayout.com">Big Geek Days Out</a>, talking in London and Munich about SearchMonkey, and writing the <a href="http://github.com/NeilCrosby/frontend-test-suite/tree">Frontend Test Suite</a> that I also got to talk about for YDN.  I really feel I&#8217;ve blossomed at Yahoo!, and I can&#8217;t begin to express how much I&#8217;ve got out of my time there.</p>

<p>So thank-you to everyone who&#8217;s helped shape my experience over the last two years and nine months.  You&#8217;ve been awesome, and the fact that some of you think that <a href="http://isneilawesome.com">I&#8217;ve been awesome</a> as well makes it all worth while.</p>

<p>Thank-you.</p>
]]></content:encoded>
			<wfw:commentRss>http://thecodetrain.co.uk/2009/07/end-of-the-line-at-yahoo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Following Twitter conversations using Yahoo! Pipes</title>
		<link>http://thecodetrain.co.uk/2009/05/following-twitter-conversations-using-yahoo-pipes/</link>
		<comments>http://thecodetrain.co.uk/2009/05/following-twitter-conversations-using-yahoo-pipes/#comments</comments>
		<pubDate>Tue, 26 May 2009 08:41:59 +0000</pubDate>
		<dc:creator>Neil Crosby</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[conversation]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[pipes]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://thecodetrain.co.uk/?p=263</guid>
		<description><![CDATA[<p>One of the things that&#8217;s annoyed me for quite some time about twitter is the lack of an easy way to follow a question/answer flow.  Fairly often someone will ask an interesting question that I&#8217;d quite like to see the answers to, but right now there&#8217;s no easy way to find the tweets which were written in reply to the original question.</p>

<p>This is unfortunate, since twitter does provide an <code>in_reply_to_status_id</code> parameter for tweets, which is set when one tweet is specifically written in reply to another.  If we were able to query this parameter directly then the <a href="http://pipes.yahoo.com/pipes/pipe.info?_id=RveZyJA13hGzacuOgQSecQ&amp;StatusId=1892379235">Twitter Conversation Yahoo! Pipe</a> that I&#8217;ve written would be unnecessary and I wouldn&#8217;t have had to spend a couple of hours writing it.  But I did have to write it, and that&#8217;s okay because it gave me a much better understanding of how to use Pipes.</p>

<p>In order to track twitter conversations (between non-private users), I did the following:</p>

<ol>
<li><p>Find the <code>status_id</code> of the tweet that started the conversation.  </p>

<p>This can found at the end of the tweet&#8217;s URL.</p></li>
<li><p>Make a request to the twitter API to find out who wrote that tweet. </p>

<p>This isn&#8217;t strictly necessary &#8211; the user could provide this too.  However, by working this out for them the user only has to provide one piece of information.</p></li>
<li><p>Make a request to twitter search for any tweets written since the original tweet that contain &#8220;@username&#8221;, where &#8216;username&#8217; is the username of the original tweeter.</p></li>
<li><p>For each search result make a request to the twitter API to find out if that tweet has its <code>in_reply_to_status_id</code> parameter parameter set.  </p>

<p>Yup, that&#8217;s an API request for each of conceivably a lot of tweets.  If the twitter search API returned this data as part of its result set that I could remove this call and be a much happier man.</p></li>
<li><p>Discard any search results which do not have <code>in_reply_to_status_id</code> set to the <code>status_id</code> of the original tweet.</p></li>
<li><p>At this point, I originally wanted to recurse the pipe and run through this process again for all the tweets I&#8217;d just found via the search so as to get a richer conversation experience.  </p>

<p>Unfortunately, due to the massive number of HTTP requests required, Pipes understandably started timing out.</p></li>
<li><p>Finally, add the original tweet to the list of tweets if required and order by time, starting with the original tweet.</p></li>
</ol>

<p>There&#8217;s a fair bit going on there, and things get a bit complicated in the Pipe due to the way various properties had to be manipulated.  It all ends up working pretty well though.</p>

<p>This Pipe becomes more useful once you add a quick little bookmarklet to it.  Drag my <a href="javascript:(function(){var%20tmp%20=%20location.href.split('/');tmp%20=%20(0===tmp.length)%20?%20null%20:%20tmp[tmp.length%20-%201];url='http://pipes.yahoo.com/pipes/pipe.info?_id=RveZyJA13hGzacuOgQSecQ&amp;StatusId='+encodeURIComponent(tmp);a=function(){location.href=url;};if(/Firefox/.test(navigator.userAgent)){setTimeout(a,0)}else{a()}})()">Twitter Conversation</a> bookmarklet to your browser&#8217;s bookmarks folder, and then click on it any time you&#8217;re on a tweet page that you think will start an interesting conversation.  You&#8217;ll immediately be taken to a Pipes page which contains the conversation.  Then, you&#8217;ll be happy.</p>

<p>I&#8217;d been wanting to get round to writing this post for a while now, but was finally pushed into getting it written by <a href="http://twitter.com/boagworld/status/1892379235">a statement</a> <a href="http://boagworld.com">Paul Boag</a> made on twitter:</p>

<blockquote>
  <p>Paul Boag: wishes that when somebody asks a question on Twitter you could easily see if anybody else has answered it.</p>
</blockquote>

<p>This was quickly <a href="http://twitter.com/evilstreak/status/1892461405">replied to</a> by <a href="http://www.evilstreak.co.uk/">Dominic Baggott</a>, who had seen my Pipe when <a href="http://twitter.com/NeilCrosby/status/1659668448">I mentioned it</a> a couple of weeks previously on twitter:</p>

<blockquote>
  <p>@boagworld You could check out @NeilCrosby&#8217;s conversation pipe built for pretty much that purpose. http://bit.ly/bCkvL</p>
</blockquote>

<p>Clearly there&#8217;s a want out there for people to be able to see these conversation threads.  </p>

<p>The fact that I&#8217;ve been able to fairly easily hack together the proof of concept in Pipes shows that it wouldn&#8217;t be the most difficult thing in the world for twitter to implement themselves.  Even if twitter just &#8220;flipped a switch&#8221; and turned on output of <code>in_reply_to_status_id</code> in search API results then this hack would become a whole lot more palatable due to the massive reduction in HTTP requests this would mean.  It might even mean that Pipes would be able to recurse into the conversations, which would be fantastic.</p>

<p>UPDATE: <a href="http://darrenf.org/">Darren Foreman</a> has just shown me <a href="http://web.me.com/t_trace/pbtweet.html">pbtweet</a>, which also surfaces conversations in twitter, as well as a few other things, and is also apparently based on Pipes.</p>
<div style="display:block"><small><em><a href="http://neilcrosby.com">Neil Crosby</a> also blogs at about t-shirts at <a href="http://iwearcotton.com">I Wear Cotton</a>, writes <a href="http://thetenwordreview.com/users/workingwithme">Ten Word Reviews</a>, and uploads <a href="http://www.flickr.com/photos/thevoicewithin/">photos</a> to flickr.  You can follow a combined feed of posts at <a href="http://neilcrosby.com/">NeilCrosby.com</a>.</em></small></div>]]></description>
			<content:encoded><![CDATA[<p>One of the things that&#8217;s annoyed me for quite some time about twitter is the lack of an easy way to follow a question/answer flow.  Fairly often someone will ask an interesting question that I&#8217;d quite like to see the answers to, but right now there&#8217;s no easy way to find the tweets which were written in reply to the original question.</p>

<p>This is unfortunate, since twitter does provide an <code>in_reply_to_status_id</code> parameter for tweets, which is set when one tweet is specifically written in reply to another.  If we were able to query this parameter directly then the <a href="http://pipes.yahoo.com/pipes/pipe.info?_id=RveZyJA13hGzacuOgQSecQ&amp;StatusId=1892379235">Twitter Conversation Yahoo! Pipe</a> that I&#8217;ve written would be unnecessary and I wouldn&#8217;t have had to spend a couple of hours writing it.  But I did have to write it, and that&#8217;s okay because it gave me a much better understanding of how to use Pipes.</p>

<p>In order to track twitter conversations (between non-private users), I did the following:</p>

<ol>
<li><p>Find the <code>status_id</code> of the tweet that started the conversation.  </p>

<p>This can found at the end of the tweet&#8217;s URL.</p></li>
<li><p>Make a request to the twitter API to find out who wrote that tweet. </p>

<p>This isn&#8217;t strictly necessary &#8211; the user could provide this too.  However, by working this out for them the user only has to provide one piece of information.</p></li>
<li><p>Make a request to twitter search for any tweets written since the original tweet that contain &#8220;@username&#8221;, where &#8216;username&#8217; is the username of the original tweeter.</p></li>
<li><p>For each search result make a request to the twitter API to find out if that tweet has its <code>in_reply_to_status_id</code> parameter parameter set.  </p>

<p>Yup, that&#8217;s an API request for each of conceivably a lot of tweets.  If the twitter search API returned this data as part of its result set that I could remove this call and be a much happier man.</p></li>
<li><p>Discard any search results which do not have <code>in_reply_to_status_id</code> set to the <code>status_id</code> of the original tweet.</p></li>
<li><p>At this point, I originally wanted to recurse the pipe and run through this process again for all the tweets I&#8217;d just found via the search so as to get a richer conversation experience.  </p>

<p>Unfortunately, due to the massive number of HTTP requests required, Pipes understandably started timing out.</p></li>
<li><p>Finally, add the original tweet to the list of tweets if required and order by time, starting with the original tweet.</p></li>
</ol>

<p>There&#8217;s a fair bit going on there, and things get a bit complicated in the Pipe due to the way various properties had to be manipulated.  It all ends up working pretty well though.</p>

<p>This Pipe becomes more useful once you add a quick little bookmarklet to it.  Drag my <a href="javascript:(function(){var%20tmp%20=%20location.href.split('/');tmp%20=%20(0===tmp.length)%20?%20null%20:%20tmp[tmp.length%20-%201];url='http://pipes.yahoo.com/pipes/pipe.info?_id=RveZyJA13hGzacuOgQSecQ&amp;StatusId='+encodeURIComponent(tmp);a=function(){location.href=url;};if(/Firefox/.test(navigator.userAgent)){setTimeout(a,0)}else{a()}})()">Twitter Conversation</a> bookmarklet to your browser&#8217;s bookmarks folder, and then click on it any time you&#8217;re on a tweet page that you think will start an interesting conversation.  You&#8217;ll immediately be taken to a Pipes page which contains the conversation.  Then, you&#8217;ll be happy.</p>

<p>I&#8217;d been wanting to get round to writing this post for a while now, but was finally pushed into getting it written by <a href="http://twitter.com/boagworld/status/1892379235">a statement</a> <a href="http://boagworld.com">Paul Boag</a> made on twitter:</p>

<blockquote>
  <p>Paul Boag: wishes that when somebody asks a question on Twitter you could easily see if anybody else has answered it.</p>
</blockquote>

<p>This was quickly <a href="http://twitter.com/evilstreak/status/1892461405">replied to</a> by <a href="http://www.evilstreak.co.uk/">Dominic Baggott</a>, who had seen my Pipe when <a href="http://twitter.com/NeilCrosby/status/1659668448">I mentioned it</a> a couple of weeks previously on twitter:</p>

<blockquote>
  <p>@boagworld You could check out @NeilCrosby&#8217;s conversation pipe built for pretty much that purpose. http://bit.ly/bCkvL</p>
</blockquote>

<p>Clearly there&#8217;s a want out there for people to be able to see these conversation threads.  </p>

<p>The fact that I&#8217;ve been able to fairly easily hack together the proof of concept in Pipes shows that it wouldn&#8217;t be the most difficult thing in the world for twitter to implement themselves.  Even if twitter just &#8220;flipped a switch&#8221; and turned on output of <code>in_reply_to_status_id</code> in search API results then this hack would become a whole lot more palatable due to the massive reduction in HTTP requests this would mean.  It might even mean that Pipes would be able to recurse into the conversations, which would be fantastic.</p>

<p>UPDATE: <a href="http://darrenf.org/">Darren Foreman</a> has just shown me <a href="http://web.me.com/t_trace/pbtweet.html">pbtweet</a>, which also surfaces conversations in twitter, as well as a few other things, and is also apparently based on Pipes.</p>
]]></content:encoded>
			<wfw:commentRss>http://thecodetrain.co.uk/2009/05/following-twitter-conversations-using-yahoo-pipes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

