<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Off Topic</title>
        <link>http://geekswithblogs.net/TimH/category/2069.aspx</link>
        <description>Off Topic</description>
        <language>en-NZ</language>
        <copyright>Tim Huffam</copyright>
        <managingEditor>timhuffam@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Firefox 3 ignores cache control http headers - security risk for online apps!</title>
            <link>http://geekswithblogs.net/TimH/archive/2008/09/26/firefox-3-ignores-cache-control-http-headers.aspx</link>
            <description>&lt;p&gt;If a user, using Firefox 3, signs out of a web site and does not close the browser, anyone else using that browser subsequently can view the content of pages loaded by the previous user (eg in an internet cafe, or any place where workstations are shared eg universities) - exposing private/confidential data.&lt;/p&gt;
&lt;div&gt;&lt;span class="813573621-25092008"&gt;This only affects HTTP post requests (not gets) and only Firefox version 3 - earlier versions (1.5, 2 etc), and IE, are not affected.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span class="813573621-25092008"&gt;The main points are:&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;span class="813573621-25092008"&gt;This is definately a bug:  a violation of RFC 2616, section 14.9 that states "The Cache-Control general-header field is used to specify directives that MUST be obeyed by all caching mechanisms along the request/response chain".&lt;/span&gt; &lt;/li&gt;
    &lt;li&gt;&lt;span class="813573621-25092008"&gt;Some companies who deem this a significant hole in their security have chosen to block requests from Firefox 3 (eg they deem it their responsibility to secure their customers private and confidential data to the best of their ability).&lt;/span&gt; &lt;/li&gt;
    &lt;li&gt;&lt;span class="813573621-25092008"&gt;This bug has been registered with the Mozilla dev team, but currently (as of 26 Sept 2008) has a status of unconfirmed.&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;span class="813573621-25092008"&gt;
&lt;div&gt;&lt;span class="813573621-25092008"&gt;Related links:&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;span class="813573621-25092008"&gt;&lt;a href="http://forums.mozillazine.org/viewtopic.php?f=25&amp;amp;t=673135&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a"&gt;http://forums.mozillazine.org/viewtopic.php?f=25&amp;amp;t=673135&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a&lt;/a&gt; (one of the best discussions I've found on this - includes several other links)&lt;/span&gt; &lt;/li&gt;
    &lt;li&gt;&lt;span class="813573621-25092008"&gt;&lt;a href="http://www.freesoft.org/CIE/RFC/2068/164.htm"&gt;http://www.freesoft.org/CIE/RFC/2068/164.htm&lt;/a&gt; (RFC 2616, section 14.9 - regarding cache control)&lt;/span&gt; &lt;/li&gt;
    &lt;li&gt;&lt;span class="813573621-25092008"&gt;&lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=441751"&gt;https://bugzilla.mozilla.org/show_bug.cgi?id=441751&lt;/a&gt; (the bug registered on Mozilla's bug tracking system)&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="813573621-25092008"&gt;Tim&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125468"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125468" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/TimH/aggbug/125468.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tim Huffam</dc:creator>
            <guid>http://geekswithblogs.net/TimH/archive/2008/09/26/firefox-3-ignores-cache-control-http-headers.aspx</guid>
            <pubDate>Fri, 26 Sep 2008 03:17:40 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/TimH/comments/125468.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/TimH/archive/2008/09/26/firefox-3-ignores-cache-control-http-headers.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/TimH/comments/commentRss/125468.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TimH/services/trackbacks/125468.aspx</trackback:ping>
        </item>
        <item>
            <title>Task Oriented Programming</title>
            <link>http://geekswithblogs.net/TimH/archive/2008/09/09/task-oriented-programming.aspx</link>
            <description>&lt;p&gt;For some time I've been wondering if there's a better way to program business logic.  Years ago I used to write COBOL, then moved onto a 4GL, bla bla bla... and today I find myself well entrenched in OO with Microsoft's .Net.  Development times don't seem to be much better these days - and the complexity of things seems to have mushroomed.  &lt;/p&gt;
