<?xml version="1.0"?>
<!-- RSS generated by Radio UserLand v8.0.8 on Wed, 18 Jan 2006 00:48:47 GMT -->
<rss version="2.0">
	<channel>
		<title>Malcolm Groves: Borland</title>
		<link>http://www.malcolmgroves.com/categories/borland/</link>
		<description></description>
		<language>en-au</language>
		<copyright>Copyright 2006 Malcolm Groves</copyright>
		<lastBuildDate>Wed, 18 Jan 2006 00:48:47 GMT</lastBuildDate>
		<docs>http://backend.userland.com/rss</docs>
		<generator>Radio UserLand v8.0.8</generator>
		<managingEditor>mgroves@getridofthis.borland.com</managingEditor>
		<webMaster>mgroves@getridofthis.borland.com</webMaster>
		<category domain="http://www.weblogs.com/rssUpdates/changes.xml">rssUpdates</category> 
		<ttl>60</ttl>
		<item>
			<title>ECO III at ADUG Sydney</title>
			<link>http://www.malcolmgroves.com/categories/borland/2006/01/18.html#a131</link>
			<description>&lt;P&gt;I&apos;ll be showing off some of the new features of ECO III at tonight&apos;s &lt;A href=&quot;http://www.adug.org.au/meetings/syd/next_meeting.htm&quot;&gt;ADUG (Australian Delphi User Group) Sydney&lt;/A&gt; meeting. &lt;/P&gt;
&lt;P&gt;It&apos;s essentially a repeat of my Borcon US session. Borland will be providing the pizza and drinks, so come along if you can.&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2006/01/18.html#a131</guid>
			<pubDate>Wed, 18 Jan 2006 00:48:47 GMT</pubDate>
			</item>
		<item>
			<title>Korean Delphi 2006 launch via 200 inch monitor</title>
			<link>http://www.malcolmgroves.com/categories/borland/2005/11/15.html#a128</link>
			<description>&lt;P&gt;Last week in the middle of all the stuff going on at Borcon in San Francisco, David and I snuck out late one night to a video conference room at Kinko&apos;s to present 2 hours of Delphi 2006 to 400 developers in Seoul, Korea.&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;&lt;A href=&quot;http://www.malcolmgroves.com/2005/11/Korea2.jpg&quot;&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/2005/11/Korea2_small.jpg&quot; border=0&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;It was 2 hours of nail-biting suspense, as I was expecting the video or the audio to let us down at some point, but except for a few minutes of noise partway through, it all went very smoothly. We were up on a 200 inch screen, which is kinda scary, as I was feeling quite tired from jet-lag and usual late nights at Borcon, so the bags under my eyes must have been about a foot tall&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;&lt;A href=&quot;http://www.malcolmgroves.com/2005/11/Korea1.jpg&quot;&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/2005/11/Korea1_small.jpg&quot; border=0&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Not sure why it still surprises me when technology works as it is meant to. Maybe this stuff may yet deliver on its promise of letting me travel less.&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2005/11/15.html#a128</guid>
			<pubDate>Tue, 15 Nov 2005 04:56:00 GMT</pubDate>
			</item>
		<item>
			<title>ECO is Child&apos;s Play</title>
			<link>http://www.malcolmgroves.com/categories/borland/2005/10/26.html#a127</link>
			<description>&lt;P&gt;I saw the rough recordings of &lt;A href=&quot;http://bdn.borland.com/article/0,1410,33331,00.html&quot;&gt;this&lt;/A&gt; awhile back, but I just watched it again now that it&apos;s been posted on BDN.&lt;/P&gt;
&lt;P&gt;I thought I was getting reasonably good at explaining this ECO thing, but I bow to the master (mistress?)&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://bdn.borland.com/article/0,1410,33331,00.html&quot;&gt;&lt;a href=&quot;http://bdn.borland.com/article/0,1410,33331,00.html&quot;&gt;http://bdn.borland.com/article/0,1410,33331,00.html&lt;/a&gt;&lt;/A&gt;&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2005/10/26.html#a127</guid>
			<pubDate>Wed, 26 Oct 2005 05:39:09 GMT</pubDate>
			</item>
		<item>
			<title>This one&apos;s going straight into the pool room</title>
			<link>http://www.malcolmgroves.com/categories/borland/2005/09/26.html#a125</link>
			<description>&lt;p&gt;I spoke with Matthew Overington, a journalist in Australia, a little while back about Model Driven Development in general, and &lt;a href=&quot;http://www.borland.com/us/products/delphi/eco.html&quot;&gt;ECO&lt;/a&gt; in particular. The resulting &lt;a href=&quot;http://www.builderau.com.au/architect/sdi/soa/Model_Driven_Development_today/0,39024602,39205342,00.htm&quot;&gt;article&lt;/a&gt; showed up on BuilderAU back in August.&lt;/p&gt;
&lt;p&gt;I wouldn&apos;t normally post links to sites that have linked to an
article I&apos;m in, but I&apos;m so tickled by this one, I just had to post. The
article has been referenced on the Healthy Hair website, specifically
on the &lt;a href=&quot;http://hairloss.look-4.com/blog/134&quot;&gt;Hair Loss blog&lt;/a&gt; (Who knew there was a blog about hair loss? Why wasn&apos;t I told?). &lt;/p&gt;
&lt;p&gt;Now the less kind amongst you who know what I look like, will no
doubt be able to construct some terribly amusing reason why I&apos;d be on
this site. Oh, how we&apos;d laugh! Sorry to spoil it for you, but you&apos;d be
wrong. There were no photos in the article. Ha!&lt;/p&gt;
&lt;p&gt;My mum will be so proud. I&apos;m not even upset that they messed up the quote. This one&apos;s going straight into the pool room.&lt;/p&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2005/09/26.html#a125</guid>
			<pubDate>Mon, 26 Sep 2005 03:46:28 GMT</pubDate>
			</item>
		<item>
			<title>ECO : Autoforms and Form Factories</title>
			<link>http://www.malcolmgroves.com/categories/borland/2005/08/29.html#a118</link>
			<description>&lt;P&gt;I&apos;ve been in New Zealand this week doing some Borland Developer Day&apos;s events. Mornings we&apos;ve been focusing on ECO, afternoons we&apos;ve been focusing on the new MDA features in the next version of Together.&lt;/P&gt;
&lt;P&gt;Anyway, during the ECO session in Wellington, I was talking about the AutoForms capabilities, and how you could register your own AutoForms for specific types. This is a really useful feature, as you can use the default AutoForm during early parts of your development, so that you can focus on getting the model developed, and then when ready, you can create custom forms to be used to view and edit your objects. Registering them with the AutoForm service means that you don&apos;t have to change any of the code in your app that display&apos;s your AutoForm, it will automatically use the new form you have registered.&lt;/P&gt;
&lt;P&gt;&lt;IMG height=346 src=&quot;http://www.malcolmgroves.com/2005/08/4.png&quot; width=300 border=0&gt;&lt;/P&gt;
&lt;P&gt;After the session, one of the guys in the audience who&apos;d been using ECO for awhile came up to me asked how to do this. To be honest, I thought I&apos;d already blogged about this. Apparently not, so I had a few hours to kill in the Qantas lounge in Christchurch while I waited for my flight home, so I thought I&apos;d write something up. You can grab the sample code &lt;A href=&quot;http://www.malcolmgroves.com/2005/08/ECOAutoForms.zip&quot;&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;A few things first. If you haven&apos;t seen the default AutoForm capabilities, download the source for this project and open it in Delphi 2005 Architect. Bring up Winform1, and note that I&apos;ve set the ECOAutoForm property on the grdAllPeople DataGrid to True. Now I can simply double-click on a row in my grid, and an autoform will be created.&amp;nbsp; This is probably the simplest way to get ECO to display an AutoForm for an object.&lt;/P&gt;
&lt;P&gt;&lt;IMG height=117 src=&quot;http://www.malcolmgroves.com/2005/08/1.png&quot; width=641 border=0&gt;&lt;/P&gt;
&lt;P&gt;NB: If you can&apos;t see an ECOAutoForm property in the DataGrid&apos;s on your form, you probably need to add an ECOAutoFormExtender component to the form. This will insert some ECO-specific properties into the DataGrid.&lt;/P&gt;
&lt;P&gt;Also click on Button3, which is the button labeled &quot;Show&amp;nbsp; Autoform&quot; next to the upper grid. I&apos;ve also set it to display an AutoForm for the currently selected Person in the grid. I&apos;ve enabled this by setting it&apos;s ECOListAction property to ShowAutoForm, and setting its BindingContext to my grdAllPeople grid, and its RootHandle property to the ExpressionHandle holding the collection of Person objects, in this case, ehAllPeople. This is probably the second simplest way to display an AutoForm for an object.&lt;/P&gt;
&lt;P&gt;&lt;IMG height=217 src=&quot;http://www.malcolmgroves.com/2005/08/2.png&quot; width=729 border=0&gt;&lt;/P&gt;
&lt;P&gt;If you want to display an autoform for an ECO object via some other method (e.g., via a context menu, etc), then the following code (Which is also in the Click event of Button4 in the sample project) will achieve the desired result:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier New&quot; size=2&gt;procedure TWinForm1.Button4_Click(sender: System.Object; e: System.EventArgs);&lt;BR&gt;var&lt;BR&gt;&amp;nbsp; autoContainer: IAutoContainer;&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; if Assigned(cmhSelectedAppointment.Element) then&lt;BR&gt;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; autoContainer := AutoContainerService.Instance.CreateContainer(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmhSelectedAppointment.Element,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoContainerArgs.Create(EcoSpace,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; False,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoContainerMemberVisibility.AllMembers,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContainerReusage.NeverReuse));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Assigned(autoContainer) then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Form(autoContainer).Show;&lt;BR&gt;&amp;nbsp; end;&lt;BR&gt;end;&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Firstly, we&apos;re checking that an Appointment object has been selected in our grid, by seeing if the Element attribute of our CurrencyManagerHandle is assigned. Then, we&apos;re using the AutoContainerService&apos;s CreateContainer method to get back a reference to an IAutoContainer for the selected Appointment. Lastly, provided we got back a reference, we&apos;re casting it as a Form and calling show to display it.&lt;/P&gt;
&lt;P&gt;Running the project should show that clicking the button to invoke this code has the same result as double clicking in the grid. &lt;/P&gt;
&lt;P&gt;Personally any time I want to display a form in my ECO apps, I use this code. Yes, it&apos;s longer than just creating an instance of a custom form and assigning the ECOSpace and the ECO object you want to edit. However, bear with me for a minute and hopefully you&apos;ll see the advantage.&lt;/P&gt;
&lt;P&gt;Open the fAppointmentAutoForm unit and have a look at the TAppointmentForm it contains. I designed this form like I would design any other ECO Winforms. File | New | Other...ECO Enabled Windows Form, drop my controls down. set the ReferenceHandle&apos;s ECOSpaceType and StaticValueTypeName properties, set up my databinding, etc. To convert this form into an ECO AutoForm, I have to do a few things:&lt;/P&gt;
&lt;P&gt;1. Extend your form class so that it implements the IAutoContainer interface. You&apos;ll need to add the Borland.Eco.AutoContainers and the Borland.Eco.ObjectRepresentation namespaces to your interface uses clause. Use Ctrl-Space from within your class declaration to declare the BuildControls, HookUpGUI and set_ECOSpace methods, and extend the declaration of your EcoSpace property so that has a setter method (the aforementioned set_EcoSpace).&lt;/P&gt;
&lt;P&gt;2. Ctrl-Shift-C from inside the form classes declaration to stub out the implementations of these new methods. The code within them looks like the following:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier New&quot; size=2&gt;procedure TAppointmentForm.set_EcoSpace(value: EcoSpace);&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; if value &amp;lt;&amp;gt; FEcoSpace then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FEcoSpace := value;&lt;BR&gt;end;&lt;BR&gt;&lt;BR&gt;procedure TAppointmentForm.HookUpGUI(ecoSpace: EcoSpace; element: IElement);&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; FEcoSpace := ecoSpace;&lt;BR&gt;&amp;nbsp; RHRoot.EcoSpace := self.EcoSpace;&lt;BR&gt;&amp;nbsp; RHRoot.SetElement(element);&lt;BR&gt;end;&lt;BR&gt;&lt;BR&gt;procedure TAppointmentForm.BuildControls(element: IElement;&lt;BR&gt;autoContainerArgs: AutoContainerArgs);&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; &lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; don&apos;t need to do anything, unless you intend writing a generic&lt;BR&gt;&amp;nbsp; &lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; autoform&lt;BR&gt;end;&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Most of these should be fairly self explanatory. The BuildControls method is empty, however if you wanted to dynamically create controls on your AutoForm, this is where you&apos;d do it. &lt;/P&gt;
&lt;P&gt;3. So, now our AutoForm is complete, however we need to register it with the AutoFormService. To do ths, we define a simple Factory class. In the same unit, you&apos;ll see this under my form declaration. Its delcaration looks like this:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier New&quot; size=2&gt;AppointmentAutoContainerFactory = class(System.Object, IAutoContainerFactory)&lt;BR&gt;public&lt;BR&gt;&amp;nbsp; function get_AutoContainer: IAutoContainer;&lt;BR&gt;&amp;nbsp; function Matches(modelElement: IModelElement): Boolean;&lt;BR&gt;end;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Its implementation looks like this:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier New&quot; size=2&gt;function AppointmentAutoContainerFactory.get_AutoContainer: IAutoContainer;&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; Result := TAppointmentForm.Create(nil);&lt;BR&gt;end;&lt;BR&gt;&lt;BR&gt;function AppointmentAutoContainerFactory.Matches(modelElement: IModelElement): Boolean;&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; Result := modelElement.Name.Equals(Appointment.ClassName);&lt;BR&gt;end;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;You may need to add the Borland.Eco.UmlRt namespace to your Interface uses clause. The get_AutoContainer method is where we actually create an instance of our form. The Matches method will be called by the ECO Framework, passing in a reference to the model element for which it is trying to create an AutoForm. Your job in this method is to decide if your form will handle this class, in this case I&apos;m checking whether it represents an Appointment, and if so returning true.&lt;/P&gt;
&lt;P&gt;4. Lastly, I need to register my Factory with the AutoForm service, by adding the following code to the initialization section of the unit:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier New&quot; size=2&gt;initialization&lt;BR&gt;&amp;nbsp;AutoContainerService.Instance.AddFactory(AppointmentAutoContainerFactory.Create);&lt;BR&gt;finalization&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;That&apos;s it. Now when you run your app, you should notice that when you request an autoform for an Appointment object you&apos;ll get back our new form. This is regardless of how you request it (i.e.. double clicking in your grid, using the ECOListAction on your button, using the AutoForm code, ECOSpaceDebugger etc). You don&apos;t need to change any of your forms, you can make the change in one place and the rest of your app will follow. Way cool!&lt;/P&gt;
&lt;P&gt;In the &lt;A href=&quot;http://www.malcolmgroves.com/2005/08/ECOAutoForms.zip&quot;&gt;sample code&lt;/A&gt;, the initialization section code is commented out, so you can easily see the before and after effect.&lt;/P&gt;
&lt;P&gt;&lt;IMG height=622 src=&quot;http://www.malcolmgroves.com/2005/08/3.png&quot; width=830 border=0&gt;&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2005/08/29.html#a118</guid>
			<pubDate>Mon, 29 Aug 2005 00:32:46 GMT</pubDate>
			</item>
		<item>
			<title>24 hours of Delphi</title>
			<link>http://www.malcolmgroves.com/categories/borland/2005/07/13.html#a116</link>
			<description>So, we&apos;re getting close to the 24 hours of Delphi online radio thingy
