<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Blog - ThomThom's Website</title>
		<link>http://www.thomthom.net/blog/</link>
		<atom:link href="http://www.thomthom.net/feed/blog/" rel="self" type="application/rss+xml" />
		<image>
			<url>http://www.thomthom.net/images/v2_1/gear_128.png</url>
			<title>Blog - ThomThom's Website</title>
			<link>http://www.thomthom.net/blog/</link>
		</image>
		<description>Lorem Ipsum</description>
		<language>en</language>
		<item>
			<title>LULT - Sidebar - Changelog</title>
			<pubDate>Sat, 19 Apr 2008 15:58:33 GMT</pubDate>
			<description>&lt;p&gt;Note: this is not an official gadget from Transport For London, so don't ask them for support.
&lt;/p&gt;&lt;p&gt;
If you find any bugs, issues or simply got a feature suggestion, please
contact me.
&lt;/p&gt;&lt;p&gt;Attention Internet Explorer users! IE will incorrectly try to download the .gadget file as .zip from my server. If that happens rename the .zip file to .gadget. Alternatively you can download from one of the mirrors. I'll try to find a fix for this. —17 July 2008
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Download latest version&lt;/li&gt;&lt;li&gt;Live.com (Mirror)&lt;/li&gt;&lt;li&gt;Wincustomize (Mirror)&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;Version 1.3.10 — 25.06.2008&lt;/dt&gt;&lt;dd&gt;Fixed: forgot to enable the update checker.&lt;/dd&gt;&lt;dt&gt;Version 1.3.9 — 24.06.2008&lt;/dt&gt;&lt;dd&gt;Intermediate release before 1.4 to address changes in the TFL source which broke the parser.&lt;/dd&gt;&lt;dt&gt;Version 1.3.0 — 28.03.2008&lt;/dt&gt;&lt;dd&gt;Added option to select what lines to monitor.&lt;/dd&gt;&lt;dt&gt;Version 1.2.1  — 27.06.2007&lt;/dt&gt;&lt;dd&gt;Small tweak to account for change in the sourcecode at TFL.&lt;/dd&gt;&lt;dt&gt;Version 1.2.0 — 09.04.2007&lt;/dt&gt;&lt;dd&gt;Because of all the updates and paches I've had to do I added an update notification system to the gadget. Hope this will make things easier.&lt;/dd&gt;&lt;dt&gt;Version 1.1.0  — 09.04.2007&lt;/dt&gt;&lt;dd&gt;Finally updated the graphics and added an undocked mode.&lt;/dd&gt;&lt;dt&gt;Version 1.0.3  — 02.04.2007&lt;/dt&gt;&lt;dd&gt;Again the format on the TFL site changed. I've contacted them asking of there's any chance they'll provide the data in XML format. Waiting for a reply. Until then, all I can do is make these patches.&lt;/dd&gt;&lt;dt&gt;Version 1.0.2  — 28.03.2007&lt;/dt&gt;&lt;dd&gt;Sorry, yet another update. The source file at the TFL site has been a bit unpredictable after the update. I'm looking into finding a more reliable way of getting the data.&lt;/dd&gt;&lt;dt&gt;Version 1.0.1 — 26.03.2007&lt;/dt&gt;&lt;dd&gt;Sorry. I screwed up the packaging of the gadget. Think I included the old file.&lt;/dd&gt;&lt;dt&gt;Version 1.0.1 — 25.03.2007&lt;/dt&gt;&lt;dd&gt;Emergency patch to account for TFL site change.&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;
Standalone gadget for Windows 2000 or newer: Download&lt;/p&gt;</description>
			<category>changelog</category>
			<category>sidebar</category>
			<category>london</category>
			<category>underground</category>
			<category>vista</category>
			<category>gadget</category>
			<category>software</category>

			<link>http://www.thomthom.net/blog/2008/04/lult-sidebar-changelog/</link>
			<guid>http://www.thomthom.net/blog/2008/04/lult-sidebar-changelog/</guid>
		</item>
		<item>
			<title>Document History Viewer – Making use of &lt;del&gt; and &lt;ins&gt;</title>
			<pubDate>Sat, 22 Mar 2008 12:57:39 GMT</pubDate>
			<description>&lt;p&gt;
