<?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"
	>

<channel>
	<title>moomalade</title>
	<atom:link href="http://moomalade.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://moomalade.com/blog</link>
	<description>Tim Wharton's blog</description>
	<pubDate>Wed, 06 Aug 2008 11:16:20 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>The Dark Knight</title>
		<link>http://moomalade.com/blog/archives/34</link>
		<comments>http://moomalade.com/blog/archives/34#comments</comments>
		<pubDate>Wed, 06 Aug 2008 11:16:20 +0000</pubDate>
		<dc:creator>TimJ</dc:creator>
		
		<category><![CDATA[Movies]]></category>

		<guid isPermaLink="false">http://moomalade.com/blog/?p=34</guid>
		<description><![CDATA[Dark Knight is great. The best comic or graphic novel film I&#8217;ve seen. The fantastic nature of the characters and story line are evolved convincingly but with a pacing that makes it gripping. The contrasts between the characters and how the story effects them really pulls the whole piece together for me and makes it [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.imdb.com/title/tt0468569/">Dark Knight</a> is great. The best comic or graphic novel film I&#8217;ve seen. The fantastic nature of the characters and story line are evolved convincingly but with a pacing that makes it gripping. The contrasts between the characters and how the story effects them really pulls the whole piece together for me and makes it more than a linear action story line. Direction and cinematography are really solid, and the special effects guys flip an 18 wheeler which is one of the coolest things I&#8217;ve ever seen.</p>
<p>Great performances by everyone involved. I especially liked <a href="http://www.imdb.com/name/nm0350454/">Maggie Gyllenhaal&#8217;s</a> performance of <a href="http://www.imdb.com/character/ch0000182/">Rachel Dawes</a>. She gave more rounded emotion to character than <a href="http://www.imdb.com/name/nm0005017/">Katie Holmes</a> did. <a href="http://www.imdb.com/name/nm0000288/">Bale</a>, <a href="http://www.imdb.com/name/nm0000323/">Caine</a> and <a href="http://www.imdb.com/name/nm0001173/">Aaron Eckhart</a> develop their characters nicely.<a href="http://www.imdb.com/name/nm0005132/">Heath Ledger</a> is actually very bloody good indeed and <a href="http://www.imdb.com/name/nm0000198/">Gary Oldman</a> as usual puts down a great performance.</p>
<p>I&#8217;m not suprised it&#8217;s grossing so much, $602 million world wide so far, though I think that&#8217;s probably taken the studio by suprise.</p>
<p>In the UK the film is rated <a href="http://www.bbfc.co.uk/classification/c_12.php">12A</a>. No cuts were made to the film and the extended classification is <a href="http://www.bbfc.co.uk/website/Classified.nsf/0/6ddac744982711908025747300542d19">here</a>. I&#8217;d probably see it yourself before taking anyone less than 15 so you understand what the classification is referring to.</p>
]]></content:encoded>
			<wfw:commentRss>http://moomalade.com/blog/archives/34/feed</wfw:commentRss>
		</item>
		<item>
		<title>All the flavour of meat!</title>
		<link>http://moomalade.com/blog/archives/26</link>
		<comments>http://moomalade.com/blog/archives/26#comments</comments>
		<pubDate>Wed, 06 Aug 2008 10:22:00 +0000</pubDate>
		<dc:creator>TimJ</dc:creator>
		
		<category><![CDATA[Food]]></category>

		<guid isPermaLink="false">http://moomalade.com/blog/?p=26</guid>
		<description><![CDATA[This made both me and Rebecca laugh. The canned vegetarian spaghetti bolognaise from Sainsbiry&#8217;s proclaims to have &#8220;All the Flavour of Meat&#8221;.
Well, which meat? Cow, Pig, Squirrel, Gopher? All of the above? It&#8217;s as if they thought that the most tempting thing for a vegetarian would be the flavour of meat. Any meat. They won&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>This made both me and Rebecca laugh. The canned vegetarian spaghetti bolognaise from Sainsbiry&#8217;s proclaims to have &#8220;All the Flavour of Meat&#8221;.</p>
<p>Well, which meat? Cow, Pig, Squirrel, Gopher? All of the above? It&#8217;s as if they thought that the most tempting thing for a vegetarian would be the flavour of meat. Any meat. They won&#8217;t know the difference because they&#8217;re vegetarian!</p>
<div id="attachment_27" class="wp-caption alignnone" style="width: 260px"><a href="http://moomalade.com/blog/wp-content/uploads/2008/08/all-the-flavour-of-meat.jpg"><img src="http://moomalade.com/blog/wp-content/uploads/2008/08/all-the-flavour-of-meat.jpg" alt="All The Flavour Of Meat!" title="all-the-flavour-of-meat" width="250" height="211" class="size-medium wp-image-27" /></a><p class="wp-caption-text">All The Flavour Of Meat!</p></div>
<p>Update: Mildly interesting fact. It&#8217;s spelled bolognese in Italian, well <em>ragù alla bolognese</em>. And <em>sauce bolognaise</em> in French. I&#8217;ve always used the French spelling, no idea why. Google totally disagrees with me and only accepts bolognese. Damn them.</p>
]]></content:encoded>
			<wfw:commentRss>http://moomalade.com/blog/archives/26/feed</wfw:commentRss>
		</item>
		<item>
		<title>The incalculable price of food</title>
		<link>http://moomalade.com/blog/archives/22</link>
		<comments>http://moomalade.com/blog/archives/22#comments</comments>
		<pubDate>Wed, 06 Aug 2008 10:15:14 +0000</pubDate>
		<dc:creator>TimJ</dc:creator>
		
		<category><![CDATA[Food]]></category>

		<guid isPermaLink="false">http://moomalade.com/blog/?p=22</guid>
		<description><![CDATA[It&#8217;s true that food has risen in price during the credit crunch, but I don&#8217;t know how Sainsbury&#8217;s managed to introduce a NaN into their per Kg cost for fish. Made me laugh. 
]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s true that food has risen in price during the credit crunch, but I don&#8217;t know how Sainsbury&#8217;s managed to introduce a NaN into their per Kg cost for fish. Made me laugh. </p>
<div id="attachment_24" class="wp-caption aligncenter" style="width: 210px"><a href="http://moomalade.com/blog/wp-content/uploads/2008/08/nan-food.jpg"><img src="http://moomalade.com/blog/wp-content/uploads/2008/08/nan-food.jpg" alt="NaN per kg" title="nan-food" width="200" height="228" class="size-full wp-image-24" /></a><p class="wp-caption-text">NaN per kg</p></div>
]]></content:encoded>
			<wfw:commentRss>http://moomalade.com/blog/archives/22/feed</wfw:commentRss>
		</item>
		<item>
		<title>JotSpot</title>
		<link>http://moomalade.com/blog/archives/20</link>
		<comments>http://moomalade.com/blog/archives/20#comments</comments>
		<pubDate>Tue, 04 Mar 2008 20:30:25 +0000</pubDate>
		<dc:creator>TimJ</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://moomalade.com/blog/archives/20</guid>
		<description><![CDATA[JotSpot is finally back in the form of Google Sites. Back in the day, we were pretty excited about JotSpot but the result of the Google integration has left it looking like a glorified web page builder that&#8217;s trying to be like Share Point. The site themes looks like early 90&#8217;s web design, which doesn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>JotSpot is finally back in the form of <a href="http://sites.google.com/">Google Sites</a>. Back in the day, we were pretty excited about JotSpot but the result of the Google integration has left it looking like a glorified web page builder that&#8217;s trying to be like Share Point. The site themes looks like early 90&#8217;s web design, which doesn&#8217;t help matters.</p>
<p>Looking at it from a team collaboration perspective using Google Apps For Your Domain:</p>
<ul>
<li>Application API is no longer present.</li>
<li>Pages no longer have their own email address.</li>
<li>Pretty sure there are less applications / services than there were originally.</li>
<li>The <em>gadgets</em> available are a bit pointless.</li>
<li>The Google Docs integration is weak.</li>
</ul>
<p>I hate having to dig through Google Docs to get a URL, copy it, and paste it into the site properties when they could just as easily pop up a browser for all the domain shared documents by user.</p>
<p>I&#8217;m sure it will get better, but right now I&#8217;m a bit dissapointed. Can Google actually innovate?<br />
I&#8217;m looking towards Open Source, Microsoft, and smaller ISV&#8217;s for the more interesting features and and ideas.<br />
<a href="http://www.microsoft.com/sharepoint/default.mspx">Share Point</a>, <a href="http://trac.edgewall.org/">Trac</a>, <a href="http://www.centraldesktop.com/">Central Desktop</a>, <a href="http://www.basecamphq.com/">Base Camp</a>, <a href="http://www.fogcreek.com/FogBugz/">FogBugz</a> are all going in more interesting directions than Google Sites.</p>
]]></content:encoded>
			<wfw:commentRss>http://moomalade.com/blog/archives/20/feed</wfw:commentRss>
		</item>
		<item>
		<title>Windows Home Server</title>
		<link>http://moomalade.com/blog/archives/19</link>
		<comments>http://moomalade.com/blog/archives/19#comments</comments>
		<pubDate>Mon, 21 Jan 2008 23:29:00 +0000</pubDate>
		<dc:creator>TimJ</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://moomalade.com/blog/archives/19</guid>
		<description><![CDATA[At home one of my desktop PC&#8217;s developed a bit of a cough. I say cough but I mean a voilent hard disk grating noise. While I could have fixed the problem with two shiny new hard drives, I thought it would be much more fun to set up a home server and backup the [...]]]></description>
			<content:encoded><![CDATA[<p>At home one of my desktop PC&#8217;s developed a bit of a cough. I say cough but I mean a voilent hard disk grating noise. While I could have fixed the problem with two shiny new hard drives, I thought it would be much more fun to set up a home server and backup the data first.</p>
<p>So using whatever logic you see fit, assume I&#8217;ve justified playing with the new Microsoft Windows Home Server product.</p>
<p>My home network set up is:</p>
<ul>
<li>DI-604 hub, DHCP, and router to my cable connection.</li>
<li>DWL-7100AP wireless access point.</li>
<li>Two desktops running Vista Ultimate.</li>
<li>One laptop.</li>
<li>One Xbox 360.</li>
</ul>
<p>I&#8217;ll also be adding a media center to the mix as soon as I can decide what it should actually do, but that&#8217;s another story entirely. Suffice to say the server gives me a chance to try out some quiet equipment without it being a disaster if it still sounds like the shuttle taking off.<br />
<span id="more-19"></span><br />
<strong>Build</strong></p>
<p>I went for:<br />
(hardware from <a href="http://www.scan.co.uk">Scan</a>, software from <a href="http://www.ebuyer.com/">eBuyer</a>, prices from January 9th 2008, excluding VAT).</p>
<ul>
<li>2 x 750 GB Western Digital Caviar GP (WD7500AACS) = Â£207.38 (Â£103.69 each) (<a href="http://www.silentpcreview.com/article786-page1.html">review</a>)</li>
<li>AMD AM2 Athlon 64 BE-2400 (45W, Brisbane Core) = Â£54.28</li>
<li>Asus M2A-VM HDMI (mATX) = Â£36.15 (<a href="http://www.silentpcreview.com/article778-page1.html">review</a>)</li>
<li>300W Silverstone Fanless PSU = Â£64.99</li>
<li>2GB Corsair TwinX XMS2 DDR2 DHX = Â£46.79</li>
<li>CoolerMaster Centurion 5 Silver Case = Â£29.79</li>
<li>ASUS Silent Square EVO Quiet CPU Cooler = Â£27.69</li>
<li>Microsoft Windows Home Server OEM, 10 CALs = Â£83.20</li>
<li><em>Total: Â£550.27</em></li>
</ul>
<p>I&#8217;ll probably add another 2GB of memory to that depending how VM&#8217;ing goes.<br />
For the most part I picked quiet, low power components and I think this compares well to the HP Media Smart Home Server on <a href="www.amazon.co.uk">Amazon</a> at Â£449.99 inc. VAT. which didn&#8217;t have the room for toying with that I&#8217;d like.</p>
<p>The build was fairly painless even though the Centurion case isn&#8217;t the best. The ASUS CPU cooler very quiet but <strong>huge</strong>. It wouldn&#8217;t fit in anything less that a full width ATX chassis and I had to remove the heat funnel from the Centurion case. It only just fit over the heat exchangers on the Corair memory. I fit the memory after the cooler so there was a bit of bending and scraping, but in the end they both fit touching snuggly.</p>
<p>The loudest components in the system are the two Centurion chassis fans, even then it&#8217;s quieter than both my Sky+ box and Xbox 360. The Asus FanQ technology never seems to turn the fans off, so I got some temperature readings of with them manually unplugged.</p>
<p>Idle: (With / Without Fans)</p>
<ul>
<li>CPU : 30 Â°C / 39 Â°C</li>
<li>MB : 35 Â°C / 43 Â°C </li>
<li>PSU : 25 Â°C / 25 Â°C</li>
<li>HD0 : 28 Â°C / 36 Â°C</li>
<li>HD1 : 29 Â°C / 35 Â°C</li>
</ul>
<p>Burn-In Max Temps. with SiSoftware Sandra: (With / Without Fans)</p>
<ul>
<li>CPU : 33 Â°C / 53Â°C</li>
<li>MB : 30 Â°C / 45Â°C</li>
<li>PSU : 25 Â°C / 25Â°C</li>
<li>HD0 : 23 Â°C / 41Â°C</li>
<li>HD1 : 24 Â°C / 39Â°C</li>
</ul>
<p>To properly vent the heat without fans you&#8217;d need to look at a better passive cooling system for the MB and CPU like heat pipes. That would would give you a very quiet fanless system (the ASUS CPU cooler has a low RPM fan inside the vents). If you could live with reduced lifespan and performance you could probably get away without any fans as the operating temperatures for the CPU (ADH2400DOBOX) is 55 Â°C to 78 Â°C and for HD&#8217;s (WD7500AACS) is -40 Â°C to 55 Â°C.</p>
<p><strong>Install</strong></p>
<p>The WHS install is very straight forward. You don&#8217;t get any choice over partition or drive configuration, WHS automatically wipes and configures all connected drives in the system after warning you. Other than that, you get to name the server and set the password then it installs Windows Server and the WHS components unattended.<br />
I&#8217;d read some discouraging drivers issues regarding AHCI so I left the SATA controller in IDE mode during install, opting to let WHS manage the physical drives and planning to try out AHCI or RAID later to take advantage of hot swap and NCQ.</p>
<p>Before installing WHS I gave XP a whirl to check out the graphics performance.<br />
The integrated ATI X1250 (built into the M690G northbridge) performs well enough for desktops and accelerated video decoding, but I wouldn&#8217;t recommend playing any games on it. The World of Warcraft login screen ran very slowly. It&#8217;s Vista Aero certified so for a media center application it would be more than capable, with dual head on VGA and HDMI or DVI. The integrated audio outputs through the HDMI lead as well, making it very neat for connecting to a HDTV.<br />
The only odd thing I encountered was that after installing the ATI integrated graphics driver installation the BIOS and POST screens didn&#8217;t output on DVI/HDMI, just VGA. I&#8217;m guessing this is because the drivers enabled dual head, treating DVI/HDMI and VGA as separate ports.</p>
<p>The only stability issue I have is that on first boot the system hangs on the WHS login screen. Hit reset and all it well. As I&#8217;ve only had to reboot a couple of time I&#8217;ve not checked the event log or tried to troubleshoot this yet so it could be a driver or WHS issue. I had no problems with XP.</p>
<p><strong>WHS</strong></p>
<p>Installing the client connector software, creating user accounts and syncing passwords is a doddle. In a few hours the client machines were happily backed up on the WHS machine. For dynamic DNS I stuck with the DI-604&#8217;s built in support for <a href="http://www.dyndns.com">dyndns.com</a> and my existing account, so I don&#8217;t know how smooth the Microsoft provided domain is to set up.</p>
<p>WHS comes with Windows Firewall installed so if you change the default IIS http and https ports, or set up any additional services (apache, svn etc.) you need to remember to open up the ports up.</p>
<p>The <a href="http://support.microsoft.com/kb/946676/en-us">KB946676</a> issue is minor, but I&#8217;ve held off using Sync Toy or storing any One Note files on the system until it is resolved.</p>
<p>Password syncing between client machines and the server is basically manual, the connector software just informs you when they&#8217;re out of sync and allows you to update the server password. It does enforce a minimum password length and complexity for any account with remote access.</p>
<p>What&#8217;s really interesting is that you can promote your WHS to a Primary Domain Controller by running DCPROMO. WHS is based on Small Business Server so the same EULA and built-in PDC restrictions as that flavour of Windows Server 2003 apply (basically the server can only ever be a PDC, can&#8217;t be joined as a BDC but other non-SBS servers can be BDC&#8217;s). Doing this is likely unsupported, and requires your clients are running Vista Business/Ultimate or XP professional, but it does get you a home Windows Server based domain which has a few advantages:</p>
<ul>
<li>True single sign on for your clients, no password syncing.</li>
<li>An LDAP server to authenticate against for other services (Apache mod_ldap etc.).</li>
<li>Transparent Explorer authentication in IIS or Apache.</li>
<li>Global security policies for password complexity and life span.</li>
<li>Group based security and central managment.</li>
</ul>
<p>And of course, the headache (or fun) of managing a Windows Server 2003 domain installation.<br />
I&#8217;ve not done this yet, but plan to give it a whirl in the next few weeks. I assume there are a few things specific to the WHS software that you need to make sure you don&#8217;t screw up, but that&#8217;s just like administering any Windows server.</p>
<p>If it also installs a DNS server as part of the dcpromo, that would be ideal, as then you can then assign multiple IP&#8217;s to your server and have them resolve correctly to different services, such as IIS or Apache instances rather than splitting your services into more and more obscure port numbers.</p>
]]></content:encoded>
			<wfw:commentRss>http://moomalade.com/blog/archives/19/feed</wfw:commentRss>
		</item>
		<item>
		<title>Using Gmail IMAP to Import Mail</title>
		<link>http://moomalade.com/blog/archives/18</link>
		<comments>http://moomalade.com/blog/archives/18#comments</comments>
		<pubDate>Sat, 10 Nov 2007 01:35:20 +0000</pubDate>
		<dc:creator>TimJ</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://moomalade.com/blog/archives/18</guid>
		<description><![CDATA[Since my last poke about with Thunderbird I&#8217;ve been using Outlook Web Access and Gmail from home and trusty old Outlook 2007 at work.
But wait! It now looks like I can have my cake and eat it! IMAP support (as announced back in October) has been enabled on my Gmail account. Hurray!
I dusted off Thunderbird [...]]]></description>
			<content:encoded><![CDATA[<p>Since my last <a href="blog/archives/8">poke about with Thunderbird</a> I&#8217;ve been using <a href="http://en.wikipedia.org/wiki/Outlook_Web_Access">Outlook Web Access</a> and <a href="http://mail.google.com/">Gmail</a> from home and trusty old <a href="http://en.wikipedia.org/wiki/Microsoft_Outlook">Outlook 2007</a> at work.</p>
<p>But wait! It now looks like I can have my cake and eat it! <a href="http://en.wikipedia.org/wiki/IMAP">IMAP</a> support (as <a href="http://gmailblog.blogspot.com/2007/10/sync-your-inbox-across-devices-with.html">announced</a> back in October) has been enabled on my Gmail account. Hurray!</p>
<p>I dusted off Thunderbird and set about adding IMAP accounts corresponding to my various Gmail accounts. The account set up process went very smoothly and Thunderbird is easily configured to have Drafts, Sent Mail and Junk all appear in the appropriate places. You only need to configure the IMAP Drafts to appear in [Gmail]/Drafts and that&#8217;s it. Sent Mail is handled automatically if you use the Gmail SMTP server for outgoing mail on the account. It&#8217;s all in the <a href="http://mail.google.com/support/bin/answer.py?answer=78892&#038;topic=12761">Recommended IMAP client settings</a>. See the November 8th Update in <a href="http://lifehacker.com/software/geek-to-live/turn-thunderbird-into-the-ultimate-gmail-imap-client-314574.php">this Life Hacker article</a> for a reasons why you shouldn&#8217;t re-configure the Junk IMAP folder to [Gmail]/Junk.</p>
<p>So far so good. All that remains is to copy the few hundred thousand messages to their new home. Along with my normal folder the idea is that some mailing lists are to be copied from newsgroup archives to ensure there are no missing or bounced posts in my own archive. The first 1600 messages or so were very slowly copied and then I received a received an IMAP connection timeout error, after which the the copy operation abandoned. Try again, same problem. Oh dear. This may take longer that I have patience.<br />
<span id="more-18"></span><br />
Not be be deterred, I tried the spiffy new <a href="http://en.wikipedia.org/wiki/Windows_Mail">Windows Mail</a> that shipped with Windows Vista. It&#8217;s an all round very good application, slick, easy to use and responsive. The problem is that it totally refuses to download all messages from a newsgroup without tricking it by asking for the &#8216;next 300 headers&#8217;, forcing a synchronize waiting for it to complete an incorrect download count (downloading message 1501 of 299), and then repeating until all the messages have actually been downloaded. When they are downloaded, it works like a charm, but that could get tiresome for transferring an archive of 40,000 messages.</p>
<p>Back to Thunderbird then, see if we can increase the IMAP server timeout. Nothing obvious in the account serrings. However in the Tools -> Options -> Advanced -> General tab there&#8217;s a button called &#8216;Config Editor&#8217;. In the Config Editor there are settings called &#8216;mail.server.serverN.timeout&#8217;, where &#8216;N&#8217; is the account index, presumably numbered consecutively, with the value presumably in seconds. I whacked all the serverN.timeout values up to 300 seconds (5 minutes) from 29 seconds and lo&#8217; and behold, it all starts working without any timeout issues. Still painfully slow, but working none the less.</p>
<p>This is really just a long winded migration procedure as I&#8217;m only likely to be using IMAP in Outlook at work so I can see my Gmail next to my Exchange account, and at home in Thunderbird when I want to see multiple accounts, as to be totally honest I&#8217;m happy with Gmail and Outlook Web Access the rest of the time.</p>
<p>Now all I need to do it convince Thunderbird to check all IMAP folders for new mail automatically and display the unread count next to them without me having to click the folder first, just like Windows Mail does.</p>
<p><strong>Update 10th November</strong><br />
As explained <a href="http://www.mozilla.org/support/thunderbird/tips">here</a> you can have Thunderbird check all IMAP folders for new mail automatically using the Config Editor by changing the mail.check_all_imap_folders_for_new setting to true. Also, I&#8217;m not sure if the server timeout setting is being honored because it keeps getting reset to 29. It could be the correct operation is completely unrelated to my meddling.</p>
<p><strong>Update 11th November</strong><br />
Now IMAP copies just stop after a few thousand messages without error. The <a href="http://mailredirect.mozdev.org/">Mail Redirect</a> Thunderbird plugin looked promising but it doesn&#8217;t handle large numbers of messages well &#8212; the script stops responding. Excellent for small numbers of message though, going to keep that one in my toolkit. Instead I&#8217;m trying <a href="http://blog.codefront.net/2004/06/23/gexodus-02-some-new-features-for-gmail-mbox-import-tool/">gExodus 0.2</a> again. It seems to work perfectly well with Google Apps for Domains, you just enter you full email address and ignore &#8216;@gmail.com&#8217; it automatically appends, the Google SMTP server works it all out just fine.<br />
There&#8217;s also a tool called <a href="http://www.broobles.com/imapsize/">IMAPSize</a> that has mbox2eml in the tools menu. This will convert mbox format mail (after being &#8216;compacted&#8217; in Thunderbird) to a format you can just drag into Outlook Express or Windows Mail ready for IMAP copy to Gmail &#8212; I&#8217;ll see how it goes with gExodus first, it seems much simpler to just read an mbox file and send it to an SMTP server, should have done that to begin with.</p>
<p><strong>Update 11th November Again</strong><br />
gExodus just started failing after a few thousand messages. Converting the mesages to EML with <a href="http://www.broobles.com/imapsize/">IMAPSize</a> and uploading with IMAP via Outlook Express had much more success. Completed 20,000 messages then said the server refused the message. I suspect that the Google server starts refusing messages for whatever reason (load perhaps). With Outlook Express it&#8217;s easy to pick up where you left off with the &#8216;move&#8217; command. Messages that have completed correctly are deleted from the source folder, even on error. A custom mbox to IMAP Python script that retries and waits for periods of time when failures occur might also do the trick.</p>
<p><strong>Update</strong><br />
I eventually gave up with this, deciding I didn&#8217;t actually care enough.</p>
]]></content:encoded>
			<wfw:commentRss>http://moomalade.com/blog/archives/18/feed</wfw:commentRss>
		</item>
		<item>
		<title>Domain specific langauges</title>
		<link>http://moomalade.com/blog/archives/14</link>
		<comments>http://moomalade.com/blog/archives/14#comments</comments>
		<pubDate>Sun, 07 Oct 2007 22:49:14 +0000</pubDate>
		<dc:creator>TimJ</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://moomalade.com/blog/archives/14</guid>
		<description><![CDATA[Domain specific languages often serve the purpose they were designed for better than a general scripting language.
At work we use a tool call &#8216;m&#8217; every day. In fact it&#8217;s a vital part of our infrastructure. Generally one of the first milestones of a new platform is getting &#8216;m&#8217; generating files for the tool chain. The [...]]]></description>
			<content:encoded><![CDATA[<p>Domain specific languages often serve the purpose they were designed for better than a general scripting language.</p>
<p>At work we use a tool call &#8216;m&#8217; every day. In fact it&#8217;s a vital part of our infrastructure. Generally one of the first milestones of a new platform is getting &#8216;m&#8217; generating files for the tool chain. The ins and outs of the whole thing arenâ€™t really that important to illustrate my point, and the bulk of the tool resides in the back-end generation and processing rather than the language parsing &#8212; which is just short of 300 lines of code.<br />
<span id="more-14"></span><br />
The tool itself is a make tool in the same vein as <a href="http://www.cmake.org/">CMake</a>, <a href="http://premake.sourceforge.net/">PreMake</a> and <a href="http://www.bakefile.org/">BakeFile</a> but probably predating them all by a fair old margin. It started life many years ago as a way to configure Visual Studio projects automatically and hierarchically. The idea was that each directory contained a configuration file in which you could specify options to set in the project file. Configuration files inherited settings from the parent directory configuration file, thus allowing you to turn compiler flags on and off from a root configuration file without having to edit every single project file in the code base.<br />
The syntax evolved to make it easy to specify different settings for different configurations, and eventually different platforms. It became convenient to specify source files in the configuration files as well. Now the tool outputs native build files for around seven platforms and it will also by default kick off the using the native tools after generating the files.</p>
<p>The syntax is very simple. It contains just a few constructs: items, lists, compounds and variables. </p>
<p><code><br />
# list items can be separated with white space, or semi-colons<br />
list: entry1 entry2 entry3<br />
list: entry1; entry2; entry3</p>
<p># items are just entries in any compound<br />
item1<br />
item2<br />
"item3"</p>
<p># variables are themselves lists<br />
variable1 = a;<br />
variable2 += b;<br />
variable2 -= b;</p>
<p># compounds have a type and id<br />
Type(Id)<br />
{<br />
}<br />
</code></p>
<p>These elements are used to describe a build. Compounds actually act like permutations so we can completely describe a build for all platforms and configurations without branching for different combinations and parsing multiple times.</p>
<p><code><br />
Platform(Win32)<br />
{<br />
&nbsp;&nbsp;Configuration(Release)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;variable = "I'm only for win32 release"<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;variable = "I'm for any win32 build"<br />
}</p>
<p>Configuration(Release)<br />
{<br />
&nbsp;&nbsp;variable = "I'm for any release build on any platform"<br />
}</p>
<p>Platform(Win32,Xenon)<br />
{<br />
&nbsp;&nbsp;variable = "I'm for Win32 and Xenon builds"<br />
}<br />
</code></p>
<p>Mixed into this is some macro manipulation so you can access the environment or variables in strings, and some nice path logic that makes specifying paths more intuitive. The most interesting part of the latter being that every variable and item remembers the file where it was first defined or last modified so paths can always be specified relatively.</p>
<p><code><br />
Preprocessor += "#(ENVIRONMENT_VARIABLE)"<br />
Preprocessor += "%(another_variable)"<br />
Preprocessor += "%(another_variable:a_modifier)"<br />
Source("MyStuff")<br />
{<br />
&nbsp;&nbsp;"../common_source/afile.cpp"<br />
}<br />
</code></p>
<p>Anyhow, it&#8217;s not perfect and has some crufty aspects which make me unhappy such as using &#8216;,&#8217; instead of &#8216;.&#8217; for joining compounds or calling what are effectively procedures &#8216;pseudo_projects&#8217; and so on &#8212; but it&#8217;s intuitive, simple and new people pick it up real quick.</p>
<p>Onto my point.</p>
<p>Every now and again I have a go at redesigning the front end and replacing it with something like Python, JavaScript, Lua or even XML-with-juicy-bits. The idea being that we will get more mileage out of using a standard syntax as people will pick it up more easily and will be able to do much more with it than our mini-language. Also I secretly want to describe release processes and packaging operations which can&#8217;t be done well in the current syntax, so using a general syntax makes should allow this &#8212; in a vague hand waving type way. </p>
<p>The results of these attempts are perfectly serviceable in that they produce the same results but they&#8217;re never as good as what we already have. You always end up typing a <strong>lot</strong> more to do anything, and it never looks or feels as fluid. You can&#8217;t describe a build as well or as concisely and it feels like you&#8217;re jumping through hoops to achieve what was previously really simple. The idea is that you shouldn&#8217;t have to think about describing your build. It&#8217;s called &#8216;m&#8217; so you only have one letter to type at the command prompt (if you use one). It&#8217;s unobtrusive, you tell it what you need and off you go &#8212; getting on with the more important task of shipping your product on a myriad of platforms.</p>
<p>My point is that when you&#8217;ve got Lua/XML/Python/C#/etc. every problem has a tendency to look like a Lua/XML/Python/C#/etc. hole that of course Lua/XML/Python/C#/etc. can neatly fill. When you only have a hammer, everything looks like a nail.</p>
]]></content:encoded>
			<wfw:commentRss>http://moomalade.com/blog/archives/14/feed</wfw:commentRss>
		</item>
		<item>
		<title>Transformers</title>
		<link>http://moomalade.com/blog/archives/16</link>
		<comments>http://moomalade.com/blog/archives/16#comments</comments>
		<pubDate>Sun, 22 Jul 2007 00:06:39 +0000</pubDate>
		<dc:creator>TimJ</dc:creator>
		
		<category><![CDATA[Movies]]></category>

		<guid isPermaLink="false">http://moomalade.com/blog/archives/16</guid>
		<description><![CDATA[Transformers was a bit of a disappointment.
On the one hand I really enjoyed the battles between the Autobots and Decepticons and on the other hand I was annoyed by much of the rest of the film.
Unlike the original movie much of the plot revolved around humans and I was left wondering why they weren&#8217;t brave [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.transformersmovie.com/">Transformers</a> was a bit of a disappointment.<br />
On the one hand I really enjoyed the battles between the <a href="http://en.wikipedia.org/wiki/Autobots">Autobots</a> and <a href="http://en.wikipedia.org/wiki/Decepticons">Decepticons</a> and on the other hand I was annoyed by much of the rest of the film.<br />
Unlike the <a href="http://en.wikipedia.org/wiki/Transformers:_The_Movie">original movie</a> much of the plot revolved around humans and I was left wondering why they weren&#8217;t brave enough to make a movie purely about robots from outer space. If you want to make a movie about a boy and his car, that&#8217;s fine, go and make one. I just don&#8217;t understand why anyone would want to endure the flimsy human plot threads when there are extremely cool giant robots, from outer space, walking around, talking, fighting and transforming into vehicles.</p>
<p><a href="http://www.waroftheworlds.com/">War of the Worlds</a> was just the same. Much of the action followed a father looking after his children during an alien invasion, which pretty much happened in the background.</p>
<p>It&#8217;s such a shame because Spielberg hit the perfect balance in the first <a href="http://">Jurrasic Park </a>. With any luck they&#8217;ll commission another Transformers movie and both Michael Bay and Steven Spielberg will be busy making the movies they want to make in a genre where they belong.</p>
<p>I did <em>love</em> the battles though.</p>
]]></content:encoded>
			<wfw:commentRss>http://moomalade.com/blog/archives/16/feed</wfw:commentRss>
		</item>
		<item>
		<title>Windows PowerShell</title>
		<link>http://moomalade.com/blog/archives/15</link>
		<comments>http://moomalade.com/blog/archives/15#comments</comments>
		<pubDate>Sun, 08 Jul 2007 15:40:32 +0000</pubDate>
		<dc:creator>TimJ</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://moomalade.com/blog/archives/15</guid>
		<description><![CDATA[I&#8217;ve been following the Windows PowerShell and the PowerShell team blog on and off for some time. It was released not too long after Vista but I never really go round to checking it out properly until this afternoon. I have been looking for some inspiration on how we can bring together some of our [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been following the <a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx">Windows PowerShell</a> and the <a href="http://blogs.msdn.com/PowerShell/">PowerShell team blog</a> on and off for some time. It was released not too long after Vista but I never really go round to checking it out properly until this afternoon. I have been looking for some inspiration on how we can bring together some of our disparate asset processing tools under one roof. I want to make them more flexible and therefore easier to move from project to project.</p>
<p>Windows PowerShell is a domain specific tools designed to make administration faster, easier and more flexible. Windows administration has always taken a different approach to unix administration, preferring UI over the command line. The PowerShell looks like it&#8217;s trying to address that. </p>
<p>The getting started guide (included in the install package) is very good. It&#8217;s easy to dive straight in as there is a ton of user feedback. You can get help using the unix-like &#8216;man&#8217; or &#8216;help&#8217; commands. Common commands like &#8216;cd&#8217;, &#8216;ls&#8217;, and &#8216;dir&#8217; are automatically aliased to &#8217;set-location&#8217; and &#8216;get-childitem&#8217;. The biggest give away that you&#8217;re not in cmd32.exe land anymore is that either unix-style / or dos-style \ path separators can be used and scripts must be executed unix-style with a qualified path (./myscript).</p>
<p>The whole thing is based on .NET. All command, and data piping, is done through .NET objects. Pretty funky stuff and well worth a look.</p>
]]></content:encoded>
			<wfw:commentRss>http://moomalade.com/blog/archives/15/feed</wfw:commentRss>
		</item>
		<item>
		<title>Lua</title>
		<link>http://moomalade.com/blog/archives/13</link>
		<comments>http://moomalade.com/blog/archives/13#comments</comments>
		<pubDate>Mon, 18 Jun 2007 03:13:14 +0000</pubDate>
		<dc:creator>TimJ</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://moomalade.com/blog/archives/13</guid>
		<description><![CDATA[I really like the Lua programming language. It&#8217;s small, easy to embed and easy to learn. I&#8217;ve used Lua successfully in several projects with varying levels of integration from simple extensions to full object hierarchy extensions, RPC support, data replication and all logic for client, server and UIs.
Lua makes some interesting design decisions which I [...]]]></description>
			<content:encoded><![CDATA[<p>I really like the <a href="http://www.lua.org/">Lua</a> programming language. It&#8217;s small, easy to embed and easy to learn. I&#8217;ve used Lua successfully in several projects with varying levels of integration from simple extensions to full object hierarchy extensions, RPC support, data replication and all logic for client, server and UIs.</p>
<p>Lua makes some interesting design decisions which I don&#8217;t necessarily think lend it to longer term software development.<br />
You can work around some of these decisions because Lua is so flexible, but I can&#8217;t help feeling that at some point the ease of integration and simple elegance of Lua are outweighed by the need for a solution more suitable to the domains you might be working in.</p>
<ul>
<li>The default scope is the global scope.</li>
<p>Any variable declared will automatically live in the global scope. If you don&#8217;t like this you can use a few work arounds. The one I came up with was to make each script have it&#8217;s own function environment and alter the scope search order to the file scope, then the global scope. All variable assignments therefore default to the file scope and you can use _G to create a global should you wish.</p>
<li>You have to choose the right calling syntax, obj:func() or obj.func() depending on the implementation of the function you&#8217;re calling.</li>
<p>I worked around this using an up value to store the self table and a function environment to change scope rules. Scoping goes to the self scope, the file scope and then the global scope. This is done automatically with a C side closure wrapper.<br />
<span id="more-13"></span>
<li>You can easily read variables that haven&#8217;t been previously assigned.</li>
<p>You can catch this with a metatable but it&#8217;s not a good idea. If you try and catch them you&#8217;ll stop common constructs like linked lists and checking of an object or variable has been created or destroyed. This is dangerous because typo&#8217;s can go unnoticed.</p>
<li>There is only one number type.</li>
<p>You need to choose either a real number or integer number type when compiling Lua. You can&#8217;t have both, Lua has no mechanism to recognize or represent the difference between two number types. You can work around this with userdata types but it&#8217;s not very elegant or fast.</p>
<li>You can&#8217;t override an object&#8217;s equality with nil.</li>
<p>If an object has been destroyed you can&#8217;t make it equal to nil in Lua because the userdata representing the object will still exist. A metamethod cannot be used to override a comparison between a userdata and nil. This effects you if you want to integrate your own object lifetime management. Using a wrapper function such as IsNil() is the only solution I&#8217;ve come up with thus far without changing the VM.
</ul>
<p>So what other options are available?<br />
While <a href="http://root.cern.ch/root/Cint.html">interpreted C/C++</a> would be familiar &#8212; at first glance I don&#8217;t think it&#8217;s seriously embedable.<br />
Other options that spring to mind include <a href="http://www.angelcode.com/angelscript/">AngelScript</a>, <a href="http://www.compuphase.com/pawn/pawn.htm">Pawn</a> (which used to be called Small), <a href="http://squirrel-lang.org/">Squirrel</a> and <a href="http://www.python.org/">Python</a> or <a href="http://www.stackless.com/">Stackless Python</a>.</p>
<p>On the other hand a language based on a standard like ECMA might be a better option &#8212; such as <a href="http://www.digitalmars.com/dscript/cppscript.html">DMDScript</a> , <a href="http://www.adaptive-enterprises.com.au/~d/software/see/">SEE: Simple ECMAScript Engine</a> or<br />
<a href="http://www.mozilla.org/js/spidermonkey/">Spider Monkey</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://moomalade.com/blog/archives/13/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