(yes, I think that&apos;s the official name). The schedule is up &lt;a href=&quot;http://bdn.borland.com/article/0,1410,33109,00.html&quot;&gt;here&lt;/a&gt;.&amp;nbsp; &lt;br&gt;
&lt;br&gt;
I&apos;m going to be on at midnight PST, and then again at 11pm PST (which
thankfully is a much more civilised 5pm and 4pm respectively where I
am), but I&apos;ll be sticking my head in whenever I can. I&apos;ll also be
making an effort to be online for the ECO bits, which are:&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
  &lt;li&gt;3:00 am PST with Jan&lt;/li&gt;
  &lt;li&gt;3:45 am PST with Jonas&lt;/li&gt;
  &lt;li&gt;10:00 am PST with Daniel&lt;/li&gt;
  &lt;li&gt;7:00 pm pST with Randy&lt;/li&gt;
  &lt;li&gt;10:00pm with Tim and Dick&lt;/li&gt;
&lt;/ul&gt;
Hmm and Brian Long is always good value, and Marco, and..., OK, looks
like I&apos;m not going to get much work done for the next 24 hours.&lt;br&gt;
</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2005/07/13.html#a116</guid>
			<pubDate>Tue, 12 Jul 2005 23:07:56 GMT</pubDate>
			</item>
		<item>
			<title>Custom OCL Operations</title>
			<link>http://www.malcolmgroves.com/categories/borland/2005/04/20.html#a109</link>
			<description>&lt;A href=&quot;http://blogs.borland.com/jonashogstrom/&quot;&gt;Jonas&lt;/A&gt; has just updated the ECO pmwiki with an interesting post on creating &lt;A href=&quot;http://homepages.borland.com/ecoteam/pmwiki/pmwiki.php?n=Eco.CustomOclOperations&quot;&gt;custom OCL operations&lt;/A&gt;, along with an example that implements a bunch of DateTime functionality that you can invoke from OCL. One of the guys mentioned this a few months back, and I&apos;ve been waiting since then to get my hands on it. Hmmm, wonder if I have time to play tonight.....</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2005/04/20.html#a109</guid>
			<pubDate>Tue, 19 Apr 2005 20:56:40 GMT</pubDate>
			</item>
		<item>
			<title>Delphi at SDA.NET Conference</title>
			<link>http://www.malcolmgroves.com/categories/borland/2005/04/20.html#a108</link>
			<description>&lt;P&gt;&lt;A href=&quot;http://www.sda-asia.com/&quot;&gt;SDA Asia&lt;/A&gt; magazine are holding their &lt;A href=&quot;http://www.sda-asia.com/dotnet/conference/dotnet,conference,conference.html&quot;&gt;SDA.NET Conference 2005&lt;/A&gt; in Singapore from the 24th to the 27th of May. This conference promises to be pretty cool for a bunch of reasons:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;There are a whole bunch of well known Delphi&amp;nbsp;people speaking, including Michael Li, Neal Ford, Chad Hower and Hadi Hariri. Somehow I managed to sneak in there as well :-) 