I put together some quick examples to how &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; can be used. It’s some of the HTML tags which doesn’t seem to get used allot.
&lt;/p&gt;&lt;p&gt;
Using jQuery I built a crude Document History Viewer. It’s basically a time machine for HTML documents where you can read the document as it where on a previous date.
&lt;/p&gt;&lt;p&gt;
The first example document simply displays some dummy text where I’ve added some &lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt;. It’s the change log for the Colour Swatch gadget  I made. The &lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt; here are just added randomly. However, a change log is a good example where &lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt; is useful to allow the user to read through the various changes to the product.
&lt;/p&gt;&lt;p&gt;
The second example shows how it can be used to present source code where you can see the various changes made to it. If you click on one of the changes you will get the time and date of the change along with the title all extracted from the &lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt; element itself. It also present the cite URL and uses AJAX to fetch the extended information about the reason for the edit.
&lt;/p&gt;&lt;p&gt;
The third and final example is just a test to see how browsers dealt with ordered lists as &lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt; was dynamically hidden and displayed. It appears to work fine. Only issue is that the &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; has to wrap around the &amp;lt;li&amp;gt; element and this is not valid according to the W3Cspecifications.  However, I see this as a flaw in the specifications and I think it’s OK to break it.
&lt;/p&gt;&lt;p&gt;
If you have some creations using &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; I’d like to see it. It’s a set of HTML elements which adds good semantic value to a document, but is rarely used. The jQuery script in the examples are not the best. They are hacked and bashed as the requirement to it changes as I was experimenting. But if you find any use for it, feel free to use it.
&lt;/p&gt;</description>
			<category>html</category>
			<category>del</category>
			<category>ins</category>
			<category>semantic</category>

			<link>http://www.thomthom.net/blog/2008/03/document-history-viewer-making-use-of-lt-del-gt-and-lt-ins-gt/</link>
			<guid>http://www.thomthom.net/blog/2008/03/document-history-viewer-making-use-of-lt-del-gt-and-lt-ins-gt/</guid>
		</item>
		<item>
			<title>&lt;del&gt; and &lt;ins&gt; in lists</title>
			<pubDate>Sat, 22 Mar 2008 12:16:44 GMT</pubDate>
			<description>&lt;p&gt;
While working on some examples to demonstrate &lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt; with a document history viewer I came across an unexpected problem. If you want to remove or insert a whole list item, you can’t wrap it in &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;ins&amp;gt;&lt;/code&gt; as &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt; only allows &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; children.
&lt;/p&gt;&lt;p&gt;
Putting &lt;code&gt;&amp;lt;del&amp;gt;&lt;/code&gt; inside the &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; makes the browsers render the list item as it was empty but with the bullet, leaving an undesired result if you have set &lt;code&gt;del { display: hidden; }&lt;/code&gt;.
&lt;/p&gt;&lt;p&gt;
This appears to be a case where the specifications haven’t taken into account every option. If you remove a list item at some point and would like to mark that up in your HTML document then you want to mark up the entire list item, including the &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; tag, not just it content.
&lt;/p&gt;&lt;p&gt;
Fortunately, it looks like all browsers will render &lt;code&gt;&amp;lt;del&amp;gt;&amp;lt;li&amp;gt;Lorem Ipsum&amp;lt;/li&amp;gt;&amp;lt;/del&amp;gt;&lt;/code&gt; as I want, removing the entire list item including the bullet. This is invalid markup according to the specifications, but I think that this is a good example of where you can ignore that. 
&lt;/p&gt;&lt;p&gt;
I posted a comment about this in the public W3C HTML news group. Hoping that it’d be added to the HTML5 specifications.  So far there’s no response.
&lt;/p&gt;</description>
			<category>html</category>
			<category>w3c</category>
			<category>del</category>
			<category>ins</category>
			<category>lists</category>

			<link>http://www.thomthom.net/blog/2008/03/lt-del-gt-and-lt-ins-gt-in-lists/</link>
			<guid>http://www.thomthom.net/blog/2008/03/lt-del-gt-and-lt-ins-gt-in-lists/</guid>
		</item>
		<item>
			<title>PHP Resumable Download Server</title>
			<pubDate>Sat, 22 Sep 2007 19:23:33 GMT</pubDate>
			<description>&lt;p&gt;
