<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<language>en-gb</language>
		<title>stuconnolly.com</title>
		<link>http://stuconnolly.com/</link>
		<description>Stuart Connolly is a Software Engineer and active Open Source software developer from Edinburgh, Scotland.</description>
		<copyright>Copyright 2012 Stuart Connolly</copyright>
		<generator>Serve 0.8</generator>
		<atom:link href="http://stuconnolly.com/blog/feed/" rel="self" type="application/rss+xml"/>
		<item>
			<title>Sequel Pro 0.9.9</title>
			<dc:creator>Stuart Connolly</dc:creator>
			<pubDate>Thu, 07 Jul 2011 20:28:00 +0000</pubDate>
			<link>http://stuconnolly.com/blog/sequel-pro-099/</link>
			<guid>http://stuconnolly.com/blog/sequel-pro-099/</guid>
			<description><![CDATA[<p><a href="http://www.sequelpro.com/">Sequel Pro</a> 0.9.9 was <a href="http://www.sequelpro.com/blog/2011.07/sequel-pro-0-9-9/">released</a> last Friday (July 1<sup>st</sup>). As with every release, this one includes a huge number of new features, enhancements and bug fixes, especially more so this time considering it's been so long since our last release back in <a href="http://www.sequelpro.com/blog/2010.08/sequel-pro-0-9-8-1/">August</a>. As always we're trying to keep to a better and more frequent release schedule in the future, but needless to say, throughout the long periods between releases, Sequel Pro has been and will be (from my point of view) continuously developed and improved.</p>

<p>A few of the major new features and functionality include tab support, allowing you to have multiple connections per window, a new <a href="http://www.sequelpro.com/bundles/">bundle</a> (plugin) system, allowing anyone to extend the application's functionality and a completely redesigned data export system.</p>

<p>The last one on that list is one that I started out doing myself (with a lot of help from the other devs fixing bugs), having <a href="http://stuconnolly.com/blog/redesigning-sequel-pros-export-architecture/">detailed</a> my plans for it way back in October 2009 and then subsequently how I got on with the redesign once it was <a href="http://stuconnolly.com/blog/sequel-pro-export-redesign/">merged</a> back into trunk in May 2010. The reason it's taken so long to see a release is because it was merged back into trunk just after a major release (version 0.9.8) and the release after that only included bug fixes.</p>

<p>As I mentioned before, the redesign didn't exactly go to plan, but I'm happy with how it's turned out and more that happy now that it's been released for everyone test and provide their feedback. The UI is a significant improvement over what it was like before and operationally the architecture is a lot more modular, which should allow us to easily enhance it in the future by implementing support for more export formats.</p>

<p>Overall the response to this release has been amazing, probably our best yet when looking at the emails and the number of donations coming in, so it's been more than worth it. I'm sure a lot of users that aren't aware of the <a href="http://nightly.sequelpro.com/">nightly</a> builds thought that project might have died given the time between releases, so hopefully it's been a pleasant surprise and a reminder that's it's definitely still alive.</p>

<p>On a side note, something that I keep meaning to dedicate a an actual post to is the reason why I love open source software and why I spend so much of my spare time involved in it. Aside from continuously learning, I guess the response to this release highlights those reasons; nothing makes it more worthwhile than hearing from users on how much they love the app and how it has become and integral application in their daily workflow.</p>]]></description>
		</item>
		<item>
			<title>Why Use Clang?</title>
			<dc:creator>Stuart Connolly</dc:creator>
			<pubDate>Sun, 24 Oct 2010 16:52:00 +0000</pubDate>
			<link>http://stuconnolly.com/blog/why-use-clang/</link>
			<guid>http://stuconnolly.com/blog/why-use-clang/</guid>
			<description><![CDATA[<p><a href="http://clang.llvm.org/">Clang</a> is a compiler front-end for C, C++, Objective-C and (<a href="http://llvm.org/releases/2.8/docs/ReleaseNotes.html#clang">now</a>) Objective-C++. It's built on top of the <a href="http://llvm.org/">Low Level Virtual Machine</a> (LLVM), the project that aims to provide a modern compiler infrastructure, that projects (like Clang) can be built upon. Like LLVM, Clang aims to provide a modern front-end compiler for the aforementioned languages and is seen to be the eventual drop-in replacement for <a href="http://gcc.gnu.org/">GCC</a>.</p>

<p>So enough about what Clang is, why bother using it when GCC is so widely supported, as well as some might argue, nothing actually wrong with it. If it ain't broke don't fix it, right? Ok, so I'm not going to go into any great detail about why GCC is so flawed and Clang isn't (because no software is perfect, not even compilers), mainly because I don't know enough about either project to do so and I'm not going to start pretending like I do. I am however going to point out some benefits of Clang and why you should consider looking into it.</p>

<p>The development of Clang is actively sponsored by Apple and although it's not currently (though it should be within the near future) the default compiler (<a href="http://gcc.gnu.org/gcc-4.2/">GCC 4.2.1</a> is) when installing the developer tools, it is included in the form of Clang 1.5. If your project hasn't got a huge dependency on GCC, then I'd definitely recommend giving Clang a try and checking out firsthand the benefits over GCC that it can provide. Since it's designed to be compatible with GCC as much as possible, it's usually as simple as selecting it as the compiler within your Xcode project or a target's build settings.</p>

<p>The most obvious benefit of using Clang is performance. Performance is said to be one of the key aims of the project, in the sense of performing significantly faster at compile time as well as subsequently producing more efficient binaries than GCC, all the while using significantly less memory in the process. Check out the <a href="http://clang.llvm.org/features.html#performance">performance</a> section of Clang's <em>Features and Goals</em> page as well as the dedicated <a href="http://clang.llvm.org/performance.html">performance</a> page for specific in-depth details and stats on how it performs compared to GCC. I say that performance is the most obvious benefit to using Clang, because it really is that noticeable once you start using it. For example, we switched to building <a href="http://www.sequelpro.com/">Sequel Pro</a> using Clang a while ago, and the performance benefits during builds were immediate:</p>

<p><strong>GCC 4.2.1:</strong></p>

<pre>
real	4m13.692s
user	6m14.724s
sys	0m57.559s
</pre>

<p><strong>Clang 1.5:</strong></p>

<pre>
real	2m18.764s
user	3m11.980s
sys	0m32.187s
</pre>

<p>The above times were obtained from executing the following command, which builds a release build<sup id="fnr1"><a href="#fn1">1</a></sup> of Sequel Pro, including all it's dependencies:</p>

<pre>
time xcodebuild -project sequel-pro.xcodeproj -configuration Release build
</pre>

<p>There are a lot of factors to consider when profiling the performance of a particular process, the most obvious being the hardware it's running on<sup id="fnr2"><a href="#fn2">2</a></sup> and the current utilisation of the CPU, memory and other system resources during the build and the list goes on, but being almost twice as fast when performing a clean build is nonetheless impressive. It's also pretty obvious, but the above times are for building the entire application, not just compiling the Objective-C source files. This means it includes the copying of resources (images, templates, preference <code>plists</code>, etc) and frameworks as well as compiling NIB/XIB files using <code>ibtool</code>. That is, the general process of packaging all of the resources and binaries that results in a usable application. Clang's <a href="http://clang.llvm.org/performance.html">performance</a> page refers to this time as <em>non-compiler</em>, an overhead of the build system (i.e. <code>xcodebuild</code>). You generally won't see such a big performance hit when compiling a pure C command line program. It also goes without saying that you're not going to be performing a clean release build every time you change a source file during development, which is where (if you're on a Mac that is) Xcode's or <code>xcodebuild</code>'s (which are essentially the same thing) incremental compilation kicks in, so you might not see huge speed improvements every time, but it is definitely faster and less memory intensive.</p>

<p>Sequel Pro isn't exactly a massive project. It isn't small, but it has a relatively simple source tree and only 5 dependencies, all of which are included in it's trunk. According to <a href="http://www.literatureandlatte.com/blog/?p=37">Xcode Statistician</a> Sequel Pro's source contains nearly 68,000 SLOC, excluding the source to all it's dependent frameworks that we build ourselves. It's therefore only fair that Clang be tested against another much larger project, for example, <a href="http://adium.im/">Adium</a>, which by my estimate contains roughly 150,000 SLOC. I chose Adium, because (1) my basic estimates show it's more than twice the size of Sequel Pro (and in actuality is probably much larger) and (2) because it's an OS X application it also incurs the same <em>non-compiler</em> overhead associated with building the entire application and not just compiling it's source. The results were not surprising:</p>

<p><strong>GCC 4.2.1:</strong></p>

<pre>
real	11m53.566s
user	15m9.794s
sys	4m32.265s
</pre>

<p><strong>Clang 1.5:</strong></p>

<pre>
real	7m44.828s
user	9m3.748s
sys	2m45.088s
</pre>

<p>Note that all of the above timed builds were done for <em>release</em> configurations<sup id="fnr3"><a href="#fn3">3</a></sup> of the respective applications and although they'll defer in some very slight ways the process is generally the same. The point is, performing a release and development (or debug) build of the same application is a very different process and release configurations were simply chosen in this case to put both compilers through their paces with respect to these differences. The main difference should be obvious, the target architectures that the resulting application should be able to run on are different. During development, it's generally expected that the built application is only going to be used by the developer and so there's not much point in building it for any other architecture<sup id="fnr4"><a href="#fn4">4</a></sup> other than the architecture of the developer's system. A release build on the other hand is intended to be distributed to your users and so should be built for whatever architectures you intend to support.</p>

<p>The above stats might show Clang out performing GCC, but both versions of the compilers are not exactly up to date. GCC 4.2.1 was released back in <a href="http://gcc.gnu.org/gcc-4.2/">July 2007</a> and although I don't have a specific release date for Clang 1.5, version one was released along with LLVM 2.6 in <a href="http://llvm.org/releases/2.6/docs/ReleaseNotes.html">October 2009</a>, so it's safe to assume it's less than a year old. It therefore might be unfair to compare these versions considering Clang has potentially well over two years of development time over GCC, but they're both the default versions included with Apple's developer tools. In some ways it could explain some of the large differences seen in compilation times between the two compilers, but I'm not convinced it can explain them all. Having said this I could be wrong.</p> 

<p>Finally, having established the relative age of both compiler versions I was interested in seeing how their latest and greatest versions would perform. I originally intended to use the most up to date release versions of both compilers, that being GCC 4.4.5 and Clang 2.8, both released this month on the 1<sup>st</sup> and 5<sup>th</sup> respectively, but that didn't exactly go to plan. Having spent hours trying to get GCC to compile cleanly I gave up, so this isn't as much as a comparison of the latest versions of GCC and Clang, but more of a <em>this is how the latest version of Clang compares to version 1.5</em>. In contrast to GCC, building LLVM/Clang was super easy, but it did take a bit of tweaking to get Xcode to use it properly, but I'll spare the details for another post. The following times are also from using a trunk build of LLVM/Clang, which is labelled as version 2.9 (i.e. the next stable release):</p>

<p><strong>Clang 2:</strong></p>

<p>Sequel Pro:</p>

<pre>
real	1m40.509s
user	2m34.364s
sys	0m17.281s
</pre>

<p>Adium:</p>

<pre>
real	7m52.085s
user	10m14.829s
sys	2m18.600s
</pre>

<p>As the times indicate, the results are varied. Sequel Pro builds quite a bit faster (~40 seconds), but building Adium is actually slightly slower. As I already mentioned there are a <em>lot</em> of factors to consider when profiling performance, especially time so I'd keep these in mind when comparing the numbers.<p>

<p>Finally, a performance analysis wouldn't be complete without some colourful graphs or charts illustrating the data. The following charts therefore show all of the above builds split out by compiler (note that times are in minutes and <em>shorter</em> bars are <em>better</em>):</p>

<img src="/images/sequel-pro-build-times.png" alt="Sequel Pro Build Times" />

<img src="/images/adium-build-times.png" alt="Adium Build Times" />

<p>The above times include all of the output from the <code>time</code> command, and while interesting to see the user and system CPU time spent involved in executing the commands<sup id="fnr5"><a href="#fn5">5</a></sup>, from a user's perspective the <em>real</em> time is the one that matters. That is, it indicates the actual real world elapsed time that it took for the command to complete.</p>

<p>So if you've read this far, then in short I think Clang is really awesome and think you should too. I've only presented one of the main benefits of it over GCC here and I'm not suggesting you should ditch GCC simply because of it, but rather you try it out and decide for yourself. Clang is not quite fully GCC compatible, but it also has a lot to offer that GCC doesn't that I haven't already mentioned. For example, it provides much more informative (and less cryptic) warning and error messages (diagnostics), much better IDE integration and a very impressive <a href="http://clang-analyzer.llvm.org/">static analyzer</a> to help track down bugs, specifically potential memory leaks in your applications.</p>

<p><em class="highlight"><strong>Update:</strong> Something I failed to notice during my tests is that Clang 1.5 does not support compiling for the PPC (PowerPC) architecture. Attempting to do so produces the following warning: <code>clang: warning: not using the clang compiler for the 'powerpc' architecture</code>, at which point it will fallback to using GCC. You can see this by passing the <br /><code>-###</code> option to see the commands that it would execute during compilation. The fact that the PPC architecture isn't fully supported is actually mentioned in the Clang <a href="http://clang.llvm.org/docs/UsersManual.html#target_arch_other">manual</a> where it states that some support is included, but significant pieces are still missing. I guess PPC support either didn't exist or wasn't enabled in Clang 1.5. This warning however is not present when using version built from trunk (2.9) and using the <code>-###</code> option shows that Clang is at least used to generate the assembly, but it still falls back to GCC for machine code generation. This small difference could potentially explain some of the performance improvement that Clang 2.9 has over 1.5.</p></em></p>

<div id="footnotes">
	<ol>
		<li id="fn1">A release build of Sequel Pro is built for 32/64-bit i386 (Intel) and 32-bit PPC (PowerPC) architectures. <a href="#fnr1">&#8617;</a></li>
		<li id="fn2">In this case the hardware used was a 2006 MacBook Pro with a 2 GHz Core Duo Yonah processor, 2GB RAM and 320GB 5400RPM drive. I'd be interested to see how well both GCC and Clang take advantage of huge amounts of parallelism and memory available in current hardware, for example, an 8 or 12-Core Mac Pro.<a href="#fnr2">&#8617;</a></li>
		<li id="fn3">Both Sequel Pro and Adium's trunk source were used when building both applications, not their most recent stable release. Also, unlike Adium's current stable release, which is built as a 32-bit universal binary (32-bit i386/PPC), it's trunk (which is intended for all versions beyond 1.4) is built for the same architectures as Sequel Pro (32/64-bit i386, 32-bit PPC). <a href="#fnr3">&#8617;</a></li>
		<li id="fn4">You could argue the case for building an application for other architectures other than for the system that it's being run on during development or debugging if you're actually testing or debugging architecture specific features and issues. <a href="#fnr4">&#8617;</a></li>
		<li id="fn5">Looking into the user and system CPU time spent during the build process should give you a good idea of what the compilers spend the majority of their time doing in terms of internal processes and system calls. <a href="#fnr5">&#8617;</a></li>
	</ol>
</div>]]></description>
		</item>
		<item>
			<title>Sequel Pro 0.9.8.1</title>
			<dc:creator>Stuart Connolly</dc:creator>
			<pubDate>Wed, 11 Aug 2010 11:58:00 +0000</pubDate>
			<link>http://stuconnolly.com/blog/sequel-pro-0981/</link>
			<guid>http://stuconnolly.com/blog/sequel-pro-0981/</guid>
			<description><![CDATA[<p><a href="http://www.sequelpro.com/">Sequel Pro</a> 0.9.8.1 was <a href="http://www.sequelpro.com/blog/2010.08/sequel-pro-0-9-8-1/">released</a> a few days ago. As is evident from the classic open source project version number, this was a bug fix release (our first one in fact) that addresses over 30 different issues, significantly improving the application's overall stability.</p>

<p>It's taken us this long to realise that we should have been doing this a lot more often from the very start of the project, so we're now committed to releasing two or three bug fix releases in between our 3-4 month major release cycle.</p>

<p>If you'd like to preview and test (obviously not on production systems) out the major new features coming in version 0.9.9 check out the <a href="http://nightly.sequelpro.com/">nightly</a> builds.</p>

<p>Check out the <a href="http://www.sequelpro.com/release-notes.html#release_0.9.8.1">release notes</a> for details on all the changes.</p>]]></description>
		</item>
		<item>
			<title>SafariTabs 0.7.3</title>
			<dc:creator>Stuart Connolly</dc:creator>
			<pubDate>Mon, 14 Jun 2010 17:30:00 +0000</pubDate>
			<link>http://stuconnolly.com/blog/safaritabs-073/</link>
			<guid>http://stuconnolly.com/blog/safaritabs-073/</guid>
			<description><![CDATA[<p><a href="http://stuconnolly.com/projects/safaritabs/">SafariTabs</a> 0.7.3 is now available for <a href="http://stuconnolly.com/downloads/safaritabs/0.7.3/">download</a>. I'll keep this short as my thoughts on SafariTabs and Safari 5 as well as most of the changes were mentioned in my <a href="http://stuconnolly.com/blog/safaritabs-and-safari-5/">previous</a> post, with the main change being added support for Safari 5 on Snow Leopard.</p>

<p>The full list of changes in this release can be found in the <a href="http://dev.stuconnolly.com/svn/safaritabs/trunk/Resources/VersionHistory.txt">version history</a>.</p>]]></description>
		</item>
		<item>
			<title>SafariTabs and Safari 5</title>
			<dc:creator>Stuart Connolly</dc:creator>
			<pubDate>Fri, 11 Jun 2010 12:13:00 +0000</pubDate>
			<link>http://stuconnolly.com/blog/safaritabs-and-safari-5/</link>
			<guid>http://stuconnolly.com/blog/safaritabs-and-safari-5/</guid>
			<description><![CDATA[<p>In short, I'm working on it.</p>

<p>For anyone interested in a little bit of history, when Snow Leopard (OS X 10.6) was released, which included further restrictions on InputManagers resulting in SIMBL having to be rewritten I was all set on discontinuing the development of <a href="http://stuconnolly.com/projects/safaritabs/">SafariTabs</a>. The reason being because its feature set was reducing with every release of Safari and to be honest I didn't like the new approach SIMBL was taking to 'injecting' plugins into target applications.</p>

<p>As well as the sheer number of requests I got about SafariTabs support on Snow Leopard, I quickly realised that I couldn't live without being able to undo the most recently closed tab, which is why I continued its development. I've always maintained that SafariTabs was created to add features and functionality to Safari that I personally found lacking and is the primary reason why I've resisted in adding every feature request that I've received. Much like the <a href="http://en.wikipedia.org/wiki/Unix_philosophy">UNIX philosophy</a>, it is intended to do one (or a few) things and do them well.</p>

<p>With the release of <a href="http://www.apple.com/safari/">Safari 5</a> Apple has finally added an extension API, tab undo support and the ability to control how links that open windows are treated (for example, automatically or always open them in new tabs). The last 2 features being those that SafariTabs provided and seeing that I rarely use the tab restore function I was again debating whether or not I should update it. Similar to when Snow Leopard was released I've since received a load of requests for Safari 5 compatibility, either because users genuinely use the tab restore or they've yet to realise that Safari now provides half of the features that SafariTabs once did. Regardless, there seems to be demand for it and so I appreciate your patience, while I work on updating it. I'll be releasing a compatibility (and reduced feature set) update within the next couple of days.</p>]]></description>
		</item>
		<item>
			<title>Sequel Pro Export Redesign</title>
			<dc:creator>Stuart Connolly</dc:creator>
			<pubDate>Tue, 25 May 2010 22:17:00 +0000</pubDate>
			<link>http://stuconnolly.com/blog/sequel-pro-export-redesign/</link>
			<guid>http://stuconnolly.com/blog/sequel-pro-export-redesign/</guid>
			<description><![CDATA[<p>Remember this <a href="http://stuconnolly.com/blog/redesigning-sequel-pros-export-architecture/">post</a> in which I detailed at great length my plans for redesigning <a href="http://sequelpro.com/">Sequel Pro's</a> export architecture? Well, a little over 6 months since the redesign branch was <a href="http://spbug.com/r/1537">created</a> I finally merged it back into trunk <a href="http://spbug.com/r/2244">yesterday</a>.</p>

<p>As expected the new architecture doesn't exactly match what was planned in every way, but 28 new files and countless lines of code (the majority of which isn't new and was simply migrated and tidied up) later I'm pretty pleased with it. The main thing is that it does follow the general structure based upon units of work that are performed concurrently via instances of <code>NSOperation</code> subclasses, as well as all export data formats inheriting from a common exporter base class.</p>

<p>So it isn't perfect and I'm sure there are a few bugs that were missed during development, but having just <a href="http://stuconnolly.com/blog/sequel-pro-098/">recently</a> released a major new version, we've got plenty of time to resolve them. Although not to everyone's liking, I always think that it's best to get branches merged back into trunk as soon as possible to allow wider testing and further contributions from other developers. It's always good to get a few others to check out your code after you've been staring at it for 6 months.</p>

<p>The most user visible change in the redesign is the new export interface, which is now a single dialog allowing users to easily switch between exporting to different data formats. I'd encourage everyone to give it a <a href="http://nightly.sequelpro.com/">try</a> and test it out (with the usual warning that applies when using nightly builds: not to be used on production systems or valuable data).</p>

<p>If you'd like to keep up to date with any further improvements, request new features or report any issues, take a look at this <a href="http://spbug.com/610">issue</a>, which is being used to track everything related to the new export redesign.</p>

<p>Enjoy.</p>]]></description>
		</item>
		<item>
			<title>Sequel Pro 0.9.8</title>
			<dc:creator>Stuart Connolly</dc:creator>
			<pubDate>Tue, 04 May 2010 22:35:00 +0000</pubDate>
			<link>http://stuconnolly.com/blog/sequel-pro-098/</link>
			<guid>http://stuconnolly.com/blog/sequel-pro-098/</guid>
			<description><![CDATA[<p>Just a quick note to say that <a href="http://www.sequelpro.com/">Sequel Pro</a> 0.9.8 is now <a href="http://www.sequelpro.com/blog/2010.05/sequel-pro-0-9-8/">available</a>. As with previous releases, this one includes a whole bunch of new features and fixes.</p>

<p>Without reposting everything that is mentioned on the announcement post, some of the major new features include user management support, 64-bit support and significantly improved auto-completion with placeholder lists as well as tab triggers and text macros for <a href="http://www.sequelpro.com/docs/Query_Favorites">query favourites</a>. I should also mention that stability has also been significantly improved since adding a lot of multi-threading in the previous version.</p>

<p>Check out the <a href="http://www.sequelpro.com/release-notes.html#release_0.9.8">release notes</a> for details on all the changes.</p>]]></description>
		</item>
		<item>
			<title>23</title>
			<dc:creator>Stuart Connolly</dc:creator>
			<pubDate>Thu, 08 Apr 2010 20:49:00 +0000</pubDate>
			<link>http://stuconnolly.com/blog/23/</link>
			<guid>http://stuconnolly.com/blog/23/</guid>
			<description><![CDATA[<p>Two posts in one day, that's definitely a first for me. To be honest though I wouldn't expect it to continue. I could say that I'm going to try and post more often (like on the many occasions before), but I'm willing to bet that anyone that's every started a blog has said that at least once. Plus we'd both know that I'd effectively be lying.</p>

<p>Anyway, after venting my anger/frustration <a href="http://stuconnolly.com/blog/poor-show/">earlier today</a> about the Digital Economy Bill being passed through Parliament, I thought I'd mention that I turned 23 today. I thought about writing a huge post about how much I'd learnt and all the mistakes that I'd made over the past year as well as what I plan to do over the next year and all that crap until I realised that I probably wouldn't have finished it before I turn 24 judging by the frequency of posts around here as well as my amazing ability to endlessly procrastinate. I'm simply going to say that I hope this coming year is better than the last, in more ways than one.</p>

<p>Thanks for reading and <a href="http://stuconnolly.com/blog/feed/">subscribing</a>.</p>]]></description>
		</item>
		<item>
			<title>Poor Show</title>
			<dc:creator>Stuart Connolly</dc:creator>
			<pubDate>Thu, 08 Apr 2010 15:57:00 +0000</pubDate>
			<link>http://stuconnolly.com/blog/poor-show/</link>
			<guid>http://stuconnolly.com/blog/poor-show/</guid>
			<description><![CDATA[<p>So I'm a few days late in openly voicing my opinion here on the passing of the <a href="http://en.wikipedia.org/wiki/Digital_Economy_Bill">Digital Economy Bill</a> at its second reading in Parliament on Tuesday and again at its third just yesterday, but the fact is it's now going to be the law within weeks and has the potential to effect everyone who uses the Internet within the UK.</p>

<p>I've come to expect a less than democratic process when it comes to pushing through new laws and legislation by this government (or any other for that matter) which claims to operate in a democratically elected society, but for me the passing of the Digital Economy Bill was one of the worst displays of democracy I've ever seen. Did nearly every MP just forget they were elected to represent the views of their constituents and choose to ignore the 20,000 people that wrote to them expressing their views on the bill and calling for more debate on it before passing it through Parliament and making it law.</p>

<p>Well, that's exactly what happened and less than 40 of 646 MPs <a href="http://arstechnica.com/tech-policy/news/2010/04/internet-cut-offs-website-censorship-about-to-drop-on-uk.ars">turned up</a> to the second reading of the bill on Tuesday, which lead to a <em>very</em> poor display of democracy in action for the 20,000 individuals who wrote to their MPs as well as undoubtedly many others. So some of the MPs present at the reading did try to voice their opinion as well as their constituents and openly admitted that they were not in a position to make a decision regarding something that they do not have sufficient expertise in. This however didn't seem to make a difference and I guess the big corporations that pressured the Government into pushing the bill through got their way.</p>

<p>The <a href="http://www.openrightsgroup.org/">Open Rights Group</a> is making no secrets of what think about the Government's decision to push the bill through, and I was more than happy to add my name along with 654 others to <a href="http://nevali.net/">Mo McRoberts</a>' (<a href="https://twitter.com/nevali">@nevali</a>) excellent <a href="http://nevali.net/post/501647501/an-open-letter-to-sion-simon-pete-wishart-david">open letter</a> to some of the MPs who were present at the reading.</p>

<p>I can only hope that the Government comes to its senses very quickly or any newly elected Government does the right thing and overturns this new law. Both of which I'm unsure of the possibility regardless of the intent.</p>]]></description>
		</item>
		<item>
			<title>Sequel Pro URL Shortening</title>
			<dc:creator>Stuart Connolly</dc:creator>
			<pubDate>Mon, 05 Apr 2010 16:21:00 +0000</pubDate>
			<link>http://stuconnolly.com/blog/sequel-pro-url-shortening/</link>
			<guid>http://stuconnolly.com/blog/sequel-pro-url-shortening/</guid>
			<description><![CDATA[<p>Considering that there are more URL shortening services than anyone cares to (or can) keep track off, there's not exactly the need for another, when you realise the only thing different would be the name. Despite this, I am creating a new URL shortening service, but one that is specific to the <a href="http://sequelpro.com">Sequel Pro</a> project and not available for general URL shortening use. That is, the service doesn't allow you to create custom short URLs, but is effectively based on the data of the various sites that make up the project.</p>

<p>While messing about with Google Chrome the other day I came across the 'About Memory' page (accessible via the 'Stats for nerds' link on the Task Manager or by typing 'about:memory' in the address bar) which obviously displays the application's memory as a summary, but also split by process, which in Chrome's case, is a process per tab. Aside from the interesting (if it can even be called that) memory usage stats was a warning of a bug that was causing Chrome to seriously over count it's own memory usage, with a link to the actual bug in their issue tracker. Half expecting the link to point directly to Chromium's issue tracker on Google Code, it actually pointed to <a href="http://crbug.com/">crbug.com</a>. Ok, so it doesn't take a genius to work out that they're using there own URL shortener to obviously provide short and memorable links when referring to issues, but I actually thought it was a pretty cool idea.</p>

<p>So aside from the obvious benefit of allowing anyone to refer to issues (bugs and enhancement requests) without having to remember the somewhat longer Google Code issue page URL, it also provides some form of insurance to links referring to issues from all over the web using the service will still work in the event that the project decides to change it's issue tracker (either the software or to entirely different domain). Seeing the benefit of this, I thought we could also implement the same sort of service for the Sequel Pro project using the appropriately named <a href="http://spbug.com/">spbug.com</a>.</p>

<p>The aim of the project behind Sequel Pro has always been <em>to create the best MySQL database management app for Mac OS X</em> and since <a href="http://stuconnolly.com/blog/sequel-pro/">joining</a> as a developer in November 2008 every release has brought us closer to this goal. The release candidate for version 0.9.8 has just been made <a href="http://www.sequelpro.com/blog/2010.04/sequel-pro-0-9-8-release-candidate/">available</a> and depending on feedback should be officially released within the next week or so. As we get close to the much-anticipated version 1.0 release we are now trying to create a solid development infrastructure to support the project. For example, included in the 0.9.8 release will be an integrated crash/exception reporter <a href="http://vafer.org/projects/feedbackreporter/">framework</a> as well as a supporting website to view and manage the submitted logs at <a href="http://log.sequelpro.com/">log.sequelpro.com</a>. The aim of the added functionality and website is to enable us to improve the overall stability of Sequel Pro, by examining the feedback provided by users (especially for <a href="http://nightly.sequelpro.com/">nightly builds</a>). As well as the new log site, is the addition of a new site dedicated to the localisation of Sequel Pro into languages other than English at <a href="http://translate.sequelpro.com/">translate.sequelpro.com</a>.</p>

<p>So where does the creation of a URL shortening service come in? Well, we now have multiple sites supporting the development of Sequel Pro, from version control, issue tracking, crash log management, nightly builds and localisation and so the creation of <a href="http://spbug.com/">spbug.com</a> allows us to easily refer to most of these during development (especially on IRC) and when responding to user requests and feedback via <a href="http://groups.google.com/group/sequel-pro">email</a>.</p>

<p>Currently the service provides seven different redirects, including the default, which is the site itself redirecting to our issue tracker. Provided with the correct parameters the others redirect to:</p>

<ul>
	<li>Issue</li>
	<li>Source Revision</li>
	<li>Source Revisions List</li>
	<li>Crash/Exception Log</li>
	<li>Crash/Exception Logs List</li>
	<li>Crash/Exception Log Report</li>
</ul>

<p>The most basic is when referring to a specific issue, for example, <a href="http://spbug.com/530">spbug.com/530</a>, which redirects to the following issue on Google Code:</p>

<a href="http://code.google.com/p/sequel-pro/issues/detail?id=530">http://code.google.com/p/sequel-pro/issues/detail?id=530</a>

<p>To find out how to use the others, I put together a short help page at <a href="http://spbug.com/h">spbug.com/h</a>, which details there use as well as some other functionality.</p>

<p>The service was originally implemented as single <code>.htacess</code> file with all redirecting done using <code>mod_rewrite</code>, but I wanted something a bit more flexible in terms of being able to update the URLs for which redirects point to as well as to enable some form of logging. The rewritten version is therefore a very simple PHP app, with all the URL redirect (and page rewrite) rules stored in a MySQL database. Redirect logging in terms of the requested URL and where it was redirect to can also be enabled and stored in the database.</p>

<p>The source for the service is also freely <a href="http://dev.stuconnolly.com/svn/code/trunk/spbug.com/">available</a> under version <strong>3</strong> of the <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a>.</p>]]></description>
		</item>
	</channel>
</rss>