&lt;LI&gt;As well, there are some great speakers from the MS side of the fence as well, such as Ingo Rammer, and the one that I&apos;m most looking forward to hearing speak, &lt;A href=&quot;http://staff.newtelligence.net/clemensv/&quot;&gt;Clemens Vasters&lt;/A&gt;. 
&lt;LI&gt;Half the sessions are totally free to attend. The other half require registration, but even that is ridiculously cheap (SGD$250 per day, including the pre-con and post-con tutorials).&amp;nbsp;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;So even if you&apos;re not based in Singapore, at that price, and with that lineup of speakers, how could you not attend? If you are going, let me know, maybe we can organise a meetup (&lt;A href=&quot;http://chuacw.ath.cx/chuacw/archive/2005/03/17/1215.aspx&quot;&gt;Chee Wee and I know this great pub&lt;/A&gt;)&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2005/04/20.html#a108</guid>
			<pubDate>Tue, 19 Apr 2005 20:55:04 GMT</pubDate>
			</item>
		<item>
			<title>ECO is Love</title>
			<link>http://www.malcolmgroves.com/categories/borland/2005/04/14.html#a107</link>
			<description>&lt;P&gt;Part of the reason I&apos;ve been quiet on the blog lately (apart from work, travel, family life, ill dogs, and just general laziness) is that I&apos;ve been working on a reasonably large ECO/ASP.NET application for use internally in Borland. Eventually I&apos;d like to publish the source code (inspired as I am by Peter Morris) but trust me, you wouldn&apos;t want to see it in its current state.&lt;/P&gt;
&lt;P&gt;Anyway, back to the point. Being a web app, part of it follows a fairly common web standard of organising content in a hierarchy of categories that users can use to navigate down into more specific areas. Think of the directory structure at Yahoo in the screenshot below&lt;/P&gt;
&lt;P&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2005/04/14/20050414001.gif&quot; border=0&gt;&lt;/P&gt;
&lt;P&gt;Anyway, this was relatively easy to implement in a model: a Category class that has an auto-association (ie. an association to itself) such that a Category can have 0..* child categories, and a Category can have 0..1 parent categories. It was also relatively easy to set up in ASP.NET so I could browse my way up and down these categories.&lt;/P&gt;
&lt;P&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2005/04/14/20050414002.gif&quot; border=0&gt;&lt;/P&gt;
&lt;P&gt;What had me stumped for awhile were the breadcrumbs. Breadcrumbs? Look in the Yahoo screenshot above. Near the top, it has a list of all the ancestor categories as links, so you can work your way back up to where you came from.&amp;nbsp; I wanted to be able to get a list of the Category objects that make up the path from a specific Category all the way to the root. In the screenshot, it&apos;s Directory, Computers and Internet, Programming and Development, Languages, Delphi from least specific down to most specific. Once I had this in a handle, I could bind it to an ASP.NET Repeater component and Robert&apos;s your mother&apos;s brother. I didn&apos;t only need to access this path for the breadcrumbs, but that&apos;s a nice, visible example of what I needed. &lt;/P&gt;
&lt;P&gt;I eventually came up with some fairly convoluted code that walked up the Parent association, adding each to a handle as I went (which involved some pretty funky casting along the way).&amp;nbsp;That worked, but it left a fairly foul taste in my mouth. I thought ECO was supposed to stop me from having to write this sort of pointless plumbing code?&lt;/P&gt;
&lt;P&gt;Well, obviously if there wasn&apos;t a better way I wouldn&apos;t be writing this article. After some help from &lt;A href=&quot;http://blogs.borland.com/jesperhogstrom/&quot;&gt;Jesper&lt;/A&gt; and &lt;A href=&quot;http://blogs.borland.com/jonashogstrom/&quot;&gt;Jonas&lt;/A&gt; (thanks guys!) here&apos;s my current solution. I&apos;m sure there are others, but I&apos;m kinda fond of this one at the moment.&lt;/P&gt;
&lt;P&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2005/04/14/20050414003.gif&quot; border=0&gt;&lt;/P&gt;
&lt;P&gt;I&apos;ve added a &lt;A href=&quot;http://www.malcolmgroves.com/categories/eco/2004/04/30.html#a60&quot;&gt;Derived Association&lt;/A&gt;, in fact another auto-association, called Path and made it uni-directional. When you reference this association you should get back all categories from the root down to the current Category. To make this happen, the Derivation OCL for the Path association looks like this:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier New&quot; size=3&gt;if self.Parent.isNull then &lt;BR&gt;&amp;nbsp; self-&amp;gt;asSet &lt;BR&gt;else &lt;BR&gt;&amp;nbsp; self.Parent.Path-&amp;gt;including(self) &lt;BR&gt;endif&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;If the current Category is the root, its Parent will be null, and as a result we return a collection of just the current Category. However, if we are somewhere down the tree, then we use the &lt;FONT face=&quot;Courier New&quot;&gt;including&lt;/FONT&gt; operator to add the current Category to its Parent&apos;s Path collection (ie. we&apos;re recursively calling this derived association).&lt;/P&gt;
&lt;P&gt;Works like a bought one, as you can see in the screenshot below. The top left grid is showing all the Category objects, and also serves to let us select a particular category. The bottom left grid is showing the children of the currently selected Category, and the bottom right grid is showing the contents of the currently selected Category&apos;s Path association. Exactly what I needed.&lt;/P&gt;
&lt;P&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2005/04/14/20050414004.gif&quot; border=0&gt;&lt;/P&gt;
&lt;P&gt;Yes, the result is exactly the same as my convoluted code, and yes I had to learn a bit of OCL (&lt;A href=&quot;http://www.viewpointsa.com/bold_resources/getting_started_with_bold/Part3-OCL.html&quot;&gt;this&lt;/A&gt; is the best OCL reference I&apos;ve found so far, BTW. Thank you Anthony), but it just feels so much more ECO-like to be able to tell the framework what I want at a higher level, rather than&amp;nbsp;having&amp;nbsp;to&amp;nbsp;explicitly say how to do it. Sure, I always want to have the option to take&amp;nbsp;control over how things happen, but for stuff like this, I couldn&apos;t care less.&lt;/P&gt;
&lt;P&gt;&amp;lt;Sigh&amp;gt; Once again I&apos;m reminded, ECO is love.&lt;/P&gt;
&lt;P&gt;Oh, you can download the source for this example &lt;A href=&quot;http://www.malcolmgroves.com/images/2005/04/14/ECOHirearchyTest.zip&quot;&gt;here&lt;/A&gt; (and yes, I realise I can&apos;t spell, but then Delphi doesn&apos;t spell check my Project names for me, so it&apos;s not my fault).&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2005/04/14.html#a107</guid>
			<pubDate>Thu, 14 Apr 2005 06:44:48 GMT</pubDate>
			</item>
		<item>
			<title>FileExplorer for Delphi 2005</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/11/10.html#a102</link>
			<description>&lt;P&gt;Well, I didn&apos;t expect to be updating this quite so quickly, but it&apos;s my own laziness that caused it so I can&apos;t really complain.&lt;/P&gt;
&lt;P&gt;I&apos;ve updated my &lt;A href=&quot;http://www.malcolmgroves.com/projects/fileexplorer/index.html&quot;&gt;FileExplorer&lt;/A&gt; addin so that it behaves in a more civilised manner&amp;nbsp;when it comes to where it places its packages than it used to. &lt;/P&gt;
&lt;P&gt;I got the good oil from &lt;A href=&quot;http://blogs.borland.com/abauer&quot;&gt;Allen&lt;/A&gt; on what I should be doing, spent a little time learning how to add Pascal scripting to my &lt;A href=&quot;http://www.jrsoftware.org/&quot;&gt;InnoSetup&lt;/A&gt; project (which is stupidly easy, BTW. InnoSetup rocks!), and the result is a setup that will hopefully play nicer with security issues, etc.&lt;/P&gt;
&lt;P&gt;Of course, I said &quot;should&quot; and &quot;hopefully&quot; a few times above. I&apos;ve tried to test it out as well as I can, but I&apos;m sure you&apos;ll all let me know if there are any&amp;nbsp;problems :-)&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/11/10.html#a102</guid>
			<pubDate>Wed, 10 Nov 2004 02:49:48 GMT</pubDate>
			</item>
		<item>
			<title>Writing Solid Delphi Code</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/11/09.html#a101</link>
			<description>I&apos;ve had a couple of people point out that the link to the sample source at the end of the &lt;A href=&quot;http://www.malcolmgroves.com/stories/2004/04/05/writingSolidDelphiCode.html&quot;&gt;Writing Solid Delphi Code&lt;/A&gt; article was dead. Well, I finally got around to fixing it, so all should be well now. Sorry guys.</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/11/09.html#a101</guid>
			<pubDate>Tue, 09 Nov 2004 01:00:31 GMT</pubDate>
			</item>
		<item>
			<title>FileExplorer for Delphi 2005</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/11/07.html#a100</link>
			<description>I&apos;ve updated my FileExplorer addin for Delphi 2005, as well as adding a couple of new features, such as support for jumping direct to any of the&amp;nbsp;paths in your VCL and .NET Library Paths. More info &lt;A href=&quot;http://www.malcolmgroves.com/projects/fileexplorer/index.html&quot;&gt;here&lt;/A&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/11/07.html#a100</guid>
			<pubDate>Sun, 07 Nov 2004 04:59:56 GMT</pubDate>
			</item>
		<item>
			<title>Japan : Delphi 2005 vs Typhoon Tokage</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/10/21.html#a95</link>
			<description>&lt;P&gt;I arrived in Tokyo this week to do some early briefings around Delphi 2005 (aka Diamondback), the same week that &lt;A href=&quot;http://asia.news.yahoo.com/041020/ap/d85rcl280.html&quot;&gt;Typhoon Tokage&lt;/A&gt; arrived. I spent a couple of days briefing journalists from the major Developer magazines in Japan, but given that the launch of the Japanese version of Delphi 2005 lags behind the English edition by a little while, we chose to do the public events a little differently. As Arisawa-san pointed out in his &lt;A href=&quot;http://blogs.borland.com/takeshiarisawa/archive/2004/10/16/1608.aspx&quot;&gt;blog&lt;/A&gt;, Japan are holding full launch events later in November, however this time we invited select members of the Delphi community in for a briefing. These are guys who run User Groups, run online Forums, publish Japanese Delphi magazines, etc. In other words, the kind of enthusiastic community members that Borland is blessed with all around the world, and this was, we thought, a small way we could try and repay that enthusiasm.&lt;/P&gt;
&lt;P&gt;We had scheduled this event for Wednesday night, which it turns out was the same time when Tokage was due to hit Tokyo. As cool as we think Delphi 2005 is, we thought that maybe people may not want to come out to a Delphi event just as&amp;nbsp;a 800km-wide Typhoon descended directly on Tokyo, we contacted the invited people and offered to run it on Thursday night instead. Some took us up on the offer, but amazingly, a surprising number were willing to brave the Typhoon in order to get a first look at Delphi 2005 in Japan! &lt;/P&gt;
&lt;P&gt;So, if these guys are willing to risk it, who am I to say no, so as rain flew horizontally past&amp;nbsp;the window, flood levels rose, and much destruction was wrought elsewhere in Tokyo, we had a group of guys sitting watching my demos and getting very excited about what they were seeing. To say it was surreal is an understatement.&amp;nbsp;These guys are so hardcore! We&apos;ll run it again tonight, but so far this has been the most memorable part of the Delphi 2005 launch. Singapore, Malaysia, Thailand and Korea in the next few weeks will have to raise the bar in order to top that!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/10/21.html#a95</guid>
			<pubDate>Wed, 20 Oct 2004 21:08:23 GMT</pubDate>
			</item>
		<item>
			<title>Diamondback Sneak Peek - Perth</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/10/14.html#a93</link>
			<description>&lt;P&gt;The last of the Diamondback Sneak Peaks for Australia was in Perth on Tuesday. ADUG Perth is the newest of the ADUG Chapters, only having been up and running for 6 months or so, but we still managed nearly 60 people along to see Diamondback. You&apos;ll have to trust me on that though, because about 5 minutes after most people left, I realised I forgot to take a photo :-( &lt;/P&gt;
&lt;P&gt;Again, a big thanks to the various organisers of &lt;A href=&quot;http://www.adug.org.au&quot;&gt;ADUG&lt;/A&gt;. We totally couldn&apos;t have done these Sneak Peeks without their help. Given they are all volunteers and all have day jobs, it was a great contribution on their part to the Delphi community. Thanks guys.&lt;/P&gt;
&lt;P&gt;I&apos;ve got a few days of not showing Diamondback, then I&apos;m off to Japan. More photos soon.&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/10/14.html#a93</guid>
			<pubDate>Wed, 13 Oct 2004 23:58:10 GMT</pubDate>
			</item>
		<item>
			<title>Diamondback Sneak Peek - Adelaide</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/10/14.html#a92</link>
			<description>&lt;P&gt;The Australian Diamondback Sneak Peeks&amp;nbsp;continued this week with Monday finding us in Adelaide. I&apos;m becoming a bit of a broken record, but we had another bumper turnout and the product seemed to go over very well. &lt;/P&gt;
&lt;P&gt;Surprisingly for Adelaide, they&amp;nbsp;even had a&amp;nbsp;signed Queensland State of Origin jersey up on the wall, which immediately made me realise that Adelaide people must be very discerning and refined judges of quality :-P&lt;/P&gt;
&lt;TABLE id=table3 style=&quot;BORDER-COLLAPSE: collapse&quot; height=280 cellPadding=0 width=400 bgColor=#333333 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD align=middle&gt;&lt;BR&gt;&amp;nbsp; 
&lt;TABLE id=table4 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=318 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=6 src=&quot;http://www.malcolmgroves.com/images/photoborder_top.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE id=table5 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=6&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_left.png&quot; width=6 border=0&gt;&lt;/TD&gt;
&lt;TD width=&quot;100%&quot; bgColor=#000000&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2004/10/14/20041014001.jpg&quot;&gt;&lt;/TD&gt;
&lt;TD width=12&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_right.png&quot; width=12 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=13 src=&quot;http://www.malcolmgroves.com/images/photoborder_bottom.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;FONT face=Tahoma color=#999999 size=1&gt;&amp;#169; 2004, Malcolm Groves&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/10/14.html#a92</guid>
			<pubDate>Wed, 13 Oct 2004 23:50:20 GMT</pubDate>
			</item>
		<item>
			<title>Diamondback Sneak Peek - Melbourne</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/10/09.html#a91</link>
			<description>&lt;P&gt;To finish the week, we had the biggest turnout so far. Melbourne&apos;s Delphi community turned out in force to see Diamondback. And finally another group who weren&apos;t shy in front of a camera.&lt;/P&gt;
&lt;TABLE id=table3 style=&quot;BORDER-COLLAPSE: collapse&quot; height=280 cellPadding=0 width=400 bgColor=#333333 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD align=middle&gt;&lt;BR&gt;&amp;nbsp; 
&lt;TABLE id=table4 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=318 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=6 src=&quot;http://www.malcolmgroves.com/images/photoborder_top.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE id=table5 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=6&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_left.png&quot; width=6 border=0&gt;&lt;/TD&gt;
&lt;TD width=&quot;100%&quot; bgColor=#000000&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2004/10/09/20041009001.jpg&quot;&gt;&lt;/TD&gt;
&lt;TD width=12&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_right.png&quot; width=12 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=13 src=&quot;http://www.malcolmgroves.com/images/photoborder_bottom.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;FONT face=Tahoma color=#999999 size=1&gt;&amp;#169; 2004, Malcolm Groves&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/10/09.html#a91</guid>
			<pubDate>Sat, 09 Oct 2004 06:43:37 GMT</pubDate>
			</item>
		<item>
			<title>Diamondback Sneak Peek - Brisbane</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/10/09.html#a90</link>
			<description>&lt;TABLE id=table3 style=&quot;BORDER-COLLAPSE: collapse&quot; height=280 cellPadding=0 width=400 bgColor=#333333 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD align=middle&gt;&lt;BR&gt;&amp;nbsp; 
&lt;TABLE id=table4 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=318 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=6 src=&quot;http://www.malcolmgroves.com/images/photoborder_top.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE id=table5 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=6&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_left.png&quot; width=6 border=0&gt;&lt;/TD&gt;
&lt;TD width=&quot;100%&quot; bgColor=#000000&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2004/10/09/20041007001.jpg&quot;&gt;&lt;/TD&gt;
&lt;TD width=12&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_right.png&quot; width=12 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=13 src=&quot;http://www.malcolmgroves.com/images/photoborder_bottom.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Thursday I was in Brisbane for the Diamondback Sneak Peek. Weird shaped room (these two photos are in the same room, honestly), but a great turnout and a great response to Diamondback.&lt;/P&gt;
&lt;TABLE id=table3 style=&quot;BORDER-COLLAPSE: collapse&quot; height=280 cellPadding=0 width=400 bgColor=#333333 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD align=middle&gt;&lt;BR&gt;&amp;nbsp; 
&lt;TABLE id=table4 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=318 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=6 src=&quot;http://www.malcolmgroves.com/images/photoborder_top.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE id=table5 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=6&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_left.png&quot; width=6 border=0&gt;&lt;/TD&gt;
&lt;TD width=&quot;100%&quot; bgColor=#000000&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2004/10/09/20041007002.jpg&quot;&gt;&lt;/TD&gt;
&lt;TD width=12&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_right.png&quot; width=12 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=13 src=&quot;http://www.malcolmgroves.com/images/photoborder_bottom.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;FONT face=Tahoma color=#999999 size=1&gt;&amp;#169; 2004, Malcolm Groves&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/10/09.html#a90</guid>
			<pubDate>Sat, 09 Oct 2004 06:39:18 GMT</pubDate>
			</item>
		<item>
			<title>Diamondback Sneak Peek - Canberra</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/10/06.html#a89</link>
			<description>&lt;TABLE id=table3 style=&quot;BORDER-COLLAPSE: collapse&quot; height=280 cellPadding=0 width=400 bgColor=#333333 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD align=middle&gt;&lt;BR&gt;&amp;nbsp; 
&lt;TABLE id=table4 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=318 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=6 src=&quot;http://www.malcolmgroves.com/images/photoborder_top.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE id=table5 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=6&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_left.png&quot; width=6 border=0&gt;&lt;/TD&gt;
&lt;TD width=&quot;100%&quot; bgColor=#000000&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2004/10/06/20041006002.jpg&quot;&gt;&lt;/TD&gt;
&lt;TD width=12&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_right.png&quot; width=12 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=13 src=&quot;http://www.malcolmgroves.com/images/photoborder_bottom.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Today was Canberra&apos;s turn to get a look at Diamondback. &amp;nbsp;They were a little more shy than the Sydney guys when it came to the photo, but were no less enthusiastic about the product. Tomorrow is Brisbane&apos;s turn.&lt;/P&gt;
&lt;TABLE id=table3 style=&quot;BORDER-COLLAPSE: collapse&quot; height=280 cellPadding=0 width=400 bgColor=#333333 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD align=middle&gt;&lt;BR&gt;&amp;nbsp; 
&lt;TABLE id=table4 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=318 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=6 src=&quot;http://www.malcolmgroves.com/images/photoborder_top.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE id=table5 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=6&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_left.png&quot; width=6 border=0&gt;&lt;/TD&gt;
&lt;TD width=&quot;100%&quot; bgColor=#000000&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2004/10/06/20041006003.jpg&quot;&gt;&lt;/TD&gt;
&lt;TD width=12&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_right.png&quot; width=12 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=13 src=&quot;http://www.malcolmgroves.com/images/photoborder_bottom.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;FONT face=Tahoma color=#999999 size=1&gt;&amp;#169; 2004, Malcolm Groves&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/10/06.html#a89</guid>
			<pubDate>Wed, 06 Oct 2004 10:10:12 GMT</pubDate>
			</item>
		<item>
			<title>Diamondback Sneak Peek - Sydney</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/10/06.html#a88</link>
			<description>&lt;P&gt;Last night we started the Diamondback Sneak Peeks for Australia in Sydney. Great turnout, lots of good questions, and we ran way over time (just too much good stuff to show off). Everyone seemed pretty excited about what they were seeing (as you can see from the photo) so we&apos;re off to a good start for the rest of the sessions.&lt;/P&gt;
&lt;P&gt;Many thanks need to go to the &lt;A href=&quot;http://www.adug.org.au&quot;&gt;ADUG&lt;/A&gt; guys for doing so much of the work in organising these events. &lt;/P&gt;
&lt;TABLE id=table3 style=&quot;BORDER-COLLAPSE: collapse&quot; height=280 cellPadding=0 width=400 bgColor=#333333 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD align=middle&gt;&lt;BR&gt;&amp;nbsp; 
&lt;TABLE id=table4 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=318 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=6 src=&quot;http://www.malcolmgroves.com/images/photoborder_top.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE id=table5 style=&quot;BORDER-COLLAPSE: collapse&quot; cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=6&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_left.png&quot; width=6 border=0&gt;&lt;/TD&gt;
&lt;TD width=&quot;100%&quot; bgColor=#000000&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2004/10/06/20041006001.jpg&quot;&gt;&lt;/TD&gt;
&lt;TD width=12&gt;&lt;IMG height=225 src=&quot;http://www.malcolmgroves.com/images/photoborder_right.png&quot; width=12 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG height=13 src=&quot;http://www.malcolmgroves.com/images/photoborder_bottom.png&quot; width=318 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;FONT face=Tahoma color=#999999 size=1&gt;&amp;#169; 2004, Malcolm Groves&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/10/06.html#a88</guid>
			<pubDate>Wed, 06 Oct 2004 09:59:51 GMT</pubDate>
			</item>
		<item>
			<title>Leaving on a Jet Plane, Don&apos;t know when I&apos;ll be back again...</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/09/27.html#a87</link>
			<description>&lt;P&gt;My home for the next month or two&amp;nbsp;is going to be somewhere in Qantas Economy Class. Starting next week we&apos;re kicking off a whole bunch of Diamondback Sneak Peeks around Asia Pacific. I&apos;m both excited about it (I&apos;m really looking forward to the reaction from the audience to Diamondback) and dreading it (I&apos;m a fairly grumpy traveller) at the same time.&lt;/P&gt;
&lt;P&gt;So the next two weeks I&apos;m doing the rounds of Australia, covering Sydney, Canberra, Melbourne, Brisbane, Adelaide and Perth. More details &lt;A href=&quot;http://www.adug.org.au/meetings/Symposia/2004/DiamondbackPreview.htm&quot;&gt;here&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;After that it&apos;s Japan, Malaysia, Singapore, Thailand, Korea and after that it gets kinda blurry. China and Taiwan&amp;nbsp;will be handled by the&amp;nbsp;extraordinary Gordon Li, and New Zealand has already been covered by the equally extraordinary Richard Vowles. I&apos;ll try and post photos as I go around.&lt;/P&gt;
&lt;P&gt;I &lt;U&gt;think&lt;/U&gt; I get home before Christmas.&lt;/P&gt;
&lt;P&gt;Upside is I write most of my ECO blog articles on flights, so no excuses over the next couple of months.&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/09/27.html#a87</guid>
			<pubDate>Sun, 26 Sep 2004 23:43:36 GMT</pubDate>
			</item>
		<item>
			<title>More Articles Reposted</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/09/23.html#a86</link>
			<description>&lt;P&gt;I&apos;ve posted a couple more of the old articles I had lying about: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href=&quot;http://www.malcolmgroves.com/stories/2004/09/23/scriptingYourDelphiApplications.html&quot;&gt;Scripting your Delphi Applications&lt;/A&gt;&amp;nbsp;which is about using ActiveScript from within your Delphi apps, and&lt;/LI&gt;
&lt;LI&gt;&lt;A href=&quot;http://www.malcolmgroves.com/stories/2004/09/23/javaForDelphiDevelopers.html&quot;&gt;Java for Delphi Developers&lt;/A&gt;&amp;nbsp;a tutorial for Delphi developers wishing to learn Java. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The Java For Delphi Developers one is showing its age a bit, but still might be a useful starting point.&lt;/P&gt;
&lt;P&gt;I also fixed up the links in the &lt;A href=&quot;http://www.malcolmgroves.com/stories/2004/04/05/simplifyingPreAndPostconditionsInDelphi.html&quot;&gt;Simplifying Pre and Post-Condition Testing in Delphi &lt;/A&gt;one.&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/09/23.html#a86</guid>
			<pubDate>Thu, 23 Sep 2004 06:08:18 GMT</pubDate>
			</item>
		<item>
			<title>BCN2Outlook</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/09/09.html#a84</link>
			<description>&lt;P&gt;Sorry to be so late in posting this. A couple of people have asked me about this &lt;A href=&quot;http://www.malcolmgroves.com/projects/bcn2outlook/bcn2outlook.zip&quot;&gt;old utility&lt;/A&gt; leading up to this Borcon, but what with trips and catching up with life when I get home, I haven&apos;t got around to uploading it before now. Here&apos;s the description from years ago when I first released it:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;The Borcon US &lt;/FONT&gt;&lt;A href=&quot;http://whatever.borland.com/conf2004/confmgmt.exe&quot; target=_blank&gt;&lt;FONT face=Arial size=2&gt;website&lt;/A&gt; allows you to select sessions you are interested in attending and then download a BCN file. They also provide tools to sync this BCN file with your Palm Calendar. &lt;/P&gt;
&lt;P&gt;This is all well and good, except for those of us who don&apos;t use a Palm! 
&lt;P&gt;BCN2Outlook is a simple tool we&apos;ve developed to allow you to sync your BCN file with Outlook. Once it&apos;s in Outlook, you should be able to sync from your Outlook Calendar to whatever flavour PDA you use, using its standard Outlook sync. We&apos;ve tested this with Outlook 97 and 2000, and PocketPC ActiveSync, however it should work with other versions of Outlook. 
&lt;P&gt;BCN2Outlook is offered free to other Borcon attendees&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;I haven&apos;t tested it this year, but I imagine it should still work. Post-Borcon I&apos;ll dig out the source for it and post that as well.&lt;/P&gt;&lt;/FONT&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/09/09.html#a84</guid>
			<pubDate>Thu, 09 Sep 2004 12:18:33 GMT</pubDate>
			</item>
		<item>
			<title>Borland Blogging Community</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/06/28.html#a76</link>
			<description>&lt;P&gt;Now that we have our official blogging site up and running (&lt;A href=&quot;http://blogs.borland.com&quot;&gt;&lt;a href=&quot;http://blogs.borland.com&quot;&gt;http://blogs.borland.com&lt;/a&gt;&lt;/A&gt;), I&apos;ve been reposting some of my ECO stuff over there at &lt;A href=&quot;http://blogs.borland.com/malcolmgroves&quot;&gt;&lt;a href=&quot;http://blogs.borland.com/malcolmgroves&quot;&gt;http://blogs.borland.com/malcolmgroves&lt;/a&gt;&lt;/A&gt;. Still haven&apos;t quite figured out what I&apos;ll do regarding new articles, but I&apos;m leaning towards posting them there and posting a note here to let people know they are available.&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/06/28.html#a76</guid>
			<pubDate>Sun, 27 Jun 2004 23:42:27 GMT</pubDate>
			</item>
		<item>
			<title>Evaluate OCL in Code</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/05/31.html#a73</link>
			<description>&lt;P&gt;A quick one for today. &lt;/P&gt;
&lt;P&gt;Just had a question from someone on how to evaluate OCL from code. Assuming you have&amp;nbsp;our Person class from the previous examples, place the following code in a button&apos;s click event:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot; size=1&gt;procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);&lt;BR&gt;var&lt;BR&gt;&amp;nbsp; OCLResult : IElement;&lt;BR&gt;&amp;nbsp; ObjList : IObjectList;&lt;BR&gt;&amp;nbsp; i : Integer;&lt;BR&gt;begin&lt;BR&gt;&amp;nbsp; OCLResult := ECOSpace.OclService.EvaluateAndSubscribe(nil, &apos;&lt;STRONG&gt;Person.AllInstances&lt;/STRONG&gt;&apos;,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face=&quot;Courier, Monospace&quot; size=1&gt;nil, nil);&lt;BR&gt;&amp;nbsp; if OCLResult is IObjectList then&lt;BR&gt;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjList := IObjectList(OCLResult);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot; size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i := 0 to ObjList.Count - 1 do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox.Show(Person(ObjList.Item[i].AsObject).Firstname);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR&gt;&amp;nbsp; end;&lt;BR&gt;end;&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here, I&apos;m executing some simple OCL (Person.AllInstances) and then iterating through the resulting collection. The Item property of IObjectList returns an IObject. You can then reference its AsObject method to get back a TObject, which you can cast as your Person and away you go. &lt;/P&gt;
&lt;P&gt;Once you have your Person, dealing with&amp;nbsp;any attributes or associations that it has will be much easier, as they will be correctly typed. It&apos;s just &quot;getting inside&quot;&amp;nbsp;our object model where we need to cast all over the shop.&lt;/P&gt;
&lt;P&gt;Obviously, if your OCL doesn&apos;t return a collection, then you&apos;d deal differently, but the above code should get you started. &lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/05/31.html#a73</guid>
			<pubDate>Mon, 31 May 2004 01:23:27 GMT</pubDate>
			</item>
		<item>
			<title>Test Lists in TDD</title>
			<link>http://www.malcolmgroves.com/categories/borland/2004/05/30.html#a71</link>
			<description>&lt;P&gt;I was flicking through &lt;A href=&quot;http://www.amazon.com/exec/obidos/ASIN/0735619484/qid=1085892528/sr=2-1/ref=sr_2_1/103-2792179-5435836&quot;&gt;Test-Driven Development in Microsoft .NET&lt;/A&gt;&amp;nbsp;in Borders yesterday. &lt;/P&gt;
&lt;P&gt;In it, one of the authors suggests you make a Test List when creating your test class. A&amp;nbsp;Test List, cunningly named as it is, is a list of tests you think you might need for the particular class you are testing. The idea being that not only is it a place to capture all the initial thoughts you had about potential tests you should perform, and the others you think of while you are working, but they also went on to outline a couple of different strategies to choose which tests to write first, and how your choices may affect the design of your class. &lt;/P&gt;
&lt;P&gt;Seems like a good idea to me:&amp;nbsp;simple, useful, obvious,&amp;nbsp;but in spite of the fact that&amp;nbsp;I&apos;ve been using DUnit and JUnit for quite a few years, and more recently NUnit, it&apos;s not something that I&apos;ve ever formally done. I usually just keep them in my head (invariably forgetting a few) or scrawl them down randomly on a bit of paper and immediately lose them. I&apos;ve had the embarrasing situation a couple of times, where upon tracking down a bug, I&apos;ve said&amp;nbsp;to myself &quot;But I&apos;m sure I wrote a test for that&quot; only to find that I meant to, but...&lt;/P&gt;
&lt;P&gt;So, mark up one habit I&apos;m going to try and get into. However it seems that Delphi and C#Builder can help me out here. I&apos;ve already got the following code added to a Code Template:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot; size=1&gt;{$REGION &apos;|&apos;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot; size=1&gt;{$ENDREGION}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;so that I can add collapsible code sections with a simple Ctrl-J. So, from now on I&apos;m going to try and get in the habit of putting one of these up somewhere near&amp;nbsp;the declaration of my test classes, and within it use the To-Do List features of Delphi and C#Builder to embed my Test List into my code. I then get a nice, non-distracting collapsed section like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2004/05/30/20040530001.gif&quot;&gt;&lt;/P&gt;
&lt;P&gt;but which when needed, expands out to this:&lt;/P&gt;
&lt;P&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2004/05/30/20040530002.gif&quot;&gt;&lt;/P&gt;
&lt;P&gt;but more importantly, I can access via the To-Do List viewer:&lt;/P&gt;
&lt;P&gt;&lt;IMG src=&quot;http://www.malcolmgroves.com/images/2004/05/30/20040530003.gif&quot;&gt;&lt;/P&gt;
&lt;P&gt;So at the very least, I can now prove I really did mean to add that test after&amp;nbsp;I spend a bunch of time tracking down a bug :-)&lt;/P&gt;</description>
			<guid>http://www.malcolmgroves.com/categories/borland/2004/05/30.html#a71</guid>
			<pubDate>Sun, 30 May 2004 04:53:07 GMT</pubDate>
			</item>
		</channel>
	</rss>