I wanted to add a download section to my site, but at the same time keep statistics of the files downloaded. So made a little PHP script to act as a download server.
&lt;/p&gt;&lt;p&gt;
This little script became a little larger when I added support for partial file downloads. I noticed that many comments in the PHP manual and other sources described the method wrong. For instance, many of them announced to accept multiple byte ranges while that was not the fact. And they also tended to not handle the requested byte range according to the HTTP 1.1 specifications.
&lt;/p&gt;&lt;p&gt;
Now, I'm never pretending this is a complete implementation or free for issues. But it should work very well and I've tried to make it behave to the specifications.
&lt;/p&gt;Features&lt;ul&gt;&lt;li&gt;Serves files from a file repository.&lt;/li&gt;&lt;li&gt;Makes sure no files outside the repository is served.&lt;/li&gt;&lt;li&gt;Lists files if a directory is requested.&lt;/li&gt;&lt;li&gt;Supports partial file request allowing users to pause or accelerate downloads.&lt;/li&gt;&lt;li&gt;Logging function to keep statistic over the file downloads.
  (Needs configuring to work.)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Live Example&lt;/p&gt;Known Issues&lt;ul&gt;&lt;li&gt;Files larger than 2GB might give unexpected results on platforms that use
  32-bit integers. This is because it might affect the calculation of filesizes.&lt;/li&gt;&lt;/ul&gt;Download&lt;p&gt;Installation instructions is in the readme.txt file.&lt;/p&gt;&lt;p&gt;thomthom.net&lt;/p&gt;</description>
			<category>code</category>
			<category>software</category>
			<category>server</category>
			<category>php</category>
			<category>webdesign</category>

			<link>http://www.thomthom.net/blog/2007/09/php-resumable-download-server/</link>
			<guid>http://www.thomthom.net/blog/2007/09/php-resumable-download-server/</guid>
		</item>
		<item>
			<title>Colour Swatch Manager Documentation</title>
			<pubDate>Fri, 07 Sep 2007 15:53:53 GMT</pubDate>
			<description>&lt;p&gt;
	Version: 1.0.3
	Last Updated: 23 September 2007&lt;/p&gt;Related Files&lt;ul&gt;&lt;li&gt;
			Download from thomthom.net
		&lt;/li&gt;&lt;li&gt;
			Download from wincustomize.com
		&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;
			Colour Scheme file icon
		&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;
			PDF Manual
		&lt;/li&gt;&lt;/ul&gt;Table of Contents&lt;ul&gt;&lt;li&gt;Schemes&lt;ul&gt;&lt;li&gt;Scheme Menu&lt;/li&gt;&lt;li&gt;Creating new scheme&lt;/li&gt;&lt;li&gt;Opening scheme&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Swatches&lt;ul&gt;&lt;li&gt;Creating new swatch&lt;/li&gt;&lt;li&gt;Swatch Menu&lt;/li&gt;&lt;li&gt;Expand swatch&lt;/li&gt;&lt;li&gt;Organizing swatches&lt;/li&gt;&lt;li&gt;Deleting swatches&lt;/li&gt;&lt;li&gt;Copying colour values&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Colour Spaces&lt;ul&gt;&lt;li&gt;RGB&lt;/li&gt;&lt;li&gt;HSL&lt;/li&gt;&lt;li&gt;CMYK&lt;/li&gt;&lt;li&gt;Hex&lt;/li&gt;&lt;li&gt;Long&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Configuration&lt;ul&gt;&lt;li&gt;Default Colour Space&lt;/li&gt;&lt;li&gt;Verbose Copy&lt;/li&gt;&lt;li&gt;Lowercase Hex&lt;/li&gt;&lt;li&gt;Show Hotkey&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Schemes&lt;p&gt; Any changes made to a scheme are automatically saved. If you delete or edit a colour there’s no way to undo it. An Undo function might be added in a later version.&lt;/p&gt;Scheme Menu&lt;p&gt;Click on “Scheme: ” to open the Scheme Menu. Here you are presented with the tools related to the scheme itself.&lt;/p&gt;Creating new scheme&lt;p&gt;Choose “New Scheme” from the Scheme Menu. You will then be presented with a window asking for title and filename.&lt;/p&gt;&lt;p&gt;Type the name of your new Scheme and then enter the filename with full path to where you want to store the Scheme. Click the “Browse” button to browse your system and pick the location you want.&lt;/p&gt;&lt;p&gt; This file dialog does not automatically append the *.xcsm file extension to the files. You must remember to add this yourself. This will hopefully be corrected in later version.&lt;/p&gt;Opening scheme&lt;p&gt;Choose “Open Scheme” from the Scheme Menu and locate the file you want to open.&lt;/p&gt;&lt;p&gt;Alternatively you can drag and drop colour scheme files onto the gadget. When you drag a colour scheme onto an already open colour scheme you can choose to append the file you dragged to the one already open.&lt;/p&gt;&lt;p&gt; Currently there’s no way to associate colour scheme with Colour Scheme Manager due to limitation of DesktopX. Hopefully a future version will support this feature.&lt;/p&gt;SwatchesCreating new swatch&lt;p&gt;Click on “New Swatch...” at the bottom of the swatch list. It will only appear when there’s a colour scheme open.&lt;/p&gt;&lt;p&gt;Name the swatch and pick the colour.&lt;/p&gt;&lt;p&gt; At the moment you have to use Windows’ colour picker. It has its limitations that it only lets you enter RGB and HSL values. A future version will feature a custom colour picker with CMYK, Hex and long support.&lt;/p&gt;&lt;p&gt; The HSL value ranges used in Windows’ colour picker is not the same as the ones used in Colour Manager. Colour Manager matches what Photoshop uses.&lt;/p&gt;Swatch Menu&lt;p&gt;Right click on a colour entry to bring up the Swatch Menu. This brings up your options for the specific swatch.&lt;/p&gt;Expand swatch&lt;p&gt;You can expand the swatch to display all the colour codes by left clicking the swatch list-item.&lt;/p&gt;Organizing swatches&lt;p&gt;You can drag and drop the swatches in the list to organize them to your liking.&lt;/p&gt;&lt;p&gt;Warning: Dragging the swatch outside the gadget area will delete them with no undo function available.&lt;/p&gt;Deleting swatches&lt;p&gt;Apart from using the Swatch Menu to delete a swatch you can also drag a swatch outside the gadget area. When you then release the mouse the swatch will be deleted. The drag symbol will say “Delete” to indicate that the swatch will be deleted if you release the mouse.&lt;/p&gt;Copying colour values&lt;p&gt;You can copy the colour values from the various colour spaces by using the Swatch Menu. If you click the colour sample of a swatch you copy the colour values of the default colour space.&lt;/p&gt;Colour SpacesRGB&lt;p&gt;The native colour space of computer monitors.&lt;/p&gt;HSL&lt;p&gt;The Hue is given a value of 0–360 degrees with the Saturation and Lightness ranges from 0–100%. This is similar to how Photoshop let you pick HSL values.&lt;/p&gt;CMYK&lt;p&gt; CMYK colours needs colour profiles of the source and the target medium to be calculated accurately. Colour Scheme Manager only performs a very generic conversion and should only be regarded as guidance.&lt;/p&gt;Hex&lt;p&gt;Hexadecimal values in the same format used in HTML and CSS.&lt;/p&gt;Long&lt;p&gt;Some computer languages take colour codes in one integer number.&lt;/p&gt;ConfigurationDefault Colour Space&lt;p&gt;Here you set the default colour space to be used. This colour space is the one displayed next to the colour when a swatch is collapsed. It’s also the colour space copied when you click the colour sample.&lt;/p&gt;Verbose Copy&lt;p&gt;By default Colour Scheme Manager will only copy the colour values. I.e.: “FF8000” or “255, 128, 0”. If you tick this option it will prefix the text copied with colour space indication; “#FF8000” or “RGB: 255, 128, 0”.&lt;/p&gt;Lowercase Hex&lt;p&gt;Tick this option if you want lower case letters in your hexadecimal values.&lt;/p&gt;Show Hotkey&lt;p&gt;You can assign a hotkey that will bring the gadget to the front of your windows.&lt;/p&gt;</description>
			<category>documentation</category>
			<category>scheme</category>
			<category>colour</category>
			<category>software</category>
			<category>desktopx</category>
			<category>gadget</category>

			<link>http://www.thomthom.net/blog/2007/09/colour-swatch-manager-documentation/</link>
			<guid>http://www.thomthom.net/blog/2007/09/colour-swatch-manager-documentation/</guid>
		</item>
		<item>
			<title>MSN scripting in DesktopX with events</title>
			<pubDate>Sun, 26 Aug 2007 14:00:08 GMT</pubDate>
			<description>&lt;p&gt;
	While I was looking through the 
	Yahoo! Widget manual I came across an interesting piece of code snippet
	demonstrating how to connect to COM objects. The code snippet showed how to
	connect to MSN and access methods and events.