&lt;p&gt;We went from barely-a-3GL to 4GL back to 3GL plus an explosion of things you need to consider.  We started with procedural code then moved to OO and seem to have got stuck there.  But somehow I think we need to revise our use of OO.  Business logic is predominantly procedural code - even if written in OO; it starts, follows a process, performing stuff until finished eg Customer.UpdateCreditLimit()&lt;/p&gt;
&lt;p&gt;OO is really good for modelling things - as per the classic OO examples of a bicycle or car.  And thus they model business things quite well too - like an Invoice or a Customer.  &lt;/p&gt;
&lt;p&gt;However, I've found that the more object oriented the code gets - the less productive, maintainable and flexible it becomes.  Not saying leave OO - far from it - it's brilliant.  It's just that we need to learn when to say 'when'.   The use of patterns has helped a huge amount - but these can also caused similar problems - when being applied where they aren't really needed - resulting in overly complex software (read: inflexible and unmaintainable and unproductive).  It's a fine line - and it's not easy to get the balance.&lt;/p&gt;
&lt;p&gt;A major break through in this area is &lt;a href="http://msdn.microsoft.com/en-us/library/bb397926.aspx"&gt;LINQ&lt;/a&gt;.  This has meant we have less clutter in our apps catering for ORM (brilliant).  This has resulted in code very similar to the old 4GL days (essentially 4GLs were just SQL based code anyway) - where all you care/code about is the business logic - caring not a jot about how or where a Customer or Order got created - and in this age of SOA - that becomes more important (as a Customer could come from many different sources - local RDBMS, company ERP, external CRM etc).  I guess you could say LINQ allows you to focus your code to be more domain specific (not saying it's a DSL).&lt;/p&gt;
&lt;p&gt;I have been playing with workflows for donkeys of years and found that although the individual workflow systems themselves can range from very simple to incredibly complex - the individual tasks they perform need not be.   This had lead me to start thinking about applying this principle to code design at a reasonably low level....  what if we developed tasks as objects.  Each task has just one job (I've heard some people say this is how objects 'should' be coded anyway).  It has properties that can be get/set.  Keeping things dead simple, eg:&lt;font color="#0000ff" size="2"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;class&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" color="#2b91af" size="2"&gt;AdderTask&lt;br /&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;
    &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;int&lt;/font&gt;&lt;font size="2"&gt; &lt;font color="#000000"&gt;Addend1 {&lt;/font&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;get&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;;&lt;/font&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;set&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;; }&lt;br /&gt;
&lt;/font&gt;    &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;int&lt;/font&gt;&lt;font size="2"&gt; &lt;font color="#000000"&gt;Addend2 {&lt;/font&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;get&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;;&lt;/font&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;set&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;; }&lt;/font&gt;&lt;br /&gt;
    &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;int&lt;/font&gt;&lt;font size="2"&gt; &lt;font color="#000000"&gt;Result {&lt;/font&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;get&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;;&lt;/font&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;set&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;; }&lt;/font&gt;&lt;br /&gt;
    &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font size="2"&gt; AdderTask(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;int&lt;/font&gt;&lt;font size="2"&gt; addend1, &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font face="Courier New" size="2"&gt; addend2)&lt;br /&gt;
    {&lt;br /&gt;
        &lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font face="Courier New" size="2"&gt;Addend1 = addend1;&lt;br /&gt;
        &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;Addend2 = addend2;&lt;br /&gt;
    }&lt;br /&gt;
&lt;/font&gt;    &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;AdderTask&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt; &lt;/font&gt;&lt;font face="Courier New" color="#000000"&gt;Execute()&lt;br /&gt;
    &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;{&lt;br /&gt;
        Result = Addend1 + Addend2;&lt;br /&gt;
&lt;/font&gt;        &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;return&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;this&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;
&lt;/font&gt;  &lt;font color="#000000"&gt;  &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" color="#000000" size="2"&gt;}&lt;br /&gt;
}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;To run this you'd simply do this:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;int&lt;/font&gt;&lt;font size="2"&gt; &lt;font color="#000000"&gt;result =&lt;/font&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;AdderTask&lt;/font&gt;&lt;font color="#000000" size="2"&gt;(1, 2).Execute().Result;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000" size="2"&gt;Exposing the task's properties means you can build up get and set statements - and because the Execute method returns the task object itself you can easily use it in a single line as if it was a method on it's own - or retrieve it's property values after the Execute (these tasks would easily be adapted to work within a workflow system).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000" size="2"&gt;This style lends itself to expanding; rather like building blocks, you can build large workflows out of these task oriented blocks.  The workflows themselves coded just like these tasks - whereby all the business logic resides within the Execute() method.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000" size="2"&gt;Adding LINQ to the mix takes this to the next level - allowing you to build software that is simple to develop and understand.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000" size="2"&gt;I've been building a sizable system using this technique and I'm finding that I'm converting code developed using standard OO practices over to this methodology as it makes code more easily reused - but most importantly: easier to read and maintain.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;In summary:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;font size="2"&gt;All input and output parameters should be implemented as properties (getter and setter accessors).&lt;/font&gt; &lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Provide a constructor that accepts all required parameters. A default constructor (with no parameters) is optional (I've found I never need these - but if you were to use these tasks in a workflow system they may need this).&lt;/font&gt; &lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Provide an Execute() method that takes no parameters and returns the object instance eg &lt;font face="Courier New"&gt;&lt;font color="#0000ff" size="2"&gt;return&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;this&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;The object should clean up after itself.  &lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;font size="2"&gt;Other notes:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;font size="2"&gt;Originally I created a similar type of class for workflows - but I found that these ended up being no different in concept to tasks.  Likewise I've found that some tasks needed to call other tasks - so I've ended up just implementing everything as tasks.  On reflection this is actually quite valid - because, as I found when building large orchestrations using Biztalk, workflows become atomic tasks themselves when used within the context of a large orchestration (which may run many workflows and external tasks) - and the orchestration, from a highlevel could also be considered an atomic task.&lt;/font&gt; &lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;I've found using System.Transactions.TransactionScope great for scoping transactions around many tasks when creating a macro task that runs many sub tasks.&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Suggestions/comments very welcome - I'd like others to expand or comment on this.&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000" size="2"&gt;Tim&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125008"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125008" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/TimH/aggbug/125008.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tim Huffam</dc:creator>
            <guid>http://geekswithblogs.net/TimH/archive/2008/09/09/task-oriented-programming.aspx</guid>
            <pubDate>Mon, 08 Sep 2008 12:10:06 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/TimH/comments/125008.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/TimH/archive/2008/09/09/task-oriented-programming.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/TimH/comments/commentRss/125008.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TimH/services/trackbacks/125008.aspx</trackback:ping>
        </item>
        <item>
            <title>Agile Manifesto - addendum 0.1</title>
            <link>http://geekswithblogs.net/TimH/archive/2008/07/23/agile-manifesto---addendum-0.1.aspx</link>
            <description>&lt;p&gt;&lt;font size="4"&gt;Fresh chocolate chip cookies and fresh coffee&lt;/font&gt; over garden variety cookies and instant coffee&lt;/p&gt;
&lt;p&gt;That is, while there is value in the items on the right, we value items on the left more.&lt;/p&gt;
&lt;p&gt;The unspoken rule is that non-team members attending team meetings must come bearing the fore mentioned items &lt;img alt="" src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/regular_smile.gif" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123960"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123960" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/TimH/aggbug/123960.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tim Huffam</dc:creator>
            <guid>http://geekswithblogs.net/TimH/archive/2008/07/23/agile-manifesto---addendum-0.1.aspx</guid>
            <pubDate>Wed, 23 Jul 2008 01:58:02 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/TimH/comments/123960.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/TimH/archive/2008/07/23/agile-manifesto---addendum-0.1.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/TimH/comments/commentRss/123960.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TimH/services/trackbacks/123960.aspx</trackback:ping>
        </item>
        <item>
            <title>Microsoft Word - cursor placed at top of page.</title>
            <link>http://geekswithblogs.net/TimH/archive/2008/04/16/microsoft-word---cursor-placed-at-top-of-page.aspx</link>
            <description>&lt;p&gt;When creating a new document and in Print Layout, Word sometimes places the cursor right at the top of the page - not catering for the top margin.&lt;/p&gt;
&lt;p&gt;I'm not sure why - can only presume this is a bug.&lt;/p&gt;
&lt;p&gt;The workaround, to make it display the cursor where it should be (below the margin) seems to be to view the Header then hide the header:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Select menu item 'View' - 'Header and Footer' (this shows the header)&lt;/li&gt;
    &lt;li&gt;Do the same thing to hide it (Select menu item 'View' - 'Header and Footer').&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That's it - the cursor should now be placed where it should be - so you can start typing text and see it in the correct position on the page.&lt;/p&gt;
&lt;p&gt;HTH&lt;/p&gt;
&lt;p&gt;Tim&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121266"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121266" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/TimH/aggbug/121266.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tim Huffam</dc:creator>
            <guid>http://geekswithblogs.net/TimH/archive/2008/04/16/microsoft-word---cursor-placed-at-top-of-page.aspx</guid>
            <pubDate>Tue, 15 Apr 2008 21:12:23 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/TimH/comments/121266.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/TimH/archive/2008/04/16/microsoft-word---cursor-placed-at-top-of-page.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/TimH/comments/commentRss/121266.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TimH/services/trackbacks/121266.aspx</trackback:ping>
        </item>
        <item>
            <title>Turning off custom menus/always show full menus in Microsoft Office applications (Word, Excel, Outlook, etc)</title>
            <link>http://geekswithblogs.net/TimH/archive/2008/01/30/119080.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-AU" style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;To turn off the annoying customised menus in Microsoft Office products (Word, Excel, Outlook etc) do the following:&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-AU" style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;1. Start up an Office application eg Word.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-AU" style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;2. Select menu item 'Tools' - 'Customize...'.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-AU" style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;3. On the 'Options' tab, check (put a tick in) the 'Always show full menus' check-box, then click on the 'Close' button.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-AU" style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-AU" style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;That's it&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119080"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119080" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/TimH/aggbug/119080.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tim Huffam</dc:creator>
            <guid>http://geekswithblogs.net/TimH/archive/2008/01/30/119080.aspx</guid>
            <pubDate>Tue, 29 Jan 2008 13:43:44 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/TimH/comments/119080.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/TimH/archive/2008/01/30/119080.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/TimH/comments/commentRss/119080.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TimH/services/trackbacks/119080.aspx</trackback:ping>
        </item>
        <item>
            <title>How to make a transparent background/selection on an image using GIMP</title>
            <link>http://geekswithblogs.net/TimH/archive/2006/03/20/72797.aspx</link>
            <description>&lt;OL&gt;
&lt;LI&gt;Open your image. 
&lt;LI&gt;Select the area you want to make transparent. 
&lt;OL&gt;
&lt;LI&gt;Select the appropriate selection tool from the Tool window or the Tools - Selection Tools menu on the Layer window.&amp;nbsp;&amp;nbsp;I usually use the magic wand/fuzzy select&amp;nbsp;(Select contiguous region) tool or the Select regions by color tool. 
&lt;LI&gt;Click in the region you want selected.&amp;nbsp; Use shift-click to add more regions/colors.&lt;BR&gt;Tip: It's easier if you zoom in (View - Zoom menu) to see finer details of&amp;nbsp;exactly what you're selecting.&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;In the Layer window (the one showing your image), select Layer - Transparency - Add Alpha Channel.&amp;nbsp; If this is blanked out then it's already done.&amp;nbsp; This makes sure your image can store transparency data. 
&lt;LI&gt;Select Edit - Clear.&amp;nbsp; This makes the selection transparent. 
&lt;LI&gt;Save the file.&amp;nbsp; &lt;BR&gt;Note: If you save it as a PNG file, be sure to select the 'Save colour values from transparent pixels' option in the Save as PNG dialog box.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;And that's it.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;NOTE&lt;/STRONG&gt;: IE does not support showing PNG transparencies (alpha channels) natively.&amp;nbsp; There are a few work arounds for this (theres loads to be found on google) - here's MS's &lt;A href="http://support.microsoft.com/default.aspx?scid=kb;en-us;294714"&gt;solution&lt;/A&gt;.&amp;nbsp; However, personally, I find the simplest approach is to save the image as a GIF (which all major browers support transparencies for).&lt;/P&gt;
&lt;P&gt;When&amp;nbsp;saving your image as a GIF from within Gimp, it will prompt you to export it - you can select either Indexed or Greyscale - however, on the next screen (Save as GIF) be sure to check the 'Interlace' option.&lt;/P&gt;
&lt;P&gt;HTH&lt;/P&gt;
&lt;P&gt;Tim&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=72797"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=72797" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/TimH/aggbug/72797.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tim Huffam</dc:creator>
            <guid>http://geekswithblogs.net/TimH/archive/2006/03/20/72797.aspx</guid>
            <pubDate>Sun, 19 Mar 2006 21:49:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/TimH/comments/72797.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/TimH/archive/2006/03/20/72797.aspx#feedback</comments>
            <slash:comments>15</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/TimH/comments/commentRss/72797.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TimH/services/trackbacks/72797.aspx</trackback:ping>
        </item>
        <item>
            <title>Arse Bandit Alert!</title>
            <link>http://geekswithblogs.net/TimH/archive/2005/11/10/59660.aspx</link>
            <description>&lt;P&gt;LMAO when stumbling across an RSS aggregator called &lt;A href="http://www.rssbandit.org/"&gt;RSS Bandit&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Actually, it's very good... and the app aint bad either ;-)&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=59660"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=59660" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/TimH/aggbug/59660.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tim Huffam</dc:creator>
            <guid>http://geekswithblogs.net/TimH/archive/2005/11/10/59660.aspx</guid>
            <pubDate>Wed, 09 Nov 2005 21:17:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/TimH/comments/59660.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/TimH/archive/2005/11/10/59660.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/TimH/comments/commentRss/59660.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TimH/services/trackbacks/59660.aspx</trackback:ping>
        </item>
        <item>
            <title>Google helps push Firefox</title>
            <link>http://geekswithblogs.net/TimH/archive/2005/11/10/59659.aspx</link>
            <description>&lt;P&gt;Now &lt;A href="http://weblogs.mozillazine.org/zach/archives/009226.html"&gt;this&lt;/A&gt; is interesting.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=59659"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=59659" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/TimH/aggbug/59659.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tim Huffam</dc:creator>
            <guid>http://geekswithblogs.net/TimH/archive/2005/11/10/59659.aspx</guid>
            <pubDate>Wed, 09 Nov 2005 21:13:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/TimH/comments/59659.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/TimH/archive/2005/11/10/59659.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/TimH/comments/commentRss/59659.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/TimH/services/trackbacks/59659.aspx</trackback:ping>
        </item>
    </channel>
</rss>