<?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>Symphonious &#187; General</title> <atom:link href="http://www.symphonious.net/category/general/feed/" rel="self" type="application/rss+xml" /><link>http://www.symphonious.net</link> <description>Living in a state of accord.</description> <lastBuildDate>Wed, 25 Jan 2012 21:25:34 +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>More Career Advice</title><link>http://www.symphonious.net/2011/12/11/more-career-advice/</link> <comments>http://www.symphonious.net/2011/12/11/more-career-advice/#comments</comments> <pubDate>Sun, 11 Dec 2011 17:44:41 +0000</pubDate> <dc:creator>Adrian Sutton</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.symphonious.net/2011/12/11/more-career-advice/</guid> <description><![CDATA[Following on from my last post, Jason Adam Young has some excellent advice to help you continually get better and better and building software and perhaps more importantly, be more and more valuable to whoever you happen to be working for.]]></description> <content:encoded><![CDATA[Following on from my last post, <a
href="http://rambleon.org/2011/12/01/career-advice/">Jason Adam Young has some excellent advice</a> to help you continually get better and better and building software and perhaps more importantly, be more and more valuable to whoever you happen to be working for.]]></content:encoded> <wfw:commentRss>http://www.symphonious.net/2011/12/11/more-career-advice/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Career Progression in Technology</title><link>http://www.symphonious.net/2011/12/06/career-progression-in-technology/</link> <comments>http://www.symphonious.net/2011/12/06/career-progression-in-technology/#comments</comments> <pubDate>Tue, 06 Dec 2011 18:45:15 +0000</pubDate> <dc:creator>Adrian Sutton</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.symphonious.net/?p=1598</guid> <description><![CDATA[This afternoon during an interview, a potential new hire at LMAX asked what LMAX could offer in the way of career progression. Since I’ve been thinking a fair bit about what comes next in my career now that I’m moving back to Australia I thought I had a pretty good answer and that it might [...]]]></description> <content:encoded><![CDATA[<p> This afternoon during an interview, a potential new hire at LMAX asked what LMAX could offer in the way of career progression. Since I’ve been thinking a fair bit about what comes next in my career now that <a
href="http://www.symphonious.net/2011/11/27/looking-for-work-in-australia/">I’m moving back to Australia</a> I thought I had a pretty good answer and that it might be worth sharing here<a
class="footnote" id="footlink2:1323196996971" href="#footnote2:1323196996971">2</a>.</p><p> In most industries career progression is signified by ever fancier sounding job titles, but for a software developer, the fancier the title sounds the less likely you are to actually do any development. Essentially, career progression often amounts to career migration – into “architecture”<a
class="footnote" id="footlink1:1323196219398" href="#footnote1:1323196219398">1</a> or managements. If you really love developing software though you need to look at it a different way. If I spend the rest of my career as a “Senior Software Engineer” I’ll be pretty happy, so long as I can keep honing my skills and becoming more valuable to the companies I work for. Ideally I’d like the pay I take home to grow in line with that value.</p><p> Given that world view, the best way I’ve found to progress my career as a software engineer is to work in a place where I’m surrounded by people smarter than I and where I regularly feel stupid. Feeling stupid is a pre-requisite to really learning – it means you’ve just found an area where you have a large gap in your knowledge. If you also work with people smarter than yourself that becomes an opportunity to learn from them.</p><p> What’s particularly amazing about this process – and this is something that working at LMAX has really taught me – is that if you spend enough time being excited by the learning opportunities that feeling stupid highlights, you find yourself suddenly providing the knowledge to teach other people who are feeling stupid. So now you get the satisfaction of feeling stupid and learning something new, plus the opportunity to demonstrate how much you’ve learnt by sharing that knowledge with others.</p><p> If that’s not an awesome way to spend your career, I don’t know what is<a
class="footnote" id="footlink3:1323197059861" href="#footnote3:1323197059861">3</a>.</p><p
class="footnote"> <a
href="#footlink1:1323196219398" id="footnote1:1323196219398">1</a> &#8211; read, powerpoint production<a
class="footnotereturn" href="#footlink1:1323196219398">↩</a></p><p
class="footnote"> <a
href="#footlink2:1323196996971" id="footnote2:1323196996971">2</a> &#8211; I think I was much more succinct when speaking off the cuff <a
class="footnotereturn" href="#footlink2:1323196996971">↩</a></p><p
class="footnote"> <a
href="#footlink3:1323197059861" id="footnote3:1323197059861">3</a> &#8211; and if you happen to have that kind of environment and are looking for new employees, <a
href="/cv/">my CV is online</a> <a
class="footnotereturn" href="#footlink3:1323197059861">↩</a></p>]]></content:encoded> <wfw:commentRss>http://www.symphonious.net/2011/12/06/career-progression-in-technology/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Looking for Work In Australia</title><link>http://www.symphonious.net/2011/11/27/looking-for-work-in-australia/</link> <comments>http://www.symphonious.net/2011/11/27/looking-for-work-in-australia/#comments</comments> <pubDate>Sun, 27 Nov 2011 20:54:49 +0000</pubDate> <dc:creator>Adrian Sutton</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.symphonious.net/?p=1593</guid> <description><![CDATA[After four years living in the UK, my wife and I have decided to move back to Australia mid-February 2012 to be closer to family. As such, I’m now starting to look at job opportunities back in Oz. If you&#39;re hiring, I&#39;d love to hear from you and discuss how we might work together. My [...]]]></description> <content:encoded><![CDATA[<p> After four years living in the UK, my wife and I have decided to move back to Australia mid-February 2012 to be closer to family. As such, I’m now starting to look at job opportunities back in Oz. If you&#39;re hiring, <a
href="mailto:adrian@symphonious.net">I&#39;d love to hear from you</a> and discuss how we might work together. <a
href="/cv/">My CV</a> is available online to give you an idea of my experience and of course the backlog of this blog shows some of my thinking and learning throughout the years<a
class="footnote" id="footlink1:1322426906768" href="#footnote1:1322426906768">1</a>.</p><p> My one key criteria is that I&#39;m looking for a role that provides lots of challenges and opportunities to learn. I&#39;m not particularly concerned with what language or the particular technologies used, but I do believe strongly that Agile methods, automated testing, continuous delivery and a focus on quality are essential to success.</p><p> If you think you could use someone like me or have any questions feel free to <a
href="mailto:adrian@symphonious.net">drop me an email</a>.</p><p
class="footnote"> <a
href="#footlink1:1322426906768" id="footnote1:1322426906768">1</a> &#8211; as well as plenty of my mistakes but that’s just part of learning<a
class="footnotereturn" href="#footlink1:1322426906768">↩</a></p>]]></content:encoded> <wfw:commentRss>http://www.symphonious.net/2011/11/27/looking-for-work-in-australia/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Enterprisey Interfaces</title><link>http://www.symphonious.net/2011/06/02/enterprisey-interfaces/</link> <comments>http://www.symphonious.net/2011/06/02/enterprisey-interfaces/#comments</comments> <pubDate>Thu, 02 Jun 2011 17:39:25 +0000</pubDate> <dc:creator>Adrian Sutton</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.symphonious.net/?p=1531</guid> <description><![CDATA[James Turner: Unneeded interfaces are not only wasted code, they make reading and debugging the code much more difficult, because they break the link between the call and the implementation. The only way to find the implementing code is to look for the factory, and see what class is being provisioned to implement the interface. [...]]]></description> <content:encoded><![CDATA[<p> <a
href="http://radar.oreilly.com/2011/06/devwir-ios-lawsuits-openoffice-apache-java.html">James Turner</a>:</p><blockquote><p> Unneeded interfaces are not only wasted code, they make reading and debugging the code much more difficult, because they break the link between the call and the implementation. The only way to find the implementing code is to look for the factory, and see what class is being provisioned to implement the interface. If you&#39;re <strong>really</strong> lucky, the factory gets the class name from a property file, so you have to look another level down.</p></blockquote><p> I agree so much I feel compelled to repost that without anything significant to add. This anti-pattern seems to be driven by the idea that it separates the interface (api) from the implementation. However that’s a fallacy – what it really does is <em>duplicate</em> the interface which is now specified by both the interface (api) and the implementation. It’s “enterprisey” thinking applied to the class level and should be removed wherever it is encountered.</p>]]></content:encoded> <wfw:commentRss>http://www.symphonious.net/2011/06/02/enterprisey-interfaces/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>1001</title><link>http://www.symphonious.net/2010/10/08/1001/</link> <comments>http://www.symphonious.net/2010/10/08/1001/#comments</comments> <pubDate>Fri, 08 Oct 2010 08:48:41 +0000</pubDate> <dc:creator>Adrian Sutton</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.symphonious.net/?p=1453</guid> <description><![CDATA[This is the 1001th post to this blog. Fittingly, the 1000th post was actually reasonably technical. Being late to the blogging craze I started on 25th January 2004, 2448 days ago. A average posting rate of roughly every 2 and a half days is pretty good &#8211; much better than I would have expected actually.]]></description> <content:encoded><![CDATA[<p> This is the 1001th post to this blog. Fittingly, the <a
href="http://www.symphonious.net/2010/10/07/optimising-javascript/">1000th post</a> was actually reasonably technical. Being late to the blogging craze I started on 25th January 2004, 2448 days ago. A average posting rate of roughly every 2 and a half days is pretty good &#8211; much better than I would have expected actually.</p>]]></content:encoded> <wfw:commentRss>http://www.symphonious.net/2010/10/08/1001/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Hello World!</title><link>http://www.symphonious.net/2010/09/16/hello-world/</link> <comments>http://www.symphonious.net/2010/09/16/hello-world/#comments</comments> <pubDate>Thu, 16 Sep 2010 16:40:21 +0000</pubDate> <dc:creator>Adrian Sutton</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.symphonious.net/?p=1427</guid> <description><![CDATA[It’s already been mentioned on my travel/personal stuff blog but news this good should be shared as widely as possible. My wife and I are expecting a baby in April of next year. We’re very excited and pleased that Mum and baby are both doing well. If you’re interested in how things progress, we’ll be [...]]]></description> <content:encoded><![CDATA[<p> It’s already been mentioned on <a
href="http://www.thesuttons.name/">my travel/personal stuff blog</a> but news this good should be shared as widely as possible. My wife and I are expecting a baby in April of next year. We’re very excited and pleased that Mum and baby are both doing well.  If you’re interested in how things progress, we’ll be posting that over at “<a
href="http://www.thesuttons.name/">The Suttons</a>”.</p><p> <img
height="560" width="800" alt="Ultrasound Image" src="http://www.thesuttons.name/wp-content/uploads/2010/09/Scan_7364774821782114974.jpg" /></p>]]></content:encoded> <wfw:commentRss>http://www.symphonious.net/2010/09/16/hello-world/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Invest in Oil Exploration: Advertising Has a Long Way To Go&#8230;</title><link>http://www.symphonious.net/2010/07/16/invest-in-oil-exploration-advertising-has-a-long-way-to-go/</link> <comments>http://www.symphonious.net/2010/07/16/invest-in-oil-exploration-advertising-has-a-long-way-to-go/#comments</comments> <pubDate>Fri, 16 Jul 2010 08:25:03 +0000</pubDate> <dc:creator>Adrian Sutton</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.symphonious.net/?p=1380</guid> <description><![CDATA[Despite all the hype about how everyone’s making advertising more targeted and therefore more useful to people, you still get gaffs like this one: The advertising industry is booming and ads are popping up in more and more places, but the quality of ads are still really bad. It’s no wonder ad blocking technology has [...]]]></description> <content:encoded><![CDATA[<p> Despite all the hype about how everyone’s making advertising more targeted and therefore more useful to people, you still get gaffs like this one:</p><p
style=" text-align: center;"> <img
alt='Screenshot: &quot;BP stops flow of oil into Gulf of Mexico&quot; with and ad for &quot;Invest in Oil Exploration&quot;' src="http://www.symphonious.net/wp-content/uploads/2010/07/photo_8504507574633986252.png" /></p><p> The advertising industry is booming and ads are popping up in more and more places, but the quality of ads are still really bad. It’s no wonder ad blocking technology has become so popular.</p><p> On a side note, it’s also somewhat worrying that there’s a minimum $10,000 investment for finding oil in the Gulf of Mexico &#8211; seems pretty easy to find at the moment…</p>]]></content:encoded> <wfw:commentRss>http://www.symphonious.net/2010/07/16/invest-in-oil-exploration-advertising-has-a-long-way-to-go/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Null Security Manager Breaks LiveConnect in OS X Firefox</title><link>http://www.symphonious.net/2010/06/14/null-security-manager-breaks-liveconnect-in-os-x-firefox/</link> <comments>http://www.symphonious.net/2010/06/14/null-security-manager-breaks-liveconnect-in-os-x-firefox/#comments</comments> <pubDate>Mon, 14 Jun 2010 08:33:00 +0000</pubDate> <dc:creator>Adrian Sutton</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.symphonious.net/?p=1368</guid> <description><![CDATA[Normally applets run in a security sandbox, much like JavaScript, but with signed applets those restrictions are lifted and the applet can do anything. At least, that’s the theory &#8211; in practice most implementations leave a security manager instance installed but with significantly reduced restrictions (such that most programs will never be affected by them). [...]]]></description> <content:encoded><![CDATA[<p> Normally applets run in a security sandbox, much like JavaScript, but with signed applets those restrictions are lifted and the applet can do anything. At least, that’s the theory &#8211; in practice most implementations leave a security manager instance installed but with significantly reduced restrictions (such that most programs will never be affected by them). To get around these remaining restrictions, applets can remove or replace the security manager:</p><pre>
System.setSecurityManager(null);
</pre><p> Having set a null security manager though, you will start to get NullPointerExceptions in Firefox on OS X when you try to call Java methods from JavaScript (via LiveConnect). Basically, Firefox is assuming that there will always be a security manager in place. To get LiveConnect working again, rather than setting the security manager to null, simply create a new security manager that allows everything:</p><pre>
System.setSecurityManager(new SecurityManager() {
    @Override
    public void checkPermission(Permission perm) {
    }
});
</pre><p> No more exceptions from Firefox and LiveConnect is working again, but still no restrictions on what you can do. For the record, the exception Firefox will give is:</p><pre>
java.lang.NullPointerException
at netscape.oji.JNIUtils.checkClassAccess(JNIUtils.java:106)
at netscape.oji.JNIUtils.checkClassAccess(JNIUtils.java:68)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.privateGetPublicMethods(Class.java:2547)
at java.lang.Class.getMethods(Class.java:1410)
at netscape.oji.JNIRunnable.run(Native Method)
at netscape.oji.LiveConnectProxy.run(LiveConnectProxy.java:48)
</pre>]]></content:encoded> <wfw:commentRss>http://www.symphonious.net/2010/06/14/null-security-manager-breaks-liveconnect-in-os-x-firefox/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Aperture 3 Keeps Adding Incorrect Place Name</title><link>http://www.symphonious.net/2010/05/08/aperture-3-keeps-adding-incorrect-place-name/</link> <comments>http://www.symphonious.net/2010/05/08/aperture-3-keeps-adding-incorrect-place-name/#comments</comments> <pubDate>Sat, 08 May 2010 12:33:13 +0000</pubDate> <dc:creator>Adrian Sutton</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.symphonious.net/?p=1348</guid> <description><![CDATA[I’ve been trying to solve this problem pretty much since Aperture 3 came out with it’s Places/GPS support. Every time I added location information to a photo, it wound up being tagged as where I really took the photo but also a completely incorrect, but consistent location (for me it was always The House of [...]]]></description> <content:encoded><![CDATA[<p> I’ve been trying to solve this problem pretty much since Aperture 3 came out with it’s Places/GPS support. Every time I added location information to a photo, it wound up being tagged as where I really took the photo but also a completely incorrect, but consistent location (for me it was always The House of Binns in Scotland). Location information pops up in so many different places in Aperture and displayed in so many different ways that it was really hard to track down what was going on &#8211; sometimes it would have the first part of the place name right, but then had the country incorrectly shown as Scotland.</p><p> Today I finally worked out what was happening. The key thing to understand is that your photos aren’t tagged with a place name, the photo metadata only includes GPS coordinates. Aperture then maintains a separate database of place names which includes the name, the GPS coordinate at the center and the size of the place (as a radius). So a place record for your home address would have a very small radius, but you could just as easily create a place for an entire country with a big radius. When Aperture wants to display location information, it simply finds a list of all the places it knows about whose location and radius includes the photo’s GPS coordinates. As such, a photo might be in any number of “places”.</p><p> So the reason the photos are being incorrectly labelled, is that somehow a place was created called “The House of Binns” with it’s central location at The House of Binns in Scotland, but it’s radius roughly big enough to include most of Europe. So any photo taken anywhere in the UK or half of Europe was within the range of this place called “The House of Binns”.</p><p> To view the places that you’ve defined, simply go to the “Metadata” menu and choose “Manage My Places…”. You’ll get a dialog very much like the one for Assign Location but when you click on a place name in the left column a little minus icon appears. Simply click that icon to remove the place from your database, or adjust the location and radius on the map. Deleting places in this dialog won’t remove the GPS coordinates from your photos &#8211; only the particular name mapping you’ve added.</p>]]></content:encoded> <wfw:commentRss>http://www.symphonious.net/2010/05/08/aperture-3-keeps-adding-incorrect-place-name/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>The Joy of Browser Selection</title><link>http://www.symphonious.net/2010/04/21/the-joy-of-browser-selection/</link> <comments>http://www.symphonious.net/2010/04/21/the-joy-of-browser-selection/#comments</comments> <pubDate>Wed, 21 Apr 2010 18:33:49 +0000</pubDate> <dc:creator>Adrian Sutton</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.symphonious.net/?p=1338</guid> <description><![CDATA[Anyone who’s done much work with JavaScript has probably discovered that the selection APIs are completely different in Internet Explorer vs the rest of the world, what comes as a bit more of a surprise once you start using them in anger is that FireFox is actually quite different to all the other W3C compliant [...]]]></description> <content:encoded><![CDATA[<p> Anyone who’s done much work with JavaScript has probably discovered that the selection APIs are completely different in <a
href="http://quirksmode.org/dom/range_intro.html">Internet Explorer vs the rest of the world</a>, what comes as a bit more of a surprise once you start using them in anger is that FireFox is actually quite different to all the other W3C compliant browsers in an important way as well.</p><p> If all you ever want to do is retrieve the selection or you only want to work with ranges rather than selection, you’ll probably never encounter this, but as soon as you use window.getSelection().addRange() you’re going to get bitten.  The difference is that FireFox will preserve whatever range you give it precisely as you original created it.  The other browsers won’t.</p><p> Start with a simple document with three paragraphs:</p><pre>
&#60;body&#62;
  &#60;p&#62;Paragraph 1&#60;/p&#62;
  &#60;p&#62;Paragraph 2&#60;/p&#62;
  &#60;p&#62;Paragraph 3&#60;/p&#62;
