<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7788052</id><updated>2011-12-26T08:25:45.600+11:00</updated><title type='text'>Sublime Software</title><subtitle type='html'>It's all just ones &amp; zeros!  Musings by an Australian C++ developer...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default?start-index=101&amp;max-results=100'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>131</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7788052.post-1057047502100634081</id><published>2009-11-03T12:11:00.001+11:00</published><updated>2009-11-03T12:11:27.101+11:00</updated><title type='text'>Boost Spirit 2.1</title><content type='html'>&lt;p&gt;I'm &lt;em&gt;very&lt;/em&gt; impressed by what Joel, Hartmut and the rest of the folks have done with the 2.1 release of Spirit.&amp;#160; The syntax has been improved, the code is much neater and more powerful – bravo guys!&amp;#160; &lt;/p&gt;  &lt;p&gt;If you use C++ and have a need for a parser do yourself a favour and check out Spirit.&lt;/p&gt;  &lt;p&gt;Spirit 2.1 will be in Boost 1.41.0, which is due for release &lt;em&gt;any time now&lt;/em&gt; (it's currently in beta).&amp;#160; Until then you can read the &lt;a href="http://svn.boost.org/svn/boost/trunk/libs/spirit/doc/html/index.html"&gt;pre-release documentation&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-1057047502100634081?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/1057047502100634081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=1057047502100634081' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/1057047502100634081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/1057047502100634081'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2009/11/boost-spirit-21.html' title='Boost Spirit 2.1'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-6219493568474875918</id><published>2009-07-08T07:04:00.001+10:00</published><updated>2009-07-08T07:04:21.042+10:00</updated><title type='text'>CppDepend</title><content type='html'>&lt;p&gt;Geektastic!&amp;#160; The company that develops &lt;a href="http://www.ndepend.com/"&gt;NDepend&lt;/a&gt;, the sensational source code analysis tool for .NET, has just released a C++ counterpart.&amp;#160; I intend to spend a great deal of time analysing our code with &lt;a href="http://www.cppdepend.com/Default.aspx"&gt;CppDepend&lt;/a&gt;.&amp;#160; Available for free as a beta.&amp;#160; &lt;/p&gt;  &lt;p&gt;[Via &lt;a href="http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=8b759c73-8e14-4405-a48b-20b1f89d5d70"&gt;Kate Gregory&lt;/a&gt;.]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-6219493568474875918?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/6219493568474875918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=6219493568474875918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/6219493568474875918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/6219493568474875918'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2009/07/cppdepend.html' title='CppDepend'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-6638145350984015202</id><published>2009-05-23T09:00:00.001+10:00</published><updated>2009-05-23T09:00:54.291+10:00</updated><title type='text'>VMWare Server 2 Remote Console and Synergy</title><content type='html'>&lt;p&gt;I've got &lt;a href="http://www.vmware.com/products/server/"&gt;VMWare Server 2&lt;/a&gt; install on one of my machines here and I was trying to use the Remote Console (which installs as a Firefox extension) to connect to a Windows XP VM I was creating.&amp;#160; But no dice.&amp;#160; The keyboard and mouse inputs were not being redirected to the VM.&lt;/p&gt;  &lt;p&gt;After trying a bunch of things I stumbled on turning &lt;a href="http://code.google.com/p/synergy-plus/"&gt;Synergy&lt;/a&gt; off.&amp;#160; Voila, the mouse and keyboard works as expected.&lt;/p&gt;  &lt;p&gt;[Incidentally my recommendation is to use the &lt;a href="http://code.google.com/p/synergy-plus/"&gt;Synergy+&lt;/a&gt; client; the original Synergy client appears to be pretty much abandonware and the Synergy+ folks are doing a great job at fixing bugs.]&lt;/p&gt;  &lt;p&gt;So there's my tip of the day:&amp;#160; If you find your keyboard and mouse not working as expected with VMWare Server 2's Remote Client take a took in your system tray.&amp;#160; If Synergy is running turn it off and see if Remote Client responds.&amp;#160; Worked for me!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-6638145350984015202?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/6638145350984015202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=6638145350984015202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/6638145350984015202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/6638145350984015202'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2009/05/vmware-server-2-remote-console-and.html' title='VMWare Server 2 Remote Console and Synergy'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-4268694082743646850</id><published>2009-04-13T21:45:00.002+10:00</published><updated>2009-04-13T21:50:22.850+10:00</updated><title type='text'>Code Snippets for C++ in VS2005</title><content type='html'>&lt;p&gt;Visual Studio 2005 introduced the concepts of &lt;em&gt;code snippets&lt;/em&gt;.  Handy little chunks of commonly-used code that are easily inserted to your own with some Intellisense magic.  Hit a keypress, choose the snippet, fill in any fields and voila.&lt;/p&gt;  &lt;p&gt;C# and VB users were spoilt; MS supplied a bunch of snippets to do many common tasks.  Iterating over containers, creating regions, defining classes…many common tasks were snippetified.  Further, there were &lt;em&gt;many more&lt;/em&gt; online.&lt;/p&gt;  &lt;p&gt;Alas, C++ users were left in the dark with &lt;em&gt;no snippet support at all&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Thankfully the release of the "&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=CD7C6E48-E41B-48E3-881E-A0E6E97F9534&amp;amp;displaylang=en"&gt;Microsoft Visual Studio 2005 IDE Enhancements&lt;/a&gt;" addressed that issue (also known as the VS2005 "Powertoys").  After installation you get – among a few other questionably useful tools - C++ snippet support in VS2005.  There are only two problems.  1) If you're using Vista you get a bizarre error &lt;sup&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=7788052&amp;amp;postID=4268694082743646850#FirstFootnote"&gt;1&lt;/a&gt;&lt;/sup&gt; when you try to run the installer.  2) You don't get any C++ snippets installed.  Instead Microsoft makes the &lt;em&gt;C# snippets&lt;/em&gt; available in C++.  Thanks guys.  Anyway, let's address those problems.&lt;/p&gt;  &lt;p&gt;1) The issue here is that Vista requires administrator privileges to install this package.  Had the install package been an exe we'd have been fine; shift-right click and select "Run as Administrator".  Alas it's an MSI so we'll have to find another way.  The simplest, as &lt;a href="http://blogs.msdn.com/ukvsts/archive/2007/01/11/installing-the-tfs-power-toys-on-vista.aspx"&gt;described by the MS UK Dev Team&lt;/a&gt;, is to fire up a command shell, running it as admin (open the start menu, type 'cmd' then shift + right-click the cmd.exe icon), change to the directory where you downloaded the PowerToy installer then execute the command:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;msiexec /i "VSSDK_PowerToys.msi"&lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;Then follow the GUI installer as normal.  Oh, you'll need to exit from all VS2005 instances.&lt;/p&gt;&lt;p&gt;[You may notice – well, I did – that Visual Studio will have a bit of a conniption fit when you restart.  It appears that it's setting itself up for the first time again.  Not sure why.  Thankfully all my keybindings etc remained intact and there were no noticeable problems but YMMV.]&lt;/p&gt;&lt;p&gt;2) Once everything is installed correctly you should find that the "Tools-&amp;gt;Code Snippets Manager" should now have "Visual C++" listed as a language.  Good sign.  However by looking through the supplied list of snippets you'll find they're all actually &lt;em&gt;C# snippets&lt;/em&gt;.  You'll want to write your own C++ snippets.  To do that you'll need a snippet editor since writing the XML by hand is tedious (far from impossible but annoying).&lt;/p&gt;&lt;p&gt;Of the bunch of tools I found that edited snippets only &lt;a href="http://snippy.codeplex.com/"&gt;Snippy&lt;/a&gt; supported &lt;em&gt;C++ snippets&lt;/em&gt;.  Snippy works fine but doesn't seem to have a binary distribution so you'll need to download and build it (a VS2005 solution file is supplied).  After you run it create your own snippets and save them somewhere (like "Users\YourName\Documents\Visual Studio 2005\Code Snippets\Visual C++\YourSnippets").  You can then add those snippets to VS2005 using the Snippet Manager.&lt;/p&gt;&lt;p&gt;I haven't discussed the format of a snippet, it's pretty easy to figure it out from &lt;a href="http://msdn.microsoft.com/en-us/library/ms379562.aspx"&gt;Microsoft's documentation&lt;/a&gt;.  But &lt;a href="http://matt-trentini-web.s3.amazonaws.com/code/snippet/header.snippet"&gt;here's one&lt;/a&gt; to get you started.  If people ask nicely I'll try and post more.&lt;/p&gt;&lt;p&gt;And that's it!  Now you should be ready to create your own wicked-cool C++ snippets.  Let me know if you have any rippers!&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a name="footnote1"&gt;1&lt;/a&gt;: The error is something like:  "Error 1721. There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor."  I love how the error makes it so clear that administrator privileges are required.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-4268694082743646850?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/4268694082743646850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=4268694082743646850' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/4268694082743646850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/4268694082743646850'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2009/04/code-snippets-for-c-in-vs2005.html' title='Code Snippets for C++ in VS2005'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-8427156912439862865</id><published>2008-04-23T23:42:00.001+10:00</published><updated>2008-04-23T23:42:25.804+10:00</updated><title type='text'>Code Camp '08</title><content type='html'>&lt;p&gt;Once again I'm going to miss &lt;a href="http://www.codecampoz.com/"&gt;Code Camp&lt;/a&gt;.&amp;#160; Too many other things going on (holiday to book, birthday party x 2, BBQ Friday, gathering to go to Sunday) to justify heading away for three days to geek out.&amp;#160; In other words my girlfriend will be &lt;em&gt;&amp;#252;ber cheesed&lt;/em&gt; if I go.&amp;#160; ;)&lt;/p&gt;  &lt;p&gt;Have fun if you're going!&amp;#160; Wish I was there too.&lt;/p&gt;  &lt;p&gt;PS I've got a plan for next time.&amp;#160; I'll present on some topic - that'll be way easier to sell to my &lt;a href="http://en.wikipedia.org/wiki/Significant_other"&gt;SO&lt;/a&gt; than if I'm just tagging along...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-8427156912439862865?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/8427156912439862865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=8427156912439862865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/8427156912439862865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/8427156912439862865'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2008/04/code-camp.html' title='Code Camp &amp;#39;08'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-1633137111246966735</id><published>2008-04-11T18:04:00.001+10:00</published><updated>2008-04-11T18:04:30.396+10:00</updated><title type='text'>Building Boost 1.35</title><content type='html'>&lt;p&gt;I'm a big fan of the &lt;a href="http://www.boost.org"&gt;boost&lt;/a&gt; library for C++ development.&amp;#160; They're incredibly well designed and implemented, generally cross-platform, and quite well documented.&amp;#160; In short, they're awesome.&lt;/p&gt;  &lt;p&gt;However, I regularly have issues building them (on Windows with the VS2005 compiler).&amp;#160; Thankfully I'm not alone.&amp;#160; &lt;a href="http://heifner.blogspot.com/2008/03/building-boost-1350.html"&gt;Kevin Heifner&lt;/a&gt; ran into the same problems I did when trying to build the recently released 1.35 and documented a work-around.&amp;#160; Thanks Kevin!&amp;#160; It worked a treat.&lt;/p&gt;  &lt;p&gt;The summary is that the &lt;a href="http://www.boost-consulting.com/"&gt;Boost Consulting&lt;/a&gt; group, who usually put together a nice &lt;a href="http://www.boost-consulting.com/products/free"&gt;installer&lt;/a&gt;, haven't yet published one for 1.35.&amp;#160; Further, following the instructions on the &lt;a href="http://www.boost.org/doc/libs/1_35_0/more/getting_started/windows.html"&gt;Getting Started&lt;/a&gt; page that describe how to build boost led me astray.&amp;#160; With hindsight I think the major problem was that the &amp;quot;stage&amp;quot; directory mentioned in the example needs to be created before the build commences.&amp;#160; Anyway, Kevin provides an alternative set of command line options for bjam:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="cou"&gt;cd &amp;quot;C:\Program Files\boost\boost_1_35_0&amp;quot;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="cou"&gt;bjam --toolset=msvc --build-type=complete --prefix=&amp;quot;c:\program files\boost\boost_1_35_0&amp;quot; install&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Then just configure your projects &lt;em&gt;Additional Library Directories&lt;/em&gt; to include &amp;quot;C:\Program Files\boost\boost_1_35_0\lib&amp;quot;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-1633137111246966735?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/1633137111246966735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=1633137111246966735' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/1633137111246966735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/1633137111246966735'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2008/04/building-boost-135.html' title='Building Boost 1.35'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-3788770238113297790</id><published>2008-04-04T17:59:00.000+11:00</published><updated>2008-04-04T18:02:00.398+11:00</updated><title type='text'>Wireshark matures; v1 is released</title><content type='html'>&lt;p&gt;&lt;a href="http://www.wireshark.org"&gt;Wireshark&lt;/a&gt;, formerly called Ethereal, has &lt;a href="http://www.wireshark.org/news/20080331.html"&gt;made it to the 1.0 milestone&lt;/a&gt;. Congrats to Gerald Combs and the team. Wireshark is an amazingly useful application that helps analyse network traffic.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;As a software engineer it's an invaluable part of my toolkit and I'm very grateful for the many folks who work on this wonderful open-source (GPL) application.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-3788770238113297790?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/3788770238113297790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=3788770238113297790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/3788770238113297790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/3788770238113297790'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2008/04/wireshark-matures-v1-is-released.html' title='Wireshark matures; v1 is released'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-4701515852383447330</id><published>2008-04-04T17:28:00.002+11:00</published><updated>2008-04-04T17:30:42.865+11:00</updated><title type='text'>Internet Sharing:  Mac to Windows</title><content type='html'>&lt;p&gt;Sharing an Internet connection from your Mac is trivially easy:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Open &lt;span style="font-style: italic;"&gt;System Preferences&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;Choose &lt;span style="font-style: italic;"&gt;Sharing&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;Tick the &lt;span style="font-style: italic;"&gt;Internet Sharing&lt;/span&gt; checkbox&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Typically I share out my wired &lt;span style="font-style: italic;"&gt;Ethernet&lt;/span&gt; connection over wireless (&lt;span style="font-style: italic;"&gt;Airport&lt;/span&gt; in Mac parlance).&lt;/p&gt;&lt;p&gt;&lt;a href="http://matt.trentini.googlepages.com/InternetSharingMac.png"&gt;&lt;img src="http://matt.trentini.googlepages.com/InternetSharingMac.png" alt="InternetSharingMac.png" height="326" width="389" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;You'll need to configure the &lt;span style="font-style: italic;"&gt;Network Name&lt;/span&gt; (the SSID) and the encryption settings. Unfortunately WPA is not yet supported so your best bet is 128 bit WEP. You'll also need to choose a 13-character password if you want Windows computers to share your network (if you're network only has Mac's then feel free to choose any length password).&lt;/p&gt;&lt;p&gt;&lt;a href="http://matt.trentini.googlepages.com/InternetSharingMacDetails.png"&gt;&lt;img src="http://matt.trentini.googlepages.com/InternetSharingMacDetails.png" alt="InternetSharingMacDetails.png" height="171" width="283" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Connecting any Mac to this network is trivial. Simply turn on AirPort, browse to the network and enter the password.&lt;/p&gt;&lt;p&gt;Unfortunately, from a Windows PC it isn't quite so obvious - you can't just auto-detect the network and enter the password. You'll need to perform the following steps:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Open Control Panel, Network Connections and click on Wireless Connections&lt;/li&gt;  &lt;li&gt;Add a new wifi network&lt;/li&gt;  &lt;li&gt;Enter the Network Name that you created on the Mac - it must match &lt;span style="font-style: italic;"&gt;exactly&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;Set the Network Authentication to &lt;span style="font-style: italic;"&gt;Shared&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;Set the Data Encryption to &lt;span style="font-style: italic;"&gt;WEP&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;Uncheck "The Key is Provided Automatically" and enter the 13-character password that you chose earlier&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You should now find that the Windows PC can connect to the network.&lt;/p&gt;&lt;p&gt;If you're using a wifi manager other than the standard Windows functionality then you may need to experiment on the various settings. One manager I had to configure wouldn't work until I chose &lt;span style="font-style: italic;"&gt;Enterprise&lt;/span&gt; as a network type.&lt;/p&gt;&lt;p&gt;I'll try and get some Windows screenshots soon (my VM doesn't have a wireless connection).&lt;/p&gt;&lt;p&gt;Hope that helps someone!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-4701515852383447330?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/4701515852383447330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=4701515852383447330' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/4701515852383447330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/4701515852383447330'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2008/04/internet-sharing-mac-to-windows.html' title='Internet Sharing:  Mac to Windows'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-8964796724628539823</id><published>2008-04-01T09:19:00.000+11:00</published><updated>2008-04-01T09:20:25.013+11:00</updated><title type='text'>Google Docs goes offline</title><content type='html'>&lt;p&gt;Google Docs has just &lt;a href="http://googleblog.blogspot.com/2008/03/offline-access-to-google-docs.html"&gt;gained the ability to go offline&lt;/a&gt;. This makes the simply office suite significantly more useful as you no longer need to be tethered to an Internet connection while editing your documents. Naturally they've used &lt;a href="http://gears.google.com/"&gt;Google Gears&lt;/a&gt; to implement this. Mental note: Get up to speed on Gears!&lt;/p&gt;&lt;p&gt;My Google Docs doesn't yet reflect the feature but I presume it's rolling out through all the Google servers as we speak...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-8964796724628539823?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/8964796724628539823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=8964796724628539823' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/8964796724628539823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/8964796724628539823'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2008/04/google-docs-goes-offline.html' title='Google Docs goes offline'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-3394123191567809121</id><published>2007-12-07T18:16:00.001+11:00</published><updated>2007-12-07T18:16:46.461+11:00</updated><title type='text'>Google Chart API</title><content type='html'>&lt;p&gt;Google have just &lt;a href="http://google-code-updates.blogspot.com/2007/12/embed-charts-in-webpages-with-one-of.html"&gt;announced&lt;/a&gt; their &lt;a href="http://code.google.com/apis/chart/"&gt;Chart API&lt;/a&gt;.&amp;nbsp; This is freakin' awesome!&amp;nbsp; Anyone can now embed charts into their web pages (yes, even your blogs!) by whacking in a well-constructed url.&lt;/p&gt; &lt;p&gt;Here's a quick chart I whipped up that shows average maximum temperature for each month:&lt;/p&gt; &lt;p&gt;&lt;img src="http://chart.apis.google.com/chart?chs=400x250&amp;amp;cht=lc&amp;amp;chd=t:97.037,100.000,80.741,53.333,26.667,4.444,0.000,10.370,25.926,45.185,64.444,84.444&amp;amp;chxt=x,y&amp;amp;chxr=1,12,28&amp;amp;chxl=0:|Jan|Feb|Mar|Apr|May|June|Jul|Aug|Sep|Oct|Nov|Dec&amp;amp;chf=c,lg,90,FF5A5A,1,bbbbff,0|bg,s,EFEFEF"&gt; &lt;/p&gt; &lt;p&gt;Nice, eh?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-3394123191567809121?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/3394123191567809121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=3394123191567809121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/3394123191567809121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/3394123191567809121'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/12/google-chart-api.html' title='Google Chart API'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-3205244529601903526</id><published>2007-11-16T17:38:00.001+11:00</published><updated>2007-11-16T17:38:40.637+11:00</updated><title type='text'>Don't share intermediate directories</title><content type='html'>&lt;p&gt;OK, I've been bitten by this issue twice.&lt;/p&gt; &lt;p&gt;Take care when setting the intermediate directory (Project-&amp;gt;Properties-&amp;gt;Configuration Properties-&amp;gt;General-&amp;gt;Intermediate Directory) for Visual C++ projects.&lt;/p&gt; &lt;p&gt;If you have multiple projects that use the same intermediate directory you are likely to run into problems.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Specifically, if you're using a multi-core machine to build projects that share an intermediate directory and those projects happen to build in parallel the second project will fail when it tries to delete the files in the intermediate directory.&lt;/p&gt; &lt;p&gt;One way to ensure this never happens is to set the intermediate directory to &lt;em&gt;$(ProjectName)_$(ConfigurationName).&lt;/em&gt;&lt;/p&gt; &lt;p&gt;This is particularly nasty because if you create two vcproj's in the same directory this will happen with the default parameters.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-3205244529601903526?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/3205244529601903526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=3205244529601903526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/3205244529601903526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/3205244529601903526'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/11/don-share-intermediate-directories.html' title='Don&amp;#39;t share intermediate directories'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-6950046919330187453</id><published>2007-08-20T11:49:00.000+10:00</published><updated>2007-08-20T14:19:34.463+10:00</updated><title type='text'>My code's compiling...</title><content type='html'>&lt;p&gt;The biggest problems with Moore's law and the power of PC's these days is that compilation time is constantly &lt;em&gt;decreasing&lt;/em&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://xkcd.com/"&gt;xkcd&lt;/a&gt; knows what I'm talking about...&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://xkcd.com/303/"&gt;&lt;img style="margin: 5px;" alt="" src="http://imgs.xkcd.com/comics/compiling.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-6950046919330187453?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/6950046919330187453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=6950046919330187453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/6950046919330187453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/6950046919330187453'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/08/biggest-problems-with-moores-law-and.html' title='My code&apos;s compiling...'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-4930583573345749215</id><published>2007-08-09T10:43:00.000+10:00</published><updated>2007-08-20T11:52:50.151+10:00</updated><title type='text'>Mac Mini upgrade...finally!</title><content type='html'>&lt;p&gt;Amongst the fanfare of the Apple iMac range overhaul I didn't initially catch that the &lt;a href="http://www.macrumors.com/2007/08/07/apple-quietly-updates-mac-minis/"&gt;Mac Mini has also been upgraded&lt;/a&gt;!  I've been waiting for this for a long time so I can use one as a front end for my MythTV system.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Not only have the processors and RAM been upgraded (Core 2 Duo 1.83 or 2.0 GHz, 1Gig RAM) but the price has come down too.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now is the &lt;a href="http://buyersguide.macrumors.com/#Mac_mini"&gt;right time to buy&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-4930583573345749215?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/4930583573345749215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=4930583573345749215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/4930583573345749215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/4930583573345749215'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/08/amongst-fanfare-of-apple-imac-range.html' title='Mac Mini upgrade...finally!'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-199923685779590714</id><published>2007-08-07T01:19:00.000+10:00</published><updated>2007-08-07T01:32:21.502+10:00</updated><title type='text'>Firefly (aka mt-daapd)</title><content type='html'>Firefly is a wonderful implementation of a DAAP server.  What is &lt;a href="http://en.wikipedia.org/wiki/Digital_Audio_Access_Protocol"&gt;DAAP&lt;/a&gt; I hear you ask?  It's an audio streaming protocol introduced by Apple to allow you to stream music from one PC to another over a network.  In simpler terms it lets you host all your music on your server and play them through iTunes (or some other apps).&lt;br /&gt;&lt;p&gt;Unfortunately, the version of Firefly in the Ubuntu repositories is a little old and stopped working for me when I recently upgraded my iTunes.  Upgrading it wasn't as easy as normal in Ubuntu so I thought I'd list the steps I took:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Uninstall the old version&lt;br /&gt;           &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Courier;"&gt;sudo apt-get remove mt-daapd&lt;/span&gt;&lt;/li&gt;        &lt;/ul&gt;    &lt;/li&gt;    &lt;li&gt;Delete configuration files and the database as they appear to be incompatible (YMMV).&lt;br /&gt;           &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Courier;"&gt;sudo rm /var/cache/mt-daapd/songs.db&lt;/span&gt;&lt;/li&gt;            &lt;li&gt;&lt;span style="font-family:Courier;"&gt;sudo rm /etc/mt-daapd.conf&lt;/span&gt;&lt;/li&gt;        &lt;/ul&gt;    &lt;/li&gt;    &lt;li&gt;Download a &lt;a href="http://nightlies.mt-daapd.org/"&gt;recent build&lt;/a&gt;&lt;br /&gt;           &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Courier;"&gt;wget http://nightlies.mt-daapd.org/dl.php?FILE=mt-daapd_0.9-svn-1586_feisty_i386.deb&lt;/span&gt;&lt;/li&gt;        &lt;/ul&gt;    &lt;/li&gt;    &lt;li&gt;Install package&lt;br /&gt;           &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Courier;"&gt;dpkg -i &lt;/span&gt;&lt;span style="font-family:Courier;"&gt;mt-daapd_0.9-svn-1586_feisty_i386.deb&lt;/span&gt;&lt;/li&gt;        &lt;/ul&gt;    &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now reconfigure Firefly.  There's probably a much better workaround than deleting the config files and the database but Firefly is so easy to set up that it's not worth figuring it out!&lt;/p&gt;&lt;p&gt;Thankfully, I can now, once again, play my music through iTunes from my Ubuntu server.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-199923685779590714?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/199923685779590714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=199923685779590714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/199923685779590714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/199923685779590714'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/08/firefly-aka-mt-daapd.html' title='Firefly (aka mt-daapd)'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-7731047943775273224</id><published>2007-08-07T01:13:00.000+10:00</published><updated>2007-08-07T01:14:22.391+10:00</updated><title type='text'>Mac Defect: Samba mounting</title><content type='html'>I've found a workaround to what appears to be a bug in the OSX Finder. When you mount a network drive (over samba) sometimes the drive appears, then promptly disappears. Attempting to mount the drive again results in the error "Volume already mounted".  Dang.&lt;br /&gt;&lt;br /&gt;The workaround is to "Go to Folder" (Shift-Apple-G) and enter "/Volumes".  You should find your network drive there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-7731047943775273224?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/7731047943775273224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=7731047943775273224' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/7731047943775273224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/7731047943775273224'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/08/mac-defect-samba-mounting.html' title='Mac Defect: Samba mounting'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-4963111413755052997</id><published>2007-08-07T00:46:00.000+10:00</published><updated>2007-08-07T01:14:47.217+10:00</updated><title type='text'>Chicken of the VNC - Slow connecting to Ubuntu</title><content type='html'>&lt;a href="http://sourceforge.net/projects/cotvnc/"&gt;Chicken of the VNC&lt;/a&gt; is undoubtably one of the coolest-named apps around. And, in most situations, it's the best VNC client on the Mac. But it has some serious issues when connecting to my Ubuntu (Feisty Fawn) server - it's slow to the point that it's unusable. &lt;br /&gt;&lt;br /&gt;Twiddling with the various options doesn't make a difference.  No idea what's causing the issue; if anyone can enlighten me I'd appreciate it!&lt;br /&gt;&lt;br /&gt;In the meantime I use the venerable &lt;a href="http://homepage.mac.com/kedoin/VNC/VNCViewer/"&gt;VNCViewer&lt;/a&gt;.  It hasn't been updated in &lt;em&gt;years&lt;/em&gt; but it connects to my server just fine (although it does drive CPU usage high).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-4963111413755052997?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/4963111413755052997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=4963111413755052997' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/4963111413755052997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/4963111413755052997'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/08/chicken-of-vnc-slow-connecting-to.html' title='Chicken of the VNC - Slow connecting to Ubuntu'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-8598569545858039829</id><published>2007-07-30T00:57:00.000+10:00</published><updated>2007-07-30T00:58:23.616+10:00</updated><title type='text'>dm_mirror and LVM's pvmove</title><content type='html'>&lt;p&gt;To allow &lt;a href="http://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)"&gt;LVM&lt;/a&gt;'s &lt;a href="http://linux.die.net/man/8/pvmove"&gt;pvmove&lt;/a&gt; command to work you need support for dm_mirror in the kernal.  Simply enter the following at a terminal:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;    &lt;p&gt;&lt;span style="font-family:Courier"&gt;modprobe dm_mirror&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;The error I received when I &lt;em&gt;didn't&lt;/em&gt; have that module loaded was:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;    &lt;p&gt;&lt;span style="font-family:Courier"&gt;mirror: Required device-mapper target(s) not detected in your kernel&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;If you use LVM regularly you may want to add support for this at startup; there are a few ways you can do this but I choose to add to the modules list at /etc/modules.  (Just use vim and add &amp;quot;dm_mirror&amp;quot; to the end of the file.)  I'm on Ubuntu (Feisty Fawn) so YMMV.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;BTW, for conveniance, there's no difference between &amp;quot;-&amp;quot; and &amp;quot;_&amp;quot; in module names.  dm_mirror and dm-mirror are interchangeable.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-8598569545858039829?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/8598569545858039829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=8598569545858039829' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/8598569545858039829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/8598569545858039829'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/07/dmmirror-and-lvms-pvmove.html' title='dm_mirror and LVM&apos;s pvmove'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-365096535115113470</id><published>2007-05-13T23:54:00.000+10:00</published><updated>2007-05-13T23:57:24.870+10:00</updated><title type='text'>Ubuntu and MythTV notes</title><content type='html'>&lt;p&gt;I've been wanting a particular server PC for &lt;a href="http://trentini.wordpress.com/2006/12/29/mythtvoh-and-moving-out/"&gt;a long time now&lt;/a&gt;; a PC that I could use to record TV, be the main storage area for all of my data (especially music and photos), remotely trigger downloads and perform backups from.  Installation of this PC is well underway but I wanted to post about a couple of stumbling blocks I had in case others were having them (or unless I had to go through it again!).&lt;/p&gt;&lt;p&gt;Background:  The two major software choices I've made were to use &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; for the OS and &lt;a href="http://www.mythtv.org/"&gt;MythTV&lt;/a&gt; for the TV recording.  I've been &lt;em&gt;very&lt;/em&gt; happy with both decisions; &lt;em&gt;highly recommended&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;The vast majority of users will find Ubuntu amazingly simple to install.  I had a couple of slightly unusual requirements however...&lt;/p&gt;&lt;p&gt;I wanted to use a filesystem called &lt;a href="http://en.wikipedia.org/wiki/Logical_Volume_Manager_%28Linux%29"&gt;LVM&lt;/a&gt;.  The main benefit for me with LVM is that you can add extra storage space whenever you want.  LVM abstracts the logical mapping of mount points from the physical hard disks and partitions.  An example:  Today I may have a mountpoint at /var/mydata and it may be mapped to a partition on my current 320 Gig HD.  Tomorrow I could drop another 500 Gig HD in and add some (all if liked) of it to /var/mydata.&lt;/p&gt;&lt;p&gt;In the Windows world this would be like having a 320 Gig drive appearing as C:/ then adding another 500 Gig drive to it.  [I've been told Vista has some support for this kind of thing - can anyone confirm?]&lt;/p&gt;&lt;p&gt;It's a &lt;em&gt;very&lt;/em&gt; useful feature (and Unix OS's have had it since '98) particularly for a server where my storage needs are going to be ever-increasing.  &lt;/p&gt;&lt;p&gt;Unfortunately there is a &lt;a href="https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/96802"&gt;problem&lt;/a&gt; with LVM under Feisty Fawn, the latest version of Ubuntu.  LVM, as installed when using apt-get, seems to be located in the wrong place.  Thankfully John has &lt;a href="http://blog.sontek.net/archive/2007/03/26/LVM2-Package-Broken-in-Ubuntu-Feisty.aspx"&gt;written up a simple work-around&lt;/a&gt;.  It may also be related to &lt;a href="https://bugs.launchpad.net/ubuntu/+source/devmapper/+bug/106696"&gt;another defect&lt;/a&gt; with the libdevmapper package.  Either way it's easy to fix with those two references.&lt;/p&gt;&lt;p&gt;Installing MythTV is remarkably easy under Ubuntu, just follow &lt;a href="https://help.ubuntu.com/community/MythTV_Feisty_Backend_Desktop"&gt;this guide&lt;/a&gt;.  Unfortunately my capture card (a Leadtek WinFast 1000 - basically a bog-standard DVB card) didn't work straight-up.  It wasn't being properly detected in the MythTVconfiguration.  Turns out that for some reason I was missing a couple of required kernal modules.  Again, &lt;a href="http://ubuntuforums.org/showthread.php?t=417758&amp;page=3"&gt;hitting the Internet&lt;/a&gt; quickly gave me a pointer in the right direction.  &lt;em&gt;dvb_core&lt;/em&gt; and &lt;em&gt;cx88_dvb&lt;/em&gt; were the culprits; adding them with the following commands:&lt;br /&gt;   &lt;/p&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;p&gt;sudo modprobe dvb_core&lt;br /&gt;sudo modprobe cx88_dvb&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;solved the issue.  Of course, resetting the PC would mean that these modules would be missing next boot so I also had to add them to &lt;em&gt;/etc/modules&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;They were the biggest stumbling blocks (though installing &lt;a href="http://svn.whuffy.com/index.fcgi/wiki"&gt;shepherd&lt;/a&gt; - a &lt;em&gt;wonderful&lt;/em&gt; EPG for Aussies - took some trial-and-error!).  I've now got a stable system that I can record TV (remotely if I like using MythWeb) easily.  I've still yet to shift all of my data to the box nor are backups happening yet, but it's just a matter of time.&lt;/p&gt;&lt;p&gt;Check out Ubuntu and MythTV, I've had a good experience with both of them!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-365096535115113470?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/365096535115113470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=365096535115113470' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/365096535115113470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/365096535115113470'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/05/ubuntu-and-mythtv-notes.html' title='Ubuntu and MythTV notes'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-7449029991628512197</id><published>2007-04-18T07:31:00.000+10:00</published><updated>2007-04-18T07:45:03.170+10:00</updated><title type='text'>Google to release online Powerpoint competitor</title><content type='html'>Google &lt;a href="http://googleblog.blogspot.com/2007/04/were-expecting.html"&gt;just announced&lt;/a&gt; that presentation software will be added to their online &lt;a href="http://docs.google.com/"&gt;Docs and Spreadsheets&lt;/a&gt; package "this summer".  So it won't be long before they have all of the major building blocks that defined Microsoft's Office package - available from a web interface.&lt;br /&gt;&lt;br /&gt;The really exciting part of this news for me though was that the software was acquired from a company called &lt;a href="http://www.tonicsystems.com/"&gt;Tonic Systems&lt;/a&gt;.  Tonic is "based in San Francisco and &lt;span style="font-weight: bold;"&gt;Melbourne, Australia&lt;/span&gt;"! &lt;br /&gt;As a keen software dev in Melbourne I'm shocked and disappointed that I hadn't even heard about these guys...someone needed to throw me a frickin' bone here...  ;)&lt;br /&gt;&lt;br /&gt;[Although Tonic's webpage has been replaced by a Google announcement you may still be able to get at the old page - ironically - by using &lt;a href="http://72.14.253.104/search?q=cache:ruIpk41nxjkJ:www.tonicsystems.com/+tonic+systems&amp;hl=en&amp;amp;ct=clnk&amp;cd=1&amp;amp;gl=au&amp;amp;client=firefox-a"&gt;Google Cache&lt;/a&gt;.]&lt;br /&gt;&lt;br /&gt;I'm really looking forward to using this application!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-7449029991628512197?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/7449029991628512197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=7449029991628512197' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/7449029991628512197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/7449029991628512197'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/04/google-to-release-online-powerpoint.html' title='Google to release online Powerpoint competitor'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-8593466108742852467</id><published>2007-03-01T10:21:00.001+11:00</published><updated>2007-03-01T10:21:54.119+11:00</updated><title type='text'>Hotspotr - Community WiFi Cafe Hotspots</title><content type='html'>&lt;p&gt;&lt;a href="http://hotspotr.com/wifi"&gt;Hotspotr&lt;/a&gt; is a sweet &lt;a href="http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)"&gt;mashup&lt;/a&gt; that displays cafe's with wireless using Google Maps.&amp;nbsp; It's community driven, so go enter more for &lt;a href="http://hotspotr.com/wifi/map?ll=-37.814251%2C144.963169&amp;amp;name=Search%3A+melbourne%2C+australia&amp;amp;map_zoom=12"&gt;Melbourne&lt;/a&gt;!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-8593466108742852467?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/8593466108742852467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=8593466108742852467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/8593466108742852467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/8593466108742852467'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/03/hotspotr-community-wifi-cafe-hotspots.html' title='Hotspotr - Community WiFi Cafe Hotspots'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-8294804559171375198</id><published>2007-02-16T00:48:00.001+11:00</published><updated>2007-02-16T00:48:09.630+11:00</updated><title type='text'>Switched to Google Reader</title><content type='html'>&lt;p&gt;About three weeks ago I migrated from &lt;a href="http://bloglines.com"&gt;Bloglines&lt;/a&gt; to &lt;a href="http://www.google.com/reader"&gt;Google Reader&lt;/a&gt;. I'd checked out Google's offering some time ago but found it lacking, particularly given that I was such a Bloglines devotee having used it for &lt;em&gt;years&lt;/em&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Turns out that the more recent version of Google Reader is &lt;em&gt;fantastic!&lt;/em&gt;&amp;nbsp; So much so that I've made the complete switch.&amp;nbsp; Apart from now being as stable and&amp;nbsp;up-to-date as Bloglines, Reader has a much better (and prettier) interface and has a killer feature up it's sleeve; &lt;em&gt;your unread blog posts are protected from aggregator and/or browser crashes&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;Here is the scenario:&amp;nbsp; You go away for a day (or three) and come back to read your blogs.&amp;nbsp; You put aside and hour (or three) and start to delve into the 900 new posts that have accumulated.&amp;nbsp; It's at this point that Bloglines blows.&amp;nbsp; If you choose the regular option and read all of your new posts ("A") then Bloglines tries to download &lt;em&gt;them all&lt;/em&gt; into your browser - all at once.&amp;nbsp; &lt;/p&gt; &lt;p&gt;More often than not something goes wrong and the download doesn't complete.&amp;nbsp; Occasionally the browser presents problems (huge memory consumption, high CPU usuage or, sometimes, a crash) as it tries to render the humungous page of posts.&amp;nbsp; So, with large numbers of new posts, there's a very real chance you're going to lose them all.&amp;nbsp;&amp;nbsp;They disappear into the darkest depths of the blogosphere.&amp;nbsp; You see, Bloglines marks them as read &lt;em&gt;once the download begins&lt;/em&gt;.&amp;nbsp; Anything goes wrong, kiss new posts bye-bye.&lt;/p&gt; &lt;p&gt;Google Reader is smarter.&amp;nbsp; Instead of downloading them all at once it fetches 20 at a time with AJAXy goodness.&amp;nbsp; When you approach the bottom it grabs the next 20.&amp;nbsp; When each entry is highlighted (when it has focus, or as you thump on the "j" key) it is marked as read.&amp;nbsp; Simple.&amp;nbsp; Slick.&amp;nbsp; And not even a browser crash will cost you more than 20 unread posts.&amp;nbsp; Very slick.&lt;/p&gt; &lt;p&gt;Google Reader isn't perfect and Bloglines is still a great web app but for now I'm a very happy Google Reader fan.&lt;/p&gt; &lt;p&gt;Now, if you're not using a blog aggregator&amp;nbsp;then get on to it!&amp;nbsp; &lt;em&gt;Everyone&lt;/em&gt; will be soon, simply because it's the best way to absorb information that is of relevance to you.&amp;nbsp; I can recommend Google Reader.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-8294804559171375198?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/8294804559171375198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=8294804559171375198' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/8294804559171375198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/8294804559171375198'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/02/switched-to-google-reader.html' title='Switched to Google Reader'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-117072554694268044</id><published>2007-02-06T12:32:00.000+11:00</published><updated>2007-02-06T12:32:27.010+11:00</updated><title type='text'>Google Maps down under</title><content type='html'>&lt;p&gt;Sweet, Google has just &lt;a href="http://googleblog.blogspot.com/2007/02/google-maps-down-under.html"&gt;announced extended support&lt;/a&gt; for the Google Maps Australia site. You can now perform business searches and get driving directions.&lt;/p&gt; &lt;p&gt;Now, if they could just add the Google Maps road information to Google Earth...&lt;/p&gt; &lt;p&gt;[BTW, until they do, you can use &lt;a href="http://www.gearthblog.com/blog/archives/2007/02/google_street_maps_o.html"&gt;this tip&lt;/a&gt; as a workaround; it will download the correct 'tile' from Google Maps and semi-transparently overlay it in Google Earth.]&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-117072554694268044?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/117072554694268044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=117072554694268044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/117072554694268044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/117072554694268044'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/02/google-maps-down-under.html' title='Google Maps down under'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-117063845879206383</id><published>2007-02-05T12:20:00.000+11:00</published><updated>2007-02-05T12:20:59.273+11:00</updated><title type='text'>make_pair is your friend</title><content type='html'>&lt;p&gt;One common newbie&amp;nbsp;code smell&amp;nbsp;I've seen a lot of recently is the unnecessary definition of a typedef for a pair of items:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face="Courier New"&gt;typedef std::pair &amp;lt;Type1, Type2&amp;gt; myPairForMap;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;typedef std::map&amp;nbsp; &amp;lt;Type1, Type2&amp;gt; myMapType;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;...&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;myMapType m_Map;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The idea is that you can do this:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face="Courier New"&gt;m_Map.insert( myPairForMap(foo, bar) );&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;What many people seem to not understand is that there is a more elegant way - use std::make_pair:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face="Courier New"&gt;m_Map.insert( std::make_pair(foo, bar) );&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;make_pair is a templated function that returns a pair of items.&amp;nbsp; It's a simple function so I'll repeat it here in its entirety:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face="Courier New"&gt;template &amp;lt;class T1, class T2&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;pair&amp;lt;T1, T2&amp;gt; make_pair(const T1&amp;amp; x, const T2&amp;amp; y) {&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return pair&amp;lt;T1, T2&amp;gt;(x, y);&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;See?&amp;nbsp; It detects what types you're passing in and returns a pair containing the items.&amp;nbsp; No need to define the pair typedef.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-117063845879206383?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/117063845879206383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=117063845879206383' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/117063845879206383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/117063845879206383'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2007/02/makepair-is-your-friend.html' title='make_pair is your friend'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-116458565795940194</id><published>2006-11-27T11:00:00.000+11:00</published><updated>2006-11-27T11:00:58.056+11:00</updated><title type='text'>To the spammers...</title><content type='html'>&lt;p&gt;Could you&amp;nbsp;prats please stop spamming this blog?&amp;nbsp; I &lt;em&gt;will&lt;/em&gt; delete your comments quickly so it's a fruitless exercise.&amp;nbsp; I don't want to have to use moderated comments but if this keeps up I will be forced to.&lt;/p&gt; &lt;p&gt;I do use Bloggers captcha facility and yet still some spam comments are getting through.&amp;nbsp; Are actual people creating these comments or have the automated spam systems become more sophisticated?&lt;/p&gt; &lt;p&gt;I don't expect this post will help at all but venting relieves stress.&amp;nbsp; :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-116458565795940194?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/116458565795940194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=116458565795940194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/116458565795940194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/116458565795940194'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/11/to-spammers.html' title='To the spammers...'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-116156944099390171</id><published>2006-10-23T12:10:00.000+10:00</published><updated>2006-10-23T12:10:41.043+10:00</updated><title type='text'>DLL not found exception</title><content type='html'>&lt;p&gt;I've been working on a C++ project recently that involved creating a DLL.&amp;nbsp; Although I had unit tests to pummel the objects that were used inside the DLL I wanted an easy way to test the DLL itself through its interface.&amp;nbsp; I chose to create a C# Winforms app that used the DLL using interop.&lt;/p&gt; &lt;p&gt;Really easy to do:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face="Courier"&gt;[DllImport("YourDll.dll")]&lt;br&gt;public static extern int MyFoo(string bar);&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;There's heaps of documentation out there for this kind of stuff.&amp;nbsp; Suffice to say that the .NET framework goes to great lengths to make this happen as easily as possible.&lt;/p&gt; &lt;p&gt;One gotcha that I ran into though was that initially the JIT compiler threw an exception - a &lt;em&gt;DllNotFoundException&lt;/em&gt;.&amp;nbsp; I checked to ensure that the DLL and EXE were in the same directory, I used dumpbin to ensure that the DLL was correctly exporting the expected symbols etc...couldn't figure out what was wrong.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Turns out that &lt;em&gt;my DLL had a dependency on another DLL&lt;/em&gt; that wasn't in the path.&amp;nbsp; Unfortunately the exception doesn't give you any further useful information so watch out for this problem.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-116156944099390171?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/116156944099390171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=116156944099390171' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/116156944099390171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/116156944099390171'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/10/dll-not-found-exception.html' title='DLL not found exception'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-116070549330201053</id><published>2006-10-13T12:11:00.000+10:00</published><updated>2006-10-13T12:11:33.356+10:00</updated><title type='text'>Two nifty Windows apps</title><content type='html'>&lt;p&gt;Rearrange the items in your taskbar with &lt;a href="http://www.freewebs.com/nerdcave/taskbarshuffle.htm"&gt;Taskbar Shuffle&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Display your Outlook calendar appointments and tasks right on your desktop with &lt;a href="http://www.carthagosoft.net/desktask.htm"&gt;DeskTask&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-116070549330201053?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/116070549330201053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=116070549330201053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/116070549330201053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/116070549330201053'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/10/two-nifty-windows-apps.html' title='Two nifty Windows apps'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-116045113143001448</id><published>2006-10-10T13:32:00.000+10:00</published><updated>2006-10-10T13:32:11.480+10:00</updated><title type='text'>U3 USB drive</title><content type='html'>&lt;p&gt;My company recently purchased a 1GB SanDisk micro cruzer USB drive for me to use.&amp;nbsp; These devices are great, providing lots of useful space.&amp;nbsp; However when you insert the drive it automatically runs some software that "assists" you with such tasks as synchronizing and password protecting your files.&amp;nbsp; Although the software may be useful to some people it isn't to me and there's no easy way to remove&amp;nbsp;it &lt;sup&gt;[1]&lt;/sup&gt;.&lt;/p&gt; &lt;p&gt;Manufacturers should realise that they ought not to install - or run -&amp;nbsp;&lt;em&gt;a damn thing&lt;/em&gt; on my computer without my permission.&amp;nbsp; Ask &lt;em&gt;if you must&lt;/em&gt;.&amp;nbsp; And if I say no don't pester me again.&amp;nbsp; Ever.&amp;nbsp; A better course of action is to ask me to opt-in; ship a CD along with the device (or provide a URL) that I can choose if I want it installed.&lt;/p&gt; &lt;p&gt;Anyway, after unsuccessfully trying to remove the software for a couple of minutes I hit Google and found that many other users had complained and some had found a solution.&amp;nbsp; At some stage U3 (makers of the drive)&amp;nbsp;put an &lt;a href="http://www.u3.com/uninstall/"&gt;uninstaller online&lt;/a&gt;.&amp;nbsp; My PC is now clean again.&lt;/p&gt; &lt;p&gt;Kudos to U3 for putting the uninstaller online but, please, next time do the right thing in the first place.&lt;/p&gt; &lt;hr&gt;  &lt;p&gt;[1] It fiendishly mounts &lt;em&gt;two&lt;/em&gt; drives when you insert the device - one of which fools the operating system to appear as a read-only CD drive.&amp;nbsp; Clever, but difficult to remove.&amp;nbsp; Yes there are ways around getting it to run the software (although in this case even disabling autorun wasn't going to cut it) but I just wanted it &lt;em&gt;gone&lt;/em&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-116045113143001448?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/116045113143001448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=116045113143001448' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/116045113143001448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/116045113143001448'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/10/u3-usb-drive.html' title='U3 USB drive'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-115974868782479915</id><published>2006-10-02T10:24:00.000+10:00</published><updated>2006-10-02T10:24:47.886+10:00</updated><title type='text'>Firefox extensions</title><content type='html'>&lt;p&gt;OK, I can't find any easy way to transfer my Windows Firefox extensions and configuration to my MacBook - there are extensions to do this (notably &lt;a href="http://customsoftwareconsult.com/extensions/febe/febe.html"&gt;FEBE&lt;/a&gt; and &lt;a href="http://mozbackup.jasnapaka.com/"&gt;MozBackup&lt;/a&gt;) but they don't work on the Mac.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Perhaps I can copy my profile folder?&amp;nbsp; I'll try.&amp;nbsp; &lt;/p&gt; &lt;p&gt;In the meantime, here are my extensions in case I have to install them one-by-one:&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="Filters ads from web-pages" href="http://adblock.mozdev.org"&gt;Adblock&lt;/a&gt; 0.5.3.043&lt;/li&gt; &lt;li&gt;&lt;a title="Synchronizes Adblock with Filterset.G" href="http://www.pierceive.com/"&gt;Adblock Filterset.G Updater&lt;/a&gt; 0.3.0.4&lt;/li&gt; &lt;li&gt;&lt;a title="Browser utilities for use with Bloglines" href="http://jayseae.cxliv.org/"&gt;Bloglines Toolkit&lt;/a&gt; 1.6.0&lt;/li&gt; &lt;li&gt;&lt;a title="Bypass compulsory web registration with the context menu via www.bugmenot.com." href="http://roachfiend.com"&gt;BugMeNot&lt;/a&gt; 1.3&lt;/li&gt; &lt;li&gt;&lt;a title="Keep, share and discover all your favorite things." href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt; 1.1&lt;/li&gt; &lt;li&gt;&lt;a title="View and manage downloads from a tidy statusbar" href="http://downloadstatusbar.mozdev.org/"&gt;Download Statusbar&lt;/a&gt; 0.9.4.1&lt;/li&gt; &lt;li&gt;&lt;a title="The mass downloader for Firefox." href="http://www.downthemall.net"&gt;DownThemAll!&lt;/a&gt; 0.9.9.6.5&lt;/li&gt; &lt;li&gt;&lt;a title="Synchronizes your bookmarks across machines." href="http://www.foxmarks.com/"&gt;Foxmarks Bookmark Synchronizer&lt;/a&gt; 0.80&lt;/li&gt; &lt;li&gt;&lt;a title="Enables you to use the embedded IE engine within Mozilla/Firefox." href="http://ietab.mozdev.org/"&gt;IE Tab&lt;/a&gt; 1.1.1.3&lt;/li&gt; &lt;li&gt;&lt;a title="Open pages in IE via Firefox menus" href="http://ieview.mozdev.org/"&gt;IE View&lt;/a&gt; 1.3.1&lt;/li&gt; &lt;li&gt;&lt;a title="Outputs an alphabetical list of extensions to a text, vB code, or HTML file." href="http://roachfiend.com"&gt;ListZilla&lt;/a&gt; 0.8&lt;/li&gt; &lt;li&gt;&lt;a title="Allows to choose what you want to do with a PDF file: download it, view it with an external viewer or view it as HTML!" href="http://www.pdfdownload.org"&gt;PDF Download&lt;/a&gt; 0.7.6&lt;/li&gt; &lt;li&gt;&lt;a title="Easily save links in personally customized folders." href="http://www.achimonline.de/mozext/"&gt;Save Link in Folder&lt;/a&gt; 1.1.3.1&lt;/li&gt; &lt;li&gt;&lt;a title="Lets you go to search results by pressing the number of the search result." href="http://www.squarefree.com/extensions/search-keys/"&gt;Search Keys&lt;/a&gt; 0.7.3&lt;/li&gt; &lt;li&gt;&lt;a title="Expand the searchbox as you type" href="http://xeen.reversestudios.com/?page=autosizer"&gt;Searchbar Autosizer&lt;/a&gt; 1.1&lt;/li&gt; &lt;li&gt;&lt;a title="Tab browsing with an added boost." href="http://tmp.garyr.net"&gt;Tab Mix Plus&lt;/a&gt; 0.3.0.5&lt;/li&gt; &lt;li&gt;&lt;a title="Convenient tool to create small url redirects from longer ones." href="http://mozmonkey.com/"&gt;TinyUrl Creator&lt;/a&gt; 1.0.2&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;ListZilla was used to easily create this list.&lt;/p&gt; &lt;p&gt;Are there any others that I should install?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-115974868782479915?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/115974868782479915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=115974868782479915' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115974868782479915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115974868782479915'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/10/firefox-extensions.html' title='Firefox extensions'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-115890438397892437</id><published>2006-09-22T15:53:00.000+10:00</published><updated>2006-09-22T23:02:49.346+10:00</updated><title type='text'>Foldershare venting</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Update&lt;/em&gt;&lt;/strong&gt;: Foldershare is back up and running.&amp;nbsp; As far as I can tell it was down for a solid eight hours plus...&lt;/p&gt; &lt;p&gt;I started using &lt;a href="http://www.foldershare.com"&gt;Foldershare&lt;/a&gt; a few weeks ago and really like it.&amp;nbsp; It allows me to easily share files between my home and work PC's.&amp;nbsp; &lt;sup&gt;[1]&lt;/sup&gt;&lt;/p&gt; &lt;p&gt;Unfortunately I've started becoming reliant on the system.&lt;/p&gt; &lt;p&gt;Today I intentionally didn't worry about copying files to my iPod (to carry them to work) because I knew that I could use Foldershare to access my home PC from work.&amp;nbsp; Dagnamit, wouldn't you know it; Foldershare has been down &lt;em&gt;all day&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;I still like the service but I hope there's not too many outtages!&lt;/p&gt; &lt;p&gt;As a final thought, I've gotta remember to make software that my users &lt;em&gt;become reliant on&lt;/em&gt;.&amp;nbsp; Not to intentionally lock them in but it indicates that you're providing an invaluable service.&amp;nbsp; User reliance == success.&lt;/p&gt; &lt;hr&gt;  &lt;p&gt;[1] It works by running a "satellite" app on both PC's.&amp;nbsp; You can then access files on the PC (that the app is running on) through a web interface.&amp;nbsp; So, from work, I can log in to the Foldershare website and view and copy files from my home PC.&amp;nbsp; Sweet!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-115890438397892437?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/115890438397892437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=115890438397892437' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115890438397892437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115890438397892437'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/09/foldershare-venting.html' title='Foldershare venting'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-115882633191647389</id><published>2006-09-21T18:12:00.000+10:00</published><updated>2006-09-22T09:47:35.593+10:00</updated><title type='text'>Goto's are evil</title><content type='html'>&lt;p&gt;OK, so I'm working on some legacy code today when I stumble on a compiler warning: "C4102: unreferenced label".  The cogs in my brain started ticking over..."label, label, hmm, what could that be"?  Then I took a look at the code.  Oh crap.  Goto's.  In C++.  In one function (~100 lines) there were &lt;em&gt;21 goto calls&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;Practically unmaintainable.&lt;/p&gt; &lt;p&gt;Lucky the author wasn't still with the company otherwise I'd have given him an earful.  &lt;/p&gt; &lt;p&gt;Mr Duffy you suck.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-115882633191647389?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/115882633191647389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=115882633191647389' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115882633191647389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115882633191647389'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/09/gotos-are-evil.html' title='Goto&apos;s are evil'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-115881436021146960</id><published>2006-09-21T14:52:00.000+10:00</published><updated>2006-09-21T14:52:40.216+10:00</updated><title type='text'>Registering ASP.NET in IIS</title><content type='html'>&lt;p&gt;I've tripped over this issue a couple of times so I figure I'd offload it to my blog to free up some space in my head.&lt;/p&gt; &lt;p&gt;The short story:&lt;/p&gt; &lt;p&gt;If you've just installed a new web application to your IIS server and it uses ASP.NET and you're unable to view the web page (specifically you may instead be asked to save a file) then it may be because you need to (re)register ASP.NET with IIS.&lt;/p&gt; &lt;p&gt;You do so like this:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;gt; cd "\&lt;var&gt;WindowsFolder&lt;/var&gt;\Microsoft.NET\Framework\&lt;var&gt;VersionNumber"&lt;/var&gt;&lt;/p&gt; &lt;p&gt;&lt;var&gt;&lt;/var&gt;&amp;gt; aspnet_regiis.exe" -i&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The longer story goes something like this:&lt;/p&gt; &lt;p&gt;You install the .NET Framework version x.y.&amp;nbsp; However you &lt;em&gt;didn't have IIS installed in Windows&lt;/em&gt;.&amp;nbsp; Then you install a web application to your IIS server &lt;sup&gt;[1]&lt;/sup&gt;.&amp;nbsp; Viewing the web app pages &lt;sup&gt;[2]&lt;/sup&gt; confusingly just doesn't work, dammit!&amp;nbsp; Then you remember the magical register command and voila, birds start singing, sun beams out from behind the clouds and the world is a happy place once more.&amp;nbsp; :)&lt;/p&gt; &lt;p&gt;MS have also &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;325093"&gt;documented the issue&lt;/a&gt;.&lt;/p&gt; &lt;hr&gt;  &lt;p&gt;[1] For me it always seems to be &lt;a href="http://ccnet.thoughtworks.com"&gt;CruiseControl.NET&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;[2] Which, for CC.NET, is &lt;a href="http://localhost/ccnet/default.aspx"&gt;http://localhost/ccnet/default.aspx&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-115881436021146960?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/115881436021146960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=115881436021146960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115881436021146960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115881436021146960'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/09/registering-aspnet-in-iis.html' title='Registering ASP.NET in IIS'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-115807184577824922</id><published>2006-09-13T00:37:00.000+10:00</published><updated>2006-09-13T00:37:25.783+10:00</updated><title type='text'>Matt's recommended technical books</title><content type='html'>&lt;p&gt;A friend of mine in Vancouver asked me to recommend some technical books; Ryan, I may be a little late but better late than never, eh?&amp;nbsp; ;)&amp;nbsp; Warning:&amp;nbsp; This list is quite C++ focussed.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Design Patterns&lt;/strong&gt;, &lt;em&gt;Gamma et. al&lt;/em&gt;.&amp;nbsp;&amp;nbsp;Let's start with a non-language-specific title (although Smalltalk and C++ are used for examples the languages aren't important).&amp;nbsp; This puppy is&amp;nbsp;necessary and&amp;nbsp;should be on every developers shelf.&amp;nbsp; It describes, with methodical detail, the most common design patterns that we encounter - learn them all, and glance at this book regularly as a refresher.&amp;nbsp; Be aware however that many of the code examples are somewhat dated and can be improved with modern techniques so don't copy them verbatim.&amp;nbsp; Keep the book close particularly during the design phase of the software lifecycle as it can often simplify your "in the head" design.&amp;nbsp; If nothing else this book gave the software community a vocabulary to discuss patterns; make sure you can talk the talk.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The C++ Programming Language&lt;/strong&gt;, &lt;em&gt;Stroustrup&lt;/em&gt;.&amp;nbsp; The father of C++ writes the definitive reference book.&amp;nbsp; Kinda like K&amp;amp;R's venerable The C Programming Language - but for C++.&amp;nbsp; This book is great when you can't quite remember certain syntax or you're trying to recall obscure behaviour.&amp;nbsp; If you have a spare bit of cash opt for the newer hardcover "special" 3rd edition as it'll wear better and has a couple of extra appendices (Appendix E on standard library exception safety is required reading) though both can be (legally!) &lt;a href="http://www.research.att.com/~bs/3rd.html"&gt;downloaded&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Accelerated C++: Practical Programming by Example&lt;/strong&gt;, &lt;em&gt;Koenig and Moo&lt;/em&gt;.&amp;nbsp; For newcomers to C++ (or those coming from a C background), this book is terrific for two reasons:&amp;nbsp; 1) it gives the reader practical examples of how to write quality C++ code and 2) it doesn't shy away from introducing common and useful C++ features (like templates and the standard library) early on.&amp;nbsp;&amp;nbsp;One of the few C++ books I can recommend to beginners.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Exceptional C++&lt;/strong&gt;, &lt;strong&gt;More Exceptional C++&lt;/strong&gt; and &lt;strong&gt;Exceptional C++ Style&lt;/strong&gt;, &lt;em&gt;Sutter&lt;/em&gt;.&amp;nbsp; Herb Sutter is one of the true legends in the C++ landscape and his books are all gold.&amp;nbsp; Once you're into "intermediate C++" territory, buy his books and read.&amp;nbsp; Each chapter begins with a question, challenging you to think about a particular C++ topic.&amp;nbsp; The&amp;nbsp;rest of the chapter&amp;nbsp;thoroughly discusses the answer (Sutter began this format many moons ago with the "&lt;a href="http://www.gotw.ca/gotw/"&gt;Guru of the Week&lt;/a&gt;" postings to &lt;a href="news:comp.lang.c++.moderated"&gt;comp.lang.c++.moderated&lt;/a&gt;).&amp;nbsp; Learn the intricacies of the pimpl idiom, exception safety, memory management and a host of other topics.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Effective C++&lt;/strong&gt;, &lt;strong&gt;More Effective C++&lt;/strong&gt;, &lt;strong&gt;Effective STL&lt;/strong&gt;, &lt;em&gt;Meyers&lt;/em&gt;.&amp;nbsp; Scott Meyer's 'big three' are&amp;nbsp;a common sight on many programmer's bookshelves.&amp;nbsp; And rightly so; Meyers has a very appealing, easy-to-read writing style that is well suited to the intermediate C++ devs it's aimed at.&amp;nbsp; Each chapter begins with a guideline which is clarified over the rest of the chapter.&amp;nbsp; Don't break the Meyer's guidelines!&amp;nbsp; Note that Effective C++ has recently been revised (now in the 3rd edition)&amp;nbsp;to better cover more modern techniques - pony up the extra dough if you can though the older revisions are still pretty good.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Code Complete&lt;/strong&gt;, &lt;em&gt;McConnell&lt;/em&gt;.&amp;nbsp;&amp;nbsp;The "how-to" guide for software engineers.&amp;nbsp; Language neutral (almost - there are some Java and C++ examples) this book covers a diverse range of topics such as defensive programming, variable naming, software quality, testing, refactoring, and programming tools - just to name a few.&amp;nbsp; What I like about this book is the depth of research (there are many sidebars with "hard facts" giving convincing weight to claims made by the author) and the logical way that McConnell explains &lt;em&gt;why&lt;/em&gt; he gives the guidance he does.&amp;nbsp; I consider this the &lt;em&gt;Book of Common Sense for Software Engineers&lt;/em&gt;.&amp;nbsp; Many experienced dev's will consider some of what is covered&amp;nbsp;a little too simple but there are so many nuggets in here that everyone should go back and flick through this a couple of times a year.&amp;nbsp; I do.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Software Estimation: Demystifying the Black Art&lt;/strong&gt;, &lt;em&gt;McConnell&lt;/em&gt;.&amp;nbsp; I know of not a single software engineer that can give accurate estimates for projects.&amp;nbsp; Not one.&amp;nbsp; Nor do I know of any project managers that have really had a project schedule under control.&amp;nbsp; This book should be read by everyone in those roles.&amp;nbsp; It provides techniques to estimate (nay, &lt;em&gt;measure&lt;/em&gt;) software effort and lists techniques to help both devs and managers get a handle on how to run a project.&amp;nbsp; Fantastic stuff!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The C++ Standard Library: A Tutorial &amp;amp; Reference&lt;/strong&gt;, &lt;em&gt;Josuttis&lt;/em&gt;.&amp;nbsp; A simple recommendation.&amp;nbsp; If you use the C++ standard library you need this book.&amp;nbsp; It's the best reference material on the subject there is.&amp;nbsp; Period.&amp;nbsp; Buy it.&amp;nbsp; It covers everything in the library from streams to containers, algorithms and iterators and is suitable for everyone from beginners to advanced users.&amp;nbsp; Many C++ devs I know use only a fraction of the power of the standard library: don't be one of them.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;C++ Templates&lt;/strong&gt;, &lt;em&gt;Vandevoorde and Josuttis&lt;/em&gt;.&amp;nbsp; A book for any developer really itching to understand the nitty-gritty of how templates work.&amp;nbsp; High intermediate to advanced users will get the most out of this one.&amp;nbsp; If you've been confused by template template parameters, partial specialization or Koening lookup this book can help out.&amp;nbsp; Traits, metaprogramming,&amp;nbsp;template instantiation&amp;nbsp;and expression templates are also covered.&amp;nbsp; Very complete, very clearly written, very good.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;C++ Coding Standards&lt;/strong&gt;, &lt;em&gt;Sutter and Alexandrescu&lt;/em&gt;.&amp;nbsp; The best description is in the subtitle: &lt;em&gt;101 Rules, Guidelines, and best Best Practices&lt;/em&gt;. &amp;nbsp;If you're team is using C++ make sure your architect(s) have a copy of this book.&amp;nbsp; Written by two of the most knowledgeable folks in the industry, every one of these guidelines is gold.&amp;nbsp; The writing style makes for easy&amp;nbsp;reading; the topics are accessible even while some are inherently complex.&amp;nbsp; Best suited to low intermediate to advanced users.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Modern C++ Design&lt;/strong&gt;, &lt;em&gt;Alexandrescu&lt;/em&gt;.&amp;nbsp; The most mind-blowing coding book I've ever read.&amp;nbsp; Chapter three (Typelists) was a revelation, though I had to read it half a dozen times to begin to understand!&amp;nbsp; Aimed at advanced users, this will challenge your design skills.&amp;nbsp; Not only does this book cover many advanced techniques (policy-based design, compile-time programming, traits etc) but it does so with the real-world in mind: at the end you'll&amp;nbsp;have a library (Alexandrescu's Loki library is described and freely available) with many amazing components and &lt;em&gt;implemented design patterns&lt;/em&gt;&amp;nbsp;such as smart pointers, generalized functors, object factories, abstract factory and visitor.&amp;nbsp; Although &lt;a href="http://www.boost.org/"&gt;boost&lt;/a&gt; now has some better production versions of these libraries, you'll now know to write your own.&amp;nbsp; Awesome stuff but be prepared for some challenging topics (although the author does a decent job explaining this stuff it's just &lt;em&gt;hard&lt;/em&gt;).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;C++ Template Metaprogramming&lt;/strong&gt;, &lt;em&gt;Abrahams and Gurtovoy&lt;/em&gt;.&amp;nbsp; Another one for the advanced users out there, this book covers the relatively newish world of metaprogramming; developing code in the compile-time space.&amp;nbsp; Abrahams and Gurtovoy both work on the boost libraries and this book covers many of the techniques developed for the &lt;a href="http://www.boost.org/libs/mpl/doc/index.html"&gt;boost::mpl library&lt;/a&gt;.&amp;nbsp; As well as trying to explain the concepts, the book also looks at &lt;em&gt;why&lt;/em&gt; you'd want to use them - chapter 10 (Domain-Specific&amp;nbsp;Embedded Languages) really sold it for me; all the tough metaprogramming stuff suddenly became more important when I could see what could be done with the techniques.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Beyond the C++ Standard Library&lt;/strong&gt;, &lt;em&gt;Karlsson&lt;/em&gt;.&amp;nbsp; Finally a book that covers many of the wonderful boost libraries.&amp;nbsp; Although the &lt;a href="http://www.boost.org/libs/libraries.htm"&gt;online documentation&lt;/a&gt; will always be the definitive guide, this book is great to pass around to colleagues to introduce them to any of the boost libraries.&amp;nbsp; Although I would have liked to have seen more examples of when to use the libraries and descriptions of how the libraries are implemented, if you use the boost libraries (You don't?&amp;nbsp; Why the hell not?) you'll want a copy of this book.&amp;nbsp; Not a necessary book but good to have nonetheless.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Framework Design Guidelines&lt;/strong&gt;, &lt;em&gt;Cwalina and Abrams&lt;/em&gt;.&amp;nbsp; The bible for Microsoft .NET devs, this book describes rules on how .NET libraries should be constructed.&amp;nbsp; Naming conventions, exception usage, common design patterns and many other topics are dissected and rules are clearly stated (with some excellent commentary in the form of inline annotations by many MS gurus).&amp;nbsp; You can use FxCop to help find the flaws in your designs but then use this book to &lt;em&gt;understand why&lt;/em&gt;.&amp;nbsp; Microsoft use this internally and the .NET Framework is all the better for it.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The Design and Evolution of C++&lt;/strong&gt;, &lt;em&gt;Stroustrup&lt;/em&gt;.&amp;nbsp; This book is a little out of place.&amp;nbsp; It doesn't describe any software techniques or languages, nor is it really required reading.&amp;nbsp; But I couldn't leave it off this list.&amp;nbsp; D&amp;amp;E describes the history of C++, the design decisions, how it was developed, how it went through standardization.&amp;nbsp; There are many lessons to be learnt here but, for me, I just couldn't believe that a topic so dry as &lt;em&gt;computer language history&lt;/em&gt; could be so damn &lt;em&gt;interesting!&lt;/em&gt;&amp;nbsp; Maybe I'm strange though. ;)&lt;/p&gt; &lt;hr&gt;  &lt;p&gt;So there you have it, that's my list.&amp;nbsp; I'm sure I've left a few off there as I've got books scattered all over the place at the moment but that should get you started.&amp;nbsp; &lt;/p&gt; &lt;p&gt;One book I &lt;em&gt;know&lt;/em&gt; I've left out is Fred Brook's Mythical Man Month which is fantastic but I've lost it (just buy it anyway!).&amp;nbsp; When I find it (or buy a new copy) I'll add it to this list.&lt;/p&gt; &lt;p&gt;Disclaimer:&amp;nbsp; My only affilliation with these books is that I own them.&amp;nbsp; I don't personally know any of the authors (though I have had some correspondence with some of them) and I don't get any monentary gain by talking about them.&amp;nbsp; I just think they're great books.&amp;nbsp; :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-115807184577824922?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/115807184577824922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=115807184577824922' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115807184577824922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115807184577824922'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/09/matts-recommended-technical-books.html' title='Matt&apos;s recommended technical books'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-115685994828060293</id><published>2006-08-29T23:58:00.000+10:00</published><updated>2006-08-29T23:59:08.293+10:00</updated><title type='text'>Hanselman's Ultimate Developer and Power Users Tool List for Windows - updated for 2006</title><content type='html'>&lt;p&gt;It's really comforting to know that I'm not the only developer in the world that has to try out &lt;em&gt;every tool in existence&lt;/em&gt;!  &lt;a href="http://www.hanselman.com/blog"&gt;Scott Hanselman&lt;/a&gt; recently updated his &lt;a href="http://www.hanselman.com/blog/ScottHanselmans2006UltimateDeveloperAndPowerUsersToolListForWindows.aspx"&gt;Ultimate Developer and Power Users Tool List for Windows&lt;/a&gt;.  &lt;/p&gt;&lt;br /&gt;&lt;p&gt;If you're a software dev ensure you're aware of &lt;em&gt;every&lt;/em&gt; tool on the list, even if you don't install them.  Seriously.  &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Also be sure to check out the &lt;a href="http://www.hanselminutes.com/"&gt;Hanselminutes podcasts&lt;/a&gt;, which are always chock-full of great tips.  &lt;/p&gt;&lt;br /&gt;&lt;p&gt;If this seems like a Hanselman love-fest it's probably because it is - Scott is a guy I respect and admire.  Love ya work Scott, keep it up!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-115685994828060293?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/115685994828060293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=115685994828060293' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115685994828060293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115685994828060293'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/08/hanselmans-ultimate-developer-and.html' title='Hanselman&apos;s Ultimate Developer and Power Users Tool List for Windows - updated for 2006'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-115513907390390997</id><published>2006-08-10T01:57:00.000+10:00</published><updated>2006-08-10T01:57:54.070+10:00</updated><title type='text'>Microsoft loses a good one</title><content type='html'>&lt;a href="http://www.niallkennedy.com/blog/archives/2006/08/leaving-microsoft.html" &gt;Niall Kennedy  is leaving Microsoft&lt;/a&gt; to start his own business.  Sounds like Niall got a little fed up waiting for Microsoft to follow through on promises that were made to him about resourcing a project he was passionate about.  Big companies can do that, dammit.&lt;br /&gt;&lt;br /&gt;Having heard some of his ideas (though he probably doesn't remember, I met Niall while I was in the bay area attending one of his &lt;a href="http://sftechsessions.com/"&gt;tech sessions&lt;/a&gt;) I'm convinced MS has let an amazing opportunity go begging.  I can't wait to see what Niall comes up with working for himself in a startup!&lt;br /&gt;&lt;br /&gt;Good luck Niall!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-115513907390390997?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/115513907390390997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=115513907390390997' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115513907390390997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115513907390390997'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/08/microsoft-loses-good-one.html' title='Microsoft loses a good one'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-115500552600282687</id><published>2006-08-08T12:51:00.001+10:00</published><updated>2006-08-09T00:26:20.330+10:00</updated><title type='text'>Visual Studio designer doesn't like generic controls</title><content type='html'>Generics rocks; coming from a C++ background it wasn't until .NET was blessed with generics (v2.0) that I began taking it seriously.  Without at least some form of &lt;span style="font-style: italic;"&gt;parametric polymorphism&lt;/span&gt; any programming language is simply hobbled.&lt;br /&gt;&lt;br /&gt;Once the almighty &lt;a href="http://en.wikipedia.org/wiki/Anders_Hejlsberg"&gt;Anders&lt;/a&gt; got around to giving us generics however, things were all rosy.  I could safely (and speedily!) add and remove typed objects to my lists, write generic methods to perform operations and, generally, genericise the hell out of my code.  Sure, it wasn't as powerful as C++'s templates but generics are easier to use and have their own advantages (side-stepping the code bloat issue and providing an easy way to package a generic library for example).  Anyhoo, I'm using generics and I'm a happly lil' developer.&lt;br /&gt;&lt;br /&gt;Until I try to derive from a WinForms control and create a generic class from it.&lt;br /&gt;&lt;br /&gt;"Ohh noo, you can't do that!" complains the Visual Studio designer.  "Of course I can" I reply (surely I'm not the only developer who talks to their computer?) as I scan the code for errors.  There are none; the code compiles and even runs just fine.  All I wanted was a type-safe CheckedListBox and generics are the perfect solution.  Unfortunately the &lt;span style="font-style: italic;"&gt;designer&lt;/span&gt; doesn't know how to deal with generic classes.  If you create one, that's fine - but try to &lt;span style="font-style: italic;"&gt;use it at design-time&lt;/span&gt; and you're in deep poo-poo.  Bugger, it has a lot of great uses...&lt;br /&gt;&lt;br /&gt;Anyone know any way around this limitation?  And, for bonus points, do you know &lt;span style="font-style: italic;"&gt;why&lt;/span&gt; that limitation is there (seems to me - with cursory thought - that there's no good reason for the limitation to exist)?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-115500552600282687?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/115500552600282687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=115500552600282687' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115500552600282687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115500552600282687'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/08/visual-studio-designer-doesnt-like.html' title='Visual Studio designer doesn&apos;t like generic controls'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-115500548978279120</id><published>2006-08-08T12:51:00.000+10:00</published><updated>2006-08-08T23:57:36.036+10:00</updated><title type='text'>Annoying Bloglines 'feature'</title><content type='html'>I love &lt;a href="http://www.bloglines.com/"&gt;Bloglines&lt;/a&gt;, I use it all the time to keep track of &lt;a href="http://www.bloglines.com/public/MattyT"&gt;my feeds&lt;/a&gt;.  But lately something has changed, something that is driving me nuts. &lt;br /&gt;&lt;br /&gt;Perhaps a month ago I started noticing that when you display all the new posts from your feeds, Bloglines &lt;span style="font-style: italic;"&gt;draws the focus to the top of the page when all the posts have finished loading&lt;/span&gt;.  Arrgggh! &lt;br /&gt;&lt;br /&gt;I subscribe to around 200 feeds which typically generates around 250 posts per day to read.  It takes awhile for those posts to load and so I begin reading them as soon as they start to appear in my browser.  Some time later I'll be midway through reading post #74 and whoosh!  Back to the top I go, losing my place and boiling my blood. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[I'm lazy and haven't yet broken out the Javascript to find out why this is happening but I have two guesses.  1) Bloglines is telling the browser to give some element near the top the focus, though which one and why I don't know (it's &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; the search box).  2) The keyboard shortcuts implementation is interfering somehow.  Just guesses, I should really get dirty amongst the code.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's only a small thing but please Bloglines, make it stop!&lt;br /&gt;&lt;br /&gt;Tagging this post with &lt;span style="font-style: italic;"&gt;"bloglines freedback"&lt;/span&gt; (&lt;a href="http://chris.pirillo.com/2006/06/23/freedbacking/"&gt;Chris Pirillo's freedback&lt;/a&gt; idea is a ripper) ought to alert the Bloglines team that this is feedback for them - we'll see how we go!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-115500548978279120?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/115500548978279120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=115500548978279120' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115500548978279120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115500548978279120'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/08/annoying-bloglines-feature.html' title='Annoying Bloglines &apos;feature&apos;'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-115340287126021500</id><published>2006-07-20T22:35:00.000+10:00</published><updated>2006-07-20T23:43:12.020+10:00</updated><title type='text'>California, Redundant, MacBook(?)</title><content type='html'>Well, well, well.  It's been over two months since my last post on this blog and boy has life been interesting!&lt;br /&gt;&lt;br /&gt;As you &lt;a href="http://sublimesoftware.blogspot.com/2005/10/heading-os-for-awhile.html"&gt;may remember&lt;/a&gt;, I spent six months in California's Bay Area to support one of the products I had been working on.  What a fantastic experience (if you're interested in reading about some of the sights I saw in Northern California you'll find some stories and pictures on my &lt;a href="http://trentini.wordpress.com/"&gt;personal blog&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Supporting&lt;/span&gt; software, compared to &lt;span style="font-style: italic;"&gt;developing&lt;/span&gt;, requires a whole different slew of skills and I encourage every software developer to exercise those skills if given the opportunity.  It'll make you a better developer.  And teach you patience.  And - sometimes - make you want to inflict mortal injuries on your users.  ;)&lt;br /&gt;&lt;br /&gt;When I got back I began regular development work again, slipping back into the role pretty easily because I was motivated (getting in close contact with your customers will do that) and still well practiced (I undertook a lot of mini software projects "on the side" even overseas - if you're a 'true' software dev you'll understand!).  But a few weeks later bad news rippled through the office; our sales had continued to underwhelm, restructuring was going to occur and some jobs would be cut.&lt;br /&gt;&lt;br /&gt;Long story short; mine was one of them.&lt;br /&gt;&lt;br /&gt;Now, I'd been considering leaving the company for quite some time, in fact had I not been given the overseas stint it's unlikely I would have stayed much longer.  I'd been at the company for over five years and, while it's a great environment, there are many things I found &lt;span style="font-style:italic;"&gt;insanely frustrating&lt;/span&gt;.  I'm not going to discuss them here suffice to say that I thought many things should be done differently and change was very hard to instigate.  &lt;br /&gt;&lt;br /&gt;Anyway, for whatever reason, my job evaporated and I'm now on the market.  After the initial shock wore off I actually felt somewhat relieved; now I was free to decide what &lt;span style="font-style:italic;"&gt;I&lt;/span&gt; want to do and &lt;span style="font-style:italic;"&gt;go after it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Which is where I am now.  I'm trying to figure out if I join another large company, or a start-up.  Or perhaps work for myself (I have &lt;span style="font-style:italic;"&gt;many&lt;/span&gt; ideas of applications to write!).  Or maybe returning to uni to pursue post-graduate studies would be good for me.  Not yet sure.  But I do know I will be involved in software development in some form or another which leads me to the question that prompted this post.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Can I get a MacBook and effectively develop software using Visual Studio?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You see I &lt;span style="font-style:italic;"&gt;really&lt;/span&gt; like the new MacBooks.  I've used a few and am impressed with their UI and the build quality of the machines themselves.  The Unix core also strongly appeals.  However I &lt;span style="font-style:italic;"&gt;need&lt;/span&gt; to work with Visual Studio because it's likely my next job will require it and, simply, it's a productive and effective environment.  I'm hoping that VS2005 runs well under &lt;a href="http://www.parallels.com/"&gt;Parallels&lt;/a&gt; - does anyone know?  Have any other developers headed down this path?  Or will I be forced to run &lt;a href="http://www.apple.com/macosx/bootcamp/"&gt;Boot Camp&lt;/a&gt;?  Is BC really ready for prime time?&lt;br /&gt;&lt;br /&gt;Any information you guys might have would be very much appreciated!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-115340287126021500?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/115340287126021500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=115340287126021500' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115340287126021500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/115340287126021500'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/07/california-redundant-macbook.html' title='California, Redundant, MacBook(?)'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-114801250074539076</id><published>2006-05-19T14:21:00.000+10:00</published><updated>2006-05-25T19:24:48.123+10:00</updated><title type='text'>Google Maps finally has Aussie roads</title><content type='html'>Awesome!&lt;br /&gt;&lt;br /&gt;Google Maps now has &lt;a href="http://www.gearthblog.com/blog/archives/2006/05/down_under_and.html" &gt;Australian (and New Zealand) road data&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;I have been waiting for this for a &lt;i&gt;long&lt;/i&gt; time.  While in the US I've gotten so used to using online services - because they cater so well to the US market - that it'll be somewhat of a shock to get back home and realise that Australian services are so far behind.  But now I at least have road information!&lt;br /&gt;&lt;br /&gt;You can even see the outline of the &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=Australia&amp;om=1&amp;ll=-37.797501,145.304135&amp;spn=0.005977,0.013561"&gt;block of my house&lt;/a&gt;.  Fantastic.&lt;br /&gt;&lt;br /&gt;Looking forward to seeing some Aussie mash-ups.&lt;br /&gt;&lt;br /&gt;Oh, and before you ask, no, Google Earth data hasn't yet been updated.  But it can't be too far away.  Sidenote: The "Melbourne" city identifier in GE is still some 10kms too far east...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update!&lt;/span&gt;  The &lt;a href="http://local.live.com/"&gt;Windows Live Local&lt;/a&gt; team have just &lt;a href="http://blogs.msdn.com/cthota/archive/2006/05/23/605688.aspx"&gt;gone live&lt;/a&gt; with a new version of their online map product which also includes Aussie road data.  Sweet.  :)  But despite &lt;a href="http://blogs.msdn.com/frankarr/archive/2006/05/24/605640.aspx"&gt;Frank's claims&lt;/a&gt; that they use the same provider Google seem to have a significant edge in my area where the detail is much better with Google Maps.  Compare my house location:  &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=Australia&amp;om=1&amp;ll=-37.797645,145.30318&amp;spn=0.011954,0.027122"&gt;Google Maps&lt;/a&gt;, &lt;a href="http://local.live.com/default.aspx?v=2&amp;cp=-37.796865~145.296314&amp;style=r&amp;lvl=16&amp;cid=E12D9BE5D128C627!1194"&gt;Live Local&lt;/a&gt;.  Although the Melbourne road data may not be that great (and of course YMMV - I've only checked out my 'hood) there are some fantastic features with the new release - the scratchpad and sharing capabilities for example.  It's wonderful to see such activity in the mapping domain!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-114801250074539076?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/114801250074539076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=114801250074539076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/114801250074539076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/114801250074539076'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/05/google-maps-finally-has-aussie-roads.html' title='Google Maps finally has Aussie roads'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-114497296941544576</id><published>2006-04-14T10:02:00.000+10:00</published><updated>2006-04-14T17:14:27.110+10:00</updated><title type='text'>Google Calendar</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://calendar.google.com/"&gt;Google Calendar&lt;/a&gt; is finally here.&lt;br /&gt;&lt;br /&gt;Bottom line: For a first release it's slick.  A couple of minor niggles and performance issues (it's running noticably slower than yesterday!) but on the whole it's great.  I've been evaluating &lt;a href="http://www.airset.com/"&gt;Airset&lt;/a&gt;, &lt;a href="http://30boxes.com"&gt;30Boxes&lt;/a&gt; and &lt;a href="http://www.calendarhub.com/"&gt;Calendar Hub&lt;/a&gt; but I'll now switch to Google Calendar.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-114497296941544576?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/114497296941544576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=114497296941544576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/114497296941544576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/114497296941544576'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/04/google-calendar.html' title='Google Calendar'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-114428980592597354</id><published>2006-04-06T12:16:00.000+10:00</published><updated>2006-04-06T12:16:45.956+10:00</updated><title type='text'>Apple Boot Camp</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Apple have released &lt;a href="http://www.apple.com/macosx/bootcamp/"&gt;Boot Camp&lt;/a&gt;, &lt;i&gt;official  software&lt;/i&gt; that allows an Apple to dual boot with Windows or OSX.  &lt;br/&gt;&lt;br/&gt;If the performance of Visual Studio turns out to be reasonable I may just buy a Mac Mini.  I've been looking for an excuse for awhile.  :)  Among many other things, I'd love to use it as a front-end for a &lt;a href="http://www.mythtv.org/"&gt;MythTV&lt;/a&gt; setup.&lt;br/&gt;&lt;br/&gt;As the rest of the world is discussing, this is an audacious move by Apple but many are predicting that virtualization - running Windows applications &lt;i&gt;within&lt;/i&gt; OSX - is coming.  Now &lt;i&gt;that&lt;/i&gt; would be seriously kick-ass.  There are only a handful of applications that tie me to Windows, my development tools being the most important, and it wouldn't take much effort to nudge me over into the Mac world.  It would also have many ramifications in the computing world.  What would it mean for Linux?  Which platform would you target as a developer?&lt;br/&gt;&lt;br/&gt;Read more about it:&lt;br/&gt;&lt;br/&gt;&lt;a href="http://arstechnica.com/news.ars/post/20060405-6524.html"&gt;Ars Technica&lt;/a&gt;&lt;br/&gt;&lt;a href="http://scobleizer.wordpress.com/2006/04/05/run-xp-on-a-mac-cool/"&gt;Scoble&lt;/a&gt;&lt;br/&gt;&lt;a href="http://gizmodo.com/gadgets/pcs/apple-boot-camp-the-impossible-possible-165189.php"&gt;Gizmodo&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.engadget.com/2006/04/05/mossberg-goes-to-boot-camp-and-survives-unscathed/"&gt;Engadget&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.makezine.com/blog/archive/2006/04/boot_camp_boot_to_xp_and_os_x.html?CMP=OTC-0D6B48984890"&gt;Make: Blog&lt;/a&gt;&lt;br/&gt;&lt;a href="http://apple.slashdot.org/article.pl?sid=06/04/05/136253"&gt;Slashdot&lt;/a&gt;&lt;br/&gt;&lt;a href="http://thebit.thepodcastnetwork.com/2006/04/06/time-to-send-the-geeks-to-boot-camp/"&gt;TPN: The Bit&lt;/a&gt;&lt;br/&gt;&lt;a href="http://gigaom.com/2006/04/05/macxp/"&gt;Om Malik&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.wired.com/news/technology/0,70593-0.html?tw=rss.index"&gt;Wired&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-114428980592597354?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/114428980592597354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=114428980592597354' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/114428980592597354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/114428980592597354'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/04/apple-boot-camp.html' title='Apple Boot Camp'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-114119699458182396</id><published>2006-03-05T06:03:00.000+11:00</published><updated>2006-03-05T06:03:53.920+11:00</updated><title type='text'>Virtual Earth Streetlevel</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br/&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I'm a big fan of &lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt; and, to a lesser extent, &lt;a href="http://maps.google.com/"&gt;Google Maps&lt;/a&gt;. I regularly use the services to give me directions and learn about foreign places. &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Microsoft's &lt;a href="http://local.live.com/"&gt;Virtual Earth&lt;/a&gt; (now Windows Live Local) has always been an also-ran in my books though in typical MS fashion they've perservered and worked hard to make it a very competitive product. I've no doubt that it will continue to get better.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;So I wasn't &lt;span style="font-style: italic;"&gt;totally&lt;/span&gt; surprised to see Chandu Thota, a key developer in the Virtual Earth team, &lt;a href="http://blogs.msdn.com/cthota/archive/2006/02/28/540717.aspx"&gt;announce a new technology preview&lt;/a&gt; this morning. The team have extended the regular Virtual Earth interface to deliver &lt;span style="font-style: italic;"&gt;street level&lt;/span&gt; images. It was only a matter of time I suppose, but this technology is very exciting and Microsoft should be pretty happy with themselves - there's gotta be an awful lot of data they're managing there! While the interface is still a little kludgey (and IMO would fit much better in a client-side Google Earth style application) it has the potential to be elegant enough to be useful.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I have been saying for a long time now that GIS-enabled software will spurn a bunch of new software applications and I believe more good stuff is yet to come. :)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Anyways, go check it out:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://preview.local.live.com/"&gt;Windows Live Local Virtual Earth Technology Preview&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Scoble also &lt;a href="http://scobleizer.wordpress.com/2006/02/28/check-this-out-virtual-earth-streetlevel/"&gt;blogged about it&lt;/a&gt; (and there's a &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=166518"&gt;video on Channel 9&lt;/a&gt;).&lt;br/&gt;&lt;br/&gt;[Update: The excellent &lt;a href="http://www.gearthblog.com"&gt;Google Earth Blog&lt;/a&gt; made the point that you can &lt;a href="http://www.gearthblog.com/blog/archives/2006/03/street_level_dr.html"&gt;achieve a similar effect in Google Earth&lt;/a&gt;.]&lt;br/&gt; &lt;blockquote&gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-114119699458182396?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/114119699458182396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=114119699458182396' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/114119699458182396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/114119699458182396'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/03/virtual-earth-streetlevel.html' title='Virtual Earth Streetlevel'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-114123953830243935</id><published>2006-03-02T05:58:00.000+11:00</published><updated>2006-03-02T05:58:58.363+11:00</updated><title type='text'>ABC RSS Feeds</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I used to subscribe to &lt;a href="http://www.theage.com.au/rsschannels/"&gt;the Age's RSS feeds&lt;/a&gt; to get my dose of Aussie news. I generally like the Age, their reporting is usually even handed and reasonably fair. But I &lt;a href="http://will.id.au/blog/archive/2006/03/01/searching-australian-libraries"&gt;agree with Will&lt;/a&gt; that the &lt;a href="http://www.abc.net.au/news/services/default.htm"&gt;ABC feeds&lt;/a&gt; are &lt;span style="font-style: italic; font-weight: bold;"&gt;much&lt;/span&gt; better. &lt;br/&gt;&lt;br/&gt;For a start they've got summaries. With the Age feeds you only get headlines - and they're typically quite vague. The ABC gives headlines and a short one-line summary of what the article is about. It's not full text (which would be ideal!) but it's pretty good. And the quality of the ABC articles, while a bit drier than the Age, is also high.&lt;br/&gt;&lt;br/&gt;So bye-bye Age, hello ABC. :)&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-114123953830243935?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/114123953830243935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=114123953830243935' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/114123953830243935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/114123953830243935'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/03/abc-rss-feeds.html' title='ABC RSS Feeds'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113993875710366414</id><published>2006-02-15T04:38:00.000+11:00</published><updated>2006-02-15T04:39:17.116+11:00</updated><title type='text'>The brrreeeport report</title><content type='html'>Helpin' out &lt;a href="http://scobleizer.wordpress.com/2006/02/13/the-brrreeeport-report/"&gt;Scoble&lt;/a&gt; where I can...this is the brrreeeport!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113993875710366414?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113993875710366414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113993875710366414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113993875710366414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113993875710366414'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/02/brrreeeport-report.html' title='The brrreeeport report'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113972393403882021</id><published>2006-02-12T16:58:00.000+11:00</published><updated>2006-02-12T16:58:54.096+11:00</updated><title type='text'>Kate Gregory gives a "migrating C++ apps to .NET" presentation</title><content type='html'>Kate Gregory, a terrific C++ presenter, has posted &lt;a href="http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=7dfd6ea3-138a-404e-b3e9-55534ba84f22"&gt;some slides and code&lt;/a&gt; from a C++/CLI presentation she recently gave on migrating C++ applications to the .NET framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113972393403882021?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113972393403882021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113972393403882021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113972393403882021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113972393403882021'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2006/02/kate-gregory-gives-migrating-c-apps-to.html' title='Kate Gregory gives a &quot;migrating C++ apps to .NET&quot; presentation'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113467579287407740</id><published>2005-12-16T06:43:00.000+11:00</published><updated>2005-12-16T06:43:12.873+11:00</updated><title type='text'>Matts Mind</title><content type='html'>I &lt;a href="http://sublimesoftware.blogspot.com/2005/10/heading-os-for-awhile.html"&gt;promised&lt;/a&gt; a link to a more personal blog of mine that I'm writing in while I'm OS.  Naturally I forgot.  So here it is:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trentini.wordpress.com/"&gt;Matts Mind&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm posting much more to that blog for the forseeable future but if I want to write any software-related posts it'll be done here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113467579287407740?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113467579287407740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113467579287407740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113467579287407740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113467579287407740'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/12/matts-mind.html' title='Matts Mind'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113467557616275759</id><published>2005-12-16T06:39:00.000+11:00</published><updated>2005-12-16T06:39:36.223+11:00</updated><title type='text'>Google Music Search...and maybe an iTunes killer?</title><content type='html'>Google just announced the addition of a &lt;a href="http://googleblog.blogspot.com/2005/12/searching-for-music.html"&gt;music search feature&lt;/a&gt;.  Now you can search for your favourite artist's name and get some enhanced information, not just web site links.&lt;br /&gt;&lt;br /&gt;There are also some pretty significant &lt;a href="http://www.scripting.com/2005/12/15.html#When:10:23:15AM"&gt;rumours&lt;/a&gt; that Google are going to release some sort of iTunes Store competitor.  Dave's regularly on the mark and he's far from the only one spouting that kind of story (just do a &lt;a href="http://www.google.com.au/search?q=google+itunes"&gt;Google search&lt;/a&gt;!)&lt;br /&gt;&lt;br /&gt;I'm all for competition in this space!  I &lt;a href="http://mattsipodnews.blogspot.com/"&gt;love my iPod&lt;/a&gt; but the online music options are underwhelming.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113467557616275759?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113467557616275759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113467557616275759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113467557616275759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113467557616275759'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/12/google-music-searchand-maybe-itunes.html' title='Google Music Search...and maybe an iTunes killer?'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113461255194979164</id><published>2005-12-15T13:09:00.000+11:00</published><updated>2005-12-15T13:09:11.953+11:00</updated><title type='text'>C++/CLI now an International Standard!</title><content type='html'>Sooo, now there's officially a new language on the block!  C  /CLI was &lt;a href="http://blogs.msdn.com/texblog/archive/2005/12/14/503731.aspx"&gt;just approved as an international standard&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I &lt;em&gt;like&lt;/em&gt; C  /CLI but don't see it being used a great deal.  Simply because it's more (!) complex than C   (seeing as it's essentially a superset).  However, for those times where you really need to interface transparently to a C or C++ library and/or performance is a significant issue then it'll find a home.  &lt;br /&gt;&lt;br /&gt;The Microsoft team did a great job fleshing out this spec - there's a lot of complexity in integrating the .NET aspects yet it feels quite natural to C++ developers.&lt;br /&gt;&lt;br /&gt;Thank goodness we've seen the last of Managed C++.  ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113461255194979164?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113461255194979164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113461255194979164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113461255194979164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113461255194979164'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/12/ccli-now-international-standard.html' title='C++/CLI now an International Standard!'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113212342010982620</id><published>2005-11-16T17:18:00.000+11:00</published><updated>2005-11-17T00:56:35.460+11:00</updated><title type='text'>Google Earth placemark test</title><content type='html'>While I'm &lt;a href="http://sublimesoftware.blogspot.com/2005/10/heading-os-for-awhile.html"&gt;overseas&lt;/a&gt; I want to use &lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt; to display locations that I visit so that my family and friends can join me on my journey.  :)&lt;br /&gt;&lt;br /&gt;As a test, here's the &lt;a href="http://trentini.myphotos.cc/RETrip/Matts%20RE%20apartment.kml"&gt;apartment&lt;/a&gt; &lt;img src="http://trentini.myphotos.cc/RETrip/gelogoicon.png" /&gt; I'll be staying at.  If you've got Google Earth installed you should just be able to click on the link and press OK.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113212342010982620?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113212342010982620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113212342010982620' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113212342010982620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113212342010982620'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/11/google-earth-placemark-test.html' title='Google Earth placemark test'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113197229233405301</id><published>2005-11-14T23:44:00.000+11:00</published><updated>2005-11-14T23:46:10.490+11:00</updated><title type='text'>Google Analytics</title><content type='html'>Google has complemented their AdWords business by offering &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt; for free. Analytics is some pretty sophisticated tracking software that shows you a great deal about who is visiting your website. What keywords they've searched with to get there, what browser they're using, what resolution their display runs at, where (geographically) they're from, &lt;em&gt;how effective AdWords is&lt;/em&gt; - a veritable treasure of information.&lt;br /&gt;&lt;br /&gt;This service is free (as long as you have five million hits or less per day - or are an active AdWords customer) and easy to use. I've incorporated it into Sublime Software to see what it's like. I'll keep ya'll posted. :)&lt;br /&gt;&lt;br /&gt;ArsTechnica has a good &lt;a href="http://arstechnica.com/news.ars/post/20051114-5563.html"&gt;overview of the service&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113197229233405301?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113197229233405301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113197229233405301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113197229233405301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113197229233405301'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/11/google-analytics.html' title='Google Analytics'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113172011440194197</id><published>2005-11-11T23:16:00.000+11:00</published><updated>2005-11-12T01:41:54.460+11:00</updated><title type='text'>Shopping for webcams</title><content type='html'>Quick story about good customer service from a couple of computer hardware suppliers. &lt;br /&gt;&lt;br /&gt;I wanted to order three webcams so I can communicate with my family and Melissa while I'm overseas.  I didn't have a clue which models were good or bad so I jumped into Google and tried to find reviews.  Surprisingly (well, to me) it was really hard to find a site that did good webcam reviews - I found that the best resource was doing a search for "webcams" in &lt;a href="http://www.amazon.com/gp/search/104-4823459-0181532?search-alias=pc-hardware&amp;keywords=webcam"&gt;Amazon&lt;/a&gt; and taking a look at the customer reviews.  A terrific use of what &lt;a href="http://scobleizer.wordpress.com/"&gt;Scoble&lt;/a&gt; likes to term “&lt;a href="http://scobleizer.wordpress.com/2005/11/10/i-dont-use-the-internet-so-why-am-i-a-user/"&gt;slave generated content&lt;/a&gt;”.   ;)&lt;br /&gt;&lt;br /&gt;Anyway, once I'd isolated the models that were generally well-liked (and fitted my price and feature requirements) I used the trusty &lt;a href="http://staticice.com.au/"&gt;Static Ice&lt;/a&gt; search engine to find the best local prices.&lt;br /&gt;&lt;br /&gt;If you're an Aussie looking for PC hardware Static Ice is a great resource.  Just type in product keywords and SI will return you the list of online vendors that advertise that product - sorted in (lowest first) price order.  [1] [2]&lt;br /&gt;&lt;br /&gt;Static Ice listed &lt;a href="http://www.centre.net.au/index.html"&gt;Centre.net.au&lt;/a&gt; as having the best price for the webcam I'd settled on.  So I placed an order with them.  Unfortunately, shortly after, I received an email stating that they were unable to source stock for my item until late November and to confirm if that was OK.  It wasn't (remember I'm &lt;a href="http://sublimesoftware.blogspot.com/2005/10/heading-os-for-awhile.html"&gt;leaving on the 23rd&lt;/a&gt;!) so I called them up and asked if I had any other options.  The girl I spoke to on the phone was &lt;span style="font-style: italic;"&gt;fantastically&lt;/span&gt; helpful.  She looked up other products that were similarly specced, priced and in stock and was patient and cheerful with me.  It was a shame that, in the end, they didn't have anything that I wanted and I asked if it was possible for me to cancel the order.  "Of course, no problems at all sir." &lt;br /&gt;&lt;br /&gt;This is service that I want.  I'll come back to Centre.net.au.  And I recommend others try it out.&lt;br /&gt;&lt;br /&gt;Back to Static Ice looking for vendor #2.  &lt;a href="http://www.infinitycomputer.com.au/"&gt;Infinity Computer Group&lt;/a&gt;.  Their website advertised the product I was after but this time I rang to check that they had it in stock and could ship it within the next week.  Unfortunately the service here wasn't great.  After repeatedly being put on hold I was informed that the store that I'd rang (Brunswick) didn't have any in stock.  I could try calling one of their other stores if I wished.  Oh, and by the way, the store price is different (quite significantly!) to the website price.  No thanks.  Any vendor that has a web presence &lt;span style="font-style: italic;"&gt;needs&lt;/span&gt; to have a centralized system and have the same price at their store and website.&lt;br /&gt;&lt;br /&gt;Can't recommend Infinity.&lt;br /&gt;&lt;br /&gt;As it turns out, third time lucky.  &lt;a href="http://www.citysoftware.com.au/Default.asp"&gt;City Software&lt;/a&gt; advertised my product on their (pick of the bunch) website at a reasonable price.  I called them to check availability and expected shipping times and I spoke to a &lt;span style="font-style: italic;"&gt;very&lt;/span&gt; helpful person who listened attentively and told me what I needed to hear ("yes we have that in stock, yes it'll be on your doorstep in time").  He was professional and friendly and, after a brief chat, offerred to waive the shipping fee!&lt;br /&gt;&lt;br /&gt;Excellent, highly recommended.  Assuming I get my webcams next week of course!  :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[1]  Remember that you can narrow the Static Ice results to products by vendors only from your state by using the "state" syntax, much like Google's "site:" feature.  For example, I searched for "&lt;a href="http://staticice.com.au/cgi-bin/search.cgi?q=logitech+quickcam+stx+state%3Avic"&gt;logitech quickcam stx state:vic&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;[2]  If you're a Firefox user you &lt;span style="font-style: italic;"&gt;need&lt;/span&gt; to set up a &lt;a href="http://www.mozilla.org/products/firefox/smart-keywords"&gt;smart keyword&lt;/a&gt; search for Static Ice.  I tweaked the default location to "http://www.staticice.com.au/cgi-bin/search.cgi?q=%s state:vic" so that my searches are always Victoria only.  Now I just type "si webcams" into my location bar in Firefox, press enter and voila!  I get a price-sorted list of webcams available online around Victoria.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113172011440194197?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113172011440194197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113172011440194197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113172011440194197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113172011440194197'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/11/shopping-for-webcams.html' title='Shopping for webcams'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113074265598490676</id><published>2005-10-31T18:00:00.000+11:00</published><updated>2005-10-31T18:10:55.983+11:00</updated><title type='text'>Holiday - and enjoy the cup!</title><content type='html'>And now I'm off!  Heading down to Apollo Bay for a much-deserved week away with Melissa.  I'll probably be incommunicado until Sunday.  It'll be the longest I've unplugged for in aaaages.  I won't know what to do with myself!  ;)&lt;br /&gt;&lt;br /&gt;And I'm scared to think how many blog postings I'll have waiting for me when I jump online again.&lt;br /&gt;&lt;br /&gt;Have fun at - or watching - the &lt;a href="http://www.cultureandrecreation.gov.au/articles/melbournecup/"&gt;Melbourne Cup&lt;/a&gt; folks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113074265598490676?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113074265598490676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113074265598490676' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113074265598490676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113074265598490676'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/10/holiday-and-enjoy-cup.html' title='Holiday - and enjoy the cup!'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113074200810636581</id><published>2005-10-31T17:24:00.000+11:00</published><updated>2005-10-31T18:02:17.146+11:00</updated><title type='text'>VS2005 issues</title><content type='html'>In my &lt;a href="http://sublimesoftware.blogspot.com/2005/10/vs2005-and-net-is-shipping.html"&gt;last post&lt;/a&gt; I mentioned that VS2005 was tighter than its predecessor. I thought it'd be useful to show where we had some problems (we're still working through them so this isn't an exhaustive list) and some of our solutions.&lt;br /&gt;&lt;br /&gt;The changes are all covered in detail in the MSDN document "&lt;a href="http://msdn2.microsoft.com/en-us/library/ms177253"&gt;Breaking Changes in the Visual C++ 2005 Compiler&lt;/a&gt;" but I'll try and give some real examples that we faced.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt; Pointer-to-members now require qualified name and &amp; &lt;/h3&gt;The compiler is much stricter about the types of function pointers. The error C3867 is generated with the following code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;cagtmodulemanager eagtsystemmultiusermode=""&gt;  CAThing()&lt;br /&gt;: m_MyObserver(this, MyCallback)&lt;br /&gt;&lt;/cagtmodulemanager&gt;&lt;/pre&gt;The resolution is to qualify the function pointers and pass the addressof the function in. e.g.&lt;br /&gt;&lt;pre&gt;&lt;cagtmodulemanager eagtsystemmultiusermode=""&gt;  CAThing()&lt;br /&gt;: m_MyObserver(this, &amp;amp;CAThing::MyCallback)&lt;br /&gt;&lt;/cagtmodulemanager&gt;&lt;/pre&gt;&lt;h3&gt;const_cast can't down cast / Previously implicit string&lt;br /&gt;casts are no longer allowed &lt;/h3&gt;This code does not compile (error C2440)&lt;br /&gt;&lt;pre&gt;   BSTR bstrMessage = SysAllocString(T2OLE(const_cast&lt;unsigned short=""&gt;(MyThing.ErrorMessage.c_str())));&lt;br /&gt;&lt;/unsigned&gt;&lt;/pre&gt;This was replaced with the following (the BSTR could be deallocated after use):&lt;br /&gt;&lt;pre&gt;   CComBSTR bstrMessage(MyThing.ErrorMessage.c_str());&lt;br /&gt;&lt;/pre&gt;This code will also give the same error:&lt;br /&gt;&lt;pre&gt;   OLECHAR* pStringBuffer;&lt;br /&gt;USHORT* pString = pStringBuffer;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt; COM/C++ Attributes with enumeration values should not be enclosed in quotes. &lt;/h3&gt;This code:&lt;br /&gt;&lt;pre&gt;    coclass,&lt;br /&gt;threading("free"),&lt;br /&gt;event_source("com"),&lt;br /&gt;aggregatable("never"),&lt;br /&gt;&lt;/pre&gt;Should be rewritten without the quotes as:&lt;br /&gt;&lt;pre&gt;    coclass,&lt;br /&gt;threading(free),&lt;br /&gt;event_source(com),&lt;br /&gt;aggregatable(never),&lt;br /&gt;&lt;/pre&gt;The first time that the quotes get compiled gives warning C4581. This implies that the double quotes (") need to be replaced with single quotes ('). However, if you do this you then get error C3455. This error will say that "none of the attribute constructors matched the arguments".&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt; Public attributes are stricter &lt;/h3&gt;The error MIDL2072 will be emitted for this code:&lt;br /&gt;&lt;pre&gt;    typedef [public] enum EEventIdType&lt;br /&gt;{&lt;br /&gt;E_DEFAULT_EVENT_ID,&lt;br /&gt;E_DEBUG_EVENT_ID,&lt;br /&gt;} EEventIdType;&lt;br /&gt;&lt;/pre&gt;The solution is to place the public attribute earlier:&lt;br /&gt;&lt;pre&gt;    [public] typedef enum EEventIdType&lt;br /&gt;&lt;/pre&gt;&lt;h3&gt; The scope of variables in control constructs is limited to&lt;br /&gt;the construct &lt;/h3&gt;In this code:&lt;br /&gt;&lt;pre&gt;    for (int i = 0; i*max  ;++i)&lt;/pre&gt;&lt;br /&gt;The scope of i is limited to the for loop. (The * is meant to be a less than operator but I'll be damned if I can get blogger to cooperate!)&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt; Method declarations must explicitly indicate return types &lt;/h3&gt;This code gives the error C4430:&lt;br /&gt;&lt;pre&gt;    virtual CheckChar(UINT maskChar, UINT nChar, int endPos);&lt;br /&gt;&lt;/pre&gt;The return type must be explicitly defined. e.g.&lt;br /&gt;&lt;pre&gt;    virtual int CheckChar(UINT maskChar, UINT nChar, int endPos);&lt;br /&gt;&lt;/pre&gt;&lt;h3&gt; Private types are not accesible outside of the class they&lt;br /&gt;are declared in &lt;/h3&gt;This code gives the error C2248:&lt;br /&gt;&lt;pre&gt;    class cdxCSizingPropSheet : public CPropertySheet&lt;br /&gt;{&lt;br /&gt;private:&lt;br /&gt;struct StandardControls&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;};&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;static struct cdxCSizingPropSheet::StandardControls   psheetCtrls[]   =&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;In this example, the struct StandardControls needs to be available at the global scope for psheetCtrls.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Deprecated methods &lt;/h3&gt;For security, many methods/functions that can cause buffer overruns have been &lt;a href="http://msdn2.microsoft.com/en-us/library/8ef0s5kh" target="_top"&gt;deprecated&lt;/a&gt;. The recommended action is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; replace the deprecated methods, or&lt;br /&gt;&lt;/li&gt;&lt;li&gt; define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES as 1 so the compiler will use a &lt;a href="http://msdn2.microsoft.com/en-us/library/ms175759" target="_top"&gt;template overload &lt;/a&gt;to replace the deprecated method with another. N.B. security template overloads are not available for everything. Alternatively,&lt;br /&gt;&lt;/li&gt;&lt;li&gt; define _CRT_SECURE_NO_DEPRECATE or the warning pragma to not display this warning.&lt;/li&gt;&lt;/ul&gt;If you want my opinion (sure you do!) any function that can cause buffer overruns ought to be an error and avoided. You'll thank me later. ;)&lt;br /&gt;&lt;br /&gt;OK, that's it for now.  We had a few more but I've &lt;span style="font-style: italic;"&gt;had it&lt;/span&gt; with trying to lay out code in Blogger. Does anyone know any good blogging software to write code? It's damn hard from within the Blogger editor. I'm thinking of moving to my own system hosted at home for this reason alone (actually there are a few more!).  If I was to move to my own system which can you recommend that do a good job of handling code?&lt;br /&gt;&lt;br /&gt;Anyway, I hope that was useful to you - and a &lt;span style="font-weight: bold;"&gt;huge&lt;/span&gt; thanks to Ben who wrote most of this in our Wiki at work.  The good work was his, the errors mine.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113074200810636581?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113074200810636581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113074200810636581' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113074200810636581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113074200810636581'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/10/vs2005-issues.html' title='VS2005 issues'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113048820486730465</id><published>2005-10-28T18:22:00.000+10:00</published><updated>2005-10-28T18:30:04.926+10:00</updated><title type='text'>VS2005 and .NET is shipping!</title><content type='html'>The newest version of Miscrosoft's development suite - and the matching .NET framework - has just ben &lt;a href="http://blogs.msdn.com/somasegar/archive/2005/10/27/485665.aspx"&gt;released to MSDN subscribers&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Kudo's to Geoff for &lt;a href="http://codebetter.com/blogs/geoff.appleby/archive/2005/10/27/133862.aspx"&gt;watching so attentively&lt;/a&gt;.  You may not have gotten the scoop buddy but you were the first person &lt;span style="font-style:italic;"&gt;I&lt;/span&gt; saw that made the announcement.  :)&lt;br /&gt;&lt;br /&gt;Personally, our company will be making the switch (from VS2003) quite quickly, and I can't wait.&lt;br /&gt;&lt;br /&gt;Beware though folks, if you're compiling C++ code you may have a fair chunk of work migrating.  The compiler is &lt;span style="font-style:italic;"&gt;significantly&lt;/span&gt; more strict and we've found many errors (and warnings) that have to be rectified.  As a positive, remember that your code will be cleaner when you're finished!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113048820486730465?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113048820486730465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113048820486730465' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113048820486730465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113048820486730465'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/10/vs2005-and-net-is-shipping.html' title='VS2005 and .NET is shipping!'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-113033712187835758</id><published>2005-10-26T23:57:00.000+10:00</published><updated>2005-10-27T00:32:01.920+10:00</updated><title type='text'>Heading OS for awhile</title><content type='html'>My role at Agilent Technologies is soon going to change.  On the 23rd of November I'll be heading off to San Jose, California to support our products at one of our largest customer sites.  It's a six month assignment and I'm damn excited about it!  :)&lt;br /&gt;&lt;br /&gt;It's a pretty big change.  For the past few years I've been a full-time software engineer, beavering away developing features for our product line.  This new role is &lt;span style="font-style:italic;"&gt;totally&lt;/span&gt; about support.  It's unlikely that I'll write &lt;span style="font-style:italic;"&gt;any&lt;/span&gt; code except perhaps for some automation scripts.  That'll take some getting used to as I really enjoy writing code.  &lt;br /&gt;&lt;br /&gt;However, helping customers understand and solve problems with our products is a new challenge that I welcome.  I've always believed that to be a really good software engineer you need to thoroughly understand your customers needs so this experience will be invaluable from that point of view.&lt;br /&gt;&lt;br /&gt;And I'm &lt;span style="font-weight:bold;"&gt;really&lt;/span&gt; looking forward to spending time soaking in the California culture (alas not much of the sun - I'll be there through winter!) and seeing some of the sights.  &lt;br /&gt;&lt;br /&gt;The only really tough bit is that my amazing girlfriend Melissa won't be able to come with me.  She'll be (hopefully) joining me for a month in the middle of the trip - which will be fantastic! - but we've hardly spent more than a couple of &lt;span style="font-style:italic;"&gt;days&lt;/span&gt; apart, let alone &lt;span style="font-style:italic;"&gt;months&lt;/span&gt;.  Ugh, that's going to &lt;span style="font-style:italic;"&gt;suck&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Baby, if you're reading this, I'm going to miss you &lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;like crazy&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Thank goodness for webcams, broadband connections and video chat.  ;)&lt;br /&gt;&lt;br /&gt;Anyway, I just wanted to give y'all a heads up to let you know that I won't be in the country for much longer.  I'll also be starting up another blog to document my adventures over there - I'll post a link to it when I get around to creating it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-113033712187835758?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/113033712187835758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=113033712187835758' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113033712187835758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/113033712187835758'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/10/heading-os-for-awhile.html' title='Heading OS for awhile'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112977611637678863</id><published>2005-10-20T12:41:00.000+10:00</published><updated>2005-10-20T12:41:56.433+10:00</updated><title type='text'>Three links of potential goodness</title><content type='html'>My bookmarks folder is a mess and I've got a brazillion (&lt;a href="http://www.ivorysky.com/index.php/2005/09/27/p182/Bush-Joke.html"&gt;hehe&lt;/a&gt;) tabs open in &lt;a href="http://www.mozilla.org/products/firefox/"&gt;Firefox&lt;/a&gt;.  So I figure why not post a couple of useful links here?  You may even find them useful.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.shinyfeet.com/"&gt;ShinyFeet&lt;/a&gt; is a site that advertises unlimited email and file storage.  It's also got some sort of photo gallery feature.  Don't yet know what the catch is (probably advertising).&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.yousendit.com/"&gt;YouSendIt&lt;/a&gt; is a cool site that allows you to send a file (up to &lt;em&gt;a gig&lt;/em&gt;!) to someone.  Here's how it works.  Type in a recipient's email address.  Upload a file.  The file is stored temporarily (for about a week I think) on the YouSendIt server and a link to the file is sent to the recipient.  Again, not sure of the gotcha (advertising again?) but it's a pretty nifty idea.&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.inquisitorx.com/beta/"&gt;Inquisitor&lt;/a&gt; is a(nother) search engine but has &lt;a href="http://en.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt; goodness and searches &lt;em&gt;as you type&lt;/em&gt;.  Pretty sweet.  It gathers it's results from &lt;a href="www.google.com"&gt;Google&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112977611637678863?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112977611637678863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112977611637678863' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112977611637678863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112977611637678863'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/10/three-links-of-potential-goodness.html' title='Three links of potential goodness'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112835013119422159</id><published>2005-10-04T00:12:00.000+10:00</published><updated>2005-10-04T00:35:31.200+10:00</updated><title type='text'>Other blogs</title><content type='html'>Speaking of other blogs...I write in a couple now and just thought I'd quickly 'advertise' them.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mattsipodnews.blogspot.com/"&gt;Matts iPod News&lt;/a&gt; is a blog all about iPods and iPod accessories.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wirelesscranium.blogspot.com/"&gt;Wireless Cranium&lt;/a&gt; is my friend Jiggy's blog.  Jiggy is a music buff and really knows his stuff - probably because he owns a pooload of CD's and spends all his spare time absorbed in the world of music.  ;)  I occasionally write in the blog since I also love listening to sweet, sweet music...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photonewsblog.blogspot.com/"&gt;Photo Impression&lt;/a&gt;, as mentioned recently, will contain photography news and information as well as links to photos that &lt;a href="http://jarek69.blogspot.com/"&gt;Jarek&lt;/a&gt; (aka J-Man) or I like.  It's only early days for this blog but we'll see where it goes...&lt;br /&gt;&lt;br /&gt;Then there's &lt;a href="http://sublimesoftware.blogspot.com/"&gt;this blog&lt;/a&gt; which I'm still, even after over a year, trying to figure out what to really do with.  I'd like to write more articles on software development but damn they take some serious time that I just haven't had lately.  Mostly it's just become a dumping ground for stuff I want to say, which is fine but probably terrible to read!  Anyway, I'll try and sprinkle a few software-related posts in amongst the drivel.  I hope you get something, even if it's only a tiny something, out of reading this blog!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112835013119422159?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112835013119422159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112835013119422159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112835013119422159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112835013119422159'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/10/other-blogs.html' title='Other blogs'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112834872948043396</id><published>2005-10-03T23:01:00.001+10:00</published><updated>2005-10-04T00:12:09.573+10:00</updated><title type='text'>Lens fixed, a 'new' camera and a new blog</title><content type='html'>Speaking of cameras...I'm sure you remember the heartache, the despair and the horror of the &lt;a href="http://sublimesoftware.blogspot.com/2005/07/joys-of-photographyand-pain-of-hard.html"&gt;day my lens broke&lt;/a&gt;.  Well, my 80-200 has come back from repair and it's better than new!&lt;br /&gt;&lt;br /&gt;The wonderful folks at the Camera Clinic (no web site unfortunately) on Easey St in Collingwood did a fantastic job with the lens. Not only that but it was just a &lt;span style="font-style: italic;"&gt;pleasure&lt;/span&gt; dealing with them - they kept me well informed, were sympathetic, spelt out my options and gave me a reasonable price. If you've got a problem with your camera gear I can &lt;span style="font-style: italic;"&gt;highly&lt;/span&gt; recommend them.&lt;br /&gt;&lt;br /&gt;Here's some (hastily taken) shots of my new and improved baby:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6014/300/1600/DSC_7613.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_7613.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6014/300/1600/DSC_7612.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_7612.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6014/300/1600/DSC_7610.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_7610.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Note the general roundness.  ;)  I heart that lens.  :)&lt;br /&gt;&lt;br /&gt;The other bit of photograpy-related news is that I bought a 'new' camera.  It's an old-school Yashica medium format TLR camera from the early 60's.  No photos since I left it at work (maybe tomorrow!) but there is a shot of it in the &lt;a href="http://cgi.ebay.com.au/ws/eBayISAPI.dll?ViewItem&amp;item=7546512106&amp;amp;rd=1&amp;sspagename=STRK%3AMEWA%3AIT&amp;amp;rd=1"&gt;eBay listing that I won&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I've been fascinated by all sorts of photographic equipment and I've wanted to play with a medium format cameras for years.  I haven't run any film through this Yashica yet but, assuming it works properly (it makes all the right sounds though the shutter is a little suspect), I'm intrigued that this relic can produce better images than the most expensive, top-of-the-line digital SLR.&lt;br /&gt;&lt;br /&gt;Maybe next up will be a large-format view camera, who knows!?&lt;br /&gt;&lt;br /&gt;Finally, I'm going to try and minimise the photography-related posts to this blog from now on.  I've set up a new blog, &lt;a href="http://photonewsblog.blogspot.com/"&gt;Photo Impression&lt;/a&gt;, solely for photography related news.  My friend &lt;a href="http://jarek69.blogspot.com/"&gt;Jarek&lt;/a&gt; and I are keen hobbyist photographers and we'll endeavour to post links to photos we like and share any photography-related information.  So if you're interested in cameras, lenses and striving to capture the perfect photo take a squiz or subscribe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112834872948043396?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112834872948043396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112834872948043396' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112834872948043396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112834872948043396'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/10/lens-fixed-new-camera-and-new-blog.html' title='Lens fixed, a &apos;new&apos; camera and a new blog'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112834448196657015</id><published>2005-10-03T23:01:00.000+10:00</published><updated>2005-10-03T23:01:22.026+10:00</updated><title type='text'>Geek Dinner this Friday</title><content type='html'>My mate Tejas has organised a geek dinner for this Friday at Gopal's vegetarian restaurant on Swanston st at 6:30.&lt;br /&gt;&lt;br /&gt;Check out the details at &lt;a href="http://www.itejas.com/index.php/2005/09/26/venue_finalised_for_october_geek_dinner"&gt;Tejas' Blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My camera and I are going to make every effort to be there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112834448196657015?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112834448196657015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112834448196657015' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112834448196657015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112834448196657015'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/10/geek-dinner-this-friday.html' title='Geek Dinner this Friday'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112670940438732000</id><published>2005-09-15T00:50:00.000+10:00</published><updated>2005-09-15T00:50:04.440+10:00</updated><title type='text'>Google Blog Search</title><content type='html'>OK, OK I'm a Google fanboi.  But this blog search looks pretty nice indeed - certainly feels better than &lt;a href="http://www.technorati.com/"&gt;Technorati&lt;/a&gt; ever has:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogsearch.google.com/"&gt;Google Blog Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And an &lt;a href="http://blogsearch.google.com/blogsearch?hl=en&amp;q=matt+trentini&amp;btnG=Search+Blogs"&gt;ego search&lt;/a&gt; reports a link to this blog - and damn fast too!  Kudos Google.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112670940438732000?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112670940438732000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112670940438732000' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112670940438732000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112670940438732000'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/09/google-blog-search.html' title='Google Blog Search'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112657391635060879</id><published>2005-09-13T11:11:00.000+10:00</published><updated>2005-09-13T11:11:56.416+10:00</updated><title type='text'>Doppler and NPR feeds</title><content type='html'>I use &lt;a href="http://www.dopplerradio.net/"&gt;Doppler&lt;/a&gt; to manage my podcasts.  Recently I added a bunch of &lt;a href="http://www.npr.org/rss/podcast/podcast_directory.php"&gt;NPR feeds&lt;/a&gt; to Doppler (highly recommended BTW!) but found that they wouldn't download.  Turned out that Doppler has an issue with the URL that NPR supply, the solution was found in the &lt;a href="http://forum.dopplerradio.net/viewtopic.php?t=395&amp;amp;highlight=npr"&gt;Doppler Forums&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hopefully this'll help someone else!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112657391635060879?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112657391635060879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112657391635060879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112657391635060879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112657391635060879'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/09/doppler-and-npr-feeds.html' title='Doppler and NPR feeds'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112654063924528652</id><published>2005-09-13T01:57:00.000+10:00</published><updated>2005-09-13T01:57:19.253+10:00</updated><title type='text'>eBay Buys Skype for $4.1 Billion - Web News News - Designtechnica</title><content type='html'>eBay buys Skype - works for me, I like both services!  If eBay do pay close to four billion then I suspect they've paid a few billion too much...&lt;br /&gt;&lt;br /&gt;But it's still big news.  :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.designtechnica.com/article8293.html"&gt;eBay Buys Skype for $4.1 Billion&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112654063924528652?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112654063924528652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112654063924528652' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112654063924528652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112654063924528652'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/09/ebay-buys-skype-for-41-billion-web.html' title='eBay Buys Skype for $4.1 Billion - Web News News - Designtechnica'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112571134415576478</id><published>2005-09-03T11:35:00.000+10:00</published><updated>2005-09-03T11:35:44.206+10:00</updated><title type='text'>Seeing what Katrina has wrought</title><content type='html'>Hurricane Katrina has caused so much damage.  Frightening.  My thoughts go out to the people affected by the disaster.&lt;br /&gt;&lt;br /&gt;If you can please donate to the &lt;a href="www.redcross.org"&gt;relevant relief funds&lt;/a&gt; (and check whether your company can help out - ours &lt;a href="http://www.agilent.com/about/newsroom/features/2005sep01_hurricane.html"&gt;matches employee donations&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The Google Earth community has extended Google Earth so that you can visualize what's going on - it helps put things in perspective.  &lt;a href="http://googleblog.blogspot.com/2005/09/seeing-what-katrina-has-wrought.html"&gt;Seeing what Katrina has wrought&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://scriptingnews.com/"&gt;Dave Winer&lt;/a&gt; is, as always, covering the issue well and posting useful links as is &lt;a href="http://radio.weblogs.com/0001011/"&gt;Scoble&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;All the best to those folk living in Katrina's wake.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112571134415576478?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112571134415576478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112571134415576478' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112571134415576478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112571134415576478'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/09/seeing-what-katrina-has-wrought.html' title='Seeing what Katrina has wrought'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112531962197761631</id><published>2005-08-29T22:04:00.000+10:00</published><updated>2005-08-29T22:47:02.056+10:00</updated><title type='text'>August 26th Geek Dinner Mugshots</title><content type='html'>So here are the mugshots for the &lt;a href="http://sublimesoftware.blogspot.com/2005/08/melbourne-geek-dinner.html"&gt;recent geek dinner&lt;/a&gt;, held at the illustrious Pizza Hut on the 26th August. &lt;br /&gt;&lt;br /&gt;It was a pretty short &amp; sweet affair but it was great meeting all you folks!  Let's try and make it regular guys.  :)&lt;br /&gt;&lt;br /&gt;Thanks again to &lt;a href="http://www.itejas.com"&gt;Tejas&lt;/a&gt; for organising.  :)&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6817.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/dglover"&gt;Dave Glover&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6816.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://www.billing.com.au/"&gt;Parvesh Tanwar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6815.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://reilly.typepad.com/"&gt;Cameron Reilly&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6811.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://darylcook.blogspot.com/"&gt;Daryl Cook&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6812.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://www.itejas.com/"&gt;Tejas Patel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6814.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://www.billing.com.au/"&gt;Jesse Villani&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6810.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://www.froosh.net/"&gt;Robin Froosh&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6805.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://www.specht.com.au/michael/"&gt;Michael Specht&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6807.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://www.technosol.com.au/"&gt;Justin Marshall&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6806.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://www.patel.com.au/"&gt;Nirav Patel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6808.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://tinkasandstinkas.com/"&gt;Chris Bell&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6809.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;a href="http://dba.simonheap.com/"&gt;Simon Heap&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112531962197761631?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112531962197761631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112531962197761631' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112531962197761631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112531962197761631'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/08/august-26th-geek-dinner-mugshots.html' title='August 26th Geek Dinner Mugshots'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112470417760253362</id><published>2005-08-22T19:49:00.000+10:00</published><updated>2005-08-22T19:49:37.613+10:00</updated><title type='text'>Melbourne Geek Dinner</title><content type='html'>OK folks, those of you who are livin' it large in our wonderful city of Melbourne take note!  Pencil in a geek dinner for Friday the 26th (yep, &lt;strong&gt;this&lt;/strong&gt; Friday).  Tejas has done the superb job of picking a date and venue (OK, Pizza Hut wouldn't have been my first pick, but hey, whatever!) so trundle off to read his &lt;a href="http://www.itejas.com/index.php/2005/08/22/melbourne_geek_dinner"&gt;blog post&lt;/a&gt; and mark the time in your calendar.&lt;br /&gt;&lt;br /&gt;I'll be there with my camera (still &lt;a href="http://sublimesoftware.blogspot.com/2005/07/joys-of-photographyand-pain-of-hard.html"&gt;without my blessed 80-200mm&lt;/a&gt;) at least for a while.  Feel free to say g'day to the guy holding the Nikon.  His name will be Matt.  :)  [1]&lt;br /&gt;&lt;br /&gt;I &lt;em&gt;will&lt;/em&gt; have to leave early-ish as I try to go to Salsa dance classes (at &lt;a href="http://www.vivadance.com.au/"&gt;Viva Cabaret&lt;/a&gt; on Smith st) at 9:00 Fridays.  If anyone wants to come along Salsa-ing let me know!  :)&lt;br /&gt;&lt;br /&gt;Looking forward to meeting some more of you...  :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[1] Unless there's another guy holding a Nikon.  In which case their name may not be Matt.  Though it might be - it's a pretty common name.  Regardless, I'm sure you can say hi to him too.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112470417760253362?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112470417760253362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112470417760253362' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112470417760253362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112470417760253362'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/08/melbourne-geek-dinner.html' title='Melbourne Geek Dinner'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112381404222321581</id><published>2005-08-12T12:34:00.000+10:00</published><updated>2005-08-12T12:34:02.276+10:00</updated><title type='text'>Freerunning</title><content type='html'>Warning:  Totally off topic and way too cool for this blog.  :)&lt;br /&gt;&lt;br /&gt;Just an awesome clip I saw recently that I want to remember:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.putfile.com/media.php?n=B13-Parkour-bizarsite"&gt;Putfile - Upload Video and Upload Images&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112381404222321581?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112381404222321581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112381404222321581' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112381404222321581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112381404222321581'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/08/freerunning.html' title='Freerunning'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112372596865839360</id><published>2005-08-11T12:06:00.000+10:00</published><updated>2005-08-11T12:06:08.750+10:00</updated><title type='text'>Synergy is the schizzle</title><content type='html'>&lt;a href="http://synergy2.sourceforge.net/"&gt;Synergy&lt;/a&gt; is an open source, multiplatform application to share a keyboard and mouse between two PCs.  If you're like me and work with two PCs on a daily basis you'll find it a godsend.  No more confusion when trying to figure out which keyboard/mouse you should be using!&lt;br /&gt;&lt;br /&gt;Engadget recently had a nice &lt;a href="http://www.engadget.com/entry/1234000190053747/"&gt;how-to&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Great piece of software.  :)&lt;br /&gt;&lt;br /&gt;There's also the commercial (though it is only US$30!) alternative &lt;a href="http://www.maxivista.com/"&gt;MaxiVista&lt;/a&gt; that takes things even further - allowing you to use an old PC and monitor as a secondary display.  It comes recommended by way of &lt;a href="http://www.hanselman.com/blog/ScottHanselmans2005UltimateDeveloperAndPowerUsersToolList.aspx"&gt;Scott Hanselman's 2005 Ultimate Developer and Power Users Tool List&lt;/a&gt;.  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112372596865839360?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112372596865839360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112372596865839360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112372596865839360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112372596865839360'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/08/synergy-is-schizzle.html' title='Synergy is the schizzle'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112366719104765590</id><published>2005-08-10T18:40:00.000+10:00</published><updated>2005-08-10T19:49:19.543+10:00</updated><title type='text'>Matt ♥’s...</title><content type='html'>I gave a presentation today at work about various useful tools and wanted to keep track of the links.  So here they are!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bloglines.com/"&gt;Bloglines&lt;/a&gt;&lt;br /&gt;A web-based blog aggregator.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bloglines.com/public/MattyT"&gt;Matts list of blogs&lt;/a&gt;&lt;br /&gt;A list of the blogs I'm subscribed to.  There may or may not be something there that you'll enjoy...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.synop.com/Products/SauceReader/"&gt;Sauce Reader&lt;/a&gt;&lt;br /&gt;A client-side blog aggregator.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt;&lt;br /&gt;A web-based blog-authoring tool.  Owned by Google.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://spaces.msn.com/"&gt;MSN Spaces&lt;/a&gt;&lt;br /&gt;Another web-based authoring tool by Microsoft.  Has great integration with MSN Messenger.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.technorati.com/"&gt;Technorati&lt;/a&gt;&lt;br /&gt;A search engine that only indexes blogs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pubsub.com/"&gt;PubSub&lt;/a&gt;&lt;br /&gt;Another blog search engine.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dopplerradio.net/"&gt;Doppler&lt;/a&gt;&lt;br /&gt;A podcast aggregator.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sublimesoftware.blogspot.com/2005/04/podcasts.html"&gt;Matt's list of podcasts&lt;/a&gt;&lt;br /&gt;My list of podcasts, to get you started!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/"&gt;Google Maps&lt;/a&gt;&lt;br /&gt;Web-based mapping application.  Satellite &amp; road data, with local search.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://virtualearth.msn.com/"&gt;Microsoft Virtual Earth&lt;/a&gt;&lt;br /&gt;As above, but from MS.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt;&lt;br /&gt;A client-side map application.  Like Google Maps but with a richer interface.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://worldwind.arc.nasa.gov/"&gt;NASA's World Wind&lt;/a&gt;&lt;br /&gt;Similar product to Google Earth but open source and uses freely available satellite imagery.  No road data.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/mappoint/default.mspx"&gt;Microsoft Mappoint&lt;/a&gt;&lt;br /&gt;Renamed to Streets &amp;amp; Trips.  Rich mapping application.  Not free.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.copernic.com/en/products/desktop-search/index.html"&gt;Copernic&lt;/a&gt;&lt;br /&gt;Desktop search application.  Just install it already!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://desktop.msn.com/"&gt;Windows Desktop Search&lt;/a&gt;&lt;br /&gt;A solid alternative to Copernic. [BTW Yahoo, Google and many others have other desktop search offerings, these two are just my favourites]&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mozilla.org/products/firefox/"&gt;Firefox&lt;/a&gt;&lt;br /&gt;Improve your web browsing experience!&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/extensions/"&gt;Firefox Extensions&lt;/a&gt;&lt;br /&gt;One of the many websites that host Firefox extensions.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sublimesoftware.blogspot.com/2005/08/firefox-extensions.html"&gt;Matts Firefox Extensions&lt;/a&gt;&lt;br /&gt;My list of extensions.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasa.google.com/"&gt;Picasa&lt;/a&gt;&lt;br /&gt;Great photo management software, owned by Google.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nvu.com/"&gt;Nvu&lt;/a&gt;&lt;br /&gt;Cross platform, open source web authoring system.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.tcbmi.com/strokeit/"&gt;StrokeIt&lt;/a&gt;&lt;br /&gt;Mouse gestures for any Windows application.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/tools/ToDoList2.asp"&gt;ToDoList&lt;/a&gt;&lt;br /&gt;A simple todo list manager.  Allows hierarchical tasks among a plethora of other features.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112366719104765590?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112366719104765590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112366719104765590' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112366719104765590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112366719104765590'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/08/matt-s.html' title='Matt ♥’s...'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112365975953641669</id><published>2005-08-10T15:34:00.000+10:00</published><updated>2005-08-10T19:13:43.796+10:00</updated><title type='text'>Firefox extensions</title><content type='html'>I've had some queries about which Firefox extensions I use so I thought I'd post my current list. Hover over each link for a description.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://adblock.mozdev.org/" title="Filters ads from web-pages"&gt;Adblock&lt;/a&gt; 0.5.2.039&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jayseae.cxliv.org/" title="Browser utilities for use with Bloglines"&gt;Bloglines Toolkit&lt;/a&gt; 1.5.6&lt;br /&gt;&lt;br /&gt;&lt;a href="http://philringnalda.com/mozilla/blogthis/" title="Adds right-click access to Blogger's BlogThis popup."&gt;BlogThis&lt;/a&gt; 0.3&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cgi29.plala.or.jp/mozzarel/" title="Bookmarks Synchronizer is a Mozilla Firefox extension that let you connect to an FTP/WebDAV server and synchronize your bookmarks that are stored in an XML file. Setup is easy; just write in your FTP/WebDAV server address, username, password and a name for the XML file (by default called xbel.xml). To start, press Upload to create the file on the server and set if you want to automatically download the file on startup or upload it when you close your browser."&gt;Bookmarks Synchronizer&lt;/a&gt; 1.0.1&lt;br /&gt;&lt;br /&gt;&lt;a href="http://extensions.roachfiend.com/" title="Bypass compulsory web registration with the context menu via www.bugmenot.com."&gt;BugMeNot&lt;/a&gt; 0.6.2&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.copernic.com/go/?dest=cdshomepage&amp;l=ENG&amp;amp;e=DESKTOPSEARCH" title="Copernic Desktop Search Firefox Toolbar."&gt;Copernic Desktop Search Toolbar&lt;/a&gt; 1.1&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twanno.mozdev.org/" title="Allows you to duplicate a tab, or to merge the windows."&gt;Duplicate Tab&lt;/a&gt; 0.5.1&lt;br /&gt;&lt;br /&gt;&lt;a href="http://steeev.f2o.org/mt/" title="Displays all the Negative Feedback an eBay user has received via right-click or Tools menu."&gt;Ebay Negs!&lt;/a&gt; 0.6&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.iosart.com/firefox/firefoxview/" title="View pages and links loaded into IE in Firefox"&gt;FirefoxView&lt;/a&gt; 0.31.1&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ieview.mozdev.org/" title="Open pages in IE via Firefox menus"&gt;IE View&lt;/a&gt; 1.2.4&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.yellowgorilla.net/imagezoom/" title="Adds zoom functionality for images"&gt;Image Zoom&lt;/a&gt; 0.1.7.1&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.loconet.ca/" title="Allows you to initiate a direct download of a file given a url"&gt;lget&lt;/a&gt; 0.1&lt;br /&gt;&lt;br /&gt;&lt;a href="http://extensions.roachfiend.com/" title="Outputs an alphabetical list of either extensions or themes to a text, vB code, or HTML file."&gt;ListZilla&lt;/a&gt; 0.5.1&lt;br /&gt;&lt;br /&gt;&lt;a href="http://v2studio.com/k/moz/" title="Adds tab dragging with drop place indicator."&gt;miniT (drag+indicator)&lt;/a&gt; 0.5&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rabotat.org/firefox" title="Allows to choose whether you want to view a PDF file inside the browser (as PDF or HTML) or you want to download it!"&gt;PDF Download&lt;/a&gt; 0.5&lt;br /&gt;&lt;br /&gt;&lt;a href="http://extensions.meatme.net/" title="Adds optionally a print and print preview option to the context menu and provides a button for printpreview."&gt;Print It!&lt;/a&gt; 0.3.6&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/search?&amp;amp;q=Resizeable%20Textarea" title="Search Google for Resizeable Textarea"&gt;Resizeable Textarea&lt;/a&gt; 0.1a&lt;br /&gt;&lt;br /&gt;&lt;a href="http://prismicspiral.com/scribe/" title="Adds Word Processor like functionality to web forms, including opening and saving form entries as files."&gt;Scribe&lt;/a&gt; 0.21&lt;br /&gt;&lt;br /&gt;&lt;a href="http://adblock.mozdev.org/sessionsaver" title="Magically restores your last browsing session."&gt;SessionSaver 0.2&lt;/a&gt; 0.2.1.028&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.vesterman.com/FirefoxExtensions/SortExtensions" title="Sorts the list of installed extensions alphabetically."&gt;Sort Extensions&lt;/a&gt; 1.1&lt;br /&gt;&lt;br /&gt;&lt;a href="http://spellbound.sourceforge.net/" title="Adds spell checker support to web forms and extensions."&gt;SpellBound&lt;/a&gt; 0.7.3&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mozmonkey.com/" title="A tool that allows you to manage and switch between multiple proxy configurations quickly and easily."&gt;SwitchProxy Tool&lt;/a&gt; 1.3.2&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twanno.mozdev.org/" title="Select actions for clicking events on a tab or the tabbar"&gt;Tab Clicking Options&lt;/a&gt; 0.5.2&lt;br /&gt;&lt;br /&gt;&lt;a href="http://216.55.161.203/theonekea/tabprefs/" title="Enhances control over some aspects of tabbed browsing."&gt;Tabbrowser Preferences&lt;/a&gt; 1.2.7.1&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mozmonkey.com/" title="TinyUrl brings the http://tinyurl.com functionality into your browser. It takes a long URL as input, and gives you a short URL to use in it's place."&gt;TinyUrl Creator&lt;/a&gt; 1.0&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mozilla.dorando.at/" title="Adds Undo Close Tab."&gt;undoclosetab&lt;/a&gt; 20041125.5&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.chrispederick.com/work/firefox/webdeveloper/" title="Adds a menu and a toolbar with various web developer tools."&gt;Web Developer&lt;/a&gt; 0.9.3&lt;br /&gt;&lt;br /&gt;&lt;a href="http://extensions.meatme.net/" title="Creates a dropdownlist in your extensionmanager that allows you to select 3 other extensionsites: extensionmirror.nl, texturizer.net, extensionroom.mozdev.org"&gt;xMirror&lt;/a&gt; 0.2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For some reason &lt;a href="http://flashblock.mozdev.org/"&gt;Flashblock&lt;/a&gt; doesn't appear in this list (which is generated by the extension ListZilla).&lt;br /&gt;&lt;br /&gt;And I've recently been impressed with &lt;a href="http://www.extensionsmirror.nl/index.php?showtopic=2291"&gt;TabMix&lt;/a&gt; - if I was to start installing extensions from scratch I would use that tab manager extension which would replace a handful of those above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112365975953641669?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112365975953641669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112365975953641669' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112365975953641669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112365975953641669'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/08/firefox-extensions.html' title='Firefox extensions'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112342649550239864</id><published>2005-08-08T00:54:00.000+10:00</published><updated>2005-08-08T00:54:55.566+10:00</updated><title type='text'>Paper Steam Engine</title><content type='html'>Another one for Dad:&lt;br /&gt;&lt;br /&gt;From MAKE: Blog:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.makezine.com/blog/archive/2005/08/paper_steam_eng.html?CMP=OTC-0D6B48984890"&gt;Paper Steam Engine&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112342649550239864?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112342649550239864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112342649550239864' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112342649550239864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112342649550239864'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/08/paper-steam-engine.html' title='Paper Steam Engine'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112321144130724197</id><published>2005-08-05T13:10:00.000+10:00</published><updated>2005-08-05T13:10:41.363+10:00</updated><title type='text'>Robotic hand catches 300km/h fastballs</title><content type='html'>My Dad is going to &lt;a href="http://www.engadget.com/entry/1234000597053203/"&gt;love this&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;No Dad, they're not for sale.  Yet.  ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112321144130724197?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112321144130724197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112321144130724197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112321144130724197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112321144130724197'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/08/robotic-hand-catches-300kmh-fastballs.html' title='Robotic hand catches 300km/h fastballs'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112245463525301848</id><published>2005-07-27T18:57:00.000+10:00</published><updated>2005-07-27T18:57:15.296+10:00</updated><title type='text'>Google's portal gets RSS</title><content type='html'>If you haven't seen the Google Labs "Personalize Your Hompage" feature you should check it out.  It was recently extended to be able to subscribe to RSS feeds.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/ig#"&gt;Google&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What's more, it's got the funkiest javascript to handle the panel movement.  :)&lt;br /&gt;&lt;br /&gt;It seems all I'm doing lately is discussing Google!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112245463525301848?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112245463525301848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112245463525301848' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112245463525301848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112245463525301848'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/07/googles-portal-gets-rss.html' title='Google&apos;s portal gets RSS'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112237900584001040</id><published>2005-07-26T21:56:00.000+10:00</published><updated>2005-07-26T21:56:45.886+10:00</updated><title type='text'>Mapping wars heat up</title><content type='html'>Kudos to Microsoft for releasing their Google Maps competitor: &lt;a href="http://virtualearth.msn.com/"&gt;MSN Virtual Earth&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;It's not &lt;em&gt;quite&lt;/em&gt; as complete as Google Maps yet but give 'em time.  MS have been in this space for a long time (have you heard of &lt;a href="http://terraserver.microsoft.com/"&gt;TerraServer&lt;/a&gt;?) and they'll no doubt improve quickly.  And they're actually ahead in some areas - much of their data is very impressive, in some cases providing closer satellite shots that Google Maps.&lt;br /&gt;&lt;br /&gt;Oh, and it would be an oversight not to mention that Virtual Earth also has a &lt;a href="http://www.viavirtualearth.com"&gt;set of developer API's&lt;/a&gt;.  Incidentally, that website was created none other than our own &lt;a href="http://www.roodyn.com/"&gt;Dr Neil&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Speaking of &lt;a href="http://maps.google.com/"&gt;Google Maps&lt;/a&gt;, they recently made a nice tweak: there is a new 'hybrid' view that overlays the road and satellite images.  Both Virtual Earth and Google Earth had similar features.&lt;br /&gt;&lt;br /&gt;Competition is good!  Now if either of those products only had good Australian data...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112237900584001040?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112237900584001040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112237900584001040' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112237900584001040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112237900584001040'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/07/mapping-wars-heat-up.html' title='Mapping wars heat up'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112194196886495718</id><published>2005-07-21T20:07:00.000+10:00</published><updated>2005-07-25T21:56:43.936+10:00</updated><title type='text'>The joys of photography...and the pain of a hard-learnt lesson</title><content type='html'>I just realised that I haven't yet posted about one of my favourite hobbies, the great art of photography. And since I've had a recent tragedy I may as well begin now...&lt;br /&gt;&lt;br /&gt;I've always enjoyed shooting photos but in the past couple of years I've begun getting more serious about it. My Dad has a Nikon F801 (N8008 for you US folk out there), a beautiful old 35mm camera, as well as a couple of cheap lenses - a 24-80mm f/3.5-5.6 and a 70-300 f/4.5-5.6. I used it as my own - and loved it - until I decided to take the plunge and go down the digital path. There are many reasons to "go digital" but for me, the way it accellerates your learning and allows greater experimentation was the clincher.&lt;br /&gt;&lt;br /&gt;So a year or two ago I purchased a &lt;a href="http://www.dpreview.com/reviews/nikond100/"&gt;Nikon D100&lt;/a&gt; and the &lt;a href="http://www.kenrockwell.com/nikon/2485afs.htm"&gt;Nikon 24-85mm f/3.5-4.5&lt;/a&gt; lens from a work colleague (thanks &lt;a href="http://marianbejan.myphotoalbum.com/"&gt;Marian&lt;/a&gt;!).  Great starting kit!  Took it everywhere - hiking around &lt;a href="http://www.promcountry.com.au/"&gt;Wilsons Prom&lt;/a&gt;, sailing, skiing, everywhere. It was robust, reliable and took great photos (a little soft but every camera has it's character).&lt;br /&gt;&lt;br /&gt;Then of course I had to buy the &lt;a href="http://www.kenrockwell.com/nikon/5018af.htm"&gt;Nikon 50mm f/1.8&lt;/a&gt; (yes, I very nearly bought the 1.4 but couldn't justify the cost for the benefit!). Great lens, so flexible, particularly at night where the wide aperture comes into its own. And they're cheap! (I bought mine from &lt;a href="http://www.bhphotovideo.com/bnh/controller/home?O=productlist&amp;A=details&amp;amp;Q=&amp;sku=247091&amp;amp;is=GREY&amp;addedTroughType=search"&gt;B&amp;amp;H&lt;/a&gt; which I can highly recommend. Keep in mind that you will be taxed 10% duty when it goes through customs though.) Love that lens, it's just fantastic except for one failing - ensure there are no bright lights in the scene when it's wide open as it suffers from strong ghosting.&lt;br /&gt;&lt;br /&gt;Much to my delight, Mum and Dad chipped in and bought me a Manfroto tripod for Christmas and so my kit started to fill out.&lt;br /&gt;&lt;br /&gt;However, I was lacking a telephoto. After reading seemingly hundreds of websites I decided that it was time to really get serious so I decided I wanted the &lt;a href="http://www.kenrockwell.com/nikon/80200.htm"&gt;Nikon 80-200 f/2.8&lt;/a&gt; (yep, the #4 in that review).  I couldn't justify the extra $$$ for the AF-S or the drool-worthy &lt;a href="http://www.kenrockwell.com/nikon/70200vr.htm"&gt;Nikon 70-210 f/2.8 AF-S VR&lt;/a&gt; but the 80-200 AFD is, by all accounts, a ripper. Fast, fast focussing, solid and sharp as a tack, this is the kind of lens that defined Nikon and helps make photography a joy. I decided that the only way to buy it here in Australia (where camera gear is horrendously expensive) was via &lt;a href="http://www.ebay.com.au/"&gt;eBay&lt;/a&gt;. After many lost auctions I finally won one from a reliable seller than I trusted, even though he was a Texan. ;) When it arrived I was ecstatic, the lens was in great condition and lived up to all the expectations.&lt;br /&gt;&lt;br /&gt;That was a month or so ago.  During that month I ran out and took many shots with 'my new baby'.  All was good.&lt;br /&gt;&lt;br /&gt;Last weekend I was shooting a friends soccer game for some sports photography practice. It was windy, overcast and a bit wet - generally terrible conditions. But I was happy, my camera and lens were performing well and I managed to shoot some good shots despite the poor light and weather. Then I made a fatal mistake. Not having eaten all day (I'd gone out shooting photos near Albert Park in the morning) I decided to get some food at the caf at half time. I left the camera on the tripod maybe five metres away from the shop so it was in plain sight and &lt;span style="font-style: italic;"&gt;left the kit alone&lt;/span&gt;. I turned to pay for my hotdog only to hear the gut-wrenching sound of glass breaking. The camera and lens were lying on the ground, surrounded with glass.&lt;br /&gt;&lt;br /&gt;After the chill shot up my spine I ran to pick it up. God it looked bad. However I was fortunate - the only glass that had broken was from my Hoya UV filter. The rim of the front housing was damaged, cracked, but when I'd cleaned out the glass I'd found that I could still focus using the lens and there were no obviously tight spots or nasty sounds. Although there were some minor nicks in the front element the lens seemed optically sound.&lt;br /&gt;&lt;br /&gt;But I still felt like vomiting.  Literally.&lt;br /&gt;&lt;br /&gt;Anyway, there's a lesson here kids - don't, under &lt;span style="font-weight: bold;"&gt;any&lt;/span&gt; circumstances, &lt;span style="font-style: italic;"&gt;ever leave your camera sitting alone on top of a tripod&lt;/span&gt;. I'm still not sure how it fell over (either a huge gust of wind or perhaps I just simply didn't set the legs out properly? *sigh* I don't know.) but just don't take the chance. Take it off and sit it in your bag.&lt;br /&gt;&lt;br /&gt;The sad part is that I &lt;span style="font-style: italic;"&gt;knew that&lt;/span&gt;. And 99% of the time I would have just instinctively put my baby back in her bag. But for some reason, this time, I didn't. And I paid for it [1].&lt;br /&gt;&lt;br /&gt;The lens is currently still functioning well - albeit with the "limit" switch engaged. That switch prevents the lens from close-focussing so it doesn't unnecessarily search if it hunts for focus but in this case it's on to prevent the front elements from extending into the cracked housing. Ick. I feel ill again. But I won't ever hear of anyone poo-pooing Nikon build quality - it's a miracle that the lens still works, hell I shot the rest of the soccer match!&lt;br /&gt;&lt;br /&gt;Don't let my disaster story discourage you though - photography is a wonderful pastime, if you enjoy it then get out there and shoot photos! Just remember to look after your gear...&lt;br /&gt;&lt;br /&gt;Update: Sorry the original post didn't have photos, I was in a rush to get on my holiday to Daylesford! Here's some hastily-taken shots: &lt;*sob*&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6014/300/1600/DSC_5997.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_5997.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6014/300/1600/DSC_5999.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_5999.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6014/300/1600/DSC_5998.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_5998.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6014/300/1600/DSC_6001.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6014/300/320/DSC_6001.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] Speaking of paying, I'll be taking it in for repair - hopefully they'll be able to replace the front housing for a reasonable cost.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112194196886495718?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112194196886495718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112194196886495718' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112194196886495718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112194196886495718'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/07/joys-of-photographyand-pain-of-hard.html' title='The joys of photography...and the pain of a hard-learnt lesson'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112040137848948892</id><published>2005-07-04T00:21:00.000+10:00</published><updated>2005-07-07T00:57:04.433+10:00</updated><title type='text'>Boys weekend away</title><content type='html'>Friday afternoon saw ten* guys leave for Sprocket's family holiday house in Portarlington. We'd decided to have a 'boys weekend away' where we'd do very little except play poker, pool and maybe have a few drinks...&lt;br /&gt;&lt;br /&gt;Rather than tell all the stories ("What happens in Portarligton..." ;) ) I just wanted to say I had a great time - it's always going to be fun going away with good company.&lt;br /&gt;&lt;br /&gt;Speaking of company here's a list of the lads:&lt;br /&gt;&lt;br /&gt;Me&lt;br /&gt;&lt;a href="http://jiggys.blogspot.com/"&gt;Jeremy&lt;/a&gt; ("Jiggy")&lt;br /&gt;Anthony ("Sprocket")&lt;br /&gt;Toshal&lt;br /&gt;&lt;a href="http://jarek69.blogspot.com/"&gt;Jarek&lt;/a&gt; ("J-Man")&lt;br /&gt;Shobhit&lt;br /&gt;Mark ("Screws")&lt;br /&gt;John ("Chisel")&lt;br /&gt;Mick&lt;br /&gt;Stu ("Mallet")&lt;br /&gt;&lt;br /&gt;Thanks guys, it was fun.  :)&lt;br /&gt;&lt;br /&gt;Don't ask about the nicknames - it's a long story!  (One of you original tools ought to blog about the tale...)&lt;br /&gt;&lt;br /&gt;Congrats to Stu for cleaning up in game one of the almighty poker tournament and Jiggy, Sprocket and Mick for sharing the spoils after the seven-hour marathon of game two.&lt;br /&gt;&lt;br /&gt;Oh, and a shout-out (that will probably never be heard!) to the über-sweet Becky from Bendigo for agreeing to appear in a couple of sunset photos. Thanks!&lt;br /&gt;&lt;br /&gt;Update:  Photos are now &lt;a href="http://trentini.myphotos.cc/gallery/view_album.php?set_albumName=boysweekend&amp;amp;page=1"&gt;online&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;* OK, it was eight - Stu and Mick joined us on Saturday.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112040137848948892?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112040137848948892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112040137848948892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112040137848948892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112040137848948892'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/07/boys-weekend-away.html' title='Boys weekend away'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112040045495907709</id><published>2005-07-04T00:16:00.000+10:00</published><updated>2005-07-04T00:20:54.966+10:00</updated><title type='text'>Google Maps API</title><content type='html'>I didn't have time to blog about this when I read about it the other day.  But since I've reported about all their other announcements...Google have released an API to their fantastic &lt;a href="http://maps.google.com/"&gt;Google Maps&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://googleblog.blogspot.com/2005/06/world-is-your-javascript-enabled_29.html"&gt;Announcement&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.google.com/apis/maps/"&gt;&lt;br /&gt;Google Maps API&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fantastic.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112040045495907709?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112040045495907709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112040045495907709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112040045495907709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112040045495907709'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/07/google-maps-api.html' title='Google Maps API'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-112005552559373566</id><published>2005-06-30T00:32:00.000+10:00</published><updated>2005-07-04T01:26:09.243+10:00</updated><title type='text'>Google Earth</title><content type='html'>Another day, another Google announcement.  This one is a ripper though!&lt;br /&gt;&lt;br /&gt;Obviously, Google executives read my &lt;a href="http://sublimesoftware.blogspot.com/2005/06/satellite-support-for-australia-in.html"&gt;recent post&lt;/a&gt; revealing my &lt;em&gt;lurve&lt;/em&gt; for satellite imagery because they have just release the wicked-cool &lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt;.  For free.  Freakin' awesome.&lt;br /&gt;&lt;br /&gt;Holy crap this thing is sweet.  It's like &lt;a href="http://worldwind.arc.nasa.gov/"&gt;World Wind&lt;/a&gt; on 'roids.&lt;br /&gt;&lt;br /&gt;What are you still reading for? If you drool over looking at the world as much as I do then get downloading (10 odd meg - but you'll need a fat-ish internet pipe to grab the satellite images on the fly).&lt;br /&gt;&lt;br /&gt;Here's the &lt;a href="http://googleblog.blogspot.com/2005/06/cover-earth.html"&gt;announcement&lt;/a&gt; on the &lt;a href="http://googleblog.blogspot.com/"&gt;Google Blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And here's a bunch of &lt;a href="http://earth.google.com/sites/"&gt;interesting places&lt;/a&gt; to see with your new favourite gawking tool.&lt;br /&gt;&lt;br /&gt;Update:  The good folks at Google have now &lt;a href="http://google-code-updates.blogspot.com/2005/07/google-earth-kml-documentation-and.html"&gt;published documentation&lt;/a&gt; on KML, the file format used by Google Earth.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-112005552559373566?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/112005552559373566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=112005552559373566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112005552559373566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/112005552559373566'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/google-earth.html' title='Google Earth'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111993033866205906</id><published>2005-06-28T13:45:00.000+10:00</published><updated>2005-06-28T13:47:25.790+10:00</updated><title type='text'>RIAA/MPAA vs the People.  1 - 0.</title><content type='html'>The Supreme Court of America has ruled against P2P sharing in the much-publicized "MGM vs Grokster" case.  Wow.  Scary.&lt;br /&gt;&lt;br /&gt;OK, so the problem I have with this ruling - in my understanding - is that it provides a precedent for the &lt;strong&gt;software developers&lt;/strong&gt; of specific P2P systems to be responsible for how people &lt;strong&gt;use their software&lt;/strong&gt;. What the? It's akin to stating that the designers of email can be sued for allowing people to send illegal files to each other.&lt;br /&gt;&lt;br /&gt;I do have problems with &lt;em&gt;some&lt;/em&gt; of the P2P systems - apparently they were trying to "foster infringement" of copyright and that's not on. But the legal precendent that this sets, if it applies to all P2P developers, is concerning.&lt;br /&gt;&lt;br /&gt;For what it's worth I believe that any technology should be allowed to be developed. Without restriction. Only how it's used should be of interest to the courts.&lt;br /&gt;&lt;br /&gt;Anyway, smarter people than I are writing about this hot potato - here are some links!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.popsci.com/popsci/generaltech/article/0,20967,1077623,00.html"&gt;Popular Science: Supreme Court Strikes a Blow against P2P Sharing&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.bbc.co.uk/1/hi/technology/4627679.stm"&gt;BBC:   File-sharing suffers major defeat&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scotusblog.com/movabletype/archives/2005/06/grokster_stream.html"&gt;SCOTUSblog: Grokster, StreamCast Lose&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://radio.weblogs.com/0001011/2005/06/27.html#a10484"&gt;Robert Scoble: Major bad news for P2P software&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.davenetics.com/2005/06/dowloads-no-longer-on-dl.html"&gt;Davenetics:  Dowloads No Longer on the DL&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.corante.com/importance/archives/2005/06/27/notes_on_riaa_and_mpaa_press_conference.php"&gt;Corante:  Notes on RIAA and MPAA Press Conference&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.bbc.co.uk/1/shared/bsp/hi/pdfs/supreme_court_mgm_grokster_27_06_05.pdf"&gt;The actual ruling  [pdf]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I dare say that &lt;a href="http://bitconjurer.org/"&gt;Bram Cohen&lt;/a&gt; (creator of BitTorrent) may be a little nervous today...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111993033866205906?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111993033866205906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111993033866205906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111993033866205906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111993033866205906'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/riaampaa-vs-people-1-0.html' title='RIAA/MPAA vs the People.  1 - 0.'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111986106417423733</id><published>2005-06-27T18:31:00.000+10:00</published><updated>2005-06-28T13:47:08.973+10:00</updated><title type='text'>Google To Launch Online Video Playback</title><content type='html'>More Google news; it looks like the online behemoth is looking to increase their presence in the video domain:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://battellemedia.com/archives/001658.php"&gt;Google To Launch Online Video Playback&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Interesting! Particularly since they are going to use an open source alternative to Microsoft's Media player. MS are likely to be upset.&lt;br /&gt;&lt;br /&gt;Update: Rumours are &lt;a href="http://googleblog.blogspot.com/2005/06/google-video-now-with-video_27.html"&gt;true&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111986106417423733?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111986106417423733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111986106417423733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111986106417423733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111986106417423733'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/google-to-launch-online-video-playback.html' title='Google To Launch Online Video Playback'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111983685140787830</id><published>2005-06-27T11:47:00.000+10:00</published><updated>2005-06-27T11:47:31.413+10:00</updated><title type='text'>Beever's pavement art</title><content type='html'>Julian Beever is that guy who does those amazing 3D illusion pavement drawings that were 'doing the rounds' ages ago.  Just realised recently that he had a website:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://users.skynet.be/J.Beever/index.html"&gt;Julian Beever&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just incredible!  Gotta wonder how he comes up with them - the computer geek in me is figuring out how to write software to generate them...but maybe the guy is just talented!  ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111983685140787830?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111983685140787830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111983685140787830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111983685140787830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111983685140787830'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/beevers-pavement-art.html' title='Beever&apos;s pavement art'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111983403716993699</id><published>2005-06-27T11:00:00.000+10:00</published><updated>2005-06-27T11:00:37.176+10:00</updated><title type='text'>Satellite support for Australia in Google Maps</title><content type='html'>I'm a big fan of satellite imagery.  I love &lt;a href="http://worldwind.arc.nasa.gov/"&gt;Worldwind&lt;/a&gt;, &lt;a href="http://www.terraserver.com/"&gt;Terraserver &lt;/a&gt;and &lt;a href="http://maps.google.com/"&gt;Google Maps&lt;/a&gt; - I can just imagine so many applications to use the data they present so effectively. Anyway, until recently Australian coverage was poo but Google Maps has began rectifying that situation. Yay!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maps.google.co.uk/maps?ll=51.501224,-0.141149&amp;spn=0.005139,0.007918&amp;amp;amp;t=k&amp;amp;hl=en"&gt;Here's lookin' at you Australia, using Google Maps&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Local search is still poor and coverage patchy (no high detail images east of the Telstra dome in Melbourne and the Sydney Harbour bridge and Opera house are also low-res only though the city is pretty well covered) but it's a start. Keep up the good work Google!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111983403716993699?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111983403716993699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111983403716993699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111983403716993699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111983403716993699'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/satellite-support-for-australia-in.html' title='Satellite support for Australia in Google Maps'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111924108907489798</id><published>2005-06-20T14:18:00.000+10:00</published><updated>2005-06-20T14:18:09.126+10:00</updated><title type='text'>The Ultimate Developer and Power Users Tool List</title><content type='html'>&lt;a href="http://www.hanselman.com"&gt;Scott Hanselman&lt;/a&gt; has updated his invaluable list of damn useful tools for power users and developers.  Obviously has a .NET slant but still highly recommended.  I've tried just about all those tools and agree that they are all worthy of their place on that list!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/PermaLink,guid,cbb7f3df-b9dd-4a4a-8cc6-83d87c117d26.aspx"&gt;Scott Hanselman's 2005 Ultimate Developer and Power Users Tool List&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111924108907489798?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111924108907489798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111924108907489798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111924108907489798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111924108907489798'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/ultimate-developer-and-power-users.html' title='The Ultimate Developer and Power Users Tool List'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111923229025875067</id><published>2005-06-20T11:51:00.000+10:00</published><updated>2005-06-20T11:51:30.310+10:00</updated><title type='text'>Google set to compete with PayPal</title><content type='html'>It looks like Google has realised that PayPal are sitting on a goldmine.  They are now looking to compete in the electronic funds transaction market and I, for one, am all for it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://online.wsj.com/article_email/0,,SB111905141149263168-IdjgINhlaN4oJyobIKHbK2Bm4,00.html"&gt;Google Plans Online Payment Service&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Competition in this niche is critical - PayPal are really the only players here and their charges, while on the surface reasonable, are not trivial and soon add up.  Competition can only be good for us consumers.&lt;br /&gt;&lt;br /&gt;I really wonder if banks know what's going on here.  Like the recording industries (music &amp; movie) technology has advanced to the point where the old mainstay institutions are being threatened.  And they don't seem to be aware of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111923229025875067?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111923229025875067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111923229025875067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111923229025875067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111923229025875067'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/google-set-to-compete-with-paypal.html' title='Google set to compete with PayPal'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111914259971717085</id><published>2005-06-19T10:56:00.000+10:00</published><updated>2005-06-19T10:56:39.763+10:00</updated><title type='text'>BadFruit</title><content type='html'>Those that know me know that I love my iPod.  They probably also know that I avoid iTunes - I think it's a reasonable application, just not ideal for me.  However, if you are an iTunes user then you may be aware of the &lt;a href="http://engadget.com/entry/1234000027044248/"&gt;announcement&lt;/a&gt; that version 4.9 will support podcast subscriptions.&lt;br /&gt;&lt;br /&gt;If you can't wait that long then check out &lt;a href="http://badfruit.com/index.html"&gt;BadApple&lt;/a&gt;.  It's a plugin for iTunes that does what 4.9 promises &lt;em&gt;right now&lt;/em&gt;.  Looks nice but I haven't used it - caveat empor!  Oh, BTW it's Windows-only.&lt;br /&gt;&lt;br /&gt;Personally, I'll continue to use &lt;a href="http://www.dopplerradio.net/"&gt;Doppler&lt;/a&gt;. It's not perfect but it does the job.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111914259971717085?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111914259971717085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111914259971717085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111914259971717085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111914259971717085'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/badfruit.html' title='BadFruit'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111893473256547090</id><published>2005-06-17T01:12:00.000+10:00</published><updated>2005-06-17T01:12:12.570+10:00</updated><title type='text'>Scott Rosenberg wants a left-handed camera</title><content type='html'>As a hobbiest photographer, I can understand Scott's desire for a &lt;a href="http://blogs.salon.com/0000014/2005/06/15.html#a891"&gt;left-handed camera&lt;/a&gt;.  Just can't see manufacturers making them.  It's a question of economics; duplicating tooling, significantly increasings manufacturing costs, test coverage etc for just 10% of people?  &lt;br /&gt;&lt;br /&gt;Is it really that hard to adjust?  ;)  I'm pretty confident I could happily shoot left-handed without too much trouble...&lt;br /&gt;&lt;br /&gt;As for his comments on trackpoint devices - hell no, can't agree, I think they suck.  I have both a trackpoint and trackpad on my laptop and, while competent with both, I find the 'nubbin' just too imprecise.  Same argument for a trackball (thumbs just aren't dextrous enough).  YMMV.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111893473256547090?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111893473256547090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111893473256547090' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111893473256547090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111893473256547090'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/scott-rosenberg-wants-left-handed.html' title='Scott Rosenberg wants a left-handed camera'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111893404583619371</id><published>2005-06-17T01:00:00.000+10:00</published><updated>2005-06-17T01:00:45.886+10:00</updated><title type='text'>Marc Pesce:  Piracy is Good?</title><content type='html'>Gotta agree with &lt;a href="http://radio.weblogs.com/0124955/2005/06/16.html#a868"&gt;Frank&lt;/a&gt;, this article [&lt;a href="http://www.mindjack.com/feature/piracy051305.html"&gt;part 1&lt;/a&gt;, &lt;a href="http://www.mindjack.com/feature/newlaws052105.html"&gt;part 2&lt;/a&gt;] by Marc Pesce on video piracy - and how it's inevitable and good! - is fantastic.  &lt;br /&gt;&lt;br /&gt;It's amazing that the movie &amp; television industry, let alone the music industry, is so unaware that they are going to have to drastically change...or become irrelevant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111893404583619371?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111893404583619371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111893404583619371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111893404583619371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111893404583619371'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/marc-pesce-piracy-is-good.html' title='Marc Pesce:  Piracy is Good?'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111888818878528705</id><published>2005-06-16T12:16:00.000+10:00</published><updated>2005-06-16T12:16:28.836+10:00</updated><title type='text'>Google to make an iTunes clone?</title><content type='html'>Dave Winer, who is a pretty reliable source of software gossip blogged that &lt;a href="http://archive.scripting.com/2005/06/15#When:6:18:31PM"&gt;Google is readying and iTunes-clone&lt;/a&gt;.  Let's hope he's right!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111888818878528705?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111888818878528705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111888818878528705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111888818878528705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111888818878528705'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/google-to-make-itunes-clone.html' title='Google to make an iTunes clone?'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111884869689378970</id><published>2005-06-16T01:08:00.000+10:00</published><updated>2005-07-07T00:58:29.443+10:00</updated><title type='text'>Melbourne Blogger catch-up</title><content type='html'>Just got back from the first Melbourne Blogger meet up with &lt;a href="http://geekyinfo.com/"&gt;Phil&lt;/a&gt;, &lt;a href="http://spaces.msn.com/members/mollyzine/"&gt;Phil&lt;/a&gt;, &lt;a href="http://www.specht.com.au/michael/"&gt;Michael&lt;/a&gt;, &lt;a href="http://blogsavvy.net/"&gt;James&lt;/a&gt; and &lt;a href="http://reilly.typepad.com/cameronreilly/"&gt;Cam&lt;/a&gt;. We had an enjoyable little discussion about quite a few varied topics - it was great to at least put some faces to names. Hopefully we'll get together again soon, perhaps (as was suggested) over some Scotch Malt Whiskey. :)&lt;br /&gt;&lt;br /&gt;Personally I felt like shit. I've just been floored with some sort of 'flu and couldn't talk much - it physically hurt. Sorry guys if I was out of it! In particular I wanted to talk with Cam a little more about the business model he and &lt;a href="http://www.splatt.com.au/blog/"&gt;Mick&lt;/a&gt; have developed for &lt;a href="http://www.thepodcastnetwork.com/"&gt;The Podcast Network&lt;/a&gt; (maybe that link will bump you guys up the technorati rank?) but it was difficult so I thought I'd get my thoughts out in blog form while they're fresh!&lt;br /&gt;&lt;br /&gt;So, my problem with the business model - or any involving podcasts - is that I'm not sure that there's significant money in it as a publisher. The whole point of podcasts, the huge advantage of this 'new medium', is that it's so cheap to publish. In theory anyone can do it with minimal cash and effort.&lt;br /&gt;&lt;br /&gt;Actually, I'm going to interrupt myself with an important side discussion; right now it actually takes a great deal of effort to create a podcast. The tools are poor - it's not easy to produce a high-quality, effectively compressed audio recording. Nor is it trivial to create and update RSS feeds with enclosures. It's not rocket science but, especially for non-techy people, it's far from easy.&lt;br /&gt;&lt;br /&gt;Further, as Cam and Mick &lt;a href="http://www.splatt.com.au/blog/archives/2004/12/podcasting_rule.html"&gt;found out&lt;/a&gt;, it can cost a lot of dosh if your podcast becomes even moderately successful due to high bandwidth fees.&lt;br /&gt;&lt;br /&gt;However, both of these issues (ease of creating and cost of bandwidth) will eventually go away. Tools will get better and distribution methods (like using bittorrent) will improve. I firmly believe that within a reasonable time frame (something like a year or two?) it will be easy and cheap enough for my Mum to create and publish a podcast if she so desired.&lt;br /&gt;&lt;br /&gt;So, moving on...One of Cam's three pillars of goodness ;) that TPN provides is that it ensures a high quality of show. Listeners will be more inclined to listen to a 'cast from TPN than somewhere else because it's on TPN. A fair point. But perhaps that assumption doesn't hold in a blog-rich world. Personally, I listen to podcasts based on what other bloggers tell me. If there's a really good quality podcast then I'll find out about it from the blogs I read. News travels very fast these days and if someone is producing something - anything - of high quality (or low quality!) you hear about it &lt;span style="font-style: italic;"&gt;damn quick&lt;/span&gt;.  Maybe publishers, and advertising, are a lot less important than they used to be.&lt;br /&gt;&lt;br /&gt;I'm not completely sold on that last paragraph myself but thought it might be worthwhile saying it anyways...  :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A couple of other links to stuff we talked about:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://blogs.msdn.com/jobsblog/default.aspx"&gt;Gretchens blog&lt;/a&gt;  (the drama began on June 1st)&lt;br /&gt;&lt;br /&gt; &lt;a href="http://blogs.msdn.com/jobsblog/default.aspx"&gt;Robot hand&lt;/a&gt; (so cool!)&lt;br /&gt;&lt;br /&gt;Thanks to Phil for the use of the centre (&lt;span style="font-style: italic;"&gt;loved&lt;/span&gt; the fire!) and to Cam for organising.&lt;br /&gt;&lt;br /&gt;[I see Cam has already &lt;a href="http://reilly.typepad.com/cameronreilly/2005/06/melbourne_blogg_1.html"&gt;blogged about the night&lt;/a&gt;!]&lt;br /&gt;&lt;br /&gt;Update:  A couple of photos are &lt;a href="http://trentini.myphotos.cc/gallery/view_album.php?set_albumName=melbBloggersCatchUp"&gt;online&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111884869689378970?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111884869689378970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111884869689378970' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111884869689378970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111884869689378970'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/06/melbourne-blogger-catch-up.html' title='Melbourne Blogger catch-up'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111616416875934721</id><published>2005-05-15T23:36:00.000+10:00</published><updated>2005-05-15T23:44:19.280+10:00</updated><title type='text'>Generic Programming in C++ part 3a: Palindromes</title><content type='html'>&lt;p&gt;If you've been to an interview where you've been asked to write some C++ code, there's a fair chance that you'll have come across the "isPalidrome" problem. &lt;/p&gt;&lt;p&gt;It goes something like this: A palidrome is a group of letters that is the same written backwards or forwards. The challenge is to write a function that tests whether a given string is a palindrome. &lt;/p&gt;&lt;p&gt;A typical solution may look something like this: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="type"&gt;bool&lt;/span&gt; isPalindrome&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;const&lt;/span&gt; std&lt;span class="operator"&gt;::&lt;/span&gt;string&lt;span class="operator"&gt; &amp;amp;&lt;/span&gt;str&lt;span class="operator"&gt;)&lt;br /&gt;{&lt;/span&gt;&lt;br /&gt;    std&lt;span class="operator"&gt;::&lt;/span&gt;string&lt;span class="operator"&gt;::&lt;/span&gt;const_reverse_iterator itEnd&lt;span class="operator"&gt; =&lt;/span&gt; str&lt;span class="operator"&gt;.&lt;/span&gt;rbegin&lt;span class="operator"&gt;()++;&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;    for&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;std&lt;span class="operator"&gt;::&lt;/span&gt;string&lt;span class="operator"&gt;::&lt;/span&gt;const_iterator itStart&lt;span class="operator"&gt; =&lt;/span&gt; str&lt;span class="operator"&gt;.&lt;/span&gt;begin&lt;span class="operator"&gt;();&lt;/span&gt; itStart&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; itEnd&lt;span class="operator"&gt;.&lt;/span&gt;base&lt;span class="operator"&gt;(); ++&lt;/span&gt;itStart&lt;span class="operator"&gt;, ++&lt;/span&gt;itEnd&lt;span class="operator"&gt;)&lt;br /&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span class="flow"&gt;        if&lt;/span&gt;&lt;span class="operator"&gt; (*&lt;/span&gt;itStart&lt;span class="operator"&gt; != *&lt;/span&gt;itEnd&lt;span class="operator"&gt;)&lt;br /&gt;        {&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;            return&lt;/span&gt;&lt;span class="bool"&gt; false&lt;/span&gt;&lt;span class="operator"&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/span&gt;&lt;span class="flow"&gt;    return&lt;/span&gt;&lt;span class="bool"&gt; true&lt;/span&gt;&lt;span class="operator"&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;(Actually, if you're in an interview you may have forgotten to start at&amp;nbsp;before the one-past-end iterator and you may not have used a reverse iterator or perhaps forgot the call to base when comparing iterators and reverse iterators.&amp;nbsp; Those kind of things you can be forgiven!) &lt;/p&gt;&lt;p&gt;That solution works fine. Use two iterators, one pointing to the first and&amp;nbsp;one&amp;nbsp;to the last characters (which, as mentioned above is one &lt;strong&gt;before&lt;/strong&gt; that returned by &lt;font face="Courier"&gt;end&lt;/font&gt;).&amp;nbsp; Compare the characters&amp;nbsp;and move the iterators toward the middle of the string.&amp;nbsp; If any comparison fails, the string is not a palindrome.&amp;nbsp; Finish when the&amp;nbsp;start iterator is past the end (note that this takes into consideration &lt;strong&gt;both&lt;/strong&gt; finishing conditions ie when there is an even&amp;nbsp;or an odd number of characters in the string).&lt;/p&gt;&lt;p&gt;[There are other algorithms but we&amp;rsquo;ll stick with this one for now.]&lt;/p&gt;&lt;p&gt;We can do better. Why not write it generically?&amp;nbsp; It may not be obvious to you, but &lt;font face="Courier"&gt;std::string&lt;/font&gt; is a &lt;em&gt;container&lt;/em&gt;.&amp;nbsp; We can apply this same algorithm for any other container.&lt;strong&gt;&amp;nbsp; Consider writing reusable functions generically&lt;/strong&gt; &amp;ndash; especially after &amp;lsquo;getting them right&amp;rsquo; non-generically.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="keyword"&gt;template&lt;/span&gt;&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt;&lt;span class="keyword"&gt;typename&lt;/span&gt; RaIterator&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="type"&gt;bool&lt;/span&gt;&lt;br /&gt;isPalindrome&lt;span class="operator"&gt;(&lt;/span&gt;RaIterator begin&lt;span class="operator"&gt;,&lt;/span&gt; RaIterator end&lt;span class="operator"&gt;)&lt;br /&gt;{&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;    for&lt;/span&gt;&lt;span class="operator"&gt; (--&lt;/span&gt;end&lt;span class="operator"&gt;;&lt;/span&gt; begin&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; end&lt;span class="operator"&gt;; ++&lt;/span&gt;begin&lt;span class="operator"&gt;, --&lt;/span&gt;end&lt;span class="operator"&gt;)&lt;br /&gt;    {&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;        if&lt;/span&gt;&lt;span class="operator"&gt; (*&lt;/span&gt;begin&lt;span class="operator"&gt; != *&lt;/span&gt;end&lt;span class="operator"&gt;)&lt;br /&gt;        {&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;            return&lt;/span&gt;&lt;span class="bool"&gt; false&lt;/span&gt;&lt;span class="operator"&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;    return&lt;/span&gt;&lt;span class="bool"&gt; true&lt;/span&gt;&lt;span class="operator"&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Something has changed; we&amp;rsquo;re assuming that two random access iterators have been passed in.&amp;nbsp; We need random access iterators because of the less than operator, which is only provided on these kind of iterators.&amp;nbsp; And you&amp;rsquo;ll not that we&amp;rsquo;ve used a bidirectional operation &amp;ndash; the decrement operator &amp;ndash; instead of using a reverse iterator.&amp;nbsp; That&amp;rsquo;s to avoid weird syntax &amp;ndash; asking the user to supply two different kinds of iterators is unusual (and prone to error!) and you won&amp;rsquo;t see that done in any standard algorithm.&lt;/p&gt;&lt;p&gt;Usage is slightly different, now we have to pass in &lt;font face="Courier"&gt;stringname.begin()&lt;/font&gt; and &lt;font face="Courier"&gt;stringname.end()&lt;/font&gt; instead of just &lt;font face="Courier"&gt;stringname&lt;/font&gt;.&amp;nbsp; But again that&amp;rsquo;s consistent with the Way Of The Standard.&amp;nbsp; (It also has an advantage - we can operate on&amp;nbsp;slices of a container.)&lt;/p&gt;&lt;p&gt;So how is this better?&amp;nbsp; Well, if we have a &lt;font face="Courier"&gt;vector&lt;/font&gt; of characters we can use this function.&amp;nbsp; Or if we have a &lt;font face="Courier"&gt;vector&lt;/font&gt; of &lt;font face="Courier"&gt;longs&lt;/font&gt;.&amp;nbsp; Or a &lt;font face="Courier"&gt;deque&lt;/font&gt; of &lt;font face="Courier"&gt;longs&lt;/font&gt;.&amp;nbsp; Or an array of &lt;font face="Courier"&gt;longs&lt;/font&gt;.&amp;nbsp; We could even have a &lt;font face="Courier"&gt;vector&lt;/font&gt; of &lt;font face="Courier"&gt;strings&lt;/font&gt; that form a &lt;em&gt;sentence&lt;/em&gt; and use this function to determine if the &lt;strong&gt;sentence is a palindrome!&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;You get the picture.&amp;nbsp; Generic is better.&lt;/p&gt;&lt;p&gt;Unfortunately if we have a &lt;font face="Courier"&gt;list&lt;/font&gt; or &lt;font face="Courier"&gt;set&lt;/font&gt;&amp;nbsp;of chacters we can&amp;rsquo;t use this function &amp;ndash; you&amp;rsquo;ll get an ugly compilation error.&amp;nbsp; Why?&amp;nbsp; Because lists only provide bidirectional iterators.&amp;nbsp; And bidirectional iterators don&amp;rsquo;t give us that lovely less than operator.&amp;nbsp; So &lt;strong&gt;any container that provides anything less than random access iterators will not compile&lt;/strong&gt;.&amp;nbsp; Bugger!&amp;nbsp; I wonder if we can get around that limitation&amp;hellip;&lt;/p&gt;&lt;p&gt;Tune in to part b where I improve our &lt;font face="Courier"&gt;isPalindrome&lt;/font&gt; function further, so we can use it with lists!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="-3"&gt;[I&amp;rsquo;ll admit that thinking at this level of abstraction is difficult in an interview situation but when you start thinking generically you&amp;rsquo;ll find that it won&amp;rsquo;t be too much of a stretch.&amp;nbsp; Disclaimer:&amp;nbsp; In the last interview I sat I wrote the first example&amp;hellip;]&lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111616416875934721?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111616416875934721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111616416875934721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111616416875934721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111616416875934721'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/05/generic-programming-in-c-part-3a.html' title='Generic Programming in C++ part 3a: Palindromes'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111589694597578909</id><published>2005-05-12T21:22:00.000+10:00</published><updated>2005-05-12T21:24:09.443+10:00</updated><title type='text'>Spicks &amp; Specks</title><content type='html'>&lt;p&gt;Last night a friend (Heya Age! When are you going to start your own blog?) and I went and watched the recording of two episodes of the ABC&amp;rsquo;s music trivia show &lt;a href="http://www.abc.net.au/tv/guide/netw/200503/highlights/250305.htm"&gt;Spicks and Specks&lt;/a&gt;.&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="http://trentini.myphotos.cc/gallery/albums/miscellaneous/DSC_4601.jpg"&gt;&lt;img height="106" alt="Spicks and Specks" src="http://trentini.myphotos.cc/gallery/albums/miscellaneous/DSC_4601.jpg" width="160"/ /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Gotta say, we both had a great time (though two episodes was bordering on too long) and I can recommend anyone go see it.&amp;nbsp; You&amp;rsquo;ll have to grab the phone number (I can&amp;rsquo;t remember it and they don&amp;rsquo;t have it on the website, sheesh!) at the end of the show to register interest for tickets, which are free.&amp;nbsp; Filming is at ABC studios in Elsternwick.&lt;/p&gt;&lt;p&gt;Adam Hills was a terrific host that earned a great deal of respect from us just because he was so honest, approachable, funny and &lt;strong&gt;real&lt;/strong&gt;.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Myf and Alan were also damn funny &amp;ndash; I lost it when Alan broke his chair!&amp;nbsp; You&amp;rsquo;ll see what I mean in six weeks or so&amp;hellip;&amp;nbsp; The guests were also great &amp;ndash; I don&amp;rsquo;t want to name them and spoil the surprise but one half of &lt;a href="http://www.lanoandwoodley.com/"&gt;Lano &amp;amp; Woodley&lt;/a&gt; was on and in fine form!&amp;nbsp; &lt;/p&gt;&lt;p&gt;Adam and the team really indulge the crowd, playing up on heaps of gags that will never make it to air.&amp;nbsp; Thanks everyone at the ABC for a terrific show.&lt;/p&gt;&lt;p&gt;Anyways, if you don&amp;rsquo;t watch the show it&amp;rsquo;s great fun and is on Wednesday nights at 8:30.&amp;nbsp; Enjoy!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111589694597578909?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111589694597578909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111589694597578909' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111589694597578909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111589694597578909'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/05/spicks-specks.html' title='Spicks &amp; Specks'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111589526738218273</id><published>2005-05-12T20:54:00.000+10:00</published><updated>2005-05-12T21:05:44.353+10:00</updated><title type='text'>Generic programming in C++ part 2b: A better example with CComSafeArray and standard containers</title><content type='html'>&lt;p&gt;In the last post I asked the question "How do you normally copy containers".  Let’s explore that.&lt;/p&gt;&lt;p&gt;A typical way would be to use the standard algorithm &lt;em&gt;&lt;span style="font-family:Courier;"&gt;copy&lt;/span&gt;&lt;/em&gt;. (Note that there are many ways to copy containers, some are even more efficient, but this one suits the purposes of my explanation)&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;std&lt;span class="operator"&gt;::&lt;/span&gt;list&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="type"&gt;long&lt;/span&gt;&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt; listOfLongs&lt;span class="operator"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="comment"&gt;// Fill list here&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;std&lt;span class="operator"&gt;::&lt;/span&gt;vector&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="type"&gt;long&lt;/span&gt;&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt; vectorOfLongs&lt;span class="operator"&gt;;&lt;br /&gt;&lt;/span&gt;std&lt;span class="operator"&gt;::&lt;/span&gt;copy&lt;span class="operator"&gt;(&lt;/span&gt;listOfLongs&lt;span class="operator"&gt;.&lt;/span&gt;begin&lt;span class="operator"&gt;(),&lt;/span&gt; listOfLongs&lt;span class="operator"&gt;.&lt;/span&gt;end&lt;span class="operator"&gt;(),&lt;/span&gt; std&lt;span class="operator"&gt;::&lt;/span&gt;back_inserter&lt;span class="operator"&gt;(&lt;/span&gt;vectorOfLongs&lt;span class="operator"&gt;));&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="font-family:Courier;"&gt;copy&lt;/span&gt; takes a range and an output iterator. The range is iterated over and each element is copied to the output iterator – after each copy the output iterator is incremented. It’s expected that the ‘thing’ that the ouptut iterator points to can hold all of the elements in the range.&lt;/p&gt;&lt;p&gt;For a vector (or, in fact, any automatically-sized container) this often isn’t what you want. Instead, you often want elements to be &lt;strong&gt;added&lt;/strong&gt; to the container. But how should the algorithm add elements to a container? In fact how can an algorithm add elements to a container when, I’m sure you remember, algorithms don’t know anything about containers! Algorithms only know how to use iterators.&lt;/p&gt;&lt;p&gt;This may not be crystal clear yet so I’m going to make a point of it.  &lt;strong&gt;Algorithms only know about iterators&lt;/strong&gt;. They know nothing about containers. This is intentional and A Good Thing. Why? Because by enforcing that limitation algorithms can work for &lt;strong&gt;any container you provide&lt;/strong&gt; – assuming you also provide iterators for that container (and that the iterators meet the requirements of the algorithm).  &lt;/p&gt;&lt;p&gt;Now, we were trying to figure out how an algorithm can add elements to a container.  The C++ way to do that is via an  &lt;em&gt;inserter&lt;/em&gt; which, in standardese, is a form of &lt;em&gt;iterator adaptor&lt;/em&gt;. An inserter provides an iterator interface for a container. The algorithm ‘sees’ an iterator. But when the algorithm tries to assign to that iterator, the inserter kicks in and does something different. That ‘something different’ depends on what inserter you’re using but ultimately it (usually) adds an element to the container. It also &lt;strong&gt;does nothing&lt;/strong&gt; when the iterator is incremented.  If you think about that for a second that’s exactly what we were trying to do.  &lt;/p&gt;&lt;p&gt;So how does the inserter know how to add elements to the container? Doesn’t that mean that it needs to know about the specific container type? No. Well, kind of. Inserters are templated on the container type. If we look at the example above, we’re using &lt;span style="font-family:Courier;"&gt;back_inserter&lt;/span&gt;.  That particular inserter requires that the supplied container has a &lt;span style="font-family:Courier;"&gt;push_back&lt;/span&gt; method.  Conveniently, &lt;span style="font-family:Courier;"&gt;vector&lt;/span&gt; does.  Had the inserter been &lt;span style="font-family:Courier;"&gt;front_inserter&lt;/span&gt;, which requires &lt;span style="font-family:Courier;"&gt;push_front&lt;/span&gt;, compilation would have failed because &lt;span style="font-family:Courier;"&gt;vector&lt;/span&gt;s can’t insert elements at the front (efficiently).  &lt;/p&gt;&lt;p&gt;So what does all this have to do with &lt;span style="font-family:Courier;"&gt;CComSafeArray&lt;/span&gt;?  &lt;span style="font-family:Courier;"&gt;CComSafeArray&lt;/span&gt; is (almost) a container and we’re going to write an inserter to allow us to use them in algorithms when an output iterator is required. That means that we’ll be able to use the standard copy algorithm to copy elements from any container to a &lt;span style="font-family:Courier;"&gt;CComSafeArray&lt;/span&gt;.  &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="keyword"&gt;template&lt;/span&gt;&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt;&lt;span class="keyword"&gt;typename&lt;/span&gt; Container&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;class&lt;/span&gt; add_iterator&lt;span class="operator"&gt; :&lt;/span&gt;&lt;span class="keyword"&gt; public&lt;/span&gt; std&lt;span class="operator"&gt;::&lt;/span&gt;iterator&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;std&lt;span class="operator"&gt;::&lt;/span&gt;output_iterator_tag&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; void&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; void&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; void&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; void&lt;/span&gt;&lt;span class="operator"&gt;&amp;gt;&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;protected&lt;/span&gt;&lt;span class="operator"&gt;:&lt;/span&gt;&lt;br /&gt;    Container&lt;span class="operator"&gt;&amp;&lt;/span&gt; container&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span class="operator"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;    explicit&lt;/span&gt; add_iterator&lt;span class="operator"&gt;(&lt;/span&gt;Container&lt;span class="operator"&gt; &amp;&lt;/span&gt; c&lt;span class="operator"&gt;) :&lt;/span&gt; container&lt;span class="operator"&gt;(&lt;/span&gt;c&lt;span class="operator"&gt;) {}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;    template&lt;/span&gt;&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt;&lt;span class="keyword"&gt;typename&lt;/span&gt; ValueType&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    add_iterator&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;Container&lt;span class="operator"&gt;&amp;gt;&amp;&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;    operator&lt;/span&gt;&lt;span class="operator"&gt;=(&lt;/span&gt;&lt;span class="keyword"&gt;const&lt;/span&gt; ValueType&lt;span class="operator"&gt;&amp;amp;&lt;/span&gt; value&lt;span class="operator"&gt;)&lt;br /&gt;    {&lt;/span&gt;&lt;br /&gt;        container&lt;span class="operator"&gt;.&lt;/span&gt;Add&lt;span class="operator"&gt;(&lt;/span&gt;value&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="flow"&gt;        return&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;&lt;span class="operator"&gt;;&lt;br /&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    add_iterator&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;Container&lt;span class="operator"&gt;&amp;gt;&amp;&lt;/span&gt;&lt;span class="keyword"&gt; operator&lt;/span&gt;&lt;span class="operator"&gt;*()&lt;br /&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span class="flow"&gt;        return&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;&lt;span class="operator"&gt;;&lt;br /&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    add_iterator&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;Container&lt;span class="operator"&gt;&amp;gt;&amp;&lt;/span&gt;&lt;span class="keyword"&gt; operator&lt;/span&gt;&lt;span class="operator"&gt;++()&lt;br /&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span class="flow"&gt;        return&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;&lt;span class="operator"&gt;;&lt;br /&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    add_iterator&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;Container&lt;span class="operator"&gt;&amp;gt;&amp;&lt;/span&gt;&lt;span class="keyword"&gt; operator&lt;/span&gt;&lt;span class="operator"&gt;++(&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;br /&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span class="flow"&gt;        return&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;&lt;span class="operator"&gt;;&lt;br /&gt;    }&lt;br /&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;template&lt;/span&gt;&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt;&lt;span class="keyword"&gt;typename&lt;/span&gt; Container&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;inline&lt;/span&gt; add_iterator&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;Container&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt; add_inserter&lt;span class="operator"&gt;(&lt;/span&gt;Container&lt;span class="operator"&gt;&amp;&lt;/span&gt; c&lt;span class="operator"&gt;)&lt;br /&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="flow"&gt;    return&lt;/span&gt; add_iterator&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;Container&lt;span class="operator"&gt;&amp;gt;(&lt;/span&gt;c&lt;span class="operator"&gt;);&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;OK, so what’s going on here? An inserter has two parts. There is a class that is the iterator and does all the grunt work. There’s also a templated convenience function that creates and returns an instance of the iterator. That’s a fairly common idiom in the standard (see &lt;span style="font-family:Courier;"&gt;make_pair&lt;/span&gt;) and permits nicer syntax by taking advantage of the fact that templated functions can infer types.  We mentioned &lt;span style="font-family:Courier;"&gt;back_inserter&lt;/span&gt; and &lt;span style="font-family:Courier;"&gt;front_inserter&lt;/span&gt; before, these are actually convenience functions that create an instance of the iterator classes &lt;span style="font-family:Courier;"&gt;back_insert_iterator&lt;/span&gt; and &lt;span style="font-family:Courier;"&gt;front_insert_iterator&lt;/span&gt; respectively. Without those convenience functions the syntax would be less appealing and more prone to error. For example, the code above would look like this: &lt;/p&gt;&lt;pre&gt;std&lt;span class="operator"&gt;::&lt;/span&gt;copy&lt;span class="operator"&gt;(&lt;/span&gt;listOfLongs&lt;span class="operator"&gt;.&lt;/span&gt;begin&lt;span class="operator"&gt;(),&lt;/span&gt; listOfLongs&lt;span class="operator"&gt;.&lt;/span&gt;end&lt;span class="operator"&gt;(),&lt;/span&gt; std&lt;span class="operator"&gt;::&lt;/span&gt;back_insert_iterator&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;vector&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="type"&gt;long&lt;/span&gt;&lt;span class="operator"&gt;&amp;gt; &amp;gt;(&lt;/span&gt;vectorOfLongs&lt;span class="operator"&gt;));&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;So that explains the &lt;span style="font-family:Courier;"&gt;add_inserter&lt;/span&gt; function.  Digging deeper, the &lt;span style="font-family:Courier;"&gt;add_iterator&lt;/span&gt; is actually pretty straightforward. It publically inherits from iterator which is a standard library class that defines a number of useful typedefs that all iterators are required to define. It’s just a convenience class saving you from defining a few things yourself. Assigning does what we described above, that is, it just calls &lt;span style="font-family:Courier;"&gt;Add&lt;/span&gt; (which must exist) on the container (you’ll notice that &lt;span style="font-family:Courier;"&gt;Add&lt;/span&gt; is the method that &lt;span style="font-family:Courier;"&gt;CComSafeArray&lt;/span&gt; provides to append elements).  Incrementing (and dereferencing) are no-ops.&lt;/p&gt;&lt;p&gt;I glossed over the fact that assignment operator is a templated function. This usually isn’t necessary because containers are meant to expose the type that they contain. If you dig into any of the standard library provided iterators you’ll find that the type that the assignment operator takes is known. Normally we could have defined the assignment operator like so:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;add_iterator&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;Container&lt;span class="operator"&gt;&amp;gt;&amp;&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;operator&lt;/span&gt;&lt;span class="operator"&gt;=(&lt;/span&gt;&lt;span class="keyword"&gt;const&lt;/span&gt; Container&lt;span class="operator"&gt;::&lt;/span&gt;value_type&lt;span class="operator"&gt;&amp;amp;&lt;/span&gt; value&lt;span class="operator"&gt;)&lt;br /&gt;{&lt;/span&gt;&lt;br /&gt;    container&lt;span class="operator"&gt;.&lt;/span&gt;Add&lt;span class="operator"&gt;(&lt;/span&gt;value&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="flow"&gt;    return&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;&lt;span class="operator"&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Containers are &lt;strong&gt;meant&lt;/strong&gt; to provide a definition for &lt;span style="font-family:Courier;"&gt;value_type&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;Unfortunately, &lt;span style="font-family:Courier;"&gt;CComSafeArray&lt;/span&gt; doesn’t (hence the reason it’s almost a container) so we have to make the assignment operator a function template. No big problem, it just means that if you try to assign the wrong type via the inserter then your error message may be fairly cryptic – something like: “cannot convert type X to CComSafeArray&amp;lt;T&amp;gt;.Add() where T is Y”. &lt;/p&gt;&lt;p&gt;You may also have picked up that this inserter isn’t actually tied to &lt;span style="font-family:Courier;"&gt;CComSafeArrays&lt;/span&gt;.  If you have any other containers that use an &lt;span style="font-family:Courier;"&gt;Add&lt;/span&gt; method to add elements then this inserter will work just as well for them.&lt;/p&gt;&lt;p&gt;And that’s it! We’ve harnessed one of the great strengths of the STL design – extensibility – and created an inserter, a form of iterator adaptor, to a container-like class so that we can make use of existing standard algorithms. Sweet!&lt;/p&gt;&lt;p&gt;Stay tuned for Part 3 where we give the age-old interview question “isPalindrome” a generic workover!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111589526738218273?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111589526738218273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111589526738218273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111589526738218273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111589526738218273'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/05/generic-programming-in-c-part-2b.html' title='Generic programming in C++ part 2b: A better example with CComSafeArray and standard containers'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111530431902254858</id><published>2005-05-06T00:45:00.000+10:00</published><updated>2005-05-06T00:45:19.106+10:00</updated><title type='text'>Generic programming in C++ part 2a:  A better example with CComSafeArray and standard containers</title><content type='html'>&lt;p&gt;Shortly after posting the original entry I thought of a better way to create a CComSafeArray with standard containers. Fifteen minutes later - much less time than it took to write the blog post! - I had working code. &lt;/p&gt;&lt;p&gt;Because I want to get some sleep now I'll have to post the code later. In the meantime I want you to think about it! &lt;/p&gt;&lt;p&gt;OK, you want a hint? How do you normally copy containers - say from a list to a vector? &lt;/p&gt;&lt;p&gt;In part 2b I'll show you how to write &lt;em&gt;very&lt;/em&gt; similar code that works for CComSafeArrays.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111530431902254858?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111530431902254858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111530431902254858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111530431902254858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111530431902254858'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/05/generic-programming-in-c-part-2a.html' title='Generic programming in C++ part 2a:  A better example with CComSafeArray and standard containers'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111525298034000445</id><published>2005-05-05T10:26:00.000+10:00</published><updated>2005-05-05T10:29:40.376+10:00</updated><title type='text'>Happy Birthday Dave</title><content type='html'>Happy birthday &lt;a href="http://scriptingnews.com/"&gt;Dave Winer&lt;/a&gt;!  Thanks for keeping the simple things simple and for consistently demonstrating the importance of maintaining your credibility in the face of adversity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111525298034000445?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111525298034000445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111525298034000445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111525298034000445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111525298034000445'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/05/happy-birthday-dave.html' title='Happy Birthday Dave'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111504420571013923</id><published>2005-05-03T00:30:00.000+10:00</published><updated>2005-05-03T00:43:14.320+10:00</updated><title type='text'>Generic programming in C++: An example with CComSafeArray and standard containers</title><content type='html'>&lt;p&gt;For those of you developing in C++ with COM you’ll be familiar with the all-too-common SAFEARRAY.  You’re probably also familiar with CComSafeArray which is a useful class to wrap up the rather raw SAFEARRAY and aid in memory management.&lt;/p&gt;&lt;p&gt;This blog entry isn’t meant as a primer for SAFEARRAY and CComSafeArray usage, there are &lt;a href="http://www.roblocher.com/whitepapers/oletypes.aspx"&gt;plenty&lt;/a&gt; of &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfccomsafearray.asp"&gt;good&lt;/a&gt; &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/automat/htm/chap7_9ntx.asp"&gt;sites&lt;/a&gt; for that.&lt;/p&gt;&lt;p&gt;What I would like to talk about is using generic programming for day-to-day tasks.  &lt;/p&gt;&lt;p&gt;What is &lt;strong&gt;generic programming&lt;/strong&gt;?  Good question, tough to answer.  In C++, generic programming is writing code that works for many types by coding solutions based on &lt;em&gt;concepts&lt;/em&gt;.  A concept defines what the supplied abstract datatype are required to provide in order to get the job done.  &lt;/p&gt;&lt;p&gt;Confusing?  Initially it may well be.  How about we look at a real (albeit trivial) example:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="keyword"&gt;template&lt;/span&gt;&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt;&lt;span class="keyword"&gt;typename&lt;/span&gt; T&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;T &lt;br /&gt;max&lt;span class="operator"&gt; (&lt;/span&gt;T a&lt;span class="operator"&gt;,&lt;/span&gt; T b&lt;span class="operator"&gt;)&lt;br /&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="flow"&gt;    return&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;b&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; a&lt;span class="operator"&gt;) ?&lt;/span&gt; a&lt;span class="operator"&gt; :&lt;/span&gt; b&lt;span class="operator"&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the code above, &lt;span style="font-family:Courier;"&gt;max&lt;/span&gt; is a function that takes in two items (of the same type) and returns the largest of the two.  The above code can be used for any &lt;em&gt;T&lt;/em&gt; provided it supports the less-than operator.  [In standard-library lingo &lt;em&gt;T&lt;/em&gt; (the abstract datatype) must satisfy the &lt;em&gt;concept&lt;/em&gt; of “&lt;a href="http://www.sgi.com/tech/stl/LessThanComparable.html"&gt;Less Than Comparable&lt;/a&gt;”.]&lt;/p&gt;&lt;p&gt;This code is maximally reusable and, as such, is A Good Thing.  It’s an example of &lt;em&gt;generic programming&lt;/em&gt; because, in and of itself, max doesn’t know about &lt;em&gt;T&lt;/em&gt; and thus works &lt;em&gt;generically for any type&lt;/em&gt; (that supports the less-than operator).  We can write max once and it’ll work for all types.  Beautiful.&lt;/p&gt;&lt;p&gt;In my experience, occasions to create generic code like max occur more frequently than most developers realize.  I believe it’s because it takes awhile to become accustomed to “seeing” generic solutions.  For example, consider if our generic version of max didn’t exist but we needed a function to compare two integers.  It would be all too easy to write: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;br /&gt;max&lt;span class="operator"&gt; (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt; a&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; b&lt;span class="operator"&gt;)&lt;br /&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="flow"&gt;    return&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;b&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; a&lt;span class="operator"&gt;) ?&lt;/span&gt; a&lt;span class="operator"&gt; :&lt;/span&gt; b&lt;span class="operator"&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Then, when we have longs to compare, or floats, we could copy and paste the code and change “int” to “long” or “float”.  &lt;strong&gt;Avoid such code!&lt;/strong&gt;  Duplicating code is &lt;strong&gt;evil&lt;/strong&gt; and should be &lt;strong&gt;avoided&lt;/strong&gt;.  If you notice yourself copy and pasting code regularly it may be an indicator that you could benefit from generic coding techniques.&lt;/p&gt;&lt;p&gt;Here’s a real world example I came across the other day at work.  &lt;/p&gt;&lt;p&gt;We use SAFEARRAYS and CComSafeArrays often.  We also need to manipulate them in various ways so we often covert them to standard containers as they have a wide variety of algorithms that we can employ.  Usually we have to convert them back (to pass back over a COM API).  Someone had noticed this and written a conversion function:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="comment"&gt;// Remember to delete the returned pointer&lt;/span&gt;&lt;br /&gt;SAFEARRAY&lt;span class="operator"&gt; *&lt;/span&gt;&lt;br /&gt;CreateSafeArrayFromVector&lt;span class="operator"&gt;(&lt;/span&gt;std&lt;span class="operator"&gt;::&lt;/span&gt;vector&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="type"&gt;long&lt;/span&gt;&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt; vec&lt;span class="operator"&gt;)&lt;br /&gt;{&lt;/span&gt;&lt;br /&gt;    CComSafeArray&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="type"&gt;long&lt;/span&gt;&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt; sa&lt;span class="operator"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="flow"&gt;    for&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;std&lt;span class="operator"&gt;::&lt;/span&gt;vector&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="type"&gt;long&lt;/span&gt;&lt;span class="operator"&gt;&amp;gt;::&lt;/span&gt;iterator it&lt;span class="operator"&gt; =&lt;/span&gt; vec&lt;span class="operator"&gt;.&lt;/span&gt;begin&lt;span class="operator"&gt;();&lt;/span&gt; it&lt;span class="operator"&gt; !=&lt;/span&gt; vec&lt;span class="operator"&gt;.&lt;/span&gt;end&lt;span class="operator"&gt;(); ++&lt;/span&gt;it&lt;span class="operator"&gt;)&lt;br /&gt;    {&lt;/span&gt;&lt;br /&gt;        sa&lt;span class="operator"&gt;.&lt;/span&gt;Add&lt;span class="operator"&gt;(*&lt;/span&gt;it&lt;span class="operator"&gt;);&lt;br /&gt;    }&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;    return&lt;/span&gt; sa&lt;span class="operator"&gt;.&lt;/span&gt;Detach&lt;span class="operator"&gt;();&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In fact there were a whole bevy of these conversion functions.  CreateSafeArrayFromVector that worked for floats.  For doubles.  On unsigned longs.  We also had to work with std::lists so CreateSafeArrayFromList was born, duplicating all the vector functionality.  Remember that much of the code is practically identical, we’re just adding &lt;em&gt;things&lt;/em&gt; to a safe array!  What a mess.&lt;/p&gt;&lt;p&gt;A single generic function could (and has) replaced it all:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="keyword"&gt;template&lt;/span&gt;&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt;&lt;span class="keyword"&gt;typename&lt;/span&gt; FwdIterator&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;CComSafeArray&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="keyword"&gt;typename&lt;/span&gt; std&lt;span class="operator"&gt;::&lt;/span&gt;iterator_traits&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;FwdIterator&lt;span class="operator"&gt;&amp;gt;::&lt;/span&gt;value_type&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;CreateCComSafeArray&lt;span class="operator"&gt;(&lt;/span&gt;FwdIterator first&lt;span class="operator"&gt;,&lt;/span&gt; FwdIterator last&lt;span class="operator"&gt;)&lt;br /&gt;{&lt;/span&gt;&lt;br /&gt;    CComSafeArray&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="keyword"&gt;typename&lt;/span&gt; std&lt;span class="operator"&gt;::&lt;/span&gt;iterator_traits&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;FwdIterator&lt;span class="operator"&gt;&amp;gt;::&lt;/span&gt;value_type&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt; sa&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="flow"&gt;    while&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;first&lt;span class="operator"&gt; !=&lt;/span&gt; last&lt;span class="operator"&gt;)&lt;br /&gt;    {&lt;/span&gt;&lt;br /&gt;        sa&lt;span class="operator"&gt;.&lt;/span&gt;Add&lt;span class="operator"&gt;(*&lt;/span&gt;first&lt;span class="operator"&gt;++);&lt;br /&gt;    }&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;    return&lt;/span&gt; sa&lt;span class="operator"&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Much cleaner!  How is it used?&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;std&lt;span class="operator"&gt;::&lt;/span&gt;vector&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="type"&gt;T&lt;/span&gt;&lt;span class="operator"&gt;&amp;gt;&lt;/span&gt; handles&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;//...&lt;/span&gt;&lt;br /&gt;CComSafeArray saHandles&lt;span class="operator"&gt; =&lt;/span&gt; CreateCComSafeArray&lt;span class="operator"&gt;(&lt;/span&gt;handles&lt;span class="operator"&gt;.&lt;/span&gt;begin&lt;span class="operator"&gt;(),&lt;/span&gt; handles&lt;span class="operator"&gt;.&lt;/span&gt;end&lt;span class="operator"&gt;());&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You’ll notice a few changes.  I chose to use CComSafeArrays because there’s no obvious reason not to.  It increases type safety and decreases the chance of memory leaks.  You’ll see that we pass in iterators to the function now.  That allows abstraction from the specific container type.  If you’re familiar with using the standard library you’ll notice that this is a fundamental tenet in algorithms – all of them do the same thing.  There’s an important point here, if you’re passing containers in your function declarations you’re not programming generically.  Instead, create a templated function and expect iterators to be passed in.  Tricky to grasp at first but so clean when you bend your brain around it (repeat after me, “algorithms operate on iterators!”).&lt;/p&gt;&lt;p&gt;You’ll also see something about iterator_traits.  What the?  Without going in to too much detail (again, it’ll have to be another article), iterator_traits is supplied by the standard library to provide compile-time information about the supplied iterator.  std::iterator_traits&amp;lt;T&amp;gt;::value_type resolves to the type that T points to.  [There’s a whole bunch of things that &lt;a href="http://www.sgi.com/tech/stl/iterator_traits.html"&gt;iterator_traits&lt;/a&gt; provides.]&lt;/p&gt;&lt;p&gt;I’ve called the type “FwdIterator” because I require the iterator to support the post increment operator – the concept of “&lt;a href="http://www.sgi.com/tech/stl/ForwardIterator.html"&gt;Forward Iterator&lt;/a&gt;” defines this requirement.&lt;/p&gt;&lt;p&gt;But don’t get too wrapped up in the lingo.  Read the code like this:&lt;/p&gt;&lt;p&gt;  “Give me two iterators pointing to the start and end of a range”&lt;/p&gt;&lt;p&gt;  “Create a CComSafeArray containing the same type of objects as the iterators point to”&lt;/p&gt;&lt;p&gt;  “Add elements to the CComSafeArray from the iterators and return the CComSafeArray when done”&lt;/p&gt;&lt;p&gt;If you can grasp the high level ideas then the syntax comes relatively easy.&lt;/p&gt;&lt;p&gt;In the future I’ll talk about the pair function, FillFromCComSafeArray.  See if you can write it yourself!&lt;/p&gt;&lt;p&gt;Relevant links:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sgi.com/tech/stl/"&gt;SGI’s standard library documentation&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.boost.org/more/generic_programming.html"&gt;Boost’s Generic Programming Techniques&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cs.rpi.edu/%7Emusser/gp/"&gt;David Muser on Generic Programming&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111504420571013923?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111504420571013923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111504420571013923' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111504420571013923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111504420571013923'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/05/generic-programming-in-c-example-with_03.html' title='Generic programming in C++: An example with CComSafeArray and standard containers'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111495453451378170</id><published>2005-05-01T23:25:00.000+10:00</published><updated>2005-05-01T23:35:34.516+10:00</updated><title type='text'>Gallery:  FAQ Item C.22</title><content type='html'>I use the wonderful &lt;a href="http://gallery.menalto.com/index.php"&gt;gallery&lt;/a&gt; to host my &lt;a href="http://trentini.myphotos.cc/gallery/albums.php"&gt;photos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Every so often I upgrade it or perform some sort of maintenance on it.  And everytime I have to search for a particular link that tells me how to configure the software so that I can view it from inside my LAN and from the Internet.  I want to preserve the linkso I don't lose it again!  &lt;br /&gt;&lt;br /&gt;It's &lt;a href="http://gallery.menalto.com/modules.php?op=modload&amp;name=GalleryDocs&amp;amp;file=index&amp;page=gallery1-install.faq.c.php#gallery1-install.faq.c.22"&gt;item C.22 of the FAQ&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I do recommend the software though &lt;a href="http://www.ngallery.org/"&gt;ngallery&lt;/a&gt; and &lt;a href="http://coppermine.sourceforge.net/"&gt;coppermine&lt;/a&gt; look quite good too. &lt;br /&gt;&lt;br /&gt;What do you use to host your photos (and BTW I'm not interested in any online facility, &lt;a href="http://www.flickr.com/"&gt;flickr&lt;/a&gt; is great and all but I want to host them on my own PC thanks very much)?  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111495453451378170?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111495453451378170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111495453451378170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111495453451378170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111495453451378170'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/05/gallery-faq-item-c22.html' title='Gallery:  FAQ Item C.22'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111443994365565338</id><published>2005-04-26T00:24:00.000+10:00</published><updated>2005-04-26T00:39:03.656+10:00</updated><title type='text'>Code Camp OZ - I want details dammit!</title><content type='html'>I was pretty pissed to find that I wouldn't be able to make &lt;a href="http://www.codecampoz.com/"&gt;Code Camp Oz&lt;/a&gt;.  Alas, I had an engagement party and a wedding to attend (not for the same couple!). &lt;br /&gt;&lt;br /&gt;Anyway, now I want to know how it went.  First reports seem like it was great but I want details!  Are slides going to be made available?  What was your favourite presentations and why?  And, especially for me, what details were there about C++/CLI?  Is anyone else using it?&lt;br /&gt;&lt;br /&gt;A big shout out to &lt;a href="http://dotnetjunkies.com/WebLog/thomasswilliams/"&gt;Thomas Williams&lt;/a&gt; for the offer of a lift up there.  Sorry I had to bail Thomas, hopefully there'll be another Code Camp and I'll be able to take you up on your generous offer!  :)&lt;br /&gt;&lt;br /&gt;I just noticed that I was down as the "C++/CLI co-ordinator"...I didn't even realise!  Sorry &lt;a href="notgartner.com"&gt;Mitch&lt;/a&gt; if I agreed to that and didn't let you know I wasn't able to attend early enough to find a replacement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111443994365565338?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111443994365565338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111443994365565338' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111443994365565338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111443994365565338'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/04/code-camp-oz-i-want-details-dammit.html' title='Code Camp OZ - I want details dammit!'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111294523044958439</id><published>2005-04-08T17:19:00.000+10:00</published><updated>2005-06-29T11:39:13.910+10:00</updated><title type='text'>Podcasts</title><content type='html'>I was asked the other day which podcasts I listen to, so here are the major ones:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dawnanddrew.com/"&gt;The Dawn and Drew Show&lt;/a&gt; [&lt;a href="http://dawnanddrew.podshow.com/wp-rss2.php"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;a href="http://podcasts.engadget.com/"&gt;Engadget&lt;/a&gt; [&lt;a href="http://podcasts.engadget.com/rss.xml"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;a href="http://www.dailysourcecode.com/"&gt;Adam Curry's Daily Source Code&lt;/a&gt; [&lt;a href="http://radio.weblogs.com/0001014/categories/dailySourceCode/rss.xml"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;a href="http://www.dotnetrocks.com/"&gt;.NET Rocks!&lt;/a&gt; [&lt;a href="http://weblogs.asp.net/cfranklin/category/1784.aspx/rss"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;a href="http://www.abc.net.au/triplej/hack/podcast/"&gt;Triple J's Hack&lt;/a&gt; [&lt;a href="http://www.abc.net.au/triplej/hack/podcast/podcast.xml"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;a href="http://www.thepodcastnetwork.com/gday_world/"&gt;TPN: G'Day World&lt;/a&gt; [&lt;a href="http://www.thepodcastnetwork.com/gday_world/feed/"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;a href="http://www.thepodcastnetwork.com/msdev/"&gt;TPN: The MS Developer Show&lt;/a&gt; [&lt;a href="http://www.thepodcastnetwork.com/msdev/feed/"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;a href="http://www.thepodcastnetwork.com/techconf/"&gt;TPN: The Tech Conference Show&lt;/a&gt; [&lt;a href="http://www.thepodcastnetwork.com/techconf/feed/"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;a href="http://mff.thepodcastnetwork.com/"&gt;TPN: Matt, Freak and the Fatboy&lt;/a&gt; [&lt;a href="http://mff.thepodcastnetwork.com/feed/"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;a href="http://reelreviewsradio.com/index.php"&gt;Reel Reviews Radio&lt;/a&gt; [&lt;a href="http://reelreviewsradio.com/podcast.xml"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;a href="http://www.morningcoffeenotes.com/"&gt;Dave Winer's Morning Coffee Notes&lt;/a&gt; [&lt;a href="http://www.morningcoffeenotes.com/rss.xml"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;a href="http://www.scifi.com/battlestar/downloads/podcast/"&gt;Battlestar Galactica&lt;/a&gt; [&lt;a href="http://www.scifi.com/battlestar/downloads/podcast/podcast.xml"&gt;rss&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;I try to listen to more but just don't have the time. As it is I'm finding that I'm getting progressively further behind. Today I was listening to some podcasts from early March!&lt;br /&gt;&lt;br /&gt;When I have another spare few minutes I'll also put links to the actual feeds.&lt;br /&gt;&lt;br /&gt;Enjoy George!  :)&lt;br /&gt;&lt;br /&gt;[Update:  Well, I've updated the list!  I listen to a few more these days...and I added the rss links.  Enjoy Tom!]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111294523044958439?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111294523044958439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111294523044958439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111294523044958439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111294523044958439'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/04/podcasts.html' title='Podcasts'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111096152379604050</id><published>2005-03-16T19:24:00.000+11:00</published><updated>2005-03-16T19:25:23.796+11:00</updated><title type='text'>GoogleX</title><content type='html'>Quick link to something I thought was cool:  &lt;a href="http://labs.google.com/googlex/"&gt;GoogleX&lt;/a&gt;.  Now I'm heading off on holiday to Tasmania!  Be back in after Easter - hope you and yours has a wonderful Easter break.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111096152379604050?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111096152379604050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111096152379604050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111096152379604050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111096152379604050'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/03/googlex.html' title='GoogleX'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-111080881917316042</id><published>2005-03-14T22:54:00.000+11:00</published><updated>2005-03-15T01:00:19.180+11:00</updated><title type='text'>Cirque du Soleil:  Quidam</title><content type='html'>After booking the tickets some eight months (!) ago, yesterday I finally saw Quidam.  Most of the rest of the post can be summed up with the following word: &lt;span style="font-style: italic;"&gt;awesome&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;I've been sitting here trying to summarize what a &lt;a href="www.cirquedusoleil.com"&gt;Cirque du Soleil&lt;/a&gt; show is all about and it isn't easy.  The show is a unique blend of artsy theatre, astounding athletical stunts, breathtaking live music, stunning costumes and pure comedic routines all rolled into one entertaining extravaganza.  They've been touring for many years, beginning in their home country of Canada in 1984, and have gone from strength to strength to the point where they're now playing many shows simultaneously worldwide.&lt;br /&gt;&lt;br /&gt;Thankfully, beginning this month, they started touring Melbourne.&lt;br /&gt;&lt;br /&gt;I've been juggling (purely as a hobby!) for a few years now and was kicking myself that I missed Saltimbanco, Cirque du Soleil's first show here, in 1999.  I was amazed when I saw the show on video (thanks Luke!) and vowed that I wouldn't miss another when they next toured.  Unfortunately, a series of events prevented me from seeing Alegria in 2001 so you can imagine how keen I was when I heard that Quidam was touring.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Very &lt;/span&gt;keen!  It didn't disappoint, it was fantastic!!  I'm not going to review the whole show but here are some of my personal highlights:&lt;br /&gt;&lt;br /&gt;The diablo girls.  Holy crap.  How they can spin those little tops with such precision and poise is beyond me.  I've used a diablo a few times and it's taken me hours to figure out the simplest tricks.  Watching the four girls deftly spin, toss and catch the diablos was amazing.&lt;br /&gt;&lt;br /&gt;Skipping ropes.  Simple concept right?  Everyone's used a skipping rope!  If you're around my age you probably did the "Jump rope for heart" program in primary school.  In Quidam however, their motto must be "Jump rope gone crazy".  People skip while they're skipping inside a 'double dutch'.  Be blown away when the soloist (Norihisa Taguchi) skips &lt;span style="font-style: italic;"&gt;on his bum&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Contortion in silk.  The Cirque folk like dangling props from their specially-made roof.  One of my favourites was where they dropped two gorgeous strips of red silk and had their acrobat (Isabelle Vaudelle) dance her way up and down them.  Different in tone to the rest of the acts, this was quite emotional, serious and breathtakingly beautiful.&lt;br /&gt;&lt;br /&gt;Banquine.  Not sure how that exactly translates but here's a guess:  "people throwing".  See men and women fly through the air at dizzying heights as their colleague's throw them with ease!  Check out the woman that is absolutely &lt;span style="font-style: italic;"&gt;hurtled&lt;/span&gt; around.  Hold your breath at the end where they attempt to make a vertical four-man tower.&lt;br /&gt;&lt;br /&gt;Two of the funniest acts employed more tradition methods - improvised clowning around.  Get some people out of the audience, have a vague plot; just add mischief.  Haven't laughed so hard in &lt;span style="font-style: italic;"&gt;ages&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;Probably my favourite act was Vis Versa, or Statues.  A man and a woman link their bodies in a slow-moving dance of incredible strength and balance.  Unbelievable.&lt;br /&gt;&lt;br /&gt;Although these are but a selection, the entire show was fantastic.  Every second was enjoyable.  The live music perfectly complemented each act, the lighting was sublime as were the dazzling costumes.  Everything just reeked of professionalism and was just a delight to see.  Highly, &lt;span style="font-style: italic;"&gt;highly&lt;/span&gt; recommended.&lt;br /&gt;&lt;br /&gt;For those out there that haven't yet purchased &lt;a href="http://premier.ticketek.com.au/shows/show.aspx?sh=QUIDAM"&gt;tickets&lt;/a&gt;, go do yourself a favour!  The tickets are reasonably expensive (around the $100 mark) but what the show lacks in affordability it makes up for in kick-ass-ability.&lt;br /&gt;&lt;br /&gt;Can't wait for the next show!  (Or maybe I'll see it again...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-111080881917316042?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/111080881917316042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=111080881917316042' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111080881917316042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/111080881917316042'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/03/cirque-du-soleil-quidam.html' title='Cirque du Soleil:  Quidam'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-110995022578738947</id><published>2005-03-05T02:21:00.000+11:00</published><updated>2005-03-05T02:30:25.790+11:00</updated><title type='text'>SQL Server 2005 CTP</title><content type='html'>&lt;a href="http://www.microsoft.com/sql/2005/default.asp"&gt;Yukon&lt;/a&gt; was a highlight for many at the recent &lt;a href="http://sublimesoftware.blogspot.com/2005/02/ms-security-summit-review-feedback.html"&gt;Security Summit&lt;/a&gt; - I'm sure &lt;a href="http://msmvps.com/greglow/"&gt;Greg&lt;/a&gt; and &lt;a href="http://dotnetjunkies.com/WebLog/thomasswilliams/"&gt;Thomas&lt;/a&gt; will be wrapped to see that the &lt;a href="http://www.informationweek.com/story/showArticle.jhtml?articleID=60405029"&gt;new CTP  has just been announced&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Me?  I'm not really a mad-keen database guy.  I will, however, be interested in playing with the new &lt;a href="http://msdn.microsoft.com/vs2005/preview/default.aspx"&gt;Whidbey CTP&lt;/a&gt; when it's released on &lt;a href="http://www.eweek.com/article2/0,1759,1761824,00.asp"&gt;March 38&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-110995022578738947?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/110995022578738947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=110995022578738947' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/110995022578738947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/110995022578738947'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/03/sql-server-2005-ctp.html' title='SQL Server 2005 CTP'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7788052.post-110951535719699877</id><published>2005-02-27T22:55:00.000+11:00</published><updated>2005-02-28T02:13:55.276+11:00</updated><title type='text'>Geek Dinner - Post MS Security Summit Shenanigans (with photos!)</title><content type='html'>OK, I'm a few days late on this post.  Sorry!&lt;br /&gt;&lt;br /&gt;Last Tuesday was the &lt;a href="http://www.microsoft.com/australia/security/summit/"&gt;MS Security Summit&lt;/a&gt; in Melbourne.  I &lt;a href="http://sublimesoftware.blogspot.com/2005/02/ms-security-summit-review-feedback.html"&gt;covered the event&lt;/a&gt; in an earlier posting, but I'm now going to discuss the important part of the day - the post-summit geek dinner [1].  ;)&lt;br /&gt;&lt;br /&gt;Many of us had been in &lt;a href="http://msmvps.com/greglow/"&gt;Greg Low&lt;/a&gt;'s &lt;a href="http://msmvps.com/greglow/archive/2005/02/26/37007.aspx"&gt;terrific presentation&lt;/a&gt; on SQL Server 2005 (Introduction to Developers) which was probably the last to finish at a little after 5:30. After trundling down to the MSDN Connection lounge (gotta love elitism! ;) I met up with &lt;a href="http://will.id.au/blog/"&gt;Will&lt;/a&gt;, organiser supremo, and some of the &lt;a href="http://sublimesoftware.blogspot.com/2005/02/mugshots.html"&gt;other gang&lt;/a&gt;.  The dinner had been set at 7:30 at the &lt;a href="http://www.blogger.com/www.bluetrain.com.au"&gt;Blue Train Cafe&lt;/a&gt; so we needed to kill some time till then so off to The Pub, at the &lt;a href="http://www.blogger.com/www.crowncasino.com.au"&gt;Crown Casino&lt;/a&gt; we go.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/125/2715/640/DSC_3031.jpg"&gt;&lt;img style="border: 1px solid rgb(0, 0, 0); margin: 2px;" src="http://photos1.blogger.com/img/125/2715/200/DSC_3031.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Relaxing at The Pub (over some nice brews - thank you Microsoft!) was a good way to start the evening. Everyone was friendly and interesting, quite a relief when you consider the "geek" stereotype is meant to have the social graces of dead fish. I was wrapped to have some meaningful conversations while [I pissed everyone off by] getting down everyone's details and &lt;a href="http://sublimesoftware.blogspot.com/2005/02/mugshots.html"&gt;snapping a photo&lt;/a&gt;.  Here's some shots while we were at The Pub:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/125/2715/640/DSC_3017.jpg"&gt;&lt;img style="border: 1px solid rgb(0, 0, 0); margin: 2px;" src="http://photos1.blogger.com/img/125/2715/200/DSC_3017.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Mayur talking smack about Windows&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/125/2715/640/DSC_3018.jpg"&gt;&lt;img style="border: 1px solid rgb(0, 0, 0); margin: 2px;" src="http://photos1.blogger.com/img/125/2715/200/DSC_3018.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;They're all business at Microsoft&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/125/2715/640/DSC_3026.jpg"&gt;&lt;img style="border: 1px solid rgb(0, 0, 0); margin: 2px;" src="http://photos1.blogger.com/img/125/2715/200/DSC_3026.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just chattin'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Seven thirty snuck up on us fast and soon after Coatsey announced "last drinks!" we were on our way. The Blue Train is an iconic Melbourne restaurant on Southbank that serves a pretty varied cuisine. It's always busy and tonight was no exception. We waited aaaages for a dinner before Kathleen took it into her own hands and started getting things moving (awesome work!). Time flew with s conversation. Check out some more photos:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/125/2715/640/DSC_3034.jpg"&gt;&lt;img style="border: 1px solid rgb(0, 0, 0); margin: 2px;" src="http://photos1.blogger.com/img/125/2715/200/DSC_3034.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/125/2715/640/DSC_3037.jpg"&gt;&lt;img style="border: 1px solid rgb(0, 0, 0); margin: 2px;" src="http://photos1.blogger.com/img/125/2715/200/DSC_3037.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/125/2715/640/DSC_3039.jpg"&gt;&lt;img style="border: 1px solid rgb(0, 0, 0); margin: 2px;" src="http://photos1.blogger.com/img/125/2715/200/DSC_3039.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/125/2715/640/DSC_3041.jpg"&gt;&lt;img style="border: 1px solid rgb(0, 0, 0); margin: 2px;" src="http://photos1.blogger.com/img/125/2715/200/DSC_3041.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/125/2715/640/DSC_3042.jpg"&gt;&lt;img style="border: 1px solid rgb(0, 0, 0); margin: 2px;" src="http://photos1.blogger.com/img/125/2715/200/DSC_3042.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/125/2715/640/DSC_3043.jpg"&gt;&lt;img style="border: 1px solid rgb(0, 0, 0); margin: 2px;" src="http://photos1.blogger.com/img/125/2715/200/DSC_3043.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In short: wicked night. As I said, everyone - without exception - was friendly and the night flew by. Most people were keen to get together again so hopefully we'll have a second geek dinner in the not-too-distant future!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[1] &lt;span style="font-style: italic;"&gt;Really&lt;/span&gt; don't like the name "geek" dinner!  It just sounds so &lt;span style="font-style: italic;"&gt;nasty&lt;/span&gt;, can anyone come up with anything better??&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7788052-110951535719699877?l=sublimesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sublimesoftware.blogspot.com/feeds/110951535719699877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7788052&amp;postID=110951535719699877' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/110951535719699877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7788052/posts/default/110951535719699877'/><link rel='alternate' type='text/html' href='http://sublimesoftware.blogspot.com/2005/02/geek-dinner-post-ms-security-summit.html' title='Geek Dinner - Post MS Security Summit Shenanigans (with photos!)'/><author><name>Matt</name><uri>http://www.blogger.com/profile/04031430589111581249</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