&lt;/p&gt;&lt;p&gt;
	I tried the script in DesktopX with some adaptation and managed to get
	access to the methods. However, there was no way of handling the events
	from COM objects in DesktopX.
&lt;/p&gt;&lt;p&gt;
	While I was doing this I was rambling about it on #stardock. And fortunately
	for me, Julien was there. He had the idea of using a
	Script
	Component.
&lt;/p&gt;&lt;p&gt;
	The script component was able to connect to the MSN COM object and receive
	the events. Now I could connect to the script component and make it act
	as a proxy to the MSN object and receive the events.
&lt;/p&gt;&lt;p&gt;
	I build a little
	
	DesktopX package that demonstrate how to interact with the
	MSN
	automation object.
&lt;/p&gt;Connect to MSN object&lt;p&gt;
	To begin a MSN project you need to add the file MSN.wsc as a custom file to
	one of your objects. Then you can refer to it via the script as such:
&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;jscript&quot;&gt;
var MSN;
MSN = GetObject('script:' + Object.Directory + 'MSN.wsc');
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code class=&quot;vbscript&quot;&gt;
Dim MSN
Set MSN = GetObject(&quot;script:&quot; &amp;amp; Object.Directory &amp;amp; &quot;MSN.wsc&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;
	The DesktopX package example I made demonstrate how to get a list the
	contacts in your contact list in VBScript and JScript.
&lt;/p&gt;Events&lt;p&gt;
	In order to receive events from the MSN objects you need to register the
	functions you can't to be executed whenever an event is triggered.
&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;jscript&quot;&gt;
var MSN;
MSN = GetObject('script:' + Object.Directory + 'MSN.wsc');
MSN.OnContactStatusChange = hello_world;

function hello_world(contact, status)
{
  // contact is the contact that changed status
  // status is the new status code of the contact
  Script.MsgBox(contact.FriendlyName);
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code class=&quot;vbscript&quot;&gt;
Dim MSN
Set MSN = GetObject(&quot;script:&quot; &amp;amp; Object.Directory &amp;amp; &quot;MSN.wsc&quot;)
Set MSN.OnContactStatusChange = GetRef(&quot;hello_world&quot;)

Function hello_world(contact, status)
  ' contact is the contact that changed status
  ' status is the new status code of the contact
  Script.MsgBox(contact.FriendlyName)
End Function
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;
	This is a list of the events you can use:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;OnAppShutdown&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnContactAddedToGroup&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnContactBlockChange&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnContactFriendlyNameChange&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnContactListAdd&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnContactListRemove&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnContactPagerChange&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnContactPhoneChange&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnContactRemovedFromGroup&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnContactStatusChange&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnGroupAdded&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnGroupNameChanged&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnGroupRemoved&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnIMWindowContactAdded&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnIMWindowContactRemoved&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnIMWindowCreated&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnIMWindowDestroyed&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnMyPropertyChange&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnMyStatusChange&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnSignin&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnSignout&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;OnUnreadEmailChange&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;Methods&lt;p&gt;
	At the moment, the only way to get access to the events and methods is by
	using the &lt;code&gt;getMSNObject&lt;/code&gt; function. This means you'll have two
	objects related to MSN. I plan to make a new release which merges the two
	into one object. Check this page for updates.
&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;jscript&quot;&gt;
var MSN, MSNobj;
MSN = GetObject('script:' + Object.Directory + 'MSN.wsc'); // Events
Set MSNobj = MSN.getMSNObject(); // Access to methods via MSNobj
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code class=&quot;vbscript&quot;&gt;
Dim MSN, MSNobj
Set MSN = GetObject(&quot;script:&quot; &amp;amp; Object.Directory &amp;amp; &quot;MSN.wsc&quot;) ' Events
Set MSNobj = MSN.getMSNObject() ' Access to methods via MSNobj
&lt;/code&gt;&lt;/pre&gt;Bring on the gadgets!&lt;p&gt;
	I hope that this will allow people to start making gadgets interacting with
	MSN. It could be simple contact lists residing on the desktop. Or even on
	the Vista Sidebar now that DesktopX 3.5 allows you to export to Sidebar
	gadgets. You could incorporate MSN into an address book. Or make a gadget
	where each user floats in your desktop like icons, displaying their status.
&lt;/p&gt;</description>
			<category>desktopx</category>
			<category>software</category>
			<category>scripting</category>
			<category>msn</category>
			<category>events</category>
			<category>com</category>

			<link>http://www.thomthom.net/blog/2007/08/msn-scripting-in-desktopx-with-events/</link>
			<guid>http://www.thomthom.net/blog/2007/08/msn-scripting-in-desktopx-with-events/</guid>
		</item>
		<item>
			<title>IE ate my linebreaks!</title>
			<pubDate>Tue, 14 Aug 2007 15:36:50 GMT</pubDate>
			<description>&lt;p&gt;
I was working on a syntax highlighter to use on my &lt;code&gt;code&lt;/code&gt; elements on my website. The script is quite simple; it finds all &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; elements that is contained inside a &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt; element and uses the &lt;code&gt;class&lt;/code&gt; attribute of the &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; element to determine what code language it is. I used &lt;code&gt;innerHTML&lt;/code&gt; to extract the content of the &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; element. (Yes, I know, &lt;code&gt;innerHTML&lt;/code&gt; shouldn't be used with XHTML as it will break if it's served as XML, but that's a whole other topic, and to my defence I've been contemplating switching back to HTML.)
&lt;/p&gt;&lt;p&gt;
Everything was fine when I tested it in Firefox, but... (You have heard this so many time...) ...in IE, some of my linebreaks was missing. When I sent the string I got from &lt;code&gt;innerHTML&lt;/code&gt; I noticed that some, not all, of the linebreaks was missing. I even ran a loop on the string and printed all the character codes, but there was nothing. IE had simply eaten the linebreaks and partially normalized the text even though it was inside a &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt; element.
&lt;/p&gt;&lt;p&gt;
The hero of the day was the almighty DOM which even IE didn't dare stealing from. When I accessed the text node inside the &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; element I got all the linebreaks. So instead of &lt;code&gt;.innerHTML&lt;/code&gt; I used &lt;code&gt;.childNodes[0].nodeValue&lt;/code&gt;. It should be noted that this isn't an ideal substitute, as it will not return all the text if it's split up into several text nodes, caused by elements of other DOM nodes. But it's not hard writing a little function to extract all the text nodes and compile them into one string. The important bit is that IE doesn't normalize the string returned and returns all the whitespace as it should.
&lt;/p&gt;&lt;code&gt;.split()&lt;/code&gt; misbehaviour&lt;p&gt;
Another part of the code I ran into trouble with was when I was splitting each line into an array of strings, which I then used to parse through each item in the array and compile a numbered list so I would get line numbers next to each line of the codeblock.
&lt;/p&gt;&lt;p&gt;
I had used &lt;code&gt;.split(/\n\r|\r\n|\r|\n/g);&lt;/code&gt; to return an array of each line of code, which again worked fine in Firefox and Opera, but not in IE. If there was an empty line IE would simply eat it. So a codeblock of 5 lines, whereas 1 was an empty line, IE would return and array of four.
&lt;/p&gt;&lt;p&gt;
The solution was to normalize all linebreaks into &lt;code&gt;\n&lt;/code&gt; and then split the text. For one reason or another, IE then returned all the lines, even the empty ones.
&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;jscript&quot;&gt;
// === THIS DOES NOT WORK AS EXPECTED IN IE === //
// Split each line into an array;
this.lines = this.codeText.split(/\n\r|\r\n|\r\n/g);

// === THIS WORKS IN IE === //
// Convert all linebreaks to \n
this.codeText = this.codeText.replace(/\n\r|\r\n|\r/g, '\n');
// Split each line into an array;
this.lines = this.codeText.split('\n');
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;
So finally I had a syntax highlighter that works in Firefox 2, IE7 and Opera 9. I've yet to test it in other browers as I'm still working on it. The script is located here. It's still a bit rough and needs some work and commenting.
&lt;/p&gt;&lt;p&gt;
Hopefully this will be useful to someone. I didn't find much information myself when I had a look on Google.
&lt;/p&gt;</description>
			<category>split()</category>
			<category>dom</category>
			<category>innerhtml</category>
			<category>ie</category>
			<category>whitespace</category>
			<category>webdesign</category>
			<category>html</category>
			<category>javacript</category>

			<link>http://www.thomthom.net/blog/2007/08/ie-ate-my-linebreaks/</link>
			<guid>http://www.thomthom.net/blog/2007/08/ie-ate-my-linebreaks/</guid>
		</item>
		<item>
			<title>DesktopX - Bugs, issues and feature requests</title>
			<pubDate>Mon, 06 Aug 2007 10:17:42 GMT</pubDate>
			<description>&lt;p&gt;
I've compiled a list of bugs and issues I've come across with DesktopX. Additionally I've added a list of features I'd like to see. I'll be updating this list as I discover new bugs or issues, or they get fixed.
&lt;/p&gt;&lt;p&gt;
Apparently there will be a wiki section up at the Wincustomize Wiki soon. I'll contribute to the list once it comes online.
&lt;/p&gt;&lt;p&gt;Last updated: 16 September 2007&lt;/p&gt;IndexBugs&lt;ol&gt;&lt;li&gt;NULL character in &lt;code&gt;Object_OnDropFiles&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Missing events in javascript&lt;/li&gt;&lt;li&gt;Object Lister Columns&lt;/li&gt;&lt;li&gt;&lt;code&gt;MsgBox&lt;/code&gt; arguments&lt;/li&gt;&lt;li&gt;Code insight misplaces on second monitor&lt;/li&gt;&lt;li&gt;Can not set forms' button caption&lt;/li&gt;&lt;/ol&gt;Issues&lt;ol&gt;&lt;li&gt;Cloning related objects with Widget property&lt;/li&gt;&lt;li&gt;Linebreaks in Edit Controls&lt;/li&gt;&lt;li&gt;Javascript Syntax Highlighting&lt;/li&gt;&lt;li&gt;Old File Dialog&lt;/li&gt;&lt;li&gt;It's &lt;code&gt;Script.MsgBox&lt;/code&gt;, not &lt;code&gt;DesktopX.MsgBox&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;System.SimpleRead&lt;/code&gt; returns junk on error&lt;/li&gt;&lt;li&gt;Undocumented &lt;code&gt;Script&lt;/code&gt; namespace&lt;/li&gt;&lt;li&gt;Opacity doesn't affect child objects&lt;/li&gt;&lt;li&gt;Can not set filedialog filter in forms.&lt;/li&gt;&lt;/ol&gt;Feature Requests&lt;ol&gt;&lt;li&gt;HTTP Headers&lt;/li&gt;&lt;li&gt;Quick Code Insert&lt;/li&gt;&lt;li&gt;Function List&lt;/li&gt;&lt;li&gt;Treeview Object List&lt;/li&gt;&lt;li&gt;Get Text Size&lt;/li&gt;&lt;li&gt;GIF support&lt;/li&gt;&lt;li&gt;Default Scripting Language&lt;/li&gt;&lt;li&gt;Colour Picker Dialog&lt;/li&gt;&lt;li&gt;Debug Console&lt;/li&gt;&lt;li&gt;HSL Colour Control&lt;/li&gt;&lt;li&gt;Disable Objects&lt;/li&gt;&lt;li&gt;Quickfind Objects&lt;/li&gt;&lt;/ol&gt;Bugs&lt;dl&gt;&lt;dt id=&quot;bug1&quot;&gt;NULL character in &lt;code&gt;Object_OnDropFiles&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Fixed in 3.49e[b].014.
The Object_OnDropFiles function will return a string with a NULL character at the end of the list of strings. If you try to output this string to a DX text object any text after the NULL character will not be rendered.
Example, if you drop some files (for instance foo.file and bar.file) onto an object with the following script:
&lt;pre&gt;&lt;code class=&quot;jscript&quot;&gt;
function Object_OnDropFiles(files)
{
  DesktopX.Object('lblStatus').Text = files.charCodeAt(files.length-1) + ' start ' + files + ' end';
}
&lt;/code&gt;&lt;/pre&gt;
This will return: start + foo.file|bar.file as oppose to the expected start + foo.file|bar.file end.
Until a fix for this is made it's recommended that in your code you check for the NULL character at the end of the string is trim it if it should be present.
	&lt;/dd&gt;&lt;dt id=&quot;bug2&quot;&gt;Missing events in javascript&lt;/dt&gt;&lt;dd&gt;
When you use Javascript the &lt;code&gt;Object_OnSetFocus()&lt;/code&gt; and &lt;code&gt;Object_OnKillFocus()&lt;/code&gt; events does not trigger. It works fine when using VBScript.
	&lt;/dd&gt;&lt;dt id=&quot;bug3&quot;&gt;Object Lister Columns&lt;/dt&gt;&lt;dd&gt;Fixed in 3.49e[b].014.
In DesktopX 3.5 beta the columns in the Object Lister doesn't save the order of the columns.
	&lt;/dd&gt;&lt;dt id=&quot;bug4&quot;&gt;&lt;code&gt;MsgBox&lt;/code&gt; arguments&lt;/dt&gt;&lt;dd&gt;&lt;code&gt;MsgBox&lt;/code&gt; is suppose to be able to take up to four arguments, letting you define the icon, buttons and title. However, if you use more than one argument the function throws an error.
&lt;pre&gt;&lt;code class=&quot;jscript&quot;&gt;
// This works - Simple message box text
Script.MsgBox('message');

// This throws an error - Messagebox with stop icon and title text
Script.MsgBox('message', 16 'title');
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;dt id=&quot;bug5&quot;&gt;Code insight misplaces on second monitor&lt;/dt&gt;&lt;dd&gt;
When the script editor is used on a monitor other than the primary, the code insigh drop down list appears on the edge on the primary monitor.
	&lt;/dd&gt;&lt;dt id=&quot;bug6&quot;&gt;Can not set forms' button caption&lt;/dt&gt;&lt;dd&gt;
DesktopX throws an error when you try to set the caption of forms' Ok and Cancel button using &lt;code&gt;Form.OkButton&lt;/code&gt; and &lt;code&gt;Form.CancelButton&lt;/code&gt;.
&lt;pre&gt;&lt;code class=&quot;jscript&quot;&gt;
var frm = DesktopX.CreateForm;
frm.Caption = 'Choose a Colour';
frm.OkButton = 'foo';     // &amp;lt;-- this throws an error
frm.CancelButton = 'bar'; // &amp;lt;-- as do this
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;Issues&lt;dl&gt;&lt;dt id=&quot;issue1&quot;&gt;Cloning related objects with Widget property&lt;/dt&gt;&lt;dd&gt;
When an object, which has a widget name defined, is cloned; and you choose to clone its child and group objects, all the objects with the same widget name is cloned. Though the same widget group might be considered being related its something that can cause problems if you have imported a widget into your existing project as the widget name is then generally applied to all the newly imported objects.
Maybe it's a feature and the widget group is regarded as being related, but I'd prefer if it didn't.
	&lt;/dd&gt;&lt;dt id=&quot;issue2&quot;&gt;Linebreaks in Edit Controls&lt;/dt&gt;&lt;dd&gt;
To add linebreaks in the DX edit control when using Javascript you have to use nr. Any other combination of the line break characters does not result in anything. The standard DX text object however accepts nr, rn, n and n as linebreaks.
	&lt;/dd&gt;&lt;dt id=&quot;issue3&quot;&gt;Javascript Syntax Highlighting&lt;/dt&gt;&lt;dd&gt;
The syntax highlighting in the script editor when using Javascript does not highlight many important keywords rendering the code harder to read.
The syntax highlighting doesn't seem to account for regular expressions. For instance the following code example will mess up the highlighting:
&lt;code&gt;var regex = /&amp;lt;link rel=&quot;pingback&quot; href=&quot;([^&quot;]+)&quot; ?/?&amp;gt;/g;&lt;/code&gt;&lt;/dd&gt;&lt;dt id=&quot;issue4&quot;&gt;Old File Dialog&lt;/dt&gt;&lt;dd&gt;
When selecting custom files to be added to an object you're presented with an old style file dialog which doesn't cope well with files that's not following the 8-3 naming scheme.
	&lt;/dd&gt;&lt;dt id=&quot;issue5&quot;&gt;It's &lt;code&gt;Script.MsgBox&lt;/code&gt;, not &lt;code&gt;DesktopX.MsgBox&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;
The DX manual states that you use &lt;code&gt;DesktopX.MsgBox&lt;/code&gt; to call the prompt dialog, but that's incorrect. It's &lt;code&gt;Script.MsgBox&lt;/code&gt;.
	&lt;/dd&gt;&lt;dt id=&quot;issue6&quot;&gt;&lt;code&gt;System.SimpleRead&lt;/code&gt; returns junk on error&lt;/dt&gt;&lt;dd&gt;
If &lt;code&gt;System.SimpleRead&lt;/code&gt; is told to read a non existing file it will not return an error, but instead random characters of junk. Be adviced to check manually for the existance of files for error recovery.
	&lt;/dd&gt;&lt;dt id=&quot;issue7&quot;&gt;Undocumented &lt;code&gt;Script&lt;/code&gt; namespace&lt;/dt&gt;&lt;dd&gt;
When you use the DesktopX script editor and type Script. the code insight pops up a menu displaying the following commands; &lt;code&gt;InputBox&lt;/code&gt;, &lt;code&gt;InputBoxEx&lt;/code&gt;, &lt;code&gt;MsgBox&lt;/code&gt;, &lt;code&gt;MsgBoxEx&lt;/code&gt;, &lt;code&gt;MsgDbg&lt;/code&gt;. None of these commands are explained anywhere in the documentation.
	&lt;/dd&gt;&lt;dt id=&quot;issue8&quot;&gt;Opacity doesn't affect child objects&lt;/dt&gt;&lt;dd&gt;
Setting the opacity doesn't affect child objects, they retain they full opacity. I had expected it to apply the same opacity to all child objects at's set to be tru children. If an object only has the parent attribute set, but child attribute to false, I wouldn't expect it to inherit the opacity.
	&lt;/dd&gt;&lt;dt id=&quot;issue9&quot;&gt;Can not set filedialog filter in forms.&lt;/dt&gt;&lt;dd&gt;There's not way to spesify the file dialog's filter when using forms or widget preferences.&lt;/dd&gt;&lt;/dl&gt;Feature Requests&lt;dl&gt;&lt;dt id=&quot;feature1&quot;&gt;HTTP Headers&lt;/dt&gt;&lt;dd&gt;
Being able to set headers for the &lt;code&gt;System.SendRequest&lt;/code&gt; function. In order to for instance set the user-agent header as certain sites will return 403 unless you provide an acceptible user-agent string. Something many sites use to fight spambots.
	&lt;/dd&gt;&lt;dt id=&quot;feature2&quot;&gt;Quick Code Insert&lt;/dt&gt;&lt;dd&gt;
A dropdownbox in the script editor that contains a list of availible functions for the &lt;code&gt;Object&lt;/code&gt;, &lt;code&gt;DesktopX&lt;/code&gt;, &lt;code&gt;Widget&lt;/code&gt; and &lt;code&gt;System&lt;/code&gt; namespace. The user can then choose a function from the list and the editor will then insert necessary framework for that function. This list being saved in a textfile would be nice so it could be customized.
	&lt;/dd&gt;&lt;dt id=&quot;feature3&quot;&gt;Function List&lt;/dt&gt;&lt;dd&gt;
A dropdownbox in the script editor that contains a list of all the functions in the script. This would make navigation easier when scripts begin to grow in length.
	&lt;/dd&gt;&lt;dt id=&quot;feature4&quot;&gt;Treeview Object List&lt;/dt&gt;&lt;dd&gt;
Have a treeview in the Object List so that you can contract/expand the tree of objects. Useful when the list of objects grow. Then it's nice to be able to hide the children of objects you are not working on.
	&lt;/dd&gt;&lt;dt id=&quot;feature5&quot;&gt;Get Text Size&lt;/dt&gt;&lt;dd&gt;
Be able to retrieve the width and height of a string based on the font settings of the current object. For instance: &lt;code&gt;Object.TextWidth(&quot;fooBar&quot;)&lt;/code&gt;. Example usage: be able to create a pure DX textbox object that uses variable width font.
	&lt;/dd&gt;&lt;dt id=&quot;feature6&quot;&gt;GIF support&lt;/dt&gt;&lt;dd&gt;
Being able to load GIF files. (being able to load animated GIFs would be a plus)
	&lt;/dd&gt;&lt;dt id=&quot;feature7&quot;&gt;Default Scripting Language&lt;/dt&gt;&lt;dd&gt;
As people might prefer Javascript as oppose to VBScript it'd be nice to set the default language for when you create new scripts.
	&lt;/dd&gt;&lt;dt id=&quot;feature8&quot;&gt;Colour Picker Dialog&lt;/dt&gt;&lt;dd&gt;
In addition to the file dialog it'd be nice to have access to the colour picker dialog.
	&lt;/dd&gt;&lt;dt id=&quot;feature9&quot;&gt;Debug Console&lt;/dt&gt;&lt;dd&gt;
A debug console where you could print debug data into would be of great help. I.e.: &lt;code&gt;Console.Print(foo, bar);&lt;/code&gt;
Allows the developer to use MsgBoxes and custom text objects as debug output.
	&lt;/dd&gt;&lt;dt id=&quot;feature10&quot;&gt;HSL Colour Control&lt;/dt&gt;&lt;dd&gt;
Being able to set all respective HSL values would be nice. Currently Hue and Lightness is supported, but not Saturation.
	&lt;/dd&gt;&lt;dt id=&quot;feature11&quot;&gt;Disable Objects&lt;/dt&gt;&lt;dd&gt;
Being able to disable object preventing events to do not trigger.
	&lt;/dd&gt;&lt;dt id=&quot;feature12&quot;&gt;Quickfind Objects&lt;/dt&gt;&lt;dd&gt;
It'd be nice if there was a textbox where you could enter parts of an object name and it'd filter out the objects listed to only those that match. It'd make it alot easier to manage many objects.
	&lt;/dd&gt;&lt;/dl&gt;</description>
			<category>software</category>
			<category>desktopx</category>

			<link>http://www.thomthom.net/blog/2007/08/desktopx-bugs-issues-and-feature-requests/</link>
			<guid>http://www.thomthom.net/blog/2007/08/desktopx-bugs-issues-and-feature-requests/</guid>
		</item>
		<item>
			<title>New Host</title>
			<pubDate>Sat, 04 Aug 2007 03:41:35 GMT</pubDate>
			<description>&lt;p&gt;
I've just switched to a new host. One that supports PHP5 and goes by the amount of bandwidth used, not pagehits.
&lt;/p&gt;&lt;p&gt;I was closing in on my limit of pagehits due to my gadgets I made that checks in with a file on my server to check for software updates. This caused many pagehits without using hardly any bandwidth.
&lt;/p&gt;&lt;p&gt;
I also wanted to migrate to PHP5 as PHP4 has reached its end of life. Hopefully everything is back online.
&lt;/p&gt;</description>
			<category>website</category>
			<category>test</category>

			<link>http://www.thomthom.net/blog/2007/08/new-host/</link>
			<guid>http://www.thomthom.net/blog/2007/08/new-host/</guid>
		</item>
		<item>
			<title>Testing Pingback Server</title>
			<pubDate>Sat, 21 Jul 2007 00:06:07 GMT</pubDate>
			<description>&lt;p&gt;
This is a test of my Pingback server I wrote for my website.
&lt;/p&gt;&lt;p&gt;
Lorem Ipsum Foo Bar
&lt;/p&gt;&lt;p&gt;
This paragraph contains a link to another post on this site.
&lt;/p&gt;&lt;p&gt;
Lets see if the pingback will register once it's pinged.
&lt;/p&gt;&lt;p&gt;Update: New pingback test to another blog entry.
&lt;/p&gt;&lt;p&gt;
Lorem Ipsum Foo Bar
&lt;/p&gt;&lt;p&gt;
Lorem Ipsum Foo Bar
&lt;/p&gt;</description>
			<category>test</category>
			<category>pingback</category>
			<category>php</category>
			<category>webdesign</category>

			<link>http://www.thomthom.net/blog/2007/07/testing-pingback-server/</link>
			<guid>http://www.thomthom.net/blog/2007/07/testing-pingback-server/</guid>
		</item>

	</channel>
</rss>
