<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xml:lang="en" xml:base="http://www.symphonious.net/wp-atom.php">
	<title type="text">Symphonious</title>
	<subtitle type="text">Living in a state of accord.</subtitle>

	<updated>2009-07-09T11:44:07Z</updated>
	<generator uri="http://wordpress.org/" version="2.8.1">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://www.symphonious.net" />
	<id>http://www.symphonious.net/feed/atom/</id>
	

			<link rel="self" href="http://feeds.feedburner.com/symphonious" type="application/atom+xml" /><entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Amazon EC2 As A Webhost Redux]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/07/09/amazon-ec2-as-a-webhost-redux/" />
		<id>http://www.symphonious.net/?p=1218</id>
		<updated>2009-07-09T11:44:07Z</updated>
		<published>2009-07-09T11:44:07Z</published>
		<category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /><category scheme="http://www.symphonious.net" term="System Administration" />		<summary type="html"><![CDATA[
       Back in 2007 I looked at EC2 for a web server and while it wound up being feasible it had a number of drawbacks:
    
    
      
         Those familiar [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/07/09/amazon-ec2-as-a-webhost-redux/">&lt;p&gt;
       Back in 2007 &lt;a href="http://www.symphonious.net/2007/07/24/amazon-sc2-as-a-webhost/"&gt;I looked at EC2 for a web server&lt;/a&gt; and while &lt;a href="http://www.symphonious.net/2007/08/03/hosting-on-amazon-ec2/"&gt;it wound up being feasible&lt;/a&gt; it had a number of drawbacks:
    &lt;/p&gt;
    &lt;blockquote&gt;
      &lt;p&gt;
         Those familiar with EC2 won&amp;#39;t be surprised to hear that we won&amp;#39;t be going with the service for three reasons:
      &lt;/p&gt;
      &lt;ol&gt;
        &lt;li&gt;
          It&amp;#39;s at least as expensive as the dedicated server we&amp;#39;d need.
        &lt;/li&gt;
        &lt;li&gt;
          The filesystem gets reset everytime the server reboots (S3 provides a REST API to store and retrieve data, not a filesystem)
        &lt;/li&gt;
        &lt;li&gt;
          The server gets a new IP address every time it reboots.
        &lt;/li&gt;
      &lt;/ol&gt;
    &lt;/blockquote&gt;
    &lt;p&gt;
       Since then Amazon have rolled out new services that solve problems 2 and 3 and reserved instances to help with 1.  What surprises me after a couple of years running a single EC2 instance with an app that’s using S3 for storage though is just how stable it has been.
    &lt;/p&gt;
    &lt;p&gt;
       Remember that EC2’s original point in life was scalability, not running one single instance for a really long time.  They’ve done tons of upgrades to their infrastructure over the last couple of years as well which normally would mean down time and migrations.  You can imagine my surprise when I checked how long it’s been since the instance rebooted:
    &lt;/p&gt;
&lt;pre class="code"&gt;
&lt;span class="java_plain"&gt;e2wiki&lt;/span&gt;&lt;span class="java_operator"&gt;:~&lt;/span&gt;&lt;span class="java_plain"&gt;# uptime&lt;/span&gt;
&lt;span class="java_plain"&gt; &lt;/span&gt;&lt;span class="java_literal"&gt;04&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_literal"&gt;28&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_literal"&gt;45&lt;/span&gt;&lt;span class="java_plain"&gt; up &lt;/span&gt;&lt;span class="java_literal"&gt;499&lt;/span&gt;&lt;span class="java_plain"&gt; days&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt; &lt;/span&gt;&lt;span class="java_literal"&gt;19&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_literal"&gt;14&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;  &lt;/span&gt;&lt;span class="java_literal"&gt;1&lt;/span&gt;&lt;span class="java_plain"&gt; user&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;  load average&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt; &lt;/span&gt;&lt;span class="java_literal"&gt;0.33&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt; &lt;/span&gt;&lt;span class="java_literal"&gt;0.10&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt; &lt;/span&gt;&lt;span class="java_literal"&gt;0.03&lt;/span&gt;
&lt;/pre&gt;
    &lt;p&gt;
       Just shy of 500 days since a reboot for any reason. I can’t say that about any other hosting service I’ve ever used so even if EC2 is more expensive, it’s seriously reliable.
    &lt;/p&gt;
    &lt;p&gt;
       Now we just need to fix the memory leak in the app we’re running on that server &amp;#8211; it up and dies a couple of times a week. That said, the script that automatically restarts it is so effective that the external monitoring tools don’t even notice so it’s probably not worth the effort.
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/leAnxBiYpxs" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/07/09/amazon-ec2-as-a-webhost-redux/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/07/09/amazon-ec2-as-a-webhost-redux/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Hot or Not: The Web as an SDK]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/07/08/hot-or-not-the-web-as-an-sdk/" />
		<id>http://www.symphonious.net/?p=1215</id>
		<updated>2009-07-08T16:18:46Z</updated>
		<published>2009-07-08T16:18:46Z</published>
		<category scheme="http://www.symphonious.net" term="Code and Geek Stuff" />		<summary type="html"><![CDATA[
       Remember back when the iPhone first came out and Steve Jobs proudly announced that the SDK for it was “the web”?  Apparently history really does repeat itself because now Google is trying the exact same thing with Chrome OS:
    
    
 [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/07/08/hot-or-not-the-web-as-an-sdk/">&lt;p&gt;
       Remember back when the iPhone first came out and Steve Jobs proudly announced that the SDK for it was “the web”?  Apparently history really does repeat itself because now &lt;a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html"&gt;Google is trying the exact same thing with Chrome OS&lt;/a&gt;:
    &lt;/p&gt;
    &lt;blockquote&gt;
      The software architecture is simple — Google Chrome running within a new windowing system on top of a Linux kernel. For application developers, the web is the platform. All web-based applications will automatically work and new applications can be written using your favorite web technologies.
    &lt;/blockquote&gt;
    &lt;p&gt;
       The decision was extremely unpopular with the iPhone but no doubt it will be extremely popular with Google because it matches people’s expectations. Interestingly, &lt;a href="http://www.symphonious.net/2009/06/26/why-the-iphone-has-succeeded/"&gt;the most common reason people give for the iPhone’s success is now the App Store&lt;/a&gt;. I guess we’ll get a chance to see if they’re right or not. I don’t see the web as the only API working even though it would work very well for a large percentage of computer usage.  Twitter would be a particularly good example of why &amp;#8211; you can use Twitter via the web and certainly some people do, but the standalone clients are by far and away the best way to use it. The same generally applies to instant messaging as well.
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/dlc4X9OcBeU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/07/08/hot-or-not-the-web-as-an-sdk/#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/07/08/hot-or-not-the-web-as-an-sdk/feed/atom/" thr:count="5" />
		<thr:total>5</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Adventures in Photography]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/07/07/adventures-in-photography/" />
		<id>http://www.symphonious.net/?p=1213</id>
		<updated>2009-07-07T12:39:05Z</updated>
		<published>2009-07-07T12:39:05Z</published>
		<category scheme="http://www.symphonious.net" term="Photography" />		<summary type="html"><![CDATA[
       It’s been ages since I posted anything about photography here, but I’ve been having fun learning how to take advantage of my camera more. I don’t take anywhere near as many photos as I should to really get good at it but I can see a gradual improvement [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/07/07/adventures-in-photography/">&lt;p&gt;
       It’s been ages since I posted anything about photography here, but I’ve been having fun learning how to take advantage of my camera more. I don’t take anywhere near as many photos as I should to really get good at it but I can see a gradual improvement which is good. I’m pleased to say that I’m quite confident shooting in AV mode now and despite never having enough time in post-processing, have a streamlined workflow that’s now reliably matching or bettering the automatic settings.
    &lt;/p&gt;
    &lt;p&gt;
       Here’s a few from my recent trip to Denmark that I was pretty happy with. To be fair, the setting pretty much photographed itself but since unusual thoughts like composure and framing actually entered my mind I think I deserve some credit.
    &lt;/p&gt;
    &lt;p style=" text-align: center;"&gt;
       &lt;img alt="Standing on the Dock of the Lake" height="436" width="650" src="http://www.symphonious.net/wp-content/uploads/2009/07/MG_3391208922348887916.png" /&gt;
    &lt;/p&gt;
    &lt;p style=" text-align: center;"&gt;
       &lt;img alt="Boats in the Lake" height="442" width="650" src="http://www.symphonious.net/wp-content/uploads/2009/07/MG_329520639654172728.png" /&gt;
    &lt;/p&gt;
    &lt;p style=" text-align: center;"&gt;
       &lt;img alt="More Boats in the Lake" src="http://www.symphonious.net/wp-content/uploads/2009/07/MG_8057877460922185892.png" /&gt;
    &lt;/p&gt;
    &lt;p&gt;
       I can see a few ways I’d improve most of them, but I can look at these and really feel like I captured the beauty of the scene which is fantastic for me right now.
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/1ILzkS0wlME" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/07/07/adventures-in-photography/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/07/07/adventures-in-photography/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Proper Care and Feeding of Computing Consultants]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/07/06/proper-care-and-feeding-of-computing-consultants/" />
		<id>http://www.symphonious.net/?p=1206</id>
		<updated>2009-07-06T14:40:47Z</updated>
		<published>2009-07-06T14:40:13Z</published>
		<category scheme="http://www.symphonious.net" term="General" />		<summary type="html"><![CDATA[
       Dave Walker &#8211; Proper Care and Feeding of Computing Consultants: Excellent set of things you should do to get the most out of a consultant visit. I haven’t been consulting very long and it’s not the main part of my job, but I’d add:
    
 [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/07/06/proper-care-and-feeding-of-computing-consultants/">&lt;p&gt;
       &lt;img height="204" width="315" style=" float: right;" src="http://www.symphonious.net/wp-content/uploads/2009/07/MG_2890559069743179507.png" alt="Free Convertible Upgrades are Great" /&gt;&lt;a href="http://www.freeke.org/ffg/tech/computers/working/help_consultants.html"&gt;Dave Walker &amp;#8211; Proper Care and Feeding of Computing Consultants&lt;/a&gt;: Excellent set of things you should do to get the most out of a consultant visit. I haven’t been consulting very long and it’s not the main part of my job, but I’d add:
    &lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;
        Let them know the hours you want them to be on site. It’s no fun for a consultant to be sitting outside the building at 8am when you start at 9:30. Similarly if you have an awesomely laid back European culture and finish at 4 they may be able to get an earlier plane home so it’s good to know in advance.
      &lt;/li&gt;
      &lt;li&gt;
        Make sure the consultant knows the exact name of your department (and how to pronounce it if it’s a foreign country to them)
      &lt;/li&gt;
      &lt;li&gt;
        Make sure you’ve lined up the important people your consultant will need to work with so that they are available. You don’t want expensive consultants wasting time waiting for people to come back from a meeting or trying to find the right people in the maze of your company.
      &lt;/li&gt;
      &lt;li&gt;
        When they arrive show them where the bathroom is &amp;#8211; where to get water from is important too.
      &lt;/li&gt;
      &lt;li&gt;
        Recommended travel details if the place is hard to get to. Of course, flying into a different country and driving works out well if you just so happen to be &lt;a href="http://www.thesuttons.name/2009/06/26/3-countries-in-a-day/"&gt;upgraded to a convertible for free&lt;/a&gt;…
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
        
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/Xglbv6TQjJU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/07/06/proper-care-and-feeding-of-computing-consultants/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/07/06/proper-care-and-feeding-of-computing-consultants/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Stupidity]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/06/29/stupidity/" />
		<id>http://www.symphonious.net/?p=1202</id>
		<updated>2009-06-29T15:09:21Z</updated>
		<published>2009-06-29T15:08:56Z</published>
		<category scheme="http://www.symphonious.net" term="Rants" />		<summary type="html"><![CDATA[
       I think this photo more than any other symbolizes stupidity. It was taken quickly on a first generation iPhone so if you can’t see clearly what’s wrong, it’s a photo of our new screw driver set. The packaging includes a clear plastic overlay which, you guessed it, is [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/06/29/stupidity/">&lt;p&gt;
       &lt;img style=" float: left;" src="http://www.symphonious.net/wp-content/uploads/2009/06/IMG_3105400823141273717.png" alt="Screwdriver packaging that requires a screwdriver to open." /&gt;I think this photo more than any other symbolizes stupidity. It was taken quickly on a first generation iPhone so if you can’t see clearly what’s wrong, it’s a photo of our new screw driver set. The packaging includes a clear plastic overlay which, you guessed it, is screwed down.
    &lt;/p&gt;
    &lt;p&gt;
       That would be just normal stupidity except for the fact that the package is advertised as a DIY getting started pack, containing the essentials to get you started. Except of course, now you need the DIY getting started pack, opener pack. It’s beginning to sound like an enterprise software sale…
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/xAF4tSV4NcI" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/06/29/stupidity/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/06/29/stupidity/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Why The iPhone Has Succeeded]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/06/26/why-the-iphone-has-succeeded/" />
		<id>http://www.symphonious.net/?p=1199</id>
		<updated>2009-06-26T20:00:22Z</updated>
		<published>2009-06-26T19:59:10Z</published>
		<category scheme="http://www.symphonious.net" term="Apple" />		<summary type="html"><![CDATA[
       Stephen O’Grady:
    
    
      
         Remember that, at its core, the iPhone offers not a whole lot more than a phone, browser, camera, iPod and GPS. Which, ok, is [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/06/26/why-the-iphone-has-succeeded/">&lt;p&gt;
       &lt;a href="http://redmonk.com/sogrady/2009/06/26/iphone-lessons/"&gt;Stephen O’Grady&lt;/a&gt;:
    &lt;/p&gt;
    &lt;blockquote&gt;
      &lt;p&gt;
         Remember that, at its core, the iPhone offers not a whole lot more than a phone, browser, camera, iPod and GPS. Which, ok, is kind of impressive. But not truly differentiating, Apple’s acknowledged strength in user experiences aside. As good and smart as Apple is at design – and they are very, very good – they’re never going to be as good and smart as everyone else. We see this in the enterprise world frequently, where vendors that foster an ecosystem succeed and those that don’t, well, don’t. But we haven’t seen too many examples of this play out in the consumer world yet, which is one of the reasons the iPhone is such an interesting platform. With the App Store, Apple’s attempting to cement its role with a community play.
      &lt;/p&gt;
    &lt;/blockquote&gt;
    &lt;p&gt;
       I find it interesting that everyone holds up the App Store as the key reason for the iPhone being successful &amp;#8211; the key differentiating factor. Has everyone forgotten that the iPhone originally launched with &lt;em&gt;no developer SDK at all&lt;/em&gt; and how well did that go? That’s right, it was a massive success.
    &lt;/p&gt;
    &lt;p&gt;
       The iPhone is not succeeding purely because of the App Store, in fact it could just as easily be the opposite &amp;#8211; the App Store is succeeding because the iPhone is so popular. There’s nothing simple about developing for the iPhone &amp;#8211; you have to learn Objective-C and Cocoa Touch, you have to pay to get involved at all and you don’t know if you’ll be allowed to ship your app until after you finish it and submit it to Apple. So why do people do it? Because there are a huge number of iPhone users out there.
    &lt;/p&gt;
    &lt;p&gt;
       In the short time the iPhone has been out, people have simply forgotten how revolutionary the phone and Apple software that comes with it actually is. The third party apps are just very tasty icing on top.
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/JLMXoRtZR8M" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/06/26/why-the-iphone-has-succeeded/#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/06/26/why-the-iphone-has-succeeded/feed/atom/" thr:count="5" />
		<thr:total>5</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[I Love Parser Generators, I Hate Parser Generators]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/06/22/i-love-parser-generators-i-hate-parser-generators/" />
		<id>http://www.symphonious.net/?p=1196</id>
		<updated>2009-06-22T07:52:22Z</updated>
		<published>2009-06-22T07:52:22Z</published>
		<category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /><category scheme="http://www.symphonious.net" term="Java" />		<summary type="html"><![CDATA[
       I was reminded on the weekend of how much I like working with parser generators &#8211; they’re just so pure and clean. You really feel like you’re working with a grammar and all those CS lectures come flooding back. Writing code to parse the same content by hand [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/06/22/i-love-parser-generators-i-hate-parser-generators/">&lt;p&gt;
       &lt;img width="185" src="http://www.symphonious.net/wp-content/uploads/2009/06/pitr_LEGO_smiley_-_scared.png" height="200" style=" float: left;" alt="Parsers drive me mad." /&gt;I was reminded on the weekend of how much I like working with parser generators &amp;#8211; they’re just so pure and clean. You really feel like you’re working with a grammar and all those CS lectures come flooding back. Writing code to parse the same content by hand just never has that feel. Plus they create incredibly accurate parsers in very little time at all.
    &lt;/p&gt;
    &lt;p&gt;
       I was also reminded of how much I hate parser generators. They generate very accurate code which is great when you have very accurate input. In the real world, it just means the parser craps out an awful lot on very minor syntax problems. So then you try to make the grammar more flexible to accept that input and the generator just complains that the language is no longer LL(1).
    &lt;/p&gt;
    &lt;p&gt;
       Off we go into the deep dark depths of those CS lectures. Now all of a sudden you find yourself with pen and paper out drawing states and the paths between them. Pretty soon you want to migrate to A3 paper and then on to butchers paper. Eventually you find yourself writing on the wall.
    &lt;/p&gt;
    &lt;p&gt;
       Real world content just isn’t sane. You can’t tokenize it first and then just use those tokens &amp;#8211; characters in different places have all kinds of different meanings. You don’t really want to validate the content as you read it&lt;a id="footlink1:1245656519327" class="footnote" href="#footnote1:1245656519327"&gt;1&lt;/a&gt;, you just want to do the most brain dead simple thing to get that content in and in a form that you can work with&lt;a id="footlink2:1245656663583" class="footnote" href="#footnote2:1245656663583"&gt;2&lt;/a&gt;.
    &lt;/p&gt;
    &lt;p&gt;
       I run into this every time I work with parser generators and wind up spending so much time making the grammar fully tolerant that it winds up being easier to just write the entire thing by hand. I just can’t help but think that there should be a better way though.
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote1:1245656519327" href="#footlink1:1245656519327"&gt;1&lt;/a&gt; &amp;#8211; beyond making sure you’re avoiding buffer overflows and that the resulting model isn’t dangerous etc but often those kind of checks are best done in the code that actually does the work (i.e. assume every value is user supplied rather than assuming that the content is all nice and safe). &lt;a class="footnotereturn" href="#footlink1:1245656519327"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote2:1245656663583" href="#footlink2:1245656663583"&gt;2&lt;/a&gt; &amp;#8211; this of course is situation dependent. I happened to be parsing CSS where tolerance is the key to success. Parsing configuration files on the other hand should be strict and fail fast.&lt;a class="footnotereturn" href="#footlink2:1245656663583"&gt;↩&lt;/a&gt;
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/5RKjT3DIlyw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/06/22/i-love-parser-generators-i-hate-parser-generators/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/06/22/i-love-parser-generators-i-hate-parser-generators/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Stuff I Might Need Someday]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/06/12/stuff-i-might-need-someday/" />
		<id>http://www.symphonious.net/?p=1192</id>
		<updated>2009-06-12T10:24:31Z</updated>
		<published>2009-06-12T10:24:31Z</published>
		<category scheme="http://www.symphonious.net" term="Note To Self" />		<summary type="html"><![CDATA[
       A few things I’ve discovered today that look potentially useful in the future:
    
    
      
        Antenna House Formatter V5 &#8211; converts HTML and CSS to PDF, including support for [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/06/12/stuff-i-might-need-someday/">&lt;p&gt;
       A few things I’ve discovered today that look potentially useful in the future:
    &lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;
        &lt;a href="http://www.antennahouse.com/product/ahf50/ahf5top.htm"&gt;Antenna House Formatter V5&lt;/a&gt; &amp;#8211; converts HTML and CSS to PDF, including support for MathML. Heck, supporting CSS well is a plus &amp;#8211; most HTML to PDF conversions don’t. Hat tip to one of our clients for finding that.
      &lt;/li&gt;
      &lt;li&gt;
        &lt;a href="http://flowplayer.org/tools/index.html"&gt;jQuery Tools&lt;/a&gt; &amp;#8211; there are plenty of JavaScript UI libraries around, but this one looks better componentized than most. It’s also a good, small set of components that normal web pages are likely to want, rather than being more specifically useful in web applications, though it could be used there too.
      &lt;/li&gt;
      &lt;li&gt;
        &lt;a href="http://flowplayer.org/index.html"&gt;FlowPlayer&lt;/a&gt; &amp;#8211; actually I knew about this one but only just got around to looking at the details. Handy looking open source flash video player. They’ve somehow converted the GPL into a license that requires attribution which is really odd, most likely to keep their commercial licensing option open. It’s their license so they can do what they want with it but I would have thought there’d be a better fitting license.
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
        
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/eiYetwFrzD0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/06/12/stuff-i-might-need-someday/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/06/12/stuff-i-might-need-someday/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Canon Lens Recommendations]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/06/10/canon-lens-recommendations/" />
		<id>http://www.symphonious.net/?p=1188</id>
		<updated>2009-06-10T19:55:00Z</updated>
		<published>2009-06-10T19:55:00Z</published>
		<category scheme="http://www.symphonious.net" term="Photography" />		<summary type="html"><![CDATA[
       I&#39;ve held off asking this here because there’s tons of generic lens advice on the internet and it’s too hard to describe what I’m looking for to get specific advice (because frankly I don’t really know). Anyway, I currently have two lenses &#8211; one a Canon EF 18-55mm [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/06/10/canon-lens-recommendations/">&lt;p&gt;
       I&amp;#39;ve held off asking this here because there’s tons of generic lens advice on the internet and it’s too hard to describe what I’m looking for to get specific advice (because frankly I don’t really know). Anyway, I currently have two lenses &amp;#8211; one a Canon EF 18-55mm IS 3.5-5.6 lens, it’s what I use almost exclusively. The other is a Tamron 55-200 f4-5.6 which I use when I need the extra zoom but largely ignore because it takes noticeably inferior shots. I also find that 55mm is just a bit too much zoom for a lot of the holiday shots I want to fire off quickly so I miss a lot if I have the bigger zoom lens on my camera.
    &lt;/p&gt;
    &lt;p&gt;
       I don’t really do well with inside shots at the moment &amp;#8211; a faster lens (or some off-camera lighting and associated expertise) would be handy for that.
    &lt;/p&gt;
    &lt;p&gt;
       So my choice seems to be between:
    &lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;
        get a better quality zoom of about the same range as the Tamron with image stabilizing so the zoom is a bit more useful, higher quality and particular a bit better in low light situations where the Tamron struggles.
      &lt;/li&gt;
      &lt;li&gt;
        get a lens somewhere in the middle &amp;#8211; I saw a Cannon lens that went from 28mm-135mm somewhere which would fit the range of zoom I use really nicely and would be a handy all purpose lens.
      &lt;/li&gt;
      &lt;li&gt;
        get one of the “nifty fifty” type prime lenses, which tend to be nice and fast and work well for the general indoor with people doing stuff kind of shots.
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
       Or possibly there’s something else I should be considering…  There’s way too many options out there.
    &lt;/p&gt;
    &lt;p&gt;
        
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/tBLgLiYuxl4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/06/10/canon-lens-recommendations/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/06/10/canon-lens-recommendations/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Cheaters Never Prosper]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/06/02/cheaters-never-prosper/" />
		<id>http://www.symphonious.net/?p=1185</id>
		<updated>2009-06-02T10:09:01Z</updated>
		<published>2009-06-02T10:09:01Z</published>
		<category scheme="http://www.symphonious.net" term="Code and Geek Stuff" />		<summary type="html"><![CDATA[
       The development I seem to do these days tends to run at the extremes of reliability &#8211; either it has to be fully tested, nice, clean, production ready code, or it’s complete throw away code where development time is the only consideration.
    
   [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/06/02/cheaters-never-prosper/">&lt;p&gt;
       The development I seem to do these days tends to run at the extremes of reliability &amp;#8211; either it has to be fully tested, nice, clean, production ready code, or it’s complete throw away code where development time is the only consideration.
    &lt;/p&gt;
    &lt;p&gt;
       The advantage of doing this rapid fire development is that you wind up with proof of concept code for most situations you’re every likely to run into.  The disadvantage is that the code is rubbish and probably no use to you at all. That bit me once again today.  I wanted to quickly whip up a plugin that makes pasting plain text into EditLive! work the way I want it to. I have a plugin that filters pasted content to wrap it in a blockquote for my blog so clearly I could just reuse that as a starting point.  Sadly, I cheated:
    &lt;/p&gt;
&lt;pre class="code"&gt;
&lt;span class="java_plain"&gt;    &lt;/span&gt;&lt;span class="java_keyword"&gt;protected&lt;/span&gt;&lt;span class="java_plain"&gt; &lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt; pasteAsQuote&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt; &lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;
&lt;span class="java_plain"&gt;        getBean&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;insertHTMLAtCursor&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;&amp;#60;blockquote&amp;#62;&amp;#38;nbsp;&amp;#60;/blockquote&amp;#62;&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;
&lt;span class="java_plain"&gt;        getHTMLPane&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;setSelectionStart&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;getHTMLPane&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getCaretPosition&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt; &lt;/span&gt;&lt;span class="java_operator"&gt;-&lt;/span&gt;&lt;span class="java_plain"&gt; &lt;/span&gt;&lt;span class="java_literal"&gt;2&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;
&lt;span class="java_plain"&gt;        getHTMLPane&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;setSelectionEnd&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;getHTMLPane&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getCaretPosition&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt; &lt;/span&gt;&lt;span class="java_operator"&gt;-&lt;/span&gt;&lt;span class="java_plain"&gt; &lt;/span&gt;&lt;span class="java_literal"&gt;1&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;
&lt;span class="java_plain"&gt;        getHTMLPane&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;paste&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;
&lt;span class="java_plain"&gt;    &lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;
&lt;/pre&gt;
    &lt;p&gt;
       Why bother actually filtering the clipboard content when you can just insert a blockquote tag manually, select it’s content and then paste.  The hard coded offsets are pretty much guaranteed to cause sudden hair loss in the future when something changes, but I’ve got to admit, it’s been working really well for now.
    &lt;/p&gt;
    &lt;p&gt;
       It just doesn’t help me with my currently task…
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/7ps_8Q4aQk4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/06/02/cheaters-never-prosper/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/06/02/cheaters-never-prosper/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
	</feed><!-- Dynamic page generated in 0.305 seconds. --><!-- Cached page generated by WP-Super-Cache on 2009-07-11 03:52:41 -->