&#60;/body&#62;
</pre><p> Create a range where the startContainer and endContainer are the body element:</p><pre>
var range = document.createRange();
range.setStart(document.body, 0);
range.setEnd(document.body, 1);
</pre><p> The range now encompasses the entirety of the first paragraph element &#8211; including the actual P element itself, not just the text within. Now add that to a selection:</p><pre>
window.getSelection().addRange(range);
</pre><p> In FireFox this selects the paragraph element, but in Opera, Safari and Chrome the selection is now just the text within the paragraph. So in FireFox and only FireFox, the statements below are true:</p><pre>
var selected = window.getSelection().getRangeAt(0);
selected.startContainer === range.startContainer === document.body;
selected.endContainer === range.endContainer === document.body;
</pre><p> This isn’t an arbitrary change by Opera, Safari and Chrome &#8211; as far as I can tell, they really can’t select actual elements, only textual ranges.  So if you add a range that includes elements, the selection winds up encompassing just the text of those elements and that’s correctly reflected in the range the selection returns. I’m unsure which behavior is correct or whether this is just a missing part of the standard altogether.  It appears that the whole concept of a selection object is an old Netscape 4 thing that has never actually been defined<a
class="footnote" id="footlink1:1271874401380" href="#footnote1:1271874401380">1</a>.</p><p> Unfortunately, selection is one of those surprisingly difficult concepts to get right in any rich text editor due to the complexity of what users want to select and how that affects the operations they will then perform. With these kinds of differences in browser behavior, JavaScript based editors really are fighting an uphill battle that they shouldn’t have to.</p><p
class="footnote"> <a
href="#footlink1:1271874401380" id="footnote1:1271874401380">1</a> &#8211; Range has been defined by the W3C, but the selection object doesn’t appear to have been.<a
class="footnotereturn" href="#footlink1:1271874401380">↩</a></p>]]></content:encoded> <wfw:commentRss>http://www.symphonious.net/2010/04/21/the-joy-of-browser-selection/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
