<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rants from Vas &#187; Technolgy</title>
	<atom:link href="http://www.vastheman.com/blog/category/technolgy/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.vastheman.com/blog</link>
	<description>The Anthony Mundine of geeks!</description>
	<lastBuildDate>Tue, 24 Jan 2012 10:16:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Spirit</title>
		<link>http://www.vastheman.com/blog/2011/02/03/spirit/</link>
		<comments>http://www.vastheman.com/blog/2011/02/03/spirit/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 11:12:40 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=173</guid>
		<description><![CDATA[More than four months later, Nic Watt has posted an fitting follow-up to the massively underwhelming Spirit Hunters Development Diary 1: the equally underwhelming Spirit Hunters Development Diary 2. Let me give you a tip Nic: being a cheap bastard and not paying artists and level designers doesn’t mean you’ve developed an “augmented reality” application. In true [...]]]></description>
			<content:encoded><![CDATA[<p>More than four months later, Nic Watt has posted an fitting follow-up to the massively underwhelming <a href="http://www.youtube.com/watch?v=ytH9EPhh5Cw">Spirit Hunters Development Diary 1</a>: the equally underwhelming <a href="http://www.youtube.com/watch?v=B4gF2AV6OGQ">Spirit Hunters Development Diary 2</a>.  Let me give you a tip Nic: being a cheap bastard and not paying artists and level designers doesn’t mean you’ve developed an “augmented reality” application.  In true real augmented reality, the application works with your surroundings.  For example, games like AR Tower Defence and Invizimals allow you to have battles on your tabletop; in a more sinister application, a Ka-50 pilot’s headgear places IFF markers over vehicles, and makes the gun follow his eyes.</p>
<p>Spirit Hunters just places models over whatever the camera happens to capture.  Most jarringly, there is no interaction with the world whatsoever.  This is blatantly obvious towards the end of the first diary instalment: you get and idea of the distance between you and the spirit, but then this is blown away when the image just slides over the top of the couch.  Suddenly, you realise that the spirit must be a lot smaller and closer than you would have believed given how much it seemed to have receded when it was running away, and how much it moved across the field of view when the user turned around.  The spirits look like plastic cutouts hanging in the air.  The perspective and lighting don’t look realistic in the slightest.  Why is the spirit always facing right at you?  It doesn’t turn tail when it tries to get away.  It just doesn’t look right to see it slide around the screen like that.</p>
<p>Nnooo is the archetypal shovelware company.  Everything they produce is optimised to minimise creative effort.  Pop is nothing but a virtual roll of bubble wrap, and not a very satisfying one at that.  The graphics are bland, and the gameplay is repetitive.  myNotebook and myPostcards may as well be built developer examples, and the only design work involved is drawing sheets of lined paper (on a side note, I don’t buy the excuses about not supporting exchanging postcards within the app — if that were the case, DragonBall Origins wouldn’t let players exchange virtual items).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2011/02/03/spirit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>And?</title>
		<link>http://www.vastheman.com/blog/2010/02/04/and/</link>
		<comments>http://www.vastheman.com/blog/2010/02/04/and/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 11:12:00 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=137</guid>
		<description><![CDATA[C++ defines a bunch of aliases for operators. These are kind of cool, and they can make code more readable at times – for example you can write things like: if ((dest bitor netmask) == bcdest and protocol == udp) But in typical C++ fashion, they chose to specify it in a completely brain-dead way. [...]]]></description>
			<content:encoded><![CDATA[<p>C++ defines a bunch of aliases for operators.  These are kind of cool, and they can make code more readable at times – for example you can write things like:</p>
<pre>if ((dest bitor netmask) == bcdest and protocol == udp)</pre>
<p>But in typical C++ fashion, they chose to specify it in a completely brain-dead way.  The names don’t alias the operators they’re named for, but their actual <em>punctuation representations</em>.  That means this is valid code:</p>
<pre>Address parse(const std::string bitand repr);</pre>
<p>The ability to do this doesn’t really help anyone, except lazy compiler vendors who want to implement the aliases as predefined macros.  But it gives us all one more WTF, and another tool in our arsenal for writing obfuscated code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2010/02/04/and/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Naked</title>
		<link>http://www.vastheman.com/blog/2010/01/30/naked/</link>
		<comments>http://www.vastheman.com/blog/2010/01/30/naked/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 01:10:34 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=129</guid>
		<description><![CDATA[As of yesterday, my Internet connection has finally started working. It’s been unbelievably frustrating, and I cannot in good conscience recommend naked ADSL Internet – I honestly thing it would be a better experience to get Telstra or Optus cable. There are too many levels of indirection between you and the people who actually get [...]]]></description>
			<content:encoded><![CDATA[<p>As of yesterday, my Internet connection has finally started working.  It’s been unbelievably frustrating, and I cannot in good conscience recommend naked ADSL Internet – I honestly thing it would be a better experience to get Telstra or Optus cable.  There are too many levels of indirection between you and the people who actually get stuff done with ADSL, and it would appear that communication is poor and contractors are incompetent.</p>
<p>I needed a brand-new service, as there was no existing POTS or DSL line – only Telstra cable and CATV.  There was a lengthy waiting period, and after the installation date, I called an electrician to wire up a socket.  It turned out the MDF hadn&#8217;t been tagged.  After much arguing, Internode sent someone out to tag it properly.  However, I had to call out (and pay) an electrician to jumper it.  So if your ISP tells you your MDF or boundary point is tagged, don’t believe them – check for yourself before you call out an electrician.</p>
<p>At this point, I had a socket connected to the correct cable and pair, but still no DSL.  Internode insisted that I find an analog telephone to listen to the line.  I want naked DSL – why should I need an analog telephone?  Anyway, I discovered that I had a POTS service of some kind, and even found out what its number was, and told Internode.  They informed me that they needed a technician to come and “perform tests”.  It took another week for the guy to come out, and he didn’t arrive on time.  He just confirmed what I’d told them: my socket was connected to the correct cable and pair, but had POTS service.  Apparently they don’t believe their customers.</p>
<p>After this, it took another day for the exchange to be patched correctly.  I now have a working Internet connection, but my high-speed ADSL2+ here is barely faster than my plain ADSL1 in Melbourne, and I now have to fight for a refund for the period when I was being billed for a service that didn’t work.  If you’re thinking of getting naked ADSL, save yourself the trouble and get something where a single vendor is responsible for the whole solution.  Cable Internet or ADSL with a Telstra DSLAM would be a whole lot less trouble.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2010/01/30/naked/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tiger</title>
		<link>http://www.vastheman.com/blog/2009/11/30/tiger/</link>
		<comments>http://www.vastheman.com/blog/2009/11/30/tiger/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 10:51:27 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=127</guid>
		<description><![CDATA[Technology is definitely very good for making people lazy. I’m now too lazy too cook rice in a pot on a stove, so I need an automatic rice cooker. Now that I’m getting my Sydney pad set up, I need one to use up here. Having experienced how bad a Kambrook rice cooker is, I [...]]]></description>
			<content:encoded><![CDATA[<p>Technology is definitely very good for making people lazy.  I’m now too lazy too cook rice in a pot on a stove, so I need an automatic rice cooker.  Now that I’m getting my Sydney pad set up, I need one to use up here.  Having experienced how bad a Kambrook rice cooker is, I decided it would have to be one of the two brands I’ve had good experiences with – Panasonic or Tiger.  I initially tried finding one at Bing Lee, as they’re supposed to be the cheapest place for appliances, but they didn’t have either of my preferred brands.  Fortunately, I found a shop with a Tiger logo on the sign just across the road.</p>
<p>On entering the shop, I asked the lady which Panasonic and Tiger rice cookers she’d recommend, to which she replied, “You don’t want Panasonic – they’re made in China.”  She seemed to think that being made in China on its own is reason enough not to want to buy a product.  Not that it’s poorer quality, less reliable, or anything concrete – just that it’s made in China.  The fact that she was Chinese herself added an element of irony to the situation.  (She doesn’t stock any Chinese-made rice cookers anyway, so she doesn’t really give you a choice.)  The designers at Tiger seem to think being made in Japan is an important feature, too: it’s written in block letters right above the control panel on the one I ended up buying.</p>
<p>I’m a sucker for gadgets.  I really should’ve saved some money and bought the basic model that just cooks white rice, because that’s probably all I’ll ever do.  But for just $69 more I could get the new model that does white rice, brown rice, scorched rice, congee, steamed vegetables, stews, oden (おでん), and more.  It also has a timer, a clock that keeps and even displays the time when it’s unplugged, and a user-replaceable power cord.  How could I turn down all that extra awesomeness?  Now I can’t wait to move in, so I can cook something in it!  (I know, it’ll probably just be steamed white rice.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2009/11/30/tiger/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Internal Conflict</title>
		<link>http://www.vastheman.com/blog/2009/11/11/conflict/</link>
		<comments>http://www.vastheman.com/blog/2009/11/11/conflict/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 08:58:27 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technolgy]]></category>
		<category><![CDATA[VCS]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=124</guid>
		<description><![CDATA[(Just some background – at work we use DVCS with a one-branch-per-feature policy.) You know when you’ve got a few source control branches on the go, because you’ve been splitting time between a few features, but you’ve kind of been neglecting one, because it doesn’t feel like the most important thing to do? Don’t you [...]]]></description>
			<content:encoded><![CDATA[<p>(Just some background – at work we use DVCS with a one-branch-per-feature policy.)  You know when you’ve got a few source control branches on the go, because you’ve been splitting time between a few features, but you’ve kind of been neglecting one, because it doesn’t feel like the most important thing to do?  Don’t you hate it when you pull the latest mainline onto your neglected branch, and there are like a million changes, including adding/deleting/renaming files and major refactoring, and you get a bunch of merge conflicts?  You’re thinking, “Why do people have to change so much all the time?” and you just want to blame someone.  You know what makes it even worse?  When you take a closer look at the list of changes, and realise it’s all the stuff that you’ve been pushing on to the mainline.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2009/11/11/conflict/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Not how it works</title>
		<link>http://www.vastheman.com/blog/2009/07/31/not-how-it-works/</link>
		<comments>http://www.vastheman.com/blog/2009/07/31/not-how-it-works/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 10:53:10 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=106</guid>
		<description><![CDATA[Goldman Sachs and UBS both seem to have had algorithmic trading code stolen and/or leaked recently. I haven’t seen an official statement from UBS, but a PR person from Goldman said something to the effect of, “Since the algorithms integrate with a large, proprietary system, we aren’t worried about this.” I realise that this person [...]]]></description>
			<content:encoded><![CDATA[<p>Goldman Sachs and UBS both seem to have had algorithmic trading code stolen and/or leaked recently.  I haven’t seen an official statement from UBS, but a PR person from Goldman said something to the effect of, “Since the algorithms integrate with a large, proprietary system, we aren’t worried about this.”  I realise that this person has the job of reassuring jittery investors that everything’s OK, but the statement shows a chronic lack of understanding that anyone should be able to see through.  Sure, I probably couldn’t just compile the code, drop the binary into my system and start trading.  But that’s not the point — there are two, very significant things I can achieve just by studying the code.</p>
<p>Firstly, I could determine an algorithm’s behaviour and reproduce it.  If Goldman’s algorithms are as good as they claim, the actual implementation detail should guarded closely.  If anyone could clone them, Goldman would lose their competitive advantage in algorithmic trading.</p>
<p>Secondly, I could possible study an algorithm’s behaviour and find a way to identify it and game it.  That way, if I reasonably suspect that a Goldman algorithm is trading a security, I could use my knowledge of its behaviour to my advantage.  If enough people with enough capital can game your algorithms, it can have a big impact on performance.</p>
<p>But it doesn’t really matter what I think of the announcement.  I just build systems — I’m not the one deciding where to send the money.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2009/07/31/not-how-it-works/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maybe next year</title>
		<link>http://www.vastheman.com/blog/2009/04/13/linux/</link>
		<comments>http://www.vastheman.com/blog/2009/04/13/linux/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 08:20:31 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=99</guid>
		<description><![CDATA[It still isn’t the year of Desktop Linux. People may be ready to move away from Windows, but Linux still isn’t ready for them. Let me tell you about my recent operating system experiences. It all started when my venerable Pentium III died. (Well it didn’t quite die outright, but the power supply became unreliable.) The [...]]]></description>
			<content:encoded><![CDATA[<p>It still isn’t the year of Desktop Linux.  People may be ready to move away from Windows, but Linux still isn’t ready for them.  Let me tell you about my recent operating system experiences.  It all started when my venerable Pentium III died.  (Well it didn’t quite die outright, but the power supply became unreliable.)  The primary reason for me keeping it alive was for ATO eTax.  It’s kind of sad that I had a computer that I only really used once a year, but there you go.  I used its death as an excuse to buy a new Mac Mini.  It’s capable of running Windows for eTax, and it can run x64 Linux for SDLMAME, and OS X for random cool stuff.  The new Mini has FireWire 800 (as opposed to 400 on the old one) and NVIDIA 9400M integrated graphics (as opposed to Intel on the old one), which addressed my primary complaints about its predecessor.</p>
<p>Of course it came with OS X installed, so the first thing I did was update it, tweak it to my liking and install tablet and printer drivers.  That was all painless, and I had a fully functional Mac/X11/BSD system in no time.  Buoyed by my success, I decided to install Windows XP.  Boot Camp Assistant took a while to do the live repartitioning, but it worked, and I had a FAT32 partition to play with.  The machine booted from the XP install CD, and I proceeded to format the partition as NTFS and install Windows.  It took a long time, and I had to restart about ten times during the install, update and driver install process, but in the end I had a working Windows installation, too, and I could switch between OS X and XP on boot.  That was enough for one night.</p>
<p><span id="more-99"></span></p>
<p>I downloaded and burned the Fedora 10 x64 live CD, as it seemed like the path of least resistance.  That was where my luck ran out.  Trying to create a partition for Linux wasn’t anywhere near as smooth as creating one for Windows.  Using Disk Utility while booted from the hard disk went nowhere.  Apparently the live partitioning feature isn’t that stable.  Booting from the OS X install DVD allowed me to repartition the disk, though.</p>
<p>Next, I tried restarting from the Fedora live CD, but no joy.  Didn’t get past the firmware’s OS selection menu.  Switching the machine off and booting from the CD worked, though.  But then I was left with just a blinking cursor — X11 wouldn’t start.  I realise that they won’t put the NVIDIA drivers on the CD because they aren’t “free” (as in beards), but shouldn’t it at least be able to choose a VESA driver for compatibility in the event that it doesn’t recognise your hardware?  Windows manages to do that.  Lack of X11 didn’t stop me switching to a console to do stuff, though.  So I logged in and used parted to reformat my Linux partition as ext3, and then created a contiguous 2 GB file to use for swap space.</p>
<p>Since I’d played with the partition map, I had to fix BOOT.INI for Windows.  But now I had a problem: despite correctly identifying the GPT partition scheme, and not altering the layout at all, parted had somehow managed to damage the GPT in such a way that only one partition would show up in any OS X utilities, and attempting to verify the OS X boot partition with Disk Utility caused the system to hang.  It also screwed up the fake MBR so Windows wouldn’t boot at all.  After several hours of messing around with partition table editors, I did manage to fix it without losing anything, though.  Then I booted to a Windows recovery console (using the install CD) and fixed up BOOT.INI (by incrementing the partition number).  I was back to having working OS X and Windows, with the dubious benefit of also having a blank ext3 partition.  By this stage, I was pretty pissed off with Linux and considering installing Solaris just to make myself feel better.  But it was time to sleep again.</p>
<p>Thinking about this the next morning, I realised that I now knew how to fix the partition map if I managed to screw it again.  This emboldened me enough to give Linux another shot.  (Yet another example of why I should I shouldn’t think so much.)  I booted from the live CD and got the console up again.  This time I hacked up the X11 configuration to force the VESA driver.  That got me a desktop.  I noticed that my tablet was working properly (take that, stupid Ubuntu live CD), and started the installer.  It had to format my ext3 partition again (so much for the contiguous swap file), but it seemed to go through its thing.  Then at the very end, it told me that the install had failed.  It hadn’t screwed anything up this time, though.  So I had a system with a working OS X installation, a working Windows installation, a working Windows installation, and a non-working Linux installation.</p>
<p>On the advice of other Fedora users, I downloaded and burned the Fedora net install CD.  Booting from this one got me X11 using a VESA driver straight away.  However, my tablet didn’t work at all.  What’s with that?  It provides an HID pointing device interface for compatibility that OS X, Windows and even the boot menu in the Mac firmware can use, but Linux can’t.  But anyway, I did manage to work my way through the installation process using the keyboard.  It took quite a while to download everything, but it didn’t fail at the end this time, and it did yield a working installation.</p>
<p>After booting from my new Linux installation, I was pleased to see that it was using a working VESA driver for X11 video, and the tablet was working.  It also recognised my external RAID, and mounted HFS+ and NTFS partitions.  It was quite easy to configure RPM Fusion repositories and install the proper NVIDIA drivers.  That got me higher resolution and better performance.  I had to install the glibc compatibility package before I could install my printer’s drivers, but that was easy, too.  So in the end, I got the lovely triple-boot system that I’d imagined.</p>
<p>But despite the fact that it worked quite well in the end, it wasn’t a simple process, and definitely wasn’t something a typical user could have achieved.  Considering how unreliable the live CD is, it should be marked as unstable or experimental, and users should be steered away from it.  If parted can’t deal with GPT, it should give you some kind of warning before it trashes your partition map.  A common graphics tablet should at least give you basic pointer functionality.  Bloat like GJC (which is completely broken), the Evolution mail client and Gutenprint/foomatic (only needed if you have a cheapo printer with no PostScript) shouldn’t be part of a default install.</p>
<p>Fifteen years ago, you needed to be technically adept to install any operating system.  If you weren’t good with computers, you’d call your technically inclined friend or relative to help you out.  In a way, no operating system was really “ready for the desktop” back then.  Linux feels like it’s still at that point.  Once it’s up and running, it’s fine, but to get it there, you need considerable problem-solving skills and/or friends to help you out.  Windows and OS X have got past that point — anyone could install either of them.  Linux really does have some serious catching up to do.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2009/04/13/linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Generated Copy Constructors Considered Evil</title>
		<link>http://www.vastheman.com/blog/2009/04/04/constructors/</link>
		<comments>http://www.vastheman.com/blog/2009/04/04/constructors/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 03:40:30 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=85</guid>
		<description><![CDATA[Sometimes I really hate C++. Not just dislike it, but really, really hate it. This week, one of the most horrible language “features” got me again: the generated copy constructor. I understand why they exist — they’re necessary to allow C structures to be passed by value no extra effort. However, their behaviour causes a [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes I really hate C++.  Not just dislike it, but really, really hate it.  This week, one of the most horrible language “features” got me again: the generated copy constructor.  I understand why they exist — they’re necessary to allow C structures to be passed by value no extra effort.  However, their behaviour causes a world of pain that should never have been inflicted on developers.</p>
<p><span id="more-85"></span></p>
<p>I have a template class — let’s call it <tt>Foo</tt>.  It used to have a couple of non-trivial constructors and assignment operators:</p>
<pre>template &lt;typename T&gt;
class Foo
{
public:
    Foo(T* = 0);
    Foo(const Foo&lt;T&gt;&amp;);
    ~Foo() throw();

    Foo&lt;T&gt;&amp; operator=(T*);
    Foo&lt;T&gt;&amp; operator=(const Foo&lt;T&gt;&amp;);

    ...
};</pre>
<p>This all works fine — user-defined constructors and assignment operators are used in all cases.  But one day, I realise that I can simplify some code by making the constructors and assignment operators more general:</p>
<pre>template &lt;typename T&gt;
class Foo
{
public:
    Foo(T* = 0);
    template &lt;typename U&gt;
    Foo(const Foo&lt;U&gt;&amp;);
    ~Foo() throw();

    Foo&lt;T&gt;&amp; operator=(T*);
    template &lt;typename U&gt;
    Foo&lt;T&gt;&amp; operator=(const Foo&lt;U&gt;&amp;);

    ...
};</pre>
<p>Instead just being able to construct or assign from the same class, you should be able to construct or assign from any instantiation of the template.  But this caused things to break all over the place.  Can you see why?  The compiler will now generate a copy constructor and assignment operator.  To stop the compiler from generating them, you need not just a constructor/operator <em>general enough</em> to accept an instance of the same class, but a constructor/operator that takes an instance of <em>exactly the same</em> class.  To make it work, I need to do this:</p>
<pre>template &lt;typename T&gt;
class Foo
{
public:
    Foo(T* = 0);
    Foo(const Foo&lt;T&gt;&amp;);
    template &lt;typename U&gt;
    Foo(const Foo&lt;U&gt;&amp;);
    ~Foo() throw();

    Foo&lt;T&gt;&amp; operator=(T*);
    Foo&lt;T&gt;&amp; operator=(const Foo&lt;T&gt;&amp;);
    template &lt;typename U&gt;
    Foo&lt;T&gt;&amp; operator=(const Foo&lt;U&gt;&amp;);

    ...
};</pre>
<p>There’s another case where this can easily trip you up.  Consider this:</p>
<pre>class Fish
{
    ...
};

class Salmon : public Fish
{
public:
    Salmon(const Fish&amp;);

    ...
};</pre>
<p>Counter-intuitively, a generated copy constructor will be used to construct <tt>Salmon</tt> from other instances of <tt>Salmon</tt> derived classes; the user-defined constructor will only be used to construct <tt>Salmon</tt> from instances of <tt>Fish</tt> and other derived classes thereof.</p>
<p>The current counter-intuitive behaviour makes it too easy to end up with broken code.  The issues could have been avoided in a number of ways:</p>
<ul>
<li>No generated copy constructors/assignment operators</li>
<li>Suppress generated copy constructors/assignment operators in the presence of user-defined copy constructors/assignment that are general enough to accept an instance of the same type (or to think of it another way, give the generated copy constructor/assignment operator lower precedence than all user-defined constructors/assignment operators)
</li>
<li>Suppress generated copy constructors/assignment operators<br />
in the presence of <em>any</em> user-defined constructors/assignment operators</li>
</ul>
<p>While I’m excited about some of the new features in C++0x, I can’t help but dread that some of them will be implemented in equally brain-dead ways.  Move semantics is one that comes to mind immediately.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2009/04/04/constructors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spam for Spam</title>
		<link>http://www.vastheman.com/blog/2009/01/30/spam/</link>
		<comments>http://www.vastheman.com/blog/2009/01/30/spam/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 11:37:39 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=69</guid>
		<description><![CDATA[My comment spam filter has picked up a couple of spam comments of a new breed recently: spam comments advertising comment spamming services. It’s a bit odd on a number of fronts. First of all, why waste resources you could be using to push out spam for your clients? Or has the economic downturn affected [...]]]></description>
			<content:encoded><![CDATA[<p>My comment spam filter has picked up a couple of spam comments of a new breed recently: spam comments advertising comment spamming services.  It’s a bit odd on a number of fronts.  First of all, why waste resources you could be using to push out spam for your clients?  Or has the economic downturn affected the spammers’ business, too?  Secondly, the comments were collected by my spam filter.  That means the only person who will see them is me.  And because the comments were caught by the filter, I’d be pretty dubious as to their ability to get anything advertising my services past anyone else’s filters.  All in all, it doesn’t seem to be good business.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2009/01/30/spam/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unlimited but Useless</title>
		<link>http://www.vastheman.com/blog/2008/08/02/unlimited/</link>
		<comments>http://www.vastheman.com/blog/2008/08/02/unlimited/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 14:48:41 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Phones]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=56</guid>
		<description><![CDATA[Mobile data was one of the coolest things that came with GSM: I could connect a serial cable to my Nokia 5110 and get ISDN connectivity everywhere. It was billed at one cent per second and ran at about 9600 bits per second. Now most GSM and UMTS handsets can run a PPP server to [...]]]></description>
			<content:encoded><![CDATA[<p>Mobile data was one of the coolest things that came with GSM: I could connect a serial cable to my <a href="http://en.wikipedia.org/wiki/Nokia_5110" type="text/html">Nokia 5110</a> and get ISDN connectivity everywhere.  It was billed at one cent per second and ran at about 9600 bits per second.  Now most GSM and UMTS handsets can run a PPP server to allow a computer connected via Bluetooth or USB to access packet data services.  Of course, since airtime is a limited resource, most carriers meter your use of mobile data services and charge proportionally.  However, some US carriers are offering unlimited data use on certain contracts, and I believe AT&amp;T’s iPhone contracts that include unlimited data usage are disadvantaging iPhone users on other carriers and stifling development.</p>
<p><span id="more-56"></span></p>
<p>I’m with Hutchison/3 in Australia, and they have provide three packet data services: MMS service (pay per message sent – unmetered data), the “walled garden” (pay based on services used – unmetered data) and the wild Internet (pay based on usage).  I use the “walled garden” quite a bit – I get free news an weather, so I read it on my way to and from work.  I also pay a flat fee for unlimited e-mail use.  I occasionally use the expensive Internet service when I’m somewhere out and about and I decide I need to get online for something.  When I do, the phone looks like a Bluetooth modem to the computer, and I can use the connection as I wish (provided I pay the bill at the end of the month).  I can also use the Internet service with applications that run on the phone, but I don’t do that very often.</p>
<p>Now if I had unlimited data usage included in my contract, I’d probably feel a need to be online while out and about a lot more.  Let’s face it: when something’s free, we use it more.  But if everyone did this, the networks would be brought to their knees by the huge amount of traffic.  So AT&amp;T need some way to stop iPhone owners from actually taking advantage of the “unlimited data” in their contracts.</p>
<p>The way they’ve done this appears to be by making a deal with Apple to cripple the iPhone: it won’t work as a Bluetooth or USB modem, and Apple won’t allow applications that would generate lots of traffic on the cellular network.  So VoIP applications are only allowed on WiFi, and <a href="http://www.theregister.co.uk/2008/08/01/apple_nixes_netshare/" type="text/html">they’ve pulled Nullriver NetShare</a>, an application that allows the iPhone to act as a modem, from the application store (to be fair, Nullriver was asking for trouble, considering their previous claim to fame was an installer for putting bootleg applications on “jailbroken” iPhones).</p>
<p>But the rest of the world doesn’t have unlimited data usage.  We pay for the data we send and receive over the air.  So why can’t we use it as we wish?  It’s a bit unfair to restrict everyone to make AT&amp;T happy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2008/08/02/unlimited/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On Spaghetti</title>
		<link>http://www.vastheman.com/blog/2008/07/27/spaghetti/</link>
		<comments>http://www.vastheman.com/blog/2008/07/27/spaghetti/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 13:42:35 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=51</guid>
		<description><![CDATA[Most programming languages have flow control features of some kind. Yeah, I know there are some languages that lack them, for example early programmable shader languages, some macro languages, and I think some programmable calculators just run a program straight through from beginning to end. But by and large, programming languages provide ways to jump [...]]]></description>
			<content:encoded><![CDATA[<p>Most programming languages have flow control features of some kind.  Yeah, I know there are some languages that lack them, for example early programmable shader languages, some macro languages, and I think some programmable calculators just run a program straight through from beginning to end.  But by and large, programming languages provide ways to jump around within the code and write decision-making logic.</p>
<p>Fairly early on, people realised that the only things you really need for flow control are a way to make a comparison, and a way to conditionally jump to another point in the program based on the result of a comparison.  On top of these primitives, you can build flow structures that are as complex as you like.  If you look at the native machine code that computers run, you can see that this has really been taken to heart: most CPUs provide a way to store the result of a comparison and one or more conditional jump instructions.  Early programming languages like BASIC and Fortran had flow control based entirely on these primitives, too.  If you learned to program on an 8-bit personal computer, you’ll no doubt remember writing statements like “<b>IF </b><i>condition</i><b> THEN GOTO </b><i>line</i>” all the time.</p>
<p>But in 1968, this form of flow control was about to get a major setback (at least in high-level languages), because Edsger Dijkstra had written what was to become a highly influential letter entitled “A Case Against the Goto Statement”.  You probably don’t know it by this name, though, because it was published in CACM under the title “ Go To Statement Considered Harmful” (Niklaus Wirth, a CACM editor at the time, changed the title for publication).  This letter criticised the <i>goto</i> statement and the form of flow control associated with it, instead advocating structured programming.</p>
<p><span id="more-51"></span></p>
<p>Most modern high-level programming languages are designed with structured programming in mind: simple statements can be grouped into compound statements (with <b>begin</b> and <b>end</b> delimiters in Pascal, or with curly braces in C or Java), and flow control is based around these compound statements.  For example, and <b>if</b> statement can be used to conditionally skip over a compound statement.  Essentially, compound statements are the basic building block from which you build your structured code.  Poor <b>goto</b> has survived to varying degrees: it’s present but rarely used in C and Pascal, and is a reserved word with no function in Java, for example.</p>
<p>The crusade against the <b>goto</b> statement has continued unabated.  Most programming lecturers will advise against its use, or neglect to mention its existence.  Programs that make use of it are referred to as “spaghetti code” because flow control can conceivable jump from any given point to any other given point.  This can make code difficult to understand, debug or modify.  However, in spite of this, I think Dijkstra’s message is being largely ignored.</p>
<p>You see, the beauty of structured code, and part of what makes it easy to understand (and consequently easy to debug and modify), is that code blocks only have a single entry point and a single exit point – program flow enters the block at the beginning, continues through it linearly, and leaves it at the end.  All flow control statements operate on entire blocks – an <b>if</b> statement skips an entire block if the condition is not met.  The <b>goto</b> statement obviously violates this principle, as program flow can be made to jump to an arbitrary point.  And that’s why Dijkstra criticised it: because it causes program flow to deviate from the program’s structure.  However, despite the ongoing crusade against <b>goto</b>, several other flow control structures that effectively do the same thing are being encouraged.  These include loop control statements (<b>continue</b> and <b>break</b>), C-style return statements and exceptions.  Let’s have a look at each of them.</p>
<p>First up, let’s think about loops.  A loop will have some kind of condition that must be maintained in order for it to run, and a block of code that runs while the condition is maintained.  Now this block, like any other block of code in a structured program, will have a natural entry point at the top and an exit point at the bottom.  The loop itself has an exit point after the loop condition is evaluated.  But when you add a <b>continue</b> statement, you’re adding <em>another exit point</em> to the loop body.  You can no longer say that the loop body will be entered at the top and left at the bottom.  In fact, <b>continue</b> may as well just be shorthand for doing a <b>goto</b> that jumps to the end of the loop body.  A <b>break</b> statement is slightly worse: it’s like a <b>goto</b> that jumps to a point just outside the loop – it’s not only adding an additional exit point to the loop body, but adding an exit point to the loop itself!</p>
<p>C-style <b>return</b> statements are similar: they add exit points to functions (effectively a <b>goto</b> that jumps to the end of the function body).  I do realise that there isn’t really much you can do about them, though – there isn’t any other way to return a value from a function.  The best you can really do is to only ever place one <b>return</b> statement in a function, and to place it at the end of the body.  (Pascal lets you return a value by assigning to the name of the function, so there’s no excuse there.)</p>
<p>Now neither of these are really any better or worse than <b>goto</b> statements.  They’re just like shorthand <b>goto</b> statements where the destination is implied.  If you use them, fair enough – just be aware of the consequences, and think twice before you criticise <b>goto</b> again, because your code is starting to look like spaghetti, too.</p>
<p>But exceptions are the worst of all.  Exceptions are like a <b>goto</b> where you <em>don’t know the destination!</em>  Think about it: throwing an exception could jump to somewhere in the same function, or somewhere up the call stack.  You just don’t know where it will land  (The only thing they can’t do that a <b>goto</b> can is to jump backwards within a code block.)  Use of exceptions means you don’t know whether a function call will return, or jump somewhere else.  Worst of all, in C++ simply unwinding an object could cause an exception to be thrown, which will most likely lead to a memory leak.</p>
<p>To deal with exceptions properly, you need to write ugly code.  Languages like Java help you out a bit with <b>finally</b> blocks.  But you still have to remember to wrap anything that needs cleaning up in a <b>try</b> block and to place the clean-up code in the corresponding <b>finally</b> block – the language can’t make you code properly.  So now you’re code is littered with <b>try</b>…<b>finally</b> constructs.</p>
<p>Of course, the C++ way has to be the ugliest: <abbr title="Resource Allocation is Initialisation">RAII</abbr>.  If you need to clean something up, you need to make a small class with the thing that needs to be cleaned up in the constructor, and the clean-up code in the destructor, and remember to be very careful to ensure you won’t throw an exception from the destructor, because then you’re really screwed.  Now create an instance of this class and make sure it’s unwound at the point where you need the clean-up to occur.  Now your code is littered with these small classes that are only really there in case an exception is thrown.  You also can’t see the program flow properly, because it will be jumping to all these little destructors.  And you want to hope you don’t need to try stepping through it in a debugger, because that’s an absolute nightmare.</p>
<p>There’s one place that exceptions are even more evil, if that’s possible: Objective-C++.  There is no proper way to deal with exceptions in Objective-C++ because C++ frames will not be properly unwound when an Objective-C exception is thrown.  (Objective-C exceptions are generally only thrown in truly exceptional circumstances, so it isn’t such a big problem in practice, but that’s beside the point.)</p>
<p>So why don’t we bring back <b>goto</b>?  We’re doing all the things that make it harmful – we’re just kidding ourselves by refusing to call it what it is.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2008/07/27/spaghetti/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Good as a Getz?</title>
		<link>http://www.vastheman.com/blog/2008/07/02/getz/</link>
		<comments>http://www.vastheman.com/blog/2008/07/02/getz/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 12:14:33 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=50</guid>
		<description><![CDATA[Can someone explain to me why car magazines love the Hyundai Getz so much? Wheels gave it “Gold Star Car” in 2007; SHEdrives gave it “Best First Car” in 2007; it even got the NRMA/RACV/RACQ/AA “Best Small Car” in 2003 and 2005. I can’t for the life of me see why. Someone sideswiped my car, [...]]]></description>
			<content:encoded><![CDATA[<p>Can someone explain to me why car magazines love the <a href="http://en.wikipedia.org/wiki/Hyundai_Getz">Hyundai Getz</a> so much?  Wheels gave it “Gold Star Car” in 2007; SHEdrives gave it “Best First Car” in 2007; it even got the NRMA/RACV/RACQ/AA “Best Small Car” in 2003 and 2005.  I can’t for the life of me see why.  Someone sideswiped my car, and the <a href="http://www.barnetmbr.com.au/">smash repair place</a> has given me a Getz to drive for now.  Now I know I can’t expect a loaner to be a particularly nice car, but I used to own a 2004 <a href="http://en.wikipedia.org/wiki/Toyota_Vitz">Echo</a>, and I’ve spent enough time driving <a href="http://en.wikipedia.org/wiki/Nissan_Pulsar">Pulsars</a>, so I think I have a point of reference.</p>
<p>From the moment you sit down, you notice how cheap it feels.  It has that hard, nasty, cheap plastic they’ve chosen for the steering wheel and dashboard.  It isn’t comfortable, either.  I’m not tall, but the seat feels too high.  The gearstick seems a long way away down where they’ve placed it.  It doesn’t feel good to drive, either.  The brake pedal has very little travel and doesn’t give proportional resistance.  The turning circle is too big for such a small car.  The engine doesn’t deliver, either – you put your foot down and wait for something to happen; at least with an Echo, when you put your foot down it revs eagerly, and you definitely feel the pull at 6,000 rpm.</p>
<p>Sure they’ve thrown in lots of features, like power windows, power mirrors, audio controls on the steering wheel (which are on the wrong side – they belong on the left) and an MP3/WMA compatible CD player.  But it doesn’t change the fact that that the car is lacking where it matters; extras don’t make a bad car better.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2008/07/02/getz/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Safe-n-Sound my foot!</title>
		<link>http://www.vastheman.com/blog/2008/02/21/safe-n-sound/</link>
		<comments>http://www.vastheman.com/blog/2008/02/21/safe-n-sound/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 14:15:42 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2008/02/21/safe-n-sound/</guid>
		<description><![CDATA[With the baby almost here, one of the last things to get was a car seat. These things are not cheap, and I wanted to get the best solution. Being a geek, I actually went and read last year’s NRMA/RACV/RTA assessment of child restraints, and came to the conclusion that the Safe-n-Sound Compaq Deluxe gave [...]]]></description>
			<content:encoded><![CDATA[<p>With the baby almost here, one of the last things to get was a car seat.  These things are not cheap, and I wanted to get the best solution.  Being a geek, I actually went and read last year’s <a href="http://www.racv.com.au/wps/wcm/resources/file/eb37aa4eafc9302/child%20restraint%20evaluation%20program%20results%20(CREP)%20december%202007.pdf" type="application/pdf">NRMA/RACV/RTA assessment of child restraints</a>, and came to the conclusion that the Safe-n-Sound Compaq Deluxe gave the best trade-off for performance in rearward-facing and forward-facing orientations, and thus proceeded to purchase one.  It looks quite impressive, and all the cushioning shoud make it comfortable for the baby.  It also promised to be easy to install and ideal for smaller cars.</p>
<p>However, after installing it in my car (a 2007 Toyta Corolla Seca, which is called an Auris anywhere but Australia), I am quite dissatisfied.  In rearward-facing orientation, the seat is not held down adequately.  The “stabilising bar” is supposed to serve this purpose, but it doesn’t even come close to touching the seat back in my car.  I think it’s designed to work in cars where the seat backs are close to vertical, but that doesn’t help me.  I don’t think I’d trust it enough in that orientation to put a baby in it.  In forward-facing orientation, it’s considerably better.  The combination of the anchorage strap and seatbelt hold the child restraint in the seat securely both vertically and longitudinally.  However, there’s nothing to stabilise it laterally, and there’s a lot of play in that direction.  I don’t think it’s unstable to the point of being totally unsafe, but it leaves a lot to be desired.</p>
<p>Now my car is equipped with <a href="http://en.wikipedia.org/wiki/ISOFIX" type="text/html">ISOFIX</a> (ISO-13216 1990, aka LATCH) anchor points.  This was actually a consideration for me when buying the car.  I asked around about the availability of ISOFIX child restraints, and was told that they aren’t available “because they don’t meet Australian standards.”  If that’s the case, then Australian standards are a joke.  Attaching a child restraint to ISOFIX anchors is far more secure than trying to hold it in place with a seatbelt.  The two anchors at the base of the seat effectively secure the child restraint both laterally and vertically, while the tether holds it securely against the seat back (longitudinally).  ISOFIX has been a requirement on new cars in the USA since 2002.  It should be a requirement here, too.</p>
<p>This experience doesn’t instil much confidence in Australian standards.  In this case, it seems to be about protecting certain businesses while paying lip service to safety.  Meanwhile, children’s safety is actually compromised.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2008/02/21/safe-n-sound/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The Serviceman</title>
		<link>http://www.vastheman.com/blog/2007/11/16/serviceman/</link>
		<comments>http://www.vastheman.com/blog/2007/11/16/serviceman/#comments</comments>
		<pubDate>Fri, 16 Nov 2007 11:30:21 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2007/11/16/serviceman/</guid>
		<description><![CDATA[Today I had the opportunity to work on an LG DVD/VCD/DivX player. You see, my little nephew Eric had somehow managed to get two discs into it, and it would no longer display anything. Plugging it in would just make some motors whir. Now you’re probably thinking that this is one of those stories where [...]]]></description>
			<content:encoded><![CDATA[<p>Today I had the opportunity to work on an LG DVD/VCD/DivX player.  You see, my little nephew Eric had somehow managed to get two discs into it, and it would no longer display anything.  Plugging it in would just make some motors whir.  Now you’re probably thinking that this is one of those stories where a guy takes a look at a broken piece of consumer electronics for a family member and then regrets it.  But it isn’t.  I wasn’t too keen on looking at it because of how wrong these things can go, but I was surprised.</p>
<p>Getting the top off the case was easy: just three screws on the back and one on each side.  And then came the first surprise: the thing was actually designed to be easy to service!  There in front of me were the four circuit boards and drive mechanism.  The boards all had component overlays with marked values.  The connections between boards were all labelled.  The mechanism was plainly exposed.  Now this shouldn’t be a surprise – it would be nice if all DVD players were made like this.  But in this age of disposable everything, a lot of equipment isn’t made to be fixed (Sony and Pioneer, I’m looking at you).</p>
<p><span id="more-44"></span></p>
<p>The first job was to get the two discs out.  I removed the four screws holding the mechanism in place, but it was still being held in by the front panel.  I didn’t want to unplug any cables or take the front panel off if I could avoid it, having had bad experiences in the past.  But there was enough play in it to tilt the mechanism up, so I could push the tray out and slide the discs out.  With the discs out, I was pleased to see that the lens didn’t appear to be scratched.</p>
<p>With the discs out, I crossed my fingers and powered it up (these DVD players have a guard over the laser, so there’s no interlock to defeat before you can get it to power up with the case off).  But no joy.  Still no video out, no display on the front panel and the motors just kept whirring.</p>
<p>This didn’t look good.  I’d have to get the mechanism out to take a closer look, and that meant removing the front panel.  There was one cable from the front panel to the display controller board.  That was easy.  The panel was held on with seven clips (three underneath, one on each side, and two on top holding it to the mechanism).  I kept waiting for that sickening breaking sound as I removed each clip, but it never came.  I had the front panel in my hand and nothing was broken!  Now I could easily disconnect the two cables that go to the mechanism (one to the laser assembly and one to the loading mechanism), and lift the mechanism out.</p>
<p>Now I could see what had happened clearly: the tray was in the closed position (pushed in), but the rest of the mechanism was in the open position (laser head and drive motor dropped, tray cam out).  This meant that the tray motor could spin all it liked, but the tray wasn’t going to move because the rack wasn’t contacting the sprocket.  I could pull the tray out and push the actuator so that it could pull the tray in when I powered it up again.</p>
<p>So I screwed the mechanism back in, clipped the front panel back on, connected the three cables and held my breath as I powered it up.  Yes!  It pulled the tray in, the mechanism moved to the closed position, and it started spinning and focusing!  Victory was mine!  To make sure there wasn’t another problem lurking, I connected it to a TV and played a disc.  Everything was fine, so I put the top case on, and congratulated myself on a job well done.</p>
<p>At the end of it, I had a sense of satisfaction, and my sister-in-law had a working DVD player instead of a lounge room decoration.  But I couldn’t have helped thinking about what could have happened if I didn’t fix it.  She could have taken it to the service centre; that would have cost her $45 for establishing the job and $45 for an hour (or part thereof) of the serviceman’s time – a total of $90.  Considering that minimum cost (not to mention the possibility that it could cost a lot more), she probably would’ve just gone and spent $120 or so on a new one and thrown that one in the bin.</p>
<p>It’s sad that we’ve come to the point where people really are often better off throwing things out than getting them fixed.  It’s just so wasteful.  It’s also ironic that this cheap DVD player that’s often more cost-effective to replace seemed to be designed to be as easy on the serviceman as possible, especially when some far more expensive ones seem to be designed to make the serviceman’s hair turn grey.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2007/11/16/serviceman/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>日本語のゲーム！</title>
		<link>http://www.vastheman.com/blog/2007/11/03/%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%81%ae%e3%82%b2%e3%83%bc%e3%83%a0%ef%bc%81/</link>
		<comments>http://www.vastheman.com/blog/2007/11/03/%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%81%ae%e3%82%b2%e3%83%bc%e3%83%a0%ef%bc%81/#comments</comments>
		<pubDate>Sat, 03 Nov 2007 03:29:03 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2007/11/03/%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%81%ae%e3%82%b2%e3%83%bc%e3%83%a0%ef%bc%81/</guid>
		<description><![CDATA[If you’ve actually visited the web page, you’ll see a new link in the sidebar &#8211; To Arcade. I’ve put up a few translations of Japanese game service menus and test programs. Tell me what you think. Also, I’m open to suggestions for more candidates for translation. Incidentally, I’ve changed the look of the site [...]]]></description>
			<content:encoded><![CDATA[<p>If you’ve actually visited the web page, you’ll see a new link in the sidebar &#8211; <a href="/arcade/" type="text/html">To Arcade</a>.  I’ve put up a few translations of Japanese game service menus and test programs.  Tell me what you think.  Also, I’m open to suggestions for more candidates for translation.</p>
<p>Incidentally, I’ve changed the look of the site a bit.  I’m now using CSS to simulate the look of a frameset, so the sidebar scrolls independently of the content.  The sidebar is automatically suppressed when printing, and the background of all the boxes is set to white, so I don’t need to create special printable versions of pages.</p>
<p>Oh, and the only browsers that seem to render the site properly are <a href="http://getfirefox.com/" type="text/html">Firefox</a> and <a href="http://www.apple.com/safari/" type="text/html">Safari</a>.  Opera made it all look a bit weird, and I didn’t try Internet Explorer, but I don’t expect it would work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2007/11/03/%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%81%ae%e3%82%b2%e3%83%bc%e3%83%a0%ef%bc%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So long, NeXTstep!</title>
		<link>http://www.vastheman.com/blog/2007/11/01/so-long-nextstep/</link>
		<comments>http://www.vastheman.com/blog/2007/11/01/so-long-nextstep/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 22:21:53 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2007/11/01/so-long-nextstep/</guid>
		<description><![CDATA[Well, Mac OS X 10.5 “Tiger” has been released. As usual, it’s feature-packed, and goes faster than the previous release on the same hardware. And as usual, Apple has deprecated and dropped several legacy features. It seems with every release, there’s a little less of NeXTstep hiding under the covers. In Leopard, Input Managers are [...]]]></description>
			<content:encoded><![CDATA[<p>Well, Mac OS X 10.5 “Tiger” has been released.  As usual, it’s feature-packed, and goes faster than the previous release on the same hardware.  And as usual, Apple has deprecated and dropped several legacy features.  It seems with every release, there’s a little less of NeXTstep hiding under the covers.</p>
<p>In Leopard, Input Managers are no longer supported, and are severely restricted.  Now I know why this is being done – there is great potential for Input Manager malware.  Also, Input Managers were never suitable for system-wide input because they didn’t work with Carbon applications.  But I’m sad to see them go.  Mac-style Input Method components are a far less elegant way of performing the same task (albeit with far lower potential for evil), and the APIs Apple themselves use for writing new-style input methods still don’t seem to be documented on ADC.</p>
<p>The other thing that’s disappeared is NetInfo.  It’s been replaced by Directory Services.  I guess it’s time for us to learn to configure static hostname resolution, DHCP/BootP/NetBoot servers, unusual account settings, and all the rest of it all over again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2007/11/01/so-long-nextstep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evil Upgrade!</title>
		<link>http://www.vastheman.com/blog/2007/10/30/evil-upgrade/</link>
		<comments>http://www.vastheman.com/blog/2007/10/30/evil-upgrade/#comments</comments>
		<pubDate>Tue, 30 Oct 2007 04:24:03 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2007/10/30/evil-upgrade/</guid>
		<description><![CDATA[I’ve been using WordPress to power my blog ever since I started wasting time with it, and it’s been pretty good to me so far. However, there was something that bothered me: despite serving UTF-8 to the browser, the actual database table collation being used was latin1_swedish_ci. Now the way WordPress was getting away with [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been using <a href="http://wordpress.org">WordPress</a> to power my blog ever since I started wasting time with it, and it’s been pretty good to me so far.  However, there was something that bothered me: despite serving UTF-8 to the browser, the actual database table collation being used was <tt>latin1_swedish_ci</tt>.  Now the way WordPress was getting away with this was by passing 8-bit UTF-8 text to the database server and telling it that it was 8-bit Windows Latin 1.  This is very bad, as sorting and searching wouldn’t behave properly.</p>
<p>Now with WordPress 2.3, all that’s in the past.  WordPress now seems to be able to do the right thing with text encodings.  It’s just too bad the upgrade script can’t clean up the rot left from previous versions.  After running the upgrade script, I found that every piece of Japanese text, every typographical quote, every accented character, in fact everything outside 7-bit ASCII, was horribly mangled.  Now I had a number of options for going forward:</p>
<p><span id="more-41"></span></p>
<ul>
<li>Go back to a previous version of WordPress</li>
<li>Leave it and hope no-one minds.</li>
<li>Delete every post that got mangled.</li>
<li>Manually fix every affected post.</li>
<li>Come up with a l33t way to solve it without manual effort.</li>
</ul>
<p>Now the first option would have been easy.  I had a complete backup (like you should, too), and I could have rolled it back in a matter of minutes.  But I like to be on the curve, and I like to have all the newest features, even if I never use them.  Also, having the latest security updates is nice.</p>
<p>The second option wouldn’t fly, because even if the readers wouldn’t mind, I’d mind.  The third option would probably mean deleting every post, since I’m in the habit of using typographical quotes, non-breaking spaces and dashes (as opposed to hyphens).  Deleting all my posts after an upgrade would defeat the purpose of keeping a blog.  The fourth option would be excessively time-consuming, and I’d have to play fill the blanks, which may not even be possible if important things were mangled.</p>
<p>So the only way to fix it would be to call on my inner geek.  I had a quick look at the database contents in <a href="www.phpmyadmin.net/">phpMyAdmin</a>, and had a look at the database code in WordPress.  I noted that the new tables created by WordPress 2.3 had the collation <tt>utf8_general_ci</tt> while the upgraded tables had the collation <tt>latin1_swedish_ci</tt>, and WordPress was asking MySQL to communicate in UTF-8.  Armed with this, I downloaded a UTF-8 SQL dump of the database.</p>
<p>The rest of it was actually reasonably simple: I opened the SQL dump in <a href="http://www.barebones.com/products/textwrangler/">TextWrangler</a>, which correctly identified it as being UTF-8 with no “byte order mark”.  I then found all references to the <tt>latin1</tt> character set and replaced them with <tt>utf8</tt>.  That would fix the issue with the upgraded tables having the wrong collation, but not the corrupted data.</p>
<p>So here’s the trick: you need to convert the UTF-8 representation of what was in in the database back to its old binary representation, and then interpret that as UTF-8.  I tried to save the file as ISO Latin 1 (ISO 8859-1), but TextWrangler complained about unmappable characters.  It turns out that MySQL’s <tt>latin1</tt> is actually Windows Latin 1 (code page 1252).  So I saved the file in this encoding, and then told TextWrangler to reinterpret it as UTF-8.  It all went smoothly, and I had my data back!  I could play the SQL dump back on the server, and everything is as it should be.</p>
<p>So what are the morals of the story?</p>
<ul>
<li>Always keep backups – particularly when you plan to do something drastic like an upgrade.  Even though I didn’t actually need the backup this time, it was comforting to know it was there.</li>
<li>Don’t trust upgrade/migration scripts – always check the result to ensure it’s actually what you want.</li>
<li>Store data in appropriate formats – hacks will always come back and bite you.  I shouldn’t have been using WordPress when I knew it was doing the wrong thing with my data.</li>
<li>When you’re writing a migration script, try to ensure that it actually works!  Then you don’t risk infuriating and/or losing your users.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2007/10/30/evil-upgrade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On the iPhone</title>
		<link>http://www.vastheman.com/blog/2007/10/08/on-the-iphone/</link>
		<comments>http://www.vastheman.com/blog/2007/10/08/on-the-iphone/#comments</comments>
		<pubDate>Sun, 07 Oct 2007 23:56:26 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Phones]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2007/10/08/on-the-iphone/</guid>
		<description><![CDATA[Well, since everyone else seems to have an opinion on it, I may as well, too. First up, I wouldn’t buy one, for a number of reasons: I like having a mechanical keypad – say what you like, but you can’t use a virtual keypad without looking at it. I like being able to use [...]]]></description>
			<content:encoded><![CDATA[<p>Well, since everyone else seems to have an opinion on it, I may as well, too.  First up, I wouldn’t buy one, for a number of reasons:</p>
<ul>
<li>I like having a mechanical keypad – say what you like, but you can’t use a virtual keypad without looking at it.</li>
<li>I like being able to use Java MIDP applications.</li>
<li>I can’t tolerate the lack of performance you get without 3G.</li>
</ul>
<p>The iPhone isn’t a smartphone – it’s a feature phone.  The defining feature of a smartphone is the ability to run user-installed applications, and the iPhone forbids that (it’s priced like a smartphone, though).  Now if you want a smartphone, buy one – there’s no point buying an iPhone and trying to hack it.  Apple doesn’t care about people who hack iPhones – they already have your money.</p>
<p><span id="more-40"></span></p>
<p>I have no issues with the price drop – that’s standard practice for mobile handsets.  You make as much money as you can to begin with, and then lower the price to keep sales up.  Everyone does it.  If you complained about that, you’re a crybaby.  What I really don’t like is the amount of crap coming from Jobs and the fanboys.</p>
<p>First of all, the argument that you’re better off without user-installed applications because they could bring down a mobile network.  Well all I can say is that it would have to be a very flaky network for that to happen.  We’ve had mobile applications for Java MIDP, Symbian, Windows Mobile and BREW for years and there hasn’t been any trouble.  Mobile networks are designed so that a badly behaved device won’t bring them down, and mobile handsets are designed so that one bad application won’t bring them down.  And if that was the real reason, the iPod Touch would allow you to install applications.  No, the real reason is presumably due to the way Apple have got a deal where they get a cut of revenue from the mobile carriers – if you could install your own applications, it could erode this.</p>
<p>Next up, all the crap about why 3G isn’t any better.  It’s true that early 3G handsets had poor battery life, but they’re much better now, and at least as good as EDGE handsets.  But even if 3G really did give poor battery life, it would be worth it.  The data rates and round trip times on 3G leave EDGE for dead.  EDGE is a hack on top of a hack – GSM wasn’t designed to provide packet-switched data.  Also, voice call quality is far better on 3G.  It sounds clearer, and sounds great up until the point where it drops out.  Contrast this with GSM where the conversation starts to break up and get noisy long before you lose the connection.  And last but not least, you can’t roam in Japan without 3G.</p>
<p>The very aggressive SIM locking is a bit of an interesting issue.  Now the reason for it is obvious – Apple gets a cut of the revenue from the carrier, so they want you to stay.  None of the other handset manufacturers have deals like this, so they don’t care anywhere near as much about whether you can unlock your handset.  You may be able to get away with this practice in the US, but EU regulations clearly state that carriers must allow customers to buy their way out of contracts and unlock their handsets if they do.  If they’re perfectly fair and balanced, they will enforce this, and compel Apple to provide a means of unlocking iPhones.  Let’s hope they don’t have to be dragged through the courts first.</p>
<p>Last of all, there are ringtones.  I do have a variety of ringtones on my handset.  I assign different tones to different contacts, so I can tell who’s calling immediately (although I have it set to vibrate only most of the time, anyway).  I didn’t pay for any of my ringtones.  My handset will accept any AAC, MP3 or MIDI file as a ringtone.  Assuming I am not violating copyright by possessing the files to begin with, I am entitled to use them as ringtones.  I have no idea how anyone can say that iPhone ringtones are a good deal: paying for a song twice or more so you can hear it when someone calls is just stupid.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2007/10/08/on-the-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I Hate Firefox!</title>
		<link>http://www.vastheman.com/blog/2007/08/19/firefox/</link>
		<comments>http://www.vastheman.com/blog/2007/08/19/firefox/#comments</comments>
		<pubDate>Sun, 19 Aug 2007 02:09:04 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2007/08/19/firefox/</guid>
		<description><![CDATA[Yes, I really do (yes, I’m talking about the web browser, not the movie). And yet I use it every day. There are things that I like about Firefox – plugins like Aardvark, Firebug and Web developer, for example – but as a whole, I think it’s a lousy web browser. Take its text rendering, [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, I really do (yes, I’m talking about the web browser, not the movie).  And yet I use it every day.  There are things that I like about Firefox – plugins like Aardvark, Firebug and Web developer, for example – but as a whole, I think it’s a lousy web browser.</p>
<p>Take its text rendering, for example.  Since the primary purpose of a web browser is to get text on the screen, you’d think they’d have that right.  But no, apparently version 2.0 is still too early to expect decent text rendering.  Compare these two snaps:</p>
<table style="text-align: center">
<tr>
<th style="width: 50%; padding: 0.25em">Firefox</th>
<th style="width: 50%; padding: 0.25em">Safari</th>
</tr>
<tr>
<td style="width: 50%; vertical-align: middle; padding:0.25em"><img src="/inc/2007/08/19/firefox/firefox_code.png" width="142" height="82" alt="Code in Firefox" /></td>
<td style="width: 50%; vertical-align: middle; padding:0.25em"><img src="/inc/2007/08/19/firefox/safari_code.png" width="164" height="84" alt="Code in Safari" /></td>
</tr>
</table>
<p>How has Firefox managed to screw up the fixed-pitch text so badly?  It’s just plain illegible!  I have absolutely know idea, but however they really should have fixed this kind of thing before version 1.0 – not left it in at 2.0.  How about italic text.  Maybe they could get that right:</p>
<table style="text-align: center">
<tr>
<th style="width: 50%; padding: 0.25em">Firefox</th>
<th style="width: 50%; padding: 0.25em">Safari</th>
</tr>
<tr>
<td style="width: 50%; vertical-align: middle; padding:0.25em"><img src="/inc/2007/08/19/firefox/firefox_italic.png" width="101" height="28" alt="Italic text in Firefox" /></td>
<td style="width: 50%; vertical-align: middle; padding:0.25em"><img src="/inc/2007/08/19/firefox/safari_italic.png" width="105" height="30" alt="Italic text in Safari" /></td>
</tr>
<tr>
<td style="width: 50%; vertical-align: middle; padding:0.25em"><img src="/inc/2007/08/19/firefox/firefox_selection.png" width="104" height="29" alt="Selected italic text in Firefox" /></td>
<td style="width: 50%; vertical-align: middle; padding:0.25em"><img src="/inc/2007/08/19/firefox/safari_selection.png" width="105" height="31" alt="Selected italic text in Safari" /></td>
</tr>
</table>
<p>Once again, Safari has rendered it beautifully, but Firefox looks like it’s using a synthetic oblique style, the way System 6 used to when you didn’t have an italic version of the font available – it’s most noticeable in the capital S.  And then when you select the text, some of the last italic letter gets cut off.  Come on, this is pretty basic stuff, guys!</p>
<p><span id="more-37"></span></p>
<p>On the topic of selection, Firefox won’t use Mac conventions in handling double-click and drag.  It’s supposed to select whole words, but Firefox selects just one whole word.  The same goes for triple-click and drag for lines.  (Yes, I know Safari’s selection behaviour isn’t quite standard, and there’s no excuse for that, either.)  And speaking of things being non-standard, why can’t Firefox use standard OS widgets?  For example, the drop-down menus from items on the bookmark bar don&#8217;t respond to clicks in the same way as regular menus (items with submenus, in particular).  The controls on forms just look like horrible Windows wannabes:</p>
<table style="text-align: center">
<tr>
<th style="width: 50%; padding: 0.25em">Firefox</th>
<th style="width: 50%; padding: 0.25em">Safari</th>
</tr>
<tr>
<td style="width: 50%; vertical-align: middle; padding:0.25em"><img src="/inc/2007/08/19/firefox/firefox_forms.png" width="239" height="46" alt="Forms in Firefox" /></td>
<td style="width: 50%; vertical-align: middle; padding:0.25em"><img src="/inc/2007/08/19/firefox/safari_forms.png" width="231" height="44" alt="Forms in Safari" /></td>
</tr>
</table>
<p>Safari is more usable, too.  In Firefox’s bookmarks window, why can’t I drag object from the tree view in the left-hand pane?  Why can’t I rename or edit a link in-place, rather than clicking the <b>Properties</b> or <b>Rename</b> button?  Speaking of which, why are there two buttons, when both of them bring up exactly the same sheet, with exactly the same text field selected?  And on the topic of bookmarks, when I try to drag the URL to the bookmarks bar, Firefox puts a tooltip in the way to thwart my efforts:</p>
<p><img src="/inc/2007/08/19/firefox/firefox_tooltip.png" width="341" height="79" alt="Evil tooltip in Firefox" /></p>
<p>When you have lots of tabs on the same site, Safari cuts off any common prefix it can find in the titles, so you have more chance of knowing which is which:</p>
<table style="text-align: center">
<tr>
<th style="text-align: right; vertical-align: middle; padding: 0.25em">Firefox</th>
<td style="width: 50%; vertical-align: middle; padding:0.25em"><img src="/inc/2007/08/19/firefox/firefox_tabs.png" width="587" height="68" alt="Firefox tab bar" /></td>
</tr>
<tr>
<th style="text-align: right; vertical-align: middle; padding: 0.25em">Safari</th>
<td style="width: 50%; vertical-align: middle; padding:0.25em"><img src="/inc/2007/08/19/firefox/safari_tabs.png" width="588" height="60" alt="Safari tab bar" /></td>
</tr>
</table>
<p>And on top of this, there are the small things.  Like ripping a YouTube video, for example – in Safari, you can easily find it in the activity window, and hold option and double-click.  Firefox won’t use the system-wide spelling dictionaries.  Firefox takes longer to launch.</p>
<p>So if I hate it, why do I use it?  First of all, on Linux and Windows there’s no meaningful competition.  On the Mac, Safari has three flaws that are too bad to live with: it can’t deal with table cells spanning multiple rows in XHTML (although it can in regular HTML – this mystifies me), it doesn’t deal with character entities correctly in XHTML and it gives you the spinning pinwheel of death far too often.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2007/08/19/firefox/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Keyboards</title>
		<link>http://www.vastheman.com/blog/2007/08/10/keyboards/</link>
		<comments>http://www.vastheman.com/blog/2007/08/10/keyboards/#comments</comments>
		<pubDate>Fri, 10 Aug 2007 00:32:30 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2007/08/10/keyboards/</guid>
		<description><![CDATA[After reading this and this about the new Apple keyboard, I got the itch to write, so here are my random musings. I think the new keyboard is just plain ugly, but that’s purely subjective. I think the PowerBook keyboard feels better than the MacBook keyboard, too, and would have preferred a desktop keyboard based [...]]]></description>
			<content:encoded><![CDATA[<p>After reading <a href="http://maniacalrage.net/past/2007/8/8/when_i_went_to_the/">this</a> and <a href="http://twistedmelon.com/blog/aug2007.html">this</a> about the new Apple keyboard, I got the itch to write, so here are my random musings.</p>
<ul>
<li>I think the new keyboard is just plain ugly, but that’s purely subjective.  I think the PowerBook keyboard feels better than the MacBook keyboard, too, and would have preferred a desktop keyboard based on that.</li>
<li>The wireless version is obviously designed for using on your lap, rather than on a desk.  The lack of a numeric keypad allows you to have it both physically and logically centred on your lap.</li>
<li>Dashboard functions/exposé on the left are interesting – here’s my theory: on a PowerBook, it makes sense to have it on the right, since you need your left hand to get to the <b>fn</b> key while you hit the <b>F9</b>/<b>F10</b>/<b>F11</b> key with your right hand (otherwise you get keyboard illumination control); however, on the desktop keyboard, you need to use your right hand to get the <b>fn</b> key, so it makes sense to have the multiplexed F-keys on the left-hand side of the keyboard.</li>
<li>I was sad to see the help key fall into disuse, and I’m sad to see it ultimately disappear.</li>
<li>I won’t get one of these keyboards.  I don’t like wireless input devices that need batteries (hence by <a href="http://www.wacom.com.au/products/intuos3/intuos3_index.html">Wacom Intuos3</a> with wireless power to the pen and hamster – it can’t be a mouse without a tail).  I’m also very happy with my <a href="http://www.sanwa.co.jp/zooma/keybord/SKB-MSLUHW/index.html">Sanwa IceKey</a> keyboard, which has very nice notebook-like key mechanisms.</li>
</ul>
<p>OK, that’s enough random garbage for today…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2007/08/10/keyboards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bigger and Better</title>
		<link>http://www.vastheman.com/blog/2007/08/04/bigger-and-better/</link>
		<comments>http://www.vastheman.com/blog/2007/08/04/bigger-and-better/#comments</comments>
		<pubDate>Sat, 04 Aug 2007 10:19:28 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2007/08/04/bigger-and-better/</guid>
		<description><![CDATA[I’m talking about my new car. I got a tenth-generation Toyota Corolla Conquest hatch in Aztec Blue (this is called an Auris in Europe and Asia – I’m not sure what it’s called in the Americas). It’s almost funny. Ford and Holden are placing more emphasis on their smaller cars (Focus, Epica, Astra, etc.) but [...]]]></description>
			<content:encoded><![CDATA[<p>I’m talking about my new car.  I got a tenth-generation Toyota Corolla Conquest hatch in Aztec Blue (this is called an Auris in Europe and Asia – I’m not sure what it’s called in the Americas).  It’s almost funny.  Ford and Holden are placing more emphasis on their smaller cars (Focus, Epica, Astra, etc.) but Toyota are making bigger, heavier cars.  The Corolla is just one example – it’s 1.3 tonnes of car, which is more than a Tarago was in the ’80s.  And speaking of the Tarago, you can get a thirsty V6 Tarago now alongside the straight four.  But it seems to be working.  In terms of sales, the Corolla is topping the charts, and the Hilux has pushed the Falcon out of the trifecta (the VE Commodore is there in between, of course).</p>
<p>So what’s it like?  It’s a comfortable car.  You couldn’t describe it as exciting.  My previous car was an Echo hatch.  It was 400 kg lighter, and 30% less powerful, but you felt the road, and when you were doing 150 km/h, you really felt like it.  In the Corolla, you can speed without noticing.  You need to use the cruise control, or your speed just creeps up.  The seats are comfortable, too.  You have plenty of space in the front, and enough in the back.  It’s a bigger, more serious car.</p>
<p><span id="more-35"></span></p>
<p>It’s all round better than the Echo – more power, more grip, more space, more features.  I went for the Conquest, so it has a few nice bits.  I like the fog lamps and the leather steering wheel.  It’s nice being able to play MP3 CDs.  The audio controls on the wheel aren’t that useful, or maybe I’m just not used to them yet.  Being able to talk on the phone through the stereo is great.  I don’t know how I got by without it.</p>
<p>I have mixed feelings about the instruments.  It has classic dials in the traditional position.  The Echo had a big, bright vacuum fluorescent display positioned higher and closer to the centre.  I actually have to look down to see my speed in the Corolla, while in the Echo, it was easily visible.  This makes it easier to speed without noticing.  The fuel consumption meter is irritating, as it lets me know just how inefficient my driving is, but it’s nice to know.  I like the outside thermometer – it’s another one of those nice things that isn’t particularly useful.</p>
<p>What annoys me?  Most of all, the convex driver’s side mirror.  You just can’t judge distances.  Since they’ve removed the ashtray, there’s nowhere for me to put change for parking meters (I’m being silly, I know).  The reversing sensors annoyed me, too, until I found out how to mute the beeper.  Now I quite like them.  I’m still getting used to the six speed transmission (I keep putting it into sixth when I want reverse), but that’s a problem on my part.</p>
<p>So, I’m loving my new car.  I’ll probably get over it soon – maybe when they release the V6 all wheel drive model from Japan here…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2007/08/04/bigger-and-better/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Who’s the Jackass?</title>
		<link>http://www.vastheman.com/blog/2007/07/11/jackass/</link>
		<comments>http://www.vastheman.com/blog/2007/07/11/jackass/#comments</comments>
		<pubDate>Wed, 11 Jul 2007 01:20:40 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Phones]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2007/07/11/jackass/</guid>
		<description><![CDATA[Well, John Gruber is at it again. This time, he’s calling MSNBC’s Bob Sullivan a jackass over this article about the iPhone’s battery performance. It all stems from this fragment in the iPhone specs: A properly maintained iPhone battery is designed to retain up to 80% of its original capacity after 400 full charge and [...]]]></description>
			<content:encoded><![CDATA[<p>Well, <a href="http://daringfireball.net/2007/07/bob_sullivan_jackass">John Gruber is at it again</a>.  This time, he’s calling MSNBC’s Bob Sullivan a jackass over <a href="http://redtape.msnbc.com/2007/07/why-was-iphones.html">this article</a> about the iPhone’s battery performance.  It all stems from this fragment in the iPhone specs:</p>
<blockquote><p>A properly maintained iPhone battery is designed to retain up to 80% of its original capacity after 400 full charge and discharge cycles. You may choose to replace your battery when it no longer holds sufficient charge to meet your needs.</p></blockquote>
<p>Now Sullivan has decided that this means the battery becomes completely unusable after 400 cycles, and written a whole article about it.  So yes, he’s guilty of spreading FUD, and I guess you can call him a jackass for that.</p>
<p>But Gruber has gone to the opposite extreme.  Notice the use of “properly maintained,” “designed to” and “up to” in that quote.  Gruber seems to think that this means the iPhone battery will hold 80% of its original capacity after 400 cycles.  It doesn’t say that at all.  It also doesn’t say how much of the 80% capacity that’s retained might actually be usable.  Remember, too, that because we carry our phones around with us, we just charge them when we can.  None of us are really in a position to “properly maintain” their batteries.  In this case, it would appear that Gruber is spreading fanboyism.</p>
<p>Is the built-in battery really such a big deal?  To me it is.  I like to be able to carry a fully charged spare battery and swap it in.  I wouldn’t be able to do that with an iPhone.  But it’s a well-known fact that iPhone batteries are non-removable, and the performance figures and price don’t really look that much worse than the competition.  So for people all the people who only use one phone battery anyway (I imagine this is the majority case), it probably isn’t an issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2007/07/11/jackass/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migration</title>
		<link>http://www.vastheman.com/blog/2007/06/27/migration/</link>
		<comments>http://www.vastheman.com/blog/2007/06/27/migration/#comments</comments>
		<pubDate>Wed, 27 Jun 2007 04:19:59 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2007/06/27/migration/</guid>
		<description><![CDATA[As you probably didn’t notice, I’ve moved this site from a data center in the US to a data centre in Brisbane. To my surprise, the operation was completely painless. I had everything back up in a couple of minutes. The Internet really is becoming simpler and more accessible to non-technical users. I guess it’s [...]]]></description>
			<content:encoded><![CDATA[<p>As you probably <em>didn’t</em> notice, I’ve moved this site from a data center in the US to a data centre in Brisbane.  To my surprise, the operation was completely painless.  I had everything back up in a couple of minutes.  The Internet really is becoming simpler and more accessible to non-technical users.  I guess it’s a testament to how bad things used to be that I was expecting things to be difficult.</p>
<p>While I’m on the topic, I’ll put in a plug for my hosting provider <a href="http://www.selpaw.net.au/" type="text/html">Selpaw Services</a> in Perth.  Their support is always speedy and first-rate.  Thanks for everything, Luke.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2007/06/27/migration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Herding Macs</title>
		<link>http://www.vastheman.com/blog/2006/11/30/herding_macs/</link>
		<comments>http://www.vastheman.com/blog/2006/11/30/herding_macs/#comments</comments>
		<pubDate>Thu, 30 Nov 2006 02:24:19 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/index.php/2006/11/30/herding_macs/</guid>
		<description><![CDATA[With all the talk that goes on about how and why Macs are or aren’t as secure as any other computers, I thought I’d weigh in. Now I’m not a professional security expert. I’m just a regular software developer, although I do put on the “white hat” regularly and try to find exploits in the [...]]]></description>
			<content:encoded><![CDATA[<p>With all the talk that goes on about how and why Macs are or aren’t as secure as any other computers, I thought I’d weigh in.  Now I’m not a professional security expert.  I’m just a regular software developer, although I do put on the “white hat” regularly and try to find exploits in the products I build.  My theory on the conspicuous absence of OS X malware is that the scale just isn’t big enough.  Sure, there are plenty of Macs in use, but bot herders need massive scales to achieve their goals.</p>
<p><span id="more-26"></span></p>
<p>Suppose I’m a bot herder (I hope it’s obvious that this is purely hypothetical).  I unleash malware that takes over computers and “calls home,” allowing me to send spam for my paying clients.  Since the number of people who read spam is very low, and the number of people who buy products advertised in spam is even lower, I need to send huge volumes of spam to make my services worthwhile for my clients.  And sending lots of spam requires lots of compromised computers.</p>
<p>As software vendors patch vulnerabilities in their software, I have to find new vulnerabilities and write new malware to exploit them.  This requires considerable effort on my part, and takes away from time I could spend doing things I enjoy.  Also, as more users become more security-conscious, there are less machines left open to attack.</p>
<p>Suppose for a moment Windows, Linux and Mac OS X are all equally exploitable, and writing a piece of malware for each takes the same amount of time.  What am I going to do?  Am I going to write three sets of malware to attack the three platforms, or will I pick one to concentrate on?</p>
<p>Of course, the answer depends on market share.  The more even the market share, the more likely I would be to write malware for multiple platforms.  Also, it’s worth thinking about where the machines are primarily used.</p>
<p>Linux is used primarily in server and professional environments.  Machines that are critical for business operations run by tech-savy operators means the machines are more likely to be secured properly and suspicious software will be removed promptly.  So scratch Linux.  I want to target home users with DSL or cable internet.</p>
<p>So I’m left with a choice of targeting Windows or OS X.  What do I do?  I look at market share.  I know these figures are probably wrong, but suppose OS X runs on 5% of my target machines and Windows runs on 90%.  What am I going to target?</p>
<p>The answer should be obvious.  I’ll target Windows.  I could target OS X as well, but then I’d be spending twice as much time writing malware for less than 6% more compromised machines to send spam from.  It just doesn’t make business sense.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2006/11/30/herding_macs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MacBook</title>
		<link>http://www.vastheman.com/blog/2006/09/20/macbook/</link>
		<comments>http://www.vastheman.com/blog/2006/09/20/macbook/#comments</comments>
		<pubDate>Wed, 20 Sep 2006 03:27:06 +0000</pubDate>
		<dc:creator>vastheman</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Technolgy]]></category>

		<guid isPermaLink="false">http://www.vastheman.com/blog/?p=24</guid>
		<description><![CDATA[I’ve gone and got myself a new MacBook. Not a MacBook Pro, just the plain old white MacBook. I’ve been using it for long enough to form some opinions, and overall I’m satisfied with it. But it definitely isn’t the perfect notebook computer. First of all, the bad: Intel GMA950 graphics chip – this gives me [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve gone and got myself a new <a href="http://www.lowendmac.com/macbook/">MacBook</a>.  Not a MacBook Pro, just the plain old white MacBook.  I’ve been using it for long enough to form some opinions, and overall I’m satisfied with it.  But it definitely isn’t the perfect notebook computer.</p>
<p><span id="more-24"></span></p>
<p>First of all, the bad:</p>
<ul>
<li>Intel GMA950 graphics chip – this gives me all kinds of trouble with external monitors.  After using iMovie, it won’t detect external monitors until I restart.  After waking from display sleep, external DVI monitors can lose synchronisation with the video signal and need to be disconnected and reconnected (this messes up window positions).  The performance isn’t bad, though.</li>
<li>Reflections off the glossy screen – when that happens, it ranges from really distracting to just plain unusable.  Matte screens are never that bad.  Sure, it looks great when the light is OK, but it’s all or nothing.</li>
<li>No internal modem – hey, people still like to get faxes, so I want to be able to send them.  Sure, the USB modem is funky, but it&#8217;s one more thing to buy and carry around.</li>
<li>Only FireWire 400 (IEEE1394a) – if you’re only giving us one FireWire port, can’t you make it a fast one?  We can always use adaptors for slower devices.</li>
<li>MDVI video output – this wouldn’t be a problem if they included adaptors, but they expect me to go and spend another $100 or so to be able to plug in to external monitors and TVs.</li>
<li>No 802.11a – like it or not, Steve, 802.11a is far more efficient than 802.11g.  I know the number is the same (54 Mb/s for both), but there’s a lot more to it than that.</li>
<li>Temperature – this thing gets a lot hotter than my wife’s old iBook G3.</li>
<li>Mac OS X 10.4 “Tiger” – Spotlight is useless, Dashboard is a waste of memory, the font rendering is nowhere near as good as Panther and the input menu behaviour is really weird.  How does it order the items in the menu, and why does Kotoeri keep deciding to change the underlying keyboard layout for kana input mode?  I liked old, mbox-based Mail.app with the mailbox drawer, too.</li>
<li>Apple Remote – it’s a useless piece of junk.  Why couldn’t they include some video adaptors or a modem instead?</li>
</ul>
<p>And to balance that, all the really good things:</p>
<ul>
<li>The case – I like not having a latch (like the original iBook), the keyboard is far better than the iBook keyboard, it’s small and light and it looks great.</li>
<li>MagSafe power connector – why didn’t anyone think of this before?  The is one of <strong>the best</strong> things about the new Apple notebooks.</li>
<li>The glossy screen – white on black text in terminal windows is a thing of beauty and arcade games in SDLMAME look so good!  The brightness and contrast are excellent.  Too bad about the reflections, though.</li>
<li>Dual CPU cores – it’s great to have the system loaded down and still have a really responsive UI.  Two physical CPU cores really helps with that.</li>
<li>Battery life – it’s very good if you aren’t doing anything too heavy.  But they’ve jammed a pretty big battery in to get there.</li>
<li>Gigabit Ethernet – it’s about time that was standard on low-end machines.</li>
<li>Video spanning – fixing another silly limitation on the iBooks.  Spanning is far more useful than mirroring most of the time.</li>
<li>The video camera – at first I couldn’t get excited about this, after all I can make video calls on my mobile phone, but 3G coverage isn’t available everywhere, so it’s occasionally useful.</li>
<li>Mac OS X 10.4 “Tiger” – yes, it makes both lists.  Xcode just keeps getting better, Rosetta is brilliant, Tiger is faster than Panther overall, you don’t notice that this is the first release on completely different hardware, Jabber in iChat let me get rid of another IM program and there are some very nice additions like the ability to re-map modifier keys without hacks.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.vastheman.com/blog/2006/09/20/macbook/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

