<?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/" version="2.0">

<channel>
	<title>Ross Duggan</title>
	
	<link>http://rossduggan.ie</link>
	<description>On technology, coding and communities.</description>
	<lastBuildDate>Tue, 10 Apr 2012 01:41:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/RossDuggan" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="rossduggan" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Starting with Arduino (Musical Floppy Drives!)</title>
		<link>http://rossduggan.ie/blog/arduino/starting-with-arduino-musical-floppy-drives/</link>
		<comments>http://rossduggan.ie/blog/arduino/starting-with-arduino-musical-floppy-drives/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 01:41:06 +0000</pubDate>
		<dc:creator>Ross</dc:creator>
				<category><![CDATA[Arduino]]></category>

		<guid isPermaLink="false">http://rossduggan.ie/?p=10922</guid>
		<description><![CDATA[First, a confession. I have forgotten almost everything that I used to know about electronics, and I didn&#8217;t know that much to begin with either. I&#8217;ve spent the last week or so getting a tentative reintroduction to the fundamentals. Frankly, a current running across a wire is still a novel and exciting thing for me. [...]]]></description>
			<content:encoded><![CDATA[<p>First, a confession.</p>
<p>I have forgotten almost everything that I used to know about electronics, and I didn&#8217;t know that much to begin with either. I&#8217;ve spent the last week or so getting a tentative reintroduction to the fundamentals. Frankly, a current running across a wire is still a novel and exciting thing for me. I used to build my own computers when I was a teenager, but I&#8217;ve lost interest in recent years in favour of <a href="http://www.apple.com/mac/">computers that just work</a>.</p>
<p>With that disclaimer out of the way, the idea of mucking around with Arduino has been stewing in the back of my head for a while. <a href="http://arduino.cc">Arduino</a> is an open source, hobbyist computer hardware hacking platform, and can be used for anything from <a href="http://www.instructables.com/id/Garduino-Gardening-Arduino/">automated plant feeding</a> to powering <a href="http://diydrones.com/">remote control aircraft</a>. A couple of weeks ago, I was passing by a local electronics store (Maplin), and, on a whim, decided to see if they had any Arduino kits in stock.</p>
<p>I had no real idea what I wanted <em>to do</em>, but I was pretty sure I could figure that out along the way.</p>
<div class="wp-caption alignnone" style="width: 441px"><img class="   " title="Arduino - Uno" src="http://i.imgur.com/ZZIn9l.jpg" alt="" width="431" height="324" /><p class="wp-caption-text">Arduino Uno</p></div>
<p>The first thing I discovered is that there are several types of Arduino for various reasons, with the variable factors seeming to be the physical size of the board (weight/size is important in embedded systems), power of the microcontroller (probably not an issue when you&#8217;re starting out), and number of available connector pins (complexity of device you&#8217;re building).</p>
<div class="wp-caption alignright" style="width: 310px"><a href="http://shop.oreilly.com/product/0636920010371.do"><img class=" " title="Make: Arduino Bots and Gadgets" src="http://akamaicovers.oreilly.com/images/0636920010371/lrg.jpg" alt="Make: Arduino Bots and Gadgets" width="300" height="365" /></a><p class="wp-caption-text">Make: Arduino Bots and Gadgets</p></div>
<p>Available in the store I visited were the Uno and the Mega. <a href="http://arduino.cc/en/Main/Hardware">There are quite a few other types</a>, including the awesome-looking LilyPad (can be sewn into clothing), but the Uno seems like a good general starting point. I did not know this, however, and decided on balance that the slightly more expensive Mega was a good way to make sure I didn&#8217;t have to come visit the shop again too soon. I also found a surprisingly good book on a nearby shelf: <a href="http://shop.oreilly.com/product/0636920010371.do">Make: Arduino Bots &amp; Gadgets published by O&#8217;Reilly</a>. I flipped through the first few pages to discover what was not inside the Arduino box (but was still required to get it working) and discovered that a USB-B (fat, square connector) cable is a necessary component, so picked up one of those (the book, too) and made my first Arduino purchases.</p>
<p>I also picked up two small packets of jumper wires, an adjustable power adapter (3.3V up to 12V with interchangeable heads) and a precision screwdriver set, not really knowing what the heck I was going to use these for, but they all seemed like reasonable purchases. There was a device called an &#8220;ethernet shield&#8221; on the rack next to the Mega, but the name &#8220;shield&#8221; did not help me make any immediate logical connections so I ignored it (bit of sensory overload at this point).</p>
<p>I should also mention that the book had a litany of tools listed, which I decided to ignore in favor of getting familiar with the software environment of the Arduino first. I was short on time that day, and didn&#8217;t get much done other than installing the development software and running the blinking LED &#8220;Hello World&#8221;.</p>
<p>I started reading my newly acquired O&#8217;Reilly book the following evening, and it quickly became apparent that I had nowhere near enough basic electronics resources to do anything immediately satisfying. Wire cutters, wire strippers, alligator clips, breadboards, soldering irons&#8230; I dithered. I let about a week slip by before I decided to press on with the book.</p>
<p>Further reading rekindled my interest, I decided another trip to the electronics store was in order. This time, I picked up an Uno, an Ethernet Shield, a combined wire cutter / stripper and decided I was in business. Satisfied, I spent a good chunk of that evening hunting down and taking apart every old, broken and/or unused electronic device in my apartment to salvage for parts. This yielded me a couple of motors, a 3.7V rechargeable battery, some microphones, speakers, the core of a CD player, and, most promisingly, a pretty simple LCD screen salvaged from a Nokia 3310 (<a href="http://www.arduino.cc/playground/Code/PCD8544">drivers and sample code are available</a>).</p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/1plg_yYsCQM?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Unfortunately, none of these were really morphing into project ideas in my head. Then, while chatting to colleagues the following day, the idea of recreating the &#8220;<a href="http://www.youtube.com/watch?v=1plg_yYsCQM">Derezzed on floppy drives</a>&#8221; video I&#8217;d seen a couple of weeks previously came up, and I had my goal. I was ready for a grueling few weeks of trial and error bit manipulation, but it turns out that floppy drive music is a something of a micro community. One chap, <a href="http://www.youtube.com/user/Sammy1Am">Sammy1Am</a>, seems to have kicked off the recent interest by releasing some software (<a href="https://github.com/SammyIAm/Moppy">Moppy</a>) to let people stream MIDI sequences to their Arduinos, and manipulate the floppy drives. This was the software used to create the Derezzed video I&#8217;d seen. Not only that, but he had also put together <a href="http://www.youtube.com/watch?v=w6tuMn5sPyM">a helpful tutorial video</a>. What a hero!</p>
<p>First problem I encountered: no floppy drives. At least, none near me. Hell, my laptop doesn&#8217;t even have a DVD drive. Another week passed, and I visited my family for Easter. I figured I had a few useful bits and pieces in storage, so I rummaged around the attic and pulled out two floppy drives, an old PC power supply and a few other bits and pieces. I also borrowed a digital multimeter from my dad, but I haven&#8217;t used it much yet &#8211; have been using that 3.7V battery to test whether current is going through something so far.</p>
<p>Power supply turned out to be a dud, but it took me a good while to figure that out; damn thing would work for a little while, then go through periods of shorting out entirely. Eventually I decided that I could power the floppy drives via the Arduino itself, as it has a handy little power passthrough socket. Also, I have no idea how Sam does it, but hooking up wires salvaged from Cat5 to a floppy drive male pin is <em>hard</em>. Well, more precisely, it is really, really fiddly.</p>
<p>I gave up and decided that yet another trip to the store was in order; this time I purchased a couple of small breadboards, a box of variously sized jump wires, some little jumpers (like you get on the main board of your PC &#8211; if you&#8217;ve ever built one) and some plastic containers to store the small pile of parts I had been accruing. Now I had all the pieces assembled. I cabled everything up as well as I could, then tried to get Moppy working.</p>
<p>Moppy on OSX Lion does not work. Or, at least, does not work without some fiddling &#8211; it&#8217;s most of the way there. It&#8217;s been a long time since I&#8217;ve touched Java above the JVM, and I had to install &#8220;Netbeans IDE&#8221; to get the project built. <a href="https://github.com/duggan/Moppy/tree/osx-lion">I&#8217;ve forked the project and updated it with the changes that got it working for me</a>, but I&#8217;m not comfortable pushing them back since it changes the assumed development OS from Windows to OSX, and that&#8217;s not something that should be pushed back upstream.</p>
<p>Eventually, this evening, I got the whole ensemble working together, and recorded my first test (one of the sample MIDIs included):</p>
<p><iframe width="500" height="375" src="http://www.youtube.com/embed/XvyGJbOPEwc?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Now I just need to get a lot more floppy drives, and either Learn How to Music, or find a musician who can create MIDIs and wants to floppydrive-ify some music <img src='http://rossduggan.ie/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I&#8217;ve a bunch of ideas I want to muck around with on the software side too.</p>
<p>Bootstrapping from zero-electronics was a little expensive, but a lot of fun, and it&#8217;s been great to get into the hardware in a way I haven&#8217;t done for some time.</p>
<div class="wp-caption alignnone" style="width: 458px"><img class=" " title="Musical Floppies" src="http://i.imgur.com/0lgoXl.jpg" alt="" width="448" height="336" /><p class="wp-caption-text">The (current) finished product</p></div>
]]></content:encoded>
			<wfw:commentRss>http://rossduggan.ie/blog/arduino/starting-with-arduino-musical-floppy-drives/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Receive.js – simple mocking of remote HTTP requests</title>
		<link>http://rossduggan.ie/blog/misc/receive-js-simple-mocking-of-remote-http-requests/</link>
		<comments>http://rossduggan.ie/blog/misc/receive-js-simple-mocking-of-remote-http-requests/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 18:20:26 +0000</pubDate>
		<dc:creator>Ross</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://rossduggan.ie/?p=10909</guid>
		<description><![CDATA[This is a quick and really basic node.js snippet for mocking up remote HTTP requests, like API calls. During initial development of an API client, sometimes you just want to see what the server is receiving in real time, so you can hack things together quickly. This script sets up a HTTP server which spits [...]]]></description>
			<content:encoded><![CDATA[<p>This is a quick and really basic <a href="http://nodejs.org" title="node.js">node.js</a> snippet for mocking up remote HTTP requests, like API calls.</p>
<p>During initial development of an API client, sometimes you just want to see what the server is receiving in real time, so you can hack things together quickly. This script sets up a HTTP server which spits out the URL requested, along with header information and any POSTed parameters.</p>
<p>Ideally, you could have this running on a parallel screen as you code, so you can see requests as they come in. This could also be used for simple mocking out of responses, but I haven&#8217;t gone that far <img src='http://rossduggan.ie/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="https://gist.github.com/2002769" title="receive.js on github.">receive.js on github.</a></p>
<p><script src="https://gist.github.com/2002769.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://rossduggan.ie/blog/misc/receive-js-simple-mocking-of-remote-http-requests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reading list for scaling Solr</title>
		<link>http://rossduggan.ie/blog/technology/reading-list-for-scaling-solr/</link>
		<comments>http://rossduggan.ie/blog/technology/reading-list-for-scaling-solr/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 19:53:13 +0000</pubDate>
		<dc:creator>Ross</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://rossduggan.ie/?p=10625</guid>
		<description><![CDATA[Brain dump time. I kinda need this as a memory aid for myself, and I figure it&#8217;ll be useful to anyone else who is building a Solr cluster. There&#8217;s probably a lot of crossover here for tuning any JVM-based application servicing a large number of requests, but this is my first, so it&#8217;s all together. [...]]]></description>
			<content:encoded><![CDATA[<p>Brain dump time. I kinda need this as a memory aid for myself, and I figure it&#8217;ll be useful to anyone else who is building a Solr cluster. There&#8217;s probably a lot of crossover here for tuning any JVM-based application servicing a large number of requests, but this is my first, so it&#8217;s all together.</p>
<p>Some of the background for this list <a href="http://rossduggan.ie/blog/technology/searching-boards-ie-solr-ec2-sqs-sns-node-js/">can be read here</a>, and for some further context, this is some of what I read to build something <em>probably</em> more powerful than <a href="http://websolr.com/plans">websolr&#8217;s top tier offering</a> (those guys are probably worth investigating before building your own cluster, by the way). There were some pretty &#8220;out there&#8221; requirements for Boards.ie though (potentially thousands of FQ permutations per search phrase, lots of big, ugly, old data, etc).</p>
<p>Some of the issues I ran into scaling Solr are relatively unique, but the general approach should be the same for everyone:</p>
<ol>
<li>Learn how to gather information</li>
<li>Gather all the information you can</li>
<li>Analyze / Evaluate</li>
<li>Make incremental changes</li>
<li>Return to Step 2.</li>
</ol>
<h2>Figure out what you&#8217;re actually running</h2>
<p>If you&#8217;re unfamiliar with the world of Java (or a rusty shade of green like me), you might be <del>horrified</del> surprised to discover that there are a few different implementations (let alone <em>versions</em>) of the Java Virtual Machine (JVM) available to you. What&#8217;s more, the best documented and supported one, the &#8220;Oracle&#8221; JVM (still documented almost everywhere as the Sun JVM) is probably not what you&#8217;re running if you&#8217;re running Ubuntu Server.</p>
<p>There&#8217;s also a difference between engineering numbers and product numbers, which may not be immediately apparent from the outset, and often they appear to be used interchangeably.</p>
<h2>Understanding the JVM</h2>
<div><a href="http://www.lucidimagination.com/blog/2011/03/27/garbage-collection-bootcamp-1-0/">http://www.lucidimagination.com/blog/2011/03/27/garbage-collection-bootcamp-1-0/</a></div>
<div><a href="http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html">http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html</a></div>
<div><a href="http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html">http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html</a></div>
<div><a href="http://blogs.oracle.com/jonthecollector/entry/did_you_know">http://blogs.oracle.com/jonthecollector/entry/did_you_know</a></div>
<div><a href="http://blog.griddynamics.com/2011/06/understanding-gc-pauses-in-jvm-hotspots_02.html">http://blog.griddynamics.com/2011/06/understanding-gc-pauses-in-jvm-hotspots_02.html</a></div>
<div><a href="http://java.sun.com/docs/hotspot/gc1.4.2/example.html">http://java.sun.com/docs/hotspot/gc1.4.2/example.html</a></div>
<div><a href="http://www.petefreitag.com/articles/gctuning/">http://www.petefreitag.com/articles/gctuning/</a></div>
<div><a href="http://download.oracle.com/docs/cd/E19543-01/820-2962/Performance_Tuning.html">http://download.oracle.com/docs/cd/E19543-01/820-2962/Performance_Tuning.html</a></div>
<h2>Understanding Solr</h2>
<p><a href="http://www.lucidimagination.com/content/scaling-lucene-and-solr">http://www.lucidimagination.com/content/scaling-lucene-and-solr</a></p>
<p>Somewhat passive aggressive Lucid Imagination advice - <a href="http://www.lucidimagination.com/blog/2010/01/21/the-seven-deadly-sins-of-solr/">http://www.lucidimagination.com/blog/2010/01/21/the-seven-deadly-sins-of-solr/</a><br />
An example of some of the hilarious bureaucracy in Solr development - <a href="https://issues.apache.org/jira/browse/SOLR-1143">https://issues.apache.org/jira/browse/SOLR-1143</a></p>
<p>There&#8217;s probably plenty more, but those are the ones I have saved <img src='http://rossduggan.ie/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://rossduggan.ie/blog/technology/reading-list-for-scaling-solr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I’m joining EngineYard to work on Orchestra</title>
		<link>http://rossduggan.ie/blog/misc/im-joining-engineyard-to-work-on-orchestra/</link>
		<comments>http://rossduggan.ie/blog/misc/im-joining-engineyard-to-work-on-orchestra/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 10:00:35 +0000</pubDate>
		<dc:creator>Ross</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://rossduggan.ie/?p=10675</guid>
		<description><![CDATA[Today, I finish up three and a half great years with Boards.ie, and next week I join Eamon, David, Helgi and Gwoo with Noah, Elizabeth, Davey (and a couple of others) to help kick Orchestra into orbit by joining EngineYard. At EngineYard, I hope to build upon my experience bringing scale to web applications within Distilled Media, and [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I finish up three and a half great years with Boards.ie, and next week I join <a href="https://twitter.com/#!/EamonLeonard">Eamon</a>, <a href="https://twitter.com/#!/davidcoallier">David</a>, <a href="https://twitter.com/#!/h">Helgi</a> and <a href="http://gwoo-joins.orchestra.io/">Gwoo</a> with <a href="https://twitter.com/#!/nslater">Noah</a>, <a href="http://naramore.net/blog/s-sourceforge-engineyard">Elizabeth</a>, <a href="http://daveyshafik.com/archives/28649-new-start.html">Davey</a> (and a couple of others) to help kick <a href="http://orchestra.io">Orchestra</a> into orbit by joining <a href="http://www.engineyard.com">EngineYard</a>.</p>
<p style="text-align: center;"><a href="http://techcrunch.com/2011/08/23/engine-yard-acquires-orchestra-to-add-php-support-to-its-paas/"><img class="size-full wp-image-10684 aligncenter" title="EngineYard &amp; Orchestra" src="http://rossduggan.ie/wp-content/uploads/2011/10/engineorch.png" alt="" width="288" height="55" /></a></p>
<p>At EngineYard, I hope to build upon my experience bringing scale to web applications within Distilled Media, and take it to a wider audience.</p>
<p>I&#8217;m looking forward to (and a little daunted by!) working with such an accomplished group of people, and helping to drive <a href="http://blog.orchestra.io/post/5316870964/sexy-back">our manifesto</a>. Our offices will be down on Barrow Street, near Facebook and Google, in the same building as <a href="http://dogpatchlabs.com/">DogPatchLabs</a> and friends at <a href="http://www.intercom.io/">Intercom</a>, in an area that is being dubbed the &#8220;<a href="http://www.irishtimes.com/newspaper/finance/2011/0930/1224305000761.html">Silicon Dock</a>.&#8221; I&#8217;m incredibly excited by the sort of buzz that is going to be around this place.</p>
]]></content:encoded>
			<wfw:commentRss>http://rossduggan.ie/blog/misc/im-joining-engineyard-to-work-on-orchestra/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Bots are crawling new domain registrations and namesquatting Twitter handles</title>
		<link>http://rossduggan.ie/blog/technology/bots-are-crawling-new-domain-registrations-and-namesquatting-twitter-handles/</link>
		<comments>http://rossduggan.ie/blog/technology/bots-are-crawling-new-domain-registrations-and-namesquatting-twitter-handles/#comments</comments>
		<pubDate>Sat, 20 Aug 2011 22:09:41 +0000</pubDate>
		<dc:creator>Ross</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://rossduggan.ie/?p=10651</guid>
		<description><![CDATA[Something to be wary of when you&#8217;re domain shopping for that perfect .com: bots are watching. I&#8217;m not sure what combination triggers it, but when I was done brainstorming for an app name, I checked Twitter to see if the handle was taken, then registered the domain name. It was quite late and I didn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Something to be wary of when you&#8217;re domain shopping for that perfect <strong>.com</strong>: bots are watching.</p>
<p>I&#8217;m not sure what combination triggers it, but when I was done brainstorming for an app name, I checked Twitter to see if the handle was taken, then registered the domain name. It was quite late and I didn&#8217;t want to start fiddling around with email aliases to get the Twitter account, so I decided to leave it since the application is only in early planning and layout stages.</p>
<p>A couple of days later, I decided to grab the account to start playing around with the Twitter API &#8211; couldn&#8217;t believe it when I discovered the account had been nabbed. No updates, no avatar &#8211; just a squatter. It seems obvious in retrospect that someone would be scraping domain registrations and comparing against Twitter handles (there was nothing but the .com taken and I&#8217;d never mentioned it anywhere), but it is immensely frustrating. The app is a Twitter-based tool, so having a .com and matching account name is <em>essential</em>.</p>
<p>What&#8217;s even more frustrating is that this seems to fall within Twitter&#8217;s acceptable usage policy. They have a section on namesquatting, <a href="https://support.twitter.com/entries/18370">but it states</a>:</p>
<blockquote><p>&#8220;Please note that if an account has had no updates, no profile image, and there is no intent to mislead, it typically means there&#8217;s no name-squatting or impersonation.&#8221;</p></blockquote>
<p>You&#8217;d be hard-pressed to claim that there is an &#8220;intent to mislead&#8221; when you&#8217;re starting to build something &#8211; after all, the fact that you&#8217;re only starting to build it means there&#8217;s not much to mislead. So I&#8217;m back to the drawing board on figuring out a name while I put the app together.</p>
<p>The lesson here, a rather obvious one I suppose, is that Twitter handles are as valuable as the domain for certain classes of applications. If you&#8217;re building something that will interface with Twitter, you have to get the Twitter handle at the same time as the domain, or it&#8217;ll be swept out from under you.</p>
<p><strong>Edit:</strong><br />
As per Andrew&#8217;s comment below, I&#8217;ve submitted an impersonation report &#8211; hopefully something will come of it.</p>
<p><strong>Update:</strong><br />
Well, it looks like this might be going places, the account in question is now showing as &#8220;suspended&#8221; &#8211; no word from support yet (it&#8217;s a weekend, I wasn&#8217;t expecting anything until at least Monday) but it&#8217;s encouraging!</p>
<p><strong>Update 2011-08-29:</strong><br />
So, received some communication from Twitter today; they will not release the account name to me. This is disappointing, but I will move on.</p>
]]></content:encoded>
			<wfw:commentRss>http://rossduggan.ie/blog/technology/bots-are-crawling-new-domain-registrations-and-namesquatting-twitter-handles/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>“Levelling the playing field” in education</title>
		<link>http://rossduggan.ie/blog/technology/levelling-the-playing-field-in-education/</link>
		<comments>http://rossduggan.ie/blog/technology/levelling-the-playing-field-in-education/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 15:52:17 +0000</pubDate>
		<dc:creator>Ross</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://rossduggan.ie/?p=10597</guid>
		<description><![CDATA[Came across a post via HN which suggests levelling the playing field in CS by teaching with obscure functional programming languages. The reasoning is that there are &#8220;privileged&#8221; students who begin a computer science degree already knowing how to code, and that this is unfair. Beyond the impracticality of doing this (you&#8217;re going to have [...]]]></description>
			<content:encoded><![CDATA[<p>Came across a post via HN which suggests <a href="http://geekfeminism.org/2010/08/10/restore-meritocracy-in-cs-with-an-obscure-functional-programming-language/">levelling the playing field in CS by teaching with obscure functional programming languages</a>.</p>
<p>The reasoning is that there are &#8220;privileged&#8221; students who begin a computer science degree already knowing how to code, and that this is unfair.</p>
<p>Beyond the impracticality of doing this (you&#8217;re going to have to change the language every year so that people don&#8217;t &#8220;cheat&#8221;), the fact that so many educators in the comments agree with this position is further evidence that the current education system is creaking.</p>
<p>People like Salman Khan are already helping to make education more accessible with the likes of <a href="http://www.khanacademy.org/">Khan Academy</a>. In fact, teachers who have used Khan Academy <a href="http://www.cato-at-liberty.org/could-you-modify-it-to-stop-students-from-becoming-this-advanced/">apparently don&#8217;t want their students to be too smart</a>.</p>
<p>When you are effectively looking to <strong>punish students for learning how to read</strong> before the rest of their peers, you have &#8211; at best &#8211; lost perspective as an educator.</p>
<p>At some point (actually around the time of the industrial revolution), it seems that education stopped being about the acquisition of knowledge and started being about churning out template humans to fulfil tasks.</p>
<p>If computer science education is broken because people are learning all by themselves, then society should (and already does) route around the problem &#8211; the problem being universities holding a monopoly on what it means to be educated. Tech companies in particular have been navigating around this for years, reaping the rewards of hiring self-taught, self-motivated individuals.</p>
<p>If modern enterprises wish to take advantage of this revolution in education, they should recognize this lest they lose some of the best candidates to more modern companies.</p>
]]></content:encoded>
			<wfw:commentRss>http://rossduggan.ie/blog/technology/levelling-the-playing-field-in-education/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Munin plugins for Solr</title>
		<link>http://rossduggan.ie/blog/technology/munin-plugins-for-solr/</link>
		<comments>http://rossduggan.ie/blog/technology/munin-plugins-for-solr/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 21:20:53 +0000</pubDate>
		<dc:creator>Ross</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://rossduggan.ie/?p=10586</guid>
		<description><![CDATA[I&#8217;ve been mucking around with Python recently and have written a couple of simple Munin plugins for Boards.ie&#8217;s Solr cluster (in the hope of helping to track down some annoying performance bugs). If you&#8217;re not familiar with Munin, it&#8217;s a bit like Nagios, (and if you haven&#8217;t heard of Nagios, it&#8217;s a network monitoring tool). Munin [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been mucking around with Python recently and have written a couple of simple <a href="http://en.wikipedia.org/wiki/Munin_(network_monitoring_application)">Munin</a> plugins for <a href="http://rossduggan.ie/blog/technology/searching-boards-ie-solr-ec2-sqs-sns-node-js/">Boards.ie&#8217;s Solr cluster</a> (in the hope of helping to track down some annoying performance bugs).</p>
<p>If you&#8217;re not familiar with Munin, it&#8217;s a bit like Nagios, (and if you haven&#8217;t heard of Nagios, it&#8217;s a network monitoring tool). Munin is particularly nifty because it&#8217;s easily extensible in pretty much any language that takes your fancy; Perl seems to be the favorite, but Python is also used.</p>
<p>You can <a href="https://github.com/distilledmedia/munin-plugins/tree/master/solr">check out the plugins on Distilled&#8217;s Github account</a> (parent company of Adverts.ie, Boards.ie, Daft.ie and TheJournal.ie).</p>
<p>There&#8217;s a bunch more there that <a href="http://www.mcdermottroe.com/">Conor McDermottroe</a> has written for MySQL, Snort, IMPI and FreeBSD too which you might also be interested in!</p>
]]></content:encoded>
			<wfw:commentRss>http://rossduggan.ie/blog/technology/munin-plugins-for-solr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Plus</title>
		<link>http://rossduggan.ie/blog/technology/google-plus/</link>
		<comments>http://rossduggan.ie/blog/technology/google-plus/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 22:35:06 +0000</pubDate>
		<dc:creator>Ross</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://rossduggan.ie/?p=10520</guid>
		<description><![CDATA[I&#8217;ve been playing on and off with Google&#8217;s new toy, Google+, for the last few days and while there are a plethora of opinion pieces all over the place, I figure what the hell, one more can&#8217;t really hurt (especially a nice short one that isn&#8217;t too gushing.) The Bad I think one way in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing on and off with Google&#8217;s new toy, <a href="http://plus.google.com">Google+</a>, for the last few days and while there are a plethora of opinion pieces all over the place, I figure what the hell, one more can&#8217;t really hurt (especially a nice short one that isn&#8217;t too gushing.)</p>
<h3>The Bad</h3>
<p>I think one way in which Google really dropped the ball is that <strong>Google Apps customers are having serious difficulties using the service</strong>. Google is undergoing a massive effort to unify various types of accounts over their network and are mucking it up quite badly for such a smart group of people. They risk alienating some of their most committed users; heck, they&#8217;re alienating the minority of users who actually <em>pay</em>.</p>
<p>Something else I&#8217;ve heard is that <strong>Google should have gone to more effort to allow <em>groups</em> of people to sign up</strong> &#8211; after all, critical mass is what is going to make this thing successful. Coming back to Google Apps, they had an excellent opportunity to pre-authenticate all Google Apps account holders for the service, thus enabling entire <em>already dedicated</em> groups to bootstrap the service.</p>
<p>Sparks feels like a bit of a miss. I&#8217;m not quite sure what mix of keywords is going to give me stuff I <em>should</em> know about. I&#8217;m probably trying too hard to recreate the experience of <a href="http://news.ycombinator.com">hackernews</a> or <a href="http://techmeme.com">Techmeme</a>, but since I don&#8217;t know what &#8220;topic&#8221; to pick and I&#8217;m not sure how the results are populated, it feels&#8230; off.</p>
<h3>The Good</h3>
<p>Having the Google+ notification bar as part of my GMail bar is inspired<em>.</em> It&#8217;s amazing how in many ways this is not all that different from the time Buzz was lodged below our inboxes &#8211; yet it just feels so much more appropriate.</p>
<p>The interface is finally something between the dorky, utilitarian UI of older products and the sweeping strokes of pastel colours, Helveticaesque typefaces and thick lines we&#8217;ve become more familiar with in the last few years.</p>
<p>Profiles are very nicely executed. There&#8217;s just the right amount of subtle completionist bait to encourage people to add more information and fill out more circles, but without feeling like you&#8217;re being pressured into it (a la LinkedIn).</p>
<p>It feels like it has the opportunity to be a <em>richer</em> experience than Twitter (who are struggling to fit the rich world of the web into their 140 character ethos), while retaining the serendipity of interaction with strangers (for want of a more appropriate term) that isn&#8217;t really available with Facebook. It doesn&#8217;t seem like it would <em>replace</em> the organic, real time stream that is Twitter; but it might supplant a good portion of my (admittedly low) Facebook usage.</p>
<p>Overall, I think if the bootstrapping issues can be addressed then this is going to be a really useful addition to the space that Facebook, Twitter and LinkedIn occupy.</p>
]]></content:encoded>
			<wfw:commentRss>http://rossduggan.ie/blog/technology/google-plus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Windows 7 onto a USB stick using Ubuntu</title>
		<link>http://rossduggan.ie/blog/technology/getting-windows-7-onto-a-usb-stick-using-ubuntu/</link>
		<comments>http://rossduggan.ie/blog/technology/getting-windows-7-onto-a-usb-stick-using-ubuntu/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 22:00:26 +0000</pubDate>
		<dc:creator>Ross</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://rossduggan.ie/?p=10485</guid>
		<description><![CDATA[I spent way too much time trying to do this so maybe this will save someone else some time. I haven&#8217;t owned a copy of Windows for years, and have been using Ubuntu as my solitary home and office OS for some time. Last week though, I decided I should have a copy of Windows [...]]]></description>
			<content:encoded><![CDATA[<p>I spent <em>way</em> too much time trying to do this so maybe this will save someone else some time.</p>
<p>I haven&#8217;t owned a copy of Windows for years, and have been using Ubuntu as my solitary home and office OS for some time. Last week though, I decided I should have a copy of Windows 7 since there&#8217;s some software I can&#8217;t run without it (my hardware is pretty new, and it seems to take Linux about 6-12 months to catch up with changes in hardware, especially graphics).</p>
<p>So, after a bit of hunting, I discovered it was possible to purchase Windows 7 in downloadable ISO format at <a href="http://emea.microsoftstore.com">http://emea.microsoftstore.com</a></p>
<p>Great, I thought, that&#8217;s pretty progressive of Microsoft! Unfortunately their helpfulness ends there, as the only instructions for actually using the ISO revolve around DVD burners and/or assume you already have Windows (of some sort) installed. I didn&#8217;t buy a DVD drive with my last computer build because I haven&#8217;t actually needed to use one for a long time.</p>
<p>So, if, like me, you have Ubuntu as your only OS and no DVD drive, it seems like you&#8217;re kinda up the creek. Fortunately, this is actually pretty easily remedied. This guide does assume some familiarity with both Ubuntu and partitioning and I&#8217;m not big on tech support, so consider yourself forewarned <img src='http://rossduggan.ie/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>You need:</p>
<ol>
<li>A USB key that you can afford to wipe completely (at least 4GB)</li>
<li>Your Windows 7 ISO of choice (32 bit and 64 bit varieties are available from the store) and the serial (it&#8217;ll be emailed to you).</li>
<li>A connection to the Internet on your Ubuntu machine (or just read the guide and preinstall anything you see mentioned)</li>
<li>A willingness to nuke whatever OS you already have installed, because Windows takes no prisoners (blindly overwrites the Master Boot Record).</li>
</ol>
<p>Now, technically 4 can be alleviated by recovering grub, but it&#8217;s a bit of a roundabout process, and my Ubuntu machines are all basically thin clients. Important documents are stored in Dropbox, my code is on Github, my music, etc is on external drives and almost everything else is also stored remotely or run in the browser. If you don&#8217;t want to lose your Ubuntu install, I imagine <a href="https://help.ubuntu.com/community/WindowsDualBoot">the guide on the Ubuntu Community Wiki</a> is where you&#8217;ll want to look after this.</p>
<p><strong>Important:</strong> when you&#8217;re downloading the ISO, do not bother with &#8220;Part 1&#8243; &#8211; it is a boot sector editor for Windows and will be useless to you. Download only &#8220;Part 2&#8243; as it&#8217;s the ISO (you can only do this about three times, so try to download and store the ISO the first time round).</p>
<h3>Partitioning the USB key</h3>
<p>We&#8217;re going to prepare this USB key with <strong>gparted</strong>. Disk Utility won&#8217;t do (since it won&#8217;t allow you to set a device as bootable). You might have this installed already, but if you&#8217;re running a fairly fresh copy of Ubuntu, you&#8217;ll need to install this using Synaptic. Once it&#8217;s installed, you should find it under System-&gt;Adminstration-&gt;GParted Partition Editor.<br />
Insert your USB key, start up Gparted and select the key from the drop down in the top right. It&#8217;ll be something like <code>/dev/sdc</code>, with the size of the drive in brackets next to it.<br />
Delete any partitions that are on the drive, and create a new NTFS one, applying the changes.<br />
Right click on the device, and select &#8220;manage flags&#8221;. Set the &#8220;boot&#8221; flag and nothing else.</p>
<h3>Extracting the ISO</h3>
<p>You may need to eject and re-insert the drive for it to appear, at this point you need to open up your freshly downloaded ISO using the Archive Manager. Do not &#8220;mount&#8221; the ISO as it will not be usable.<br />
Extract the contents of the archive straight onto your newly formatted (and bootable) USB key. Once this is completed, eject the drive and voila, you have a bootable USB key with Windows 7 on it!</p>
]]></content:encoded>
			<wfw:commentRss>http://rossduggan.ie/blog/technology/getting-windows-7-onto-a-usb-stick-using-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Searching Boards.ie – Solr, EC2, SQS, SNS, Node.js</title>
		<link>http://rossduggan.ie/blog/technology/searching-boards-ie-solr-ec2-sqs-sns-node-js/</link>
		<comments>http://rossduggan.ie/blog/technology/searching-boards-ie-solr-ec2-sqs-sns-node-js/#comments</comments>
		<pubDate>Thu, 26 May 2011 10:10:40 +0000</pubDate>
		<dc:creator>Ross</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://rossduggan.ie/?p=10404</guid>
		<description><![CDATA[This is the first in a series of posts about the design and implementation of a search engine for Boards.ie. Boards.ie recently launched a new search engine &#8211; http://www.boards.ie/search/ &#8211; which is built upon Amazon Web Services using Solr with PHP as the glue. Currently, Boards.ie users are searching nearly 30 million posts almost a [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first in a series of posts about the design and implementation of a search engine for Boards.ie.</p>
<p>Boards.ie recently launched a new search engine &#8211; <a href="http://www.boards.ie/search/">http://www.boards.ie/search/</a> &#8211; which is built upon Amazon Web Services using Solr with PHP as the glue.</p>
<p>Currently, Boards.ie users are searching nearly 30 million posts almost a million times a month.</p>
<h3>A little background</h3>
<p>Solr has been used in production by Distilled Media (formerly the Daft Media Group) for a couple of years now, first being tested on LetsRent.ie, then for powering the maps functionality on Daft.ie, and even more recently  as the core technology for the relaunch of Adverts.ie.</p>
<p>Boards.ie&#8217;s usage has been an interesting look into the future for Daft.ie and Adverts.ie; with nearly 26 million posts &#8211; &#8220;documents&#8221; in Solr nomenclature &#8211; and growing by more than a million again every month, it presents a challenge in providing a reliable, affordable, relevant and fast search solution to our users.</p>
<p>Boards.ie has relied on MySQL&#8217;s &#8220;Fulltext&#8221; search as long as it has been using MySQL (forever). As time has passed, more and more restrictions had to be placed on search in order to keep it online, and the sheer volume of data was making results less and less useful to people well used to using Google search.</p>
<p>There have been a number of challenges to solve along the way:</p>
<h3>Can we make search faster and more relevant with what we have already?</h3>
<p>This is sort of an obvious question, but we didn&#8217;t want to jump the gun and leap into an entirely new technology stack if it were possible for us to overhaul what was currently there.</p>
<p>The answer was not particularly straight forward, but any solution that involved keeping the MySQL fulltext engine as our primary search system involved a lot of new beefy hardware and a lot of the same slowness, punting relevance issues down the line. As a result, we decided that it was not a realistic option.</p>
<h3>Which search technology should we use?</h3>
<p>There were only a couple of choices available to us when we started working on this project. First, we wanted to use Open Source &#8211; there are plenty of good reasons to choose either open source or proprietary software depending on your requirements, and we have experience with both. We wanted the flexibility to hack away at what we were using and share back to the community where possible. We wanted to be able to scale horizontally without worrying about <a href="http://www.codinghorror.com/blog/2009/06/scaling-up-vs-scaling-out-hidden-costs.html">skyrocketing licensing costs</a>. We wanted access to the huge amount of expertise and goodwill that comes with open source projects, as well as experimental work done by other developers.</p>
<p>It also had to be compatible with the rest of our infrastructure and fit with our areas of experience &#8211; we&#8217;re pretty evenly split between FreeBSD and Linux on the infrastructure side; we didn&#8217;t want to introduce an entirely new stack (Microsoft) if it could be avoided.</p>
<p>There were two major options for us as a result, SphinxSearch and Apache Solr. SphinxSearch appeared to have successful deployments with vBulletin (our forum software), but all the experience in the Distilled Group was with Solr. Daft.ie had already deployed successful Solr installations, so we decided to go with what we had some experience with.</p>
<h3>What infrastructure should we use?</h3>
<p>We had the option of building using our own hardware, or making the leap to introducing cloud infrastructure. Moving partially into the cloud introduced a data transportation issue &#8211; how were we going to get data into the cloud while keeping our core infrastructure in Digiweb? Latency and data transfer costs were likely to be show stoppers. Amazon had recently introduced a new service in beta, Simple Notification Service (SNS). We were pretty sure we could combine this with their Simple Queue Service (SQS) to create a scalable message routing and queuing system for posts. With a few hiccups and some conversation with Amazon along the way, we were successful. As it turns out, getting the data out of our core infrastructure and into Amazon is the cheapest component of the entire operation. For the tens of thousands of messages we send to Amazon on a daily basis, we&#8217;re billed a couple of dollars a month.</p>
<h3>What are the tradeoffs?</h3>
<p>There are always tradeoffs.</p>
<p>The advantages and disadvantages of SQL and NoSQL solutions has been <a href="http://highscalability.com/">covered at length</a>, I&#8217;ll just highlight the areas that were significant for us.</p>
<p>With MySQL, our data was/is <a href="http://theryanking.com/entries/2010/04/29/potential-consistency/">potentially consistent</a>. For our usage, it is consistent enough for us to call it the canonical source of our data. Occasionally it chews up a post or thread, but rarely one that can not be rewritten.</p>
<p>The information is also effectively instantly available upon submission. There&#8217;s a lag of up to a couple of seconds occasionally as the data waits to propagate across our MySQL cluster due to an extended lock of some sort, but it&#8217;s generally not a particularly noticeable to the average user.</p>
<p>With the new search system we have sacrificed some consistency and how immediately data is made available to the searcher. For instance, posts sometimes (more frequently than with MySQL) do not make it into the search system. There is multiple redundancy built into the system to limit this, but occasionally a full resynchronization is required. We judged this to be an acceptable cost.</p>
<p>Immediacy has been sacrificed such that it usually takes about 2-5 minutes for a new post or update to an old one to become available in searches, occasionally an hour, infrequently a day, and very infrequently a couple of months (relating back to consistency). We determined that the normal search profile does not require the absolute newest data, only the most relevant.</p>
<p>At the time we made these decisions, losing real time search was the one I was least happy about, for most users it does not appear to be a concern. In hindsight it&#8217;s almost obvious why &#8211; Boards.ie is a gigantic repository of historical information. The value is in being able to search this rich back catalogue of conversation, opinion and information, not just the most recent.</p>
<p>Even at that, recency is only sacrificed when measured in seconds.</p>
<h3>Architectural choice</h3>
<p>As useful as Solr has been for us, it&#8217;s a bit of a black box in our architecture. Trying to run Solr through a debugger remotely is a gigantic pain in the arse and not something I had much success with. Fortunately, the Jetty error logs are enough to illuminate most problems:</p>
<ul>
<li>Memory management. It&#8217;s perhaps unfair to take issue with Solr over this &#8211; after all, it&#8217;s a far cry from MySQL&#8217;s famously labyrinthine memory usage configuration options, and Solr&#8217;s problems are really the restrictions of the JVM &#8211; but it feels like a single purpose machine with one major application should be able to figure out how much RAM to dedicate to disk cache and how much the application should get for optimal performance.</li>
<li>XML everywhere. It&#8217;s inescapable, and again, this can be ascribed to Java culture, but damn.</li>
<li>Fixed schema. I suppose this is an ideological argument, but during development this was tedious.</li>
<li>The book is two inches thick and <em>you need to know it</em>. If you&#8217;re building a search service that you expect to take a lot of traffic and contain a lot of documents (why else would you be interested, right?) you will simply have to know all (or at least a good chunk of) the features, quirks, optimizations and architectural choices.</li>
</ul>
<p>Solr is now a pretty well field-tested application in Distilled, and I&#8217;m pretty sure I could rapidly prototype an installation and have it up and running in production inside a week for another site, but I would prefer to investigate <a href="http://www.elasticsearch.org/">ElasticSearch</a> the next time I am revisiting search options.</p>
<h3>Further development</h3>
<p>During the course of development, I wrote a small node.js server to speed up the relay of post data from our web servers to Amazon SNS. Due to the limitations of deploying node.js on our FreeBSD architecture at the time, this system is, unfortunately, yet to be implemented. Once it is, however, write operations on the site should speed up noticeably for end users. Once this is up and running and has the bugs ironed out, it will be released as an open source project on github.</p>
<p>A side effect of this is that I contributed some code to the <a href="https://github.com/livelycode/aws-lib">AWS Library node.js project</a>, something I would like to continue doing.</p>
<p>I have also amended chunks of the <a href="http://code.google.com/p/solr-php-client/">Solr PHP client</a> with a sharded Solr deployment in mind, but it&#8217;s quite clunky and I would prefer to have another stab at it, maybe writing my own Solr PHP client and making it available.</p>
<p>In the next posts on this topic, I plan to dive more deeply into the specifics of our implementation, and hopefully release some code in tandem.</p>
]]></content:encoded>
			<wfw:commentRss>http://rossduggan.ie/blog/technology/searching-boards-ie-solr-ec2-sqs-sns-node-js/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using apc
Page Caching using apc
Database Caching 14/19 queries in 0.013 seconds using memcached
Object Caching 0/0 objects using memcached

Served from: rossduggan.ie @ 2012-05-05 19:06:14 -->

