<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-17123347</id><updated>2011-11-28T12:20:57.204+13:00</updated><category term='Visual Basic'/><category term='idiots'/><category term='multi-touch'/><category term='code'/><category term='VB'/><category term='Microsoft Surface'/><category term='FTIR'/><category term='HCI'/><category term='Jeff Han'/><title type='text'>x-cubed.log</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17123347.post-5596391689131963586</id><published>2007-06-24T12:20:00.000+12:00</published><updated>2007-06-24T14:37:02.908+12:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FTIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Surface'/><category scheme='http://www.blogger.com/atom/ns#' term='multi-touch'/><category scheme='http://www.blogger.com/atom/ns#' term='Jeff Han'/><category scheme='http://www.blogger.com/atom/ns#' term='HCI'/><title type='text'>Multiple-Touch Displays</title><content type='html'>&lt;a href="http://www.engadget.com/media/2006/02/still1.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 240px;" src="http://www.engadget.com/media/2006/02/still1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;The announcement of &lt;a href="http://www.microsoft.com/surface"&gt;Microsoft Surface&lt;/a&gt; in the last months has intrigued me. Their videos demonstrate very clever use of the multiple touch screen technology, and have encouraged me to do a bit of research. By the looks of things, a multi-touch display is not that hard to build...&lt;br /&gt;&lt;br /&gt;In February 2006 at the &lt;a href="http://www.ted.com/"&gt;TED conference&lt;/a&gt; in Monterey, California, Jeff Han demonstrated some of his research into multi-touch displays. &lt;a href="http://www.ted.com/index.php/talks/view/id/65"&gt;The video of his talk&lt;/a&gt; was the first time I had seen the true &lt;abbr title="Human Computer Interaction"&gt;HCI&lt;/abbr&gt; capabilities of multi-touch technology. The software he demonstrated was inherently easy to use, as it required no mode switching like conventional &lt;abbr title="Windows, Icons, Mouse and Pointer"&gt;WIMP&lt;/abbr&gt; interfaces do. If you wanted to move something, you didn't need to select the Hand tool and click and drag something across the screen with a cursor, you would just touch the item on the screen and drag it out of the way. If you wanted to make something bigger, you could simply pull the corners of the item apart, rather than searching for the zoom tool. The elegance of this solution is obvious.&lt;br /&gt;&lt;br /&gt;With the public announcement of Microsoft begining production of Microsoft Surface, the demo videos show more powerful user interface concepts. When you combine the technology of multi-touch with other facilities such as barcodes, &lt;abbr title="Radio Frequency IDentification"&gt;RFID&lt;/abbr&gt;, Bluetooth and WiFi, you can make the screen interact with objects other than fingers. Their demonstration videos show the display interacting with digital cameras to show all the photos stored in the camera's memory as soon as it is placed on the table. It interacts with products in a store, showing feature comparisions between different models as soon as they are placed on the table. You can share music and media by dragging content from your Zune or iPod to your friends one. You can even pay the bill at a restaurant by dragging and dropping the menu items onto your credit card. However, with a pricetag of around USD$11,000, this feature set comes at a price...&lt;br /&gt;&lt;br /&gt;So, I've been looking into building my own multi-touch display, so that I can play with this cool technology, and by the looks of it, it isn't to hard to do. &lt;a href="http://en.wikipedia.org/wiki/Multi-touch"&gt;Wikipedia&lt;/a&gt; is always a good starting point and this lead me to Harry van der Veen's blog where &lt;a href="http://www.multitouch.nl/?p=53"&gt;he describes how to build a multi-touch display&lt;/a&gt; based on &lt;abbr title="Frustrated Total Internal Reflection"&gt;FTIR&lt;/abbr&gt; technology. The basic premise is that you shine infra-red light into an acrylic or perspex panel from the edges, and watch the panel surface from an IR sensitive camera. Most of the time, this light will bounce around inside the panel and won't be visible by cameras looking at the surface, but when something touches the surface, some of the light gets reflected out of the panel. This appears on the view from the camera as a blob of light where the contact is made. You can &lt;a href="http://cs.nyu.edu/~jhan/ftirsense/index.html"&gt;see this technology&lt;/a&gt; in operation on &lt;a href="http://cs.nyu.edu/~jhan/"&gt;Jeff Han's website&lt;/a&gt;, &lt;a href="http://www.perceptivepixel.com/"&gt;the website of Perceptive Pixel&lt;/a&gt; (the company he created) and on &lt;a href="http://multi-touchscreen.com/"&gt;this website&lt;/a&gt;. You can also see Steve Hodges from Microsoft Research in Cambridge &lt;a href="http://www.youtube.com/watch?v=ulwA3n8AYM0&amp;v3"&gt;demonstrate his team's research&lt;/a&gt; into adding multi-touch capabilities to a standard laptop. While they don't elaborate on the design too much, it does appear to be based on FTIR technology.&lt;br /&gt;&lt;br /&gt;Jeff Han also &lt;a href="http://cs.nyu.edu/~jhan/ledtouch/index.html"&gt;demonstrates the use of LEDs for multi-touch sensing&lt;/a&gt;. It is a little known fact that while LEDs are produced primarily for emitting light, they can also be used to detect it. Jeff uses this principle to show that a matrix of LEDs can be driven in such a way that they effectively do both at the same time. I can imagine this principal working well for the likes of an LCD backlight, but at this stage the cost would probably be prohibitive.&lt;br /&gt;&lt;br /&gt;Capacitive touch screens are another way to retrofit multi-touch to an existing display, but I haven't been able to find much information about them. Most existing capacitive touch screens are limited to a single point of contact. Having said that, the &lt;a href="http://www.apple.com/iphone/"&gt;Apple iPhone&lt;/a&gt; is &lt;a href="http://multi-touchscreen.com/iphone.html"&gt;believed to be based on capacitive multi-touch technology&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can find a good history of multi-touch techology and various implementations at &lt;a href="http://www.billbuxton.com/multitouchOverview.html"&gt;Bill Buxton's website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So without further ado, I'm off to build myself "&lt;a href="http://www.youtube.com/watch?v=CZrr7AZ9nCY"&gt;a big-ass table&lt;/a&gt;"...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-5596391689131963586?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/5596391689131963586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=5596391689131963586' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/5596391689131963586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/5596391689131963586'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2007/06/multiple-touch-displays.html' title='Multiple-Touch Displays'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-655096310078967067</id><published>2006-12-27T21:42:00.000+13:00</published><updated>2006-12-28T10:24:28.563+13:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idiots'/><category scheme='http://www.blogger.com/atom/ns#' term='VB'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Basic'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Why idiots shouldn't code business-critical apps in VB</title><content type='html'>Ok, so it may sound like a harsh comment, but there have been many times when I've found rather dodgy Visual Basic code in business critical applications. Unfortunately, the ease of programming with VB means that users do not have to have any knowledge of good programming practice, or even a good knowledge of VB to be able to create the next wizz bang application. Show these to your boss, and mention the fact that it took you less than a day to develop and you'll get a promotion in no time!&lt;br /&gt;&lt;br /&gt;So why on earth do we have programmers?&lt;br /&gt;&lt;br /&gt;To those who don't know me too well, you might think that I'm bagging Visual Basic as a language, but this is quite the opposite. The language is brilliant for RAD (Rapid Application Development) due mainly to its readability and (relatively) concise code. I use VB pretty much every day in my current workplace, and I have a library of VB code that does some pretty nifty stuff.&lt;br /&gt;&lt;br /&gt;With Microsoft including a full Visual Basic for Applications development environment in their Microsoft Office suite, they have made it easy for users to play with. This is a good thing. However, users have a natural tendency to assume a great knowledge of programming simply because they know what a macro is.&lt;br /&gt;&lt;br /&gt;This is even true for other programmers with little or no VB experience. All too often, companies use C/C++ developers to develop VB applications. This is fine if the developers have a genuine interest in VB and want to learn it as a language, but all to often they try to apply C/C++ concepts where they shouldn't or needn't be applied.&lt;br /&gt;&lt;br /&gt;I put to you this block of sample VBA code that I found today in a Microsoft Access application at work. Its task is simple: to display a File Open dialog, prompting the user to select a file to open. In this case, the user wasn't a complete idiot, as it appears that they had some familiarity with the Windows API, although this could well have been an Experts Exchange copy-and-paste.&lt;br /&gt;&lt;br /&gt;Exhibit A:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Option Compare Database   'Use database order for string comparisons&lt;br /&gt;Option Explicit&lt;br /&gt;Option Base 0&lt;br /&gt;&lt;br /&gt;Declare Function upg_lstrcpy Lib "Kernel32" Alias "lstrcpy" _&lt;br /&gt;  (ByVal lpDestString As Any, ByVal lpSourceString As Any) As Long&lt;br /&gt;&lt;br /&gt;Type upg_OPENFILENAME&lt;br /&gt;lStructSize As Long&lt;br /&gt;hwndOwner As Integer&lt;br /&gt;hInstance As Integer&lt;br /&gt;lpstrFilter As Long&lt;br /&gt;lpstrCustomFilter As Long&lt;br /&gt;nMaxCustFilter As Long&lt;br /&gt;NFilterIndex As Long&lt;br /&gt;lpstrFile As Long&lt;br /&gt;nMaxFile As Long&lt;br /&gt;lpstrFileTitle As Long&lt;br /&gt;nMaxFileTitle As Long&lt;br /&gt;lpstrInitialDir As Long&lt;br /&gt;lpstrTitle As Long&lt;br /&gt;Flags As Long&lt;br /&gt;nFileOffset As Integer&lt;br /&gt;nFileExtension As Integer&lt;br /&gt;lpstrDefExt As Long&lt;br /&gt;lCustData As Long&lt;br /&gt;lpfnHook As Long&lt;br /&gt;lpTemplateName As Long&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;Declare Function upg_GetOpenFileName Lib "COMMDLG32.DLL" _&lt;br /&gt;  Alias "GetOpenFileName" (OPENFILENAME As upg_OPENFILENAME) As Integer&lt;br /&gt;&lt;br /&gt;Global Const upg_OFN_READONLY1 = &amp;amp;H1&lt;br /&gt;Global Const upg_OFN_OVERWRITEPROMPT1 = &amp;amp;H2&lt;br /&gt;Global Const upg_OFN_HIDEREADONLY1 = &amp;amp;H4&lt;br /&gt;Global Const upg_OFN_NOCHANGEDIR1 = &amp;amp;H8&lt;br /&gt;Global Const upg_OFN_SHOWHELP1 = &amp;amp;H10&lt;br /&gt;Global Const upg_OFN_ENABLEHOOK1 = &amp;amp;H20&lt;br /&gt;Global Const upg_OFN_ENABLETEMPLATE1 = &amp;amp;H40&lt;br /&gt;Global Const upg_OFN_ENABLETEMPLATEHANDLE1 = &amp;amp;H80&lt;br /&gt;Global Const upg_OFN_NOVALIDATE1 = &amp;amp;H100&lt;br /&gt;Global Const upg_OFN_ALLOWMULTISELECT1 = &amp;amp;H200&lt;br /&gt;Global Const upg_OFN_EXTENSIONDIFFERENT1 = &amp;amp;H400&lt;br /&gt;Global Const upg_OFN_PATHMUSTEXIST1 = &amp;amp;H800&lt;br /&gt;Global Const upg_OFN_FILEMUSTEXIST1 = &amp;amp;H1000&lt;br /&gt;Global Const upg_OFN_CREATEPROMPT1 = &amp;amp;H2000&lt;br /&gt;Global Const upg_OFN_SHAREAWARE1 = &amp;amp;H4000&lt;br /&gt;Global Const upg_OFN_NOREADONLYRETURN1 = &amp;amp;H8000&lt;br /&gt;Global Const upg_OFN_NOTESTFILECREATE1 = &amp;amp;H10000&lt;br /&gt;Global Const upg_OFN_SHAREFALLTHROUGH1 = 2&lt;br /&gt;Global Const upg_OFN_SHARENOWARN1 = 1&lt;br /&gt;Global Const upg_OFN_SHAREWARN1 = 0&lt;br /&gt;&lt;br /&gt;'SNIPPED MANY LINES OF CODE&lt;br /&gt;&lt;br /&gt;' Developed by: (NAME REMOVED TO PROTECT THE GUILTY), Inc.&lt;br /&gt;&lt;br /&gt;'SNIPPED MANY MORE LINES OF CODE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Function upg_GetDBFileName$(stype As String, sOpenPrompt$)&lt;br /&gt;Dim szFilter As String&lt;br /&gt;Dim Retval As Variant&lt;br /&gt;Dim wFlags As Integer&lt;br /&gt;Dim varFileName As Variant&lt;br /&gt;Dim szDirectory As String&lt;br /&gt;Dim sPrompt$&lt;br /&gt;&lt;br /&gt;' Specify that the chosen file must already exist if stype &amp;lt;&amp;gt;NEW&lt;br /&gt;&lt;br /&gt;If stype = "new" Then&lt;br /&gt;wFlags = 0&lt;br /&gt;sPrompt = "New Database"&lt;br /&gt;Else&lt;br /&gt;wFlags = upg_OFN_FILEMUSTEXIST1 Or upg_OFN_HIDEREADONLY1&lt;br /&gt;sPrompt = sOpenPrompt&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;szDirectory = "C:\"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'* Define the filter string and allocate space in the "c" string&lt;br /&gt;'* Duplicate this line with changes as necessary for more file templates.&lt;br /&gt;szFilter = szFilter &amp;amp; "Access Database (*.mdb;*.mdd)" &amp;amp; Chr$(0) &amp;amp; "*.mdb;*.mdd" &amp;amp; Chr$(0)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;' Now actually call to get the file name.&lt;br /&gt;varFileName = upg_OpenCommDlg(szDirectory, szFilter, wFlags, "MDD", sPrompt)&lt;br /&gt;If Not IsNull(varFileName) Then&lt;br /&gt;' strip the trailing nulls&lt;br /&gt;varFileName = Left(varFileName, InStr(1, varFileName, Chr(0)) - 1)&lt;br /&gt;Else&lt;br /&gt;varFileName = ""&lt;br /&gt;End If&lt;br /&gt;upg_GetDBFileName = varFileName&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Function upg_OpenCommDlg( _&lt;br /&gt;  szInitialDir As String, szFilter As String, wFlags As Integer, _&lt;br /&gt;  szDefExt As String, szTitle As String) As Variant&lt;br /&gt;Dim OPENFILENAME As upg_OPENFILENAME&lt;br /&gt;Dim szFileName As String&lt;br /&gt;Dim szFileTitle As String&lt;br /&gt;Dim szTitleStr As String&lt;br /&gt;Dim szCurDir As String&lt;br /&gt;Dim wAPIResults As Integer&lt;br /&gt;Dim CRLF$&lt;br /&gt;&lt;br /&gt;CRLF$ = Chr$(13) &amp;amp; Chr$(10)&lt;br /&gt;&lt;br /&gt;'* Allocate string space for the returned strings.&lt;br /&gt;szFileName = Chr$(0) &amp;amp; Space$(255) &amp;amp; Chr$(0)&lt;br /&gt;szFileTitle = Chr$(0) &amp;amp; Space$(255) &amp;amp; Chr$(0)&lt;br /&gt;&lt;br /&gt;'* Give the dialog a caption title.&lt;br /&gt;szTitleStr = szTitle &amp;amp; Chr$(0)&lt;br /&gt;&lt;br /&gt;'* Set up the defualt directory&lt;br /&gt;szCurDir = szInitialDir &amp;amp; Chr$(0)&lt;br /&gt;&lt;br /&gt;'* Set up the data structure before you call the GetFileNameName&lt;br /&gt;&lt;br /&gt;OPENFILENAME.lStructSize = Len(OPENFILENAME)&lt;br /&gt;' This ought to be a legal hWnd, but maybe there's no form open. So we'll&lt;br /&gt;' use 0 here. Windows doesn't seem to mind.&lt;br /&gt;OPENFILENAME.hwndOwner = 0&lt;br /&gt;OPENFILENAME.lpstrFilter = upg_lstrcpy(szFilter, szFilter)&lt;br /&gt;OPENFILENAME.NFilterIndex = 1&lt;br /&gt;OPENFILENAME.lpstrFile = upg_lstrcpy(szFileName, szFileName)&lt;br /&gt;OPENFILENAME.nMaxFile = Len(szFileName)&lt;br /&gt;OPENFILENAME.lpstrFileTitle = upg_lstrcpy(szFileTitle, szFileTitle)&lt;br /&gt;OPENFILENAME.nMaxFileTitle = Len(szFileTitle)&lt;br /&gt;OPENFILENAME.lpstrTitle = upg_lstrcpy(szTitleStr, szTitleStr)&lt;br /&gt;OPENFILENAME.Flags = wFlags&lt;br /&gt;OPENFILENAME.lpstrDefExt = upg_lstrcpy(szDefExt, szDefExt)&lt;br /&gt;OPENFILENAME.hInstance = 0&lt;br /&gt;OPENFILENAME.lpstrCustomFilter = 0&lt;br /&gt;OPENFILENAME.nMaxCustFilter = 0&lt;br /&gt;OPENFILENAME.lpstrInitialDir = upg_lstrcpy(szCurDir, szCurDir)&lt;br /&gt;OPENFILENAME.nFileOffset = 0&lt;br /&gt;OPENFILENAME.nFileExtension = 0&lt;br /&gt;OPENFILENAME.lCustData = 0&lt;br /&gt;OPENFILENAME.lpfnHook = 0&lt;br /&gt;OPENFILENAME.lpTemplateName = 0&lt;br /&gt;&lt;br /&gt;'* This will pass the desired data structure to the Windows API,&lt;br /&gt;'* which will in turn it uses to display the Open Dialog form.&lt;br /&gt;&lt;br /&gt;wAPIResults = upg_GetOpenFileName(OPENFILENAME)&lt;br /&gt;upg_OpenCommDlg = IIf(wAPIResults = 0, Null, szFileName)&lt;br /&gt;End Function&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;B&gt;WTFs in order:&lt;/B&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;What do you plan to achieve with the lpstrcpy function?&lt;br /&gt;lpstrcpy is a kernel function to copy a string from one location to another. It happens to return a pointer to the destination string when successful. These idiots are using a string copy function to return a handle to a string. In VB. Idiots.&lt;/li&gt;&lt;li&gt;Why are the lpstr's in upg_OPENFILENAME declared as long integers?&lt;br /&gt;Ok, so an lpstr is a long integer pointer to a string. So a C programmer would declare it as a long. But strings in VB are stored with pointers, just like they are in every other language I know. So you can declare lpstr's as Strings and save a lot of time and effort.&lt;br /&gt;The only noticable difference is that VB strings are not null terminated, while most Windows API functions expect them to be. This is easily resolved by appending the ASCII character &amp;H0 (stored in the VB constant vbNullChar) to the end of the string before calling the API function.&lt;/li&gt;&lt;li&gt;Who on earth still uses dollar signs, percentages and ampersands to declare the data types of BASIC variables?&lt;br /&gt;Last time I used things like "name$" and "id%" was when I was coding in GW-BASIC and QuickBASIC. Yes, in MS-DOS. Correct me if I'm wrong, but since at least version 4 of Visual Basic (ie: pre-VBA in MS Office) you have been able to use the As keyword to declare the data type of a variable. So "Dim name$" becomes "Dim name As String" and "id%" becomes "Dim id As Integer". Much more readable, and the added bonus is if you decide to change the data type of an existing variable, you don't need to find and replace all existing instances of the variable name. Sweet, huh?&lt;/li&gt;&lt;li&gt;What's with the stype parameter to upg_GetDBFileName$?&lt;br /&gt;Why use a string to represent a parameter that can only have two values: new or old? That's what a boolean is for. Declare the parameter as "bNewFile As Boolean" or similar. Or drop the parameter completely and display "New Database" if the sOpenPrompt$ parameter is blank.&lt;/li&gt;&lt;li&gt;What's with the variants?&lt;br /&gt;In Visual Basic, simple data types are not derived from the object data type. This is because BASIC was never designed as an object-oriented language. Visual Basic has the variant data type as hack to allow programmers to store either simple data types or an object in the same variable. For instance, a variant can contain a string, an integer or a recordset. This is similar to declaring a variable as as object in languages such as Java. Like the object type in Java, you should avoid it's use at all costs. If you know what the data type of a variable will be at development time, there is no excuse to use variants. Variants = BAD.&lt;br /&gt;In this case, variants have been used to allow the upg_OpenCommDlg function to return Null. While it may be common for C functions to return null, this is not common practice in VB. This is because the Null data type is used (particularly when dealing with databases) to represent an unknown value. In this case, if the call to the Windows API returns zero, (ie: the dialog box was cancelled or closed) then the filename is empty, but it is not unknown. The function should return "" (an empty string) or to be more correct, the VB value Empty. This would allow the function to be defined as returning only strings, not variants. (For more information on the difference between Null and Empty in VB see &lt;a href="http://blogs.msdn.com/ericlippert/archive/2003/09/30/53120.aspx"&gt;Eric Lippert's post on MSDN&lt;/a&gt;.)&lt;br /&gt;What makes this all the more entertaining is that the function upg_GetDBFileName$, (which is the only function in the application to call upg_OpenCommDlg,) checks to see if the value is Null and, if so, returns an empty string. Why not do this in upg_OpenCommDlg and save the effort of an extra IF statement?&lt;/li&gt;&lt;li&gt;Why specify the initial directory to be C:\?&lt;br /&gt;Never assume that C:\ exists. The user may have their CD drive as C:\, or they may not have access to view C:\ due to security settings.&lt;br /&gt;And if you don't specify a folder when calling methods of the Common Dialog API, it will default to the user's home directory, which is likely to be the location of any document they are about to open anyway.&lt;/li&gt;&lt;li&gt;Why declare CRLF$?&lt;br /&gt;This is pointless for the following reasons:&lt;br /&gt;1. vbCrLf is a Visual Basic constant that would replace it.&lt;br /&gt;2. They don't use it in this code any way.&lt;/li&gt;&lt;li&gt;What's with the Chr$(0)'s?&lt;br /&gt;How about using vbNullChar and save yourself a function call or two. The two methods are equivalent, so this is only a minor WTF, but constants are always a good idea.&lt;/li&gt;&lt;li&gt;What's with the null characters at the end of the null strings?&lt;br /&gt;The programmers allocate szFileName as empty space to store a string using the common method of Space(255) to return a string of 255 space characters. In this instance, they've decided to improve on that by making it 257 characters with a null at each end. Why? Who knows. The API function will see that the first character is null, and consider it to be a zero length string. Upon the function's return, the memory allocated by the Space(255) function may be overwritten if the API decides to change the value of this variable. So the end null character is pointless.&lt;br /&gt;Note that the Space function in VB is not a memory function that allocates space of 255 bytes, it is a string function that returns a string containing the specified number of ASCII space characters. The actual character is irrelevant when calling the API, as it will get overwritten anyway.&lt;/li&gt;&lt;li&gt;What's going on with hwndOwner?&lt;br /&gt;The Common Dialog API in Windows provides standard looking File Open/File Save/Print and Color Chooser dialog boxes. Because it creates these dialog windows from outside your application, hwndOwner is used to pass a handle to a window representing the owner of the dialog box. In most applications, this will be the handle of the window containing the button or menu item that triggered the dialog box to be displayed. This allows Windows to ensure that the dialog box stays modal in that application until such time as it has been closed. This also reduces the chances of having an orphaned dialog box drifting through the Z-order as you Alt-Tab between applications.&lt;br /&gt;In most VB applications, your call to a wrapper function such as upg_OpenCommDlg would contain a parameter of type Form. Every window in VB is a Form. Every Form as a property called hWnd which returns the underlying handle used by Windows as an identifier of that window. Therefore, you can provide the Common Dialog API with an hWnd to keep the relationship between the application and the dialog box.&lt;br /&gt;In this application, as noted in the comments, the developers weren't sure if a window would currently be displayed by their application, so they default the value of hWndOwner to zero, making the dialog box an orphan. Initially, their comment sounded beliveable. This function is buried deep in the code of the application, and could theoretically be called at anytime. However, this is a GUI application. All GUI applications have windows, and at least one of those windows will always be loaded. That window may not be visible, but Windows will still know it exists, so it will have an hWnd.&lt;br /&gt;To make the matter worse, because this application is a Microsoft Access database, they could have easily used the Application.hWndApplication function to return the handle to the Microsoft Access window, irrespective of what is happening in the database itself.&lt;/li&gt;&lt;li&gt;(See WTF 1 regarding the blatant abuse of the lpstrcpy function)&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;While this appears to be old code that may have been written for Microsoft Access '97, I thought it would be good to show how I would do this in recent versions of Microsoft Access:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Function PromptForDBFileName(Optional sOpenPrompt As String = "") As String&lt;br /&gt;  Dim fd As FileDialog&lt;br /&gt;  Set fd = Application.FileDialog(msoFileDialogFilePicker)&lt;br /&gt;&lt;br /&gt;  fd.Title = IIf(sOpenPrompt = "", "New Database", sOpenPrompt)&lt;br /&gt;  fd.Filters.Add "Access Database (*.mdb;*.mdd)", "*.mdb;*.mdd"&lt;br /&gt;&lt;br /&gt;  If fd.Show Then PromptForDBFileName = fd.SelectedItems(1)&lt;br /&gt;End Function&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Note that this function replaces all the code shown above. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;I'm glad I've gotten that off my chest. Now to tidy this mess up...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-655096310078967067?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/655096310078967067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=655096310078967067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/655096310078967067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/655096310078967067'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/12/why-idiots-shouldnt-code-business.html' title='Why idiots shouldn&apos;t code business-critical apps in VB'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-115804238750178677</id><published>2006-09-12T17:45:00.000+12:00</published><updated>2006-11-15T14:49:35.268+13:00</updated><title type='text'>Snakes on a Plane - The Review</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2324/1643/200/SnakesOnAPlane.png" border="0" alt="" /&gt;CAUTION: POTENTIAL SPOILERS!&lt;br /&gt;&lt;br /&gt;I went with a mate to see Snakes on a Plane (&lt;A HREF="http://www.snakesonaplane.com/" TARGET="_blank"&gt;official site&lt;/A&gt; or &lt;A HREF="http://www.imdb.com/title/tt0417148/" TARGET="_blank"&gt;IMDB&lt;/A&gt;) over the weekend. Well, what can I say?&lt;br /&gt;&lt;br /&gt;I'd previously heard mixed reviews about this movie, some saying it was as cheap as the title made it out be, while others saying that it was actually a jolly good flick. This movie had the ability to be a well produced, well acted, suspenseful work of art. Unfortunately, it failed on almost all counts.&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.imdb.com/name/nm0000168/" TARGET="_blank"&gt;Samuel L. Jackson's&lt;/A&gt; character is made out to be the hero of the story, when in reality &lt;A HREF="http://www.imdb.com/name/nm0680667/" TARGET="_blank"&gt;Nathan Phillips&lt;/A&gt; ("Sean Jones"), &lt;A HREF="http://www.imdb.com/name/nm0860380/" TARGET="_blank"&gt;Kenan Thompson&lt;/A&gt; ("Troy McDaniel"), &lt;A HREF="http://www.imdb.com/name/nm0000523/" TARGET="_blank"&gt;Julianna Margulies&lt;/A&gt; ("Claire Miller") could each have been the hero, as they all play a more valuable role in the movie than Jackson. (According to my mate, the original scripts were titled "Snakes on a Plane" and when the producers went to rename it, Jackson refused and asked it to be left with the crummy title.)&lt;br /&gt;&lt;br /&gt;As usual, &lt;A HREF="http://www.imdb.com/name/nm0004761/" TARGET="_blank"&gt;Rachel Blanchard&lt;/A&gt; plays a dizzy blonde ("Mercedes Harbont", another Paris Hilton), while &lt;A HREF="http://www.imdb.com/name/nm0018416/" TARGET="_blank"&gt;Flex Alexander&lt;/A&gt; plays a professional musician ("Three G's"). Neither of these characters have any depth, nor do they perform any useful role in the story line, apart from perhaps Mercedes' dog.&lt;br /&gt;&lt;br /&gt;The computer graphics were obvious (the boa constrictor scene is a perfect example) and the plot lines were flawed:&lt;br /&gt;- How did snakes manage to get into the cockpit at the same time that they entered the rear cabin, without any appearing in the forward cabin or first class?&lt;br /&gt;- How did the boa constrictor start off in the light fitting? After the boa gets out, there is a scene that shows quite clearly that the light fitting is a sealed unit.&lt;br /&gt;- Surely pheromones would just make the snakes amorous, not angry?&lt;br /&gt;- Isn't it a coincidence that the lifeboat is EXACTLY the same shape as the stairwell?&lt;br /&gt;- Blowing a whole in the side of the plane would not be high on my list of suggestions as a possible way to resolve the snake situation. Not only would it reck the structural integrity of the plane, but the passengers would be unable to hold themselves in, and there would be no air to breath!&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.imdb.com/name/nm0680667/" TARGET="_blank"&gt;Nathan Phillips&lt;/A&gt; ("Sean Jones"), &lt;A HREF="http://www.imdb.com/name/nm0860380/" TARGET="_blank"&gt;Kenan Thompson&lt;/A&gt; ("Troy McDaniel"), &lt;A HREF="http://www.imdb.com/name/nm0000523/" TARGET="_blank"&gt;Julianna Margulies&lt;/A&gt; ("Claire Miller") clearly produced the most polished performances in the whole movie and they deserve congratulations for bring some real believability to the whole thing.&lt;br /&gt;&lt;br /&gt;While the movie has some unexpected surprises (ie: snakes jumping out from seemingly innocuous places), it is very predictable and amateurish. I don't know what the budget was, but I'd hazard a guess at $1.95 (ooo, enough for a Big Mac!). With movies costing $14 to view these days, I came out feeling very short changed...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-115804238750178677?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.snakesonaplane.com/' title='Snakes on a Plane - The Review'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/115804238750178677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=115804238750178677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/115804238750178677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/115804238750178677'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/09/snakes-on-plane-review.html' title='Snakes on a Plane - The Review'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-115398298847629377</id><published>2006-07-27T18:30:00.000+12:00</published><updated>2006-11-15T14:49:35.162+13:00</updated><title type='text'>How to run the free version of Hamachi as a Windows Service</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;" src="http://photos1.blogger.com/blogger/2324/1643/320/hamachi.png" border="0" alt="" /&gt;I recently tried out the Hamachi VPN client, but I was disappointed to see that the free version of &lt;a href="http://www.hamachi.cc/"&gt;Hamachi&lt;/a&gt; wouldn't run as a Windows Service, like OpenVPN.&lt;br/&gt;&lt;br /&gt;It is possible to use an application like SrvAny, from the Windows NT Resource Kit to overcome this, but this is beyond your average user.&lt;br/&gt;&lt;br /&gt;But within a half hour, I had created a simple little service launcher for it, using Visual Studio. This neat little app appears as a Windows service, and requires no configuration. When it starts, it checks the registry to determine where Hamachi is installed, then spawns Hamachi. When the service is stopped, it automatically kills the Hamachi process. Likewise, if the instance of Hamachi dies for whatever reason, the service will stop. This means that you can use Windows' inbuilt automatic service restart facilities to restart the service if Hamachi dies.&lt;br/&gt;&lt;br /&gt;The downside is that the application cannot be configured, because there is no visible GUI. This isn't much of a problem as you can configure the application by running it normally and then closing the application, before you start the service.&lt;br/&gt;&lt;br /&gt;This software is available as freeware from the link below.&lt;br/&gt;&lt;br /&gt;&lt;a href="http://silenceisdefeat.org/~x-cubed/HamachiService.zip"&gt;Download the Hamachi Background Service launcher (10KB)&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-115398298847629377?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://silenceisdefeat.org/~x-cubed/HamachiService.zip' title='How to run the free version of Hamachi as a Windows Service'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/115398298847629377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=115398298847629377' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/115398298847629377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/115398298847629377'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/07/how-to-run-free-version-of-hamachi-as.html' title='How to run the free version of Hamachi as a Windows Service'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-115140366893571041</id><published>2006-06-27T21:20:00.000+12:00</published><updated>2006-11-15T14:49:35.087+13:00</updated><title type='text'>Asterisk &amp; the Digium TDM400P</title><content type='html'>At last, the Digium TDM400P has received a &lt;A HREF="http://www.telepermit.co.nz/"&gt;Telepermit&lt;/A&gt; to allow its use in New Zealand. This means that those who are interested in all things VoIP can now try it out for real with their own PABX! For those who are unawares, &lt;A HREF="http://www.asterisk.org"&gt;Asterisk&lt;/A&gt; is the way to go, and if you don't want to hack around getting it installed try the &lt;A HREF="http://asteriskathome.sourceforge.net/"&gt;Asterisk@Home&lt;/A&gt; distro. To source the hardware I can recommend &lt;A HREF="http://www.nicegear.co.nz/"&gt;nicegear&lt;/A&gt;, and for New Zealand-based support, check out their sister site the &lt;A HREF="http://astug.org.nz/wiki/Main_Page"&gt;New Zealand Asterisk Users Group&lt;/A&gt;. We've got a PBX set up at home now, so I thought it would be useful to share the experience.&lt;br /&gt;&lt;br /&gt;If you intend on using Asterisk with a landline, make sure you contact your telephony provider to arrange &lt;A HREF="http://astug.org.nz/wiki/Disconnect_Supervision"&gt;Disconnect Supervision&lt;/A&gt;. Basically, the Digium board relies on this extra signalling to know when an incoming landline caller hangs up the phone. If you don't do this, then you'll find that the Digium board won't release the line when remote callers hang up.&lt;br /&gt;If you are a &lt;A HREF="http://www.telecom.co.nz/"&gt;Telecom&lt;/A&gt; customer, you need to ring Telecom Business on 126 and ask for "Clear Forward and Answer Reversal". It is available at no cost to business customers. &lt;strong&gt;Note that Telecom Residential customers may not be eligible for this service.&lt;/strong&gt; However, you can try asking for it. Don't call 123 as they won't know what the hell you're on about, call 126 instead.&lt;br /&gt;&lt;br /&gt;When installing the hardware drivers, make sure you use the patched version of the driver, as the current Zaptel driver build is not Telepermit compliant. Check out the bottom of the &lt;A HREF="http://nicegear.co.nz/"&gt;nicegear&lt;/A&gt; home page for more information. Make sure that you use the extra command line switches too. More information is available on &lt;A HREF="http://astug.org.nz/wiki/TDM400P"&gt;ASTUG&lt;/A&gt;.&lt;br /&gt;&lt;br /&gt;If you don't like the multitude of configuration files, you might want to look at using &lt;A HREF="http://www.voip-info.org/wiki-Asterisk+RealTime"&gt;Asterisk RealTime&lt;/A&gt; to pull the configuration out of a MySQL database or similar. If you decide to go down this track, make sure you implement RealTime &lt;i&gt;before&lt;/i&gt; you get stuck into configuring Asterisk, as it can be painful to retrofit. Note also that RealTime does not seem to be supported by any of the free front-ends for Asterisk, such as FreePBX, so all the configuration might need to be done manually or by using custom scripts.&lt;br /&gt;&lt;br /&gt;While not for the faint hearted, Asterisk offers the coolest functionality and utimately the best value for money. After all, you can't beat free!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-115140366893571041?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.voip-info.org/wiki' title='Asterisk &amp; the Digium TDM400P'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/115140366893571041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=115140366893571041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/115140366893571041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/115140366893571041'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/06/asterisk-digium-tdm400p.html' title='Asterisk &amp; the Digium TDM400P'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-114890161113536505</id><published>2006-05-29T23:18:00.000+12:00</published><updated>2006-11-15T14:49:34.998+13:00</updated><title type='text'>Terry Tate: Office Linebacker</title><content type='html'>If you havent seen &lt;A HREF="http://board.iexbeta.com/lofiversion/index.php/t47380.html"&gt;these videos&lt;/A&gt; you're missing out. Classic! ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-114890161113536505?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://board.iexbeta.com/lofiversion/index.php/t47380.html' title='Terry Tate: Office Linebacker'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/114890161113536505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=114890161113536505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114890161113536505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114890161113536505'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/05/terry-tate-office-linebacker.html' title='Terry Tate: Office Linebacker'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-114748992133187546</id><published>2006-05-13T13:05:00.000+12:00</published><updated>2006-11-15T14:49:34.884+13:00</updated><title type='text'>Diebold Election Systems are truly holey!</title><content type='html'>I have been watching with interest, the debate in the United States about the use of electronic voting systems during government elections. I personally believe that it is possible to have an electronic voting system that is a suitable replacement for the traditional paper-based methods, but the current system is a complete pig's ear.&lt;br /&gt;&lt;br /&gt;For some reason, &lt;A HREF="http://www.diebold.com/dieboldes/default.htm"&gt;Diebold Election Systems&lt;/A&gt; was chosen as the preferred provider of the technology for the US Elections. Previous to this, the only systems that I associated with Diebold were the photocopier credit systems used at schools, universities and libraries, to allow you to pay for photocopies using your membership card. But it turns out that they also manufacture Automated Teller Machines and other self-service electronic kiosks. If the security of their ATM's is anything like the security of the voting systems, then banks have a lot to worry about.&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://tvnz.co.nz/view/page/123456/208937/"&gt;Diebold were pulled up in July 2003&lt;/A&gt;, after it was discovered that encryption of the data collected by the systems was poor at best, and that voters could create their own smart cards, enabling them to vote more than once. And this was discovered after the voting software itself was released publicly on a Diebold website!&lt;br /&gt;&lt;br /&gt;Then in September 2004, &lt;A HREF="http://arstechnica.com/news.ars/post/20040907-4164.html"&gt;the state of California accused Diebold of using uncertified software on the machines&lt;/A&gt;. This resulted in a &lt;A HREF="http://caag.state.ca.us/newsalerts/2004/04-130.htm"&gt;US$2.6 million settlement&lt;/A&gt;.&lt;br /&gt;&lt;br /&gt;But even better than that, is the latest debarcle. A recent Slashdot article lead me in the direction of &lt;A HREF="http://www.schneier.com/blog/archives/2006/05/election_machin_1.html"&gt;this blog entry&lt;/A&gt; by Bruce Schneier, world-reknowned computer security researcher. According to a &lt;A HREF="http://www.blackboxvoting.org/BBVtsxstudy.pdf"&gt;recent report by Black Box Voting&lt;/A&gt;, the Diebold devices run a basic build of Microsoft Windows CE. While the details are sketchy, it would appear that the Diebold devices ship with Windows Plug'n'Play support enabled...&lt;br /&gt;&lt;br /&gt;The devices have dual PCMCIA slots underneath the unit (indicated by B in the picture). The basic idea is that any voter with a PCMCIA memory card (or any other memory card with a PCMCIA adapter), can probably update the software on the machine at their will, and remove the card without anybody knowing that the software was changed.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/2324/1643/1600/Diebold.png"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2324/1643/320/Diebold.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Or for a more sophisticated attack, voters can use a standard Philips head screwdriver to disassemble the unit, and install an MMC/SD card in the hidden, internal SD slot (located just above the CMOS battery in the picture). Again, this card could simply be a memory card, containing a custom application, or it could be an SD WiFi card, providing a way to remotely trigger an attack. An external inspection of the unit would not show any indication of this type of attack.&lt;br /&gt;&lt;br /&gt;Or if all this sounds too easy, you can replace the entire bootloader on the machine with your own, by simply having a file with the appropriate name sitting on a removable memory card while the machine is booting up. Although there are integrity checks in the boot loader, it sounds like they are limited to checking the filename, the size of the file and possibly the file header.&lt;br /&gt;&lt;br /&gt;My, my, so many choices! It sounds like even school kids and script kiddies could crack these things.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-114748992133187546?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.schneier.com/blog/archives/2006/05/election_machin_1.html' title='Diebold Election Systems are truly holey!'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/114748992133187546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=114748992133187546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114748992133187546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114748992133187546'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/05/diebold-election-systems-are-truly.html' title='Diebold Election Systems are truly holey!'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-114669107632849157</id><published>2006-05-04T09:12:00.000+12:00</published><updated>2006-11-15T14:49:34.780+13:00</updated><title type='text'>Dvorak reckons MS is dead in the water...</title><content type='html'>Looks like I'm not the only one who thinks that &lt;A HREF="/2006/04/google-microsoft-apple-etc.html"&gt;Microsoft is having issues&lt;/A&gt;. John Dvorak agrees in &lt;A HREF="http://www.marketwatch.com/News/Story/Story.aspx?guid=%7B629B28CD-9E0E-48CA-8E8B-243AA6E2CB92%7D&amp;dist=lycos&amp;siteid=lycos"&gt;this article at MarketWatch&lt;/A&gt;. He makes some very interesting points.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-114669107632849157?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.marketwatch.com/News/Story/Story.aspx?guid=%7B629B28CD-9E0E-48CA-8E8B-243AA6E2CB92%7D&amp;dist=lycos&amp;siteid=lycos' title='Dvorak reckons MS is dead in the water...'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/114669107632849157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=114669107632849157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114669107632849157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114669107632849157'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/05/dvorak-reckons-ms-is-dead-in-water.html' title='Dvorak reckons MS is dead in the water...'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-114631267036096124</id><published>2006-04-29T23:16:00.000+12:00</published><updated>2006-11-15T14:49:34.716+13:00</updated><title type='text'>Google, Microsoft, Apple, etc</title><content type='html'>Ok, so it's been a while since my last post. Ok, quite a while. Yes, I know, over a month!&lt;br /&gt;&lt;br /&gt;Anyway, I thought I'd start back into it by discussing happenings in the IT industry. I was having an interesting chat about the state of things with a mate tonight, and these were a few of my thoughts. Now I'm no business expert, or fortune-telling psychic, but me thinks big things are happening.&lt;br /&gt;&lt;br /&gt;For a start, Microsoft are in a lot of tepid water at the moment. For a start, the EU debarcle does not seem to be going well for them (&lt;A HREF="http://www.msnbc.msn.com/id/12528703/" TARGET="_blank"&gt;here&lt;/A&gt; and &lt;A HREF="http://www.theregister.co.uk/2006/04/28/ec_microsoft_analysis/" TARGET="_blank"&gt;here&lt;/A&gt;). They haven't released a desktop version of Windows for about four years and Office is now about three years old. Added to that is the fact that the distant Vista is getting cut down &lt;A HREF="http://www.theregister.co.uk/2006/03/27/windows_vista_reader_survey/" TARGET="_blank"&gt;more&lt;/A&gt; and &lt;A HREF="http://www.theregister.co.uk/2006/04/27/av_on_ms/" TARGET="_blank"&gt;more&lt;/A&gt;, although they still have &lt;A HREF="http://www.theregister.co.uk/2006/04/28/microsoft_third_quarter_costs/" TARGET="_blank"&gt;big hopes&lt;/A&gt;. And in the last few days, &lt;A HREF="http://www.twincities.com/mld/twincities/business/technology/14456239.htm" TARGET="_blank"&gt;Microsoft shares are sinking faster than Tiger's golf balls&lt;/A&gt;. The only thing that does seem to have worked out for them lately is the Xbox 360.&lt;br /&gt;&lt;br /&gt;Apple seem to have taken a Microsoft-esque approach in recent years, marketing crap products to the masses. The uptake of iPods has been huge (with even &lt;A HREF="http://www.theregister.co.uk/2006/03/06/pope_ipod/" TARGET="_blank"&gt;the Pope getting an iPod recently&lt;/A&gt;), despite reports of &lt;A HREF="http://www.theregister.co.uk/2005/10/24/apple_sued_over_nano/" TARGET="_blank"&gt;poor quality&lt;/A&gt; and Harvey Norman reporting &lt;A HREF="http://www.insanely-great.com/news.php?id=5891" TARGET="_blank"&gt;a high return rate&lt;/A&gt;. Even the &lt;A HREF="http://feed.proteinos.com/item/3731" TARGET="_blank"&gt;Motorola ROKR spin-off has been a flop&lt;/A&gt;. It intrigues me that a lot of people don't even seem to realise that there are other personal music players available with equal or better features for much less. So it just goes to prove once again, that you don't need to have a good product to make good money.&lt;br /&gt;&lt;br /&gt;Google on the other hand seems to be the company of the 21st century. Through clever thought and planning, they have a company which while being a monolith is still highly respected. Their &lt;A HREF="http://www.theregister.com/2006/03/20/google_doj_data/" TARGET="_blank"&gt;recent run-in with the DOJ&lt;/A&gt; allowed them to illustrate to the world what they stand for. The have also made some clever acquistions in the last couple of years, including Blogger, Keyhole Software (&lt;A HREF="http://earth.google.com/" TARGET="_blank"&gt;Google Earth&lt;/A&gt;)and @Last Software, makers of &lt;A HREF="http://sketchup.google.com/" TARGET="_blank"&gt;SketchUp&lt;/A&gt;. The only real hit for them recently has been the &lt;A HREF="http://www.nytimes.com/2006/04/23/magazine/23google.html?pagewanted=print" TARGET="_blank"&gt;China censorship issue&lt;/A&gt;.&lt;br /&gt;&lt;br /&gt;The way I see it, companies like Apple and Microsoft will soon find their out-dated habits hard to continue with. Companies like Google are demonstrating that it is possible to be BFG (ie: Roald Dahl's Big Friendly Giant, not Doom's Bio Force Gun ;-) in this modern age.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;See also&lt;/strong&gt;: &lt;A HREF="http://www.domain-b.com/management/general/20060429_common.html" TARGET="_blank"&gt;this article on innovation&lt;/A&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-114631267036096124?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/114631267036096124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=114631267036096124' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114631267036096124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114631267036096124'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/04/google-microsoft-apple-etc.html' title='Google, Microsoft, Apple, etc'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-114333680566064866</id><published>2006-03-26T13:33:00.000+12:00</published><updated>2006-11-15T14:49:34.634+13:00</updated><title type='text'>Commonwealth Games Results</title><content type='html'>Well, our &lt;a href="http://www.melbourne2006.com.au/Schedule+and+Results/Medals/New+Zealand.htm"&gt;medal results&lt;/a&gt; are almost final, with only the Mens Cycling Road Race outstanding. As always, New Zealand has performed exceedingly well in the Commonwealth Games, and we are currently 7th in the country rankings. My congratulations to the competitors for their performance, and to Melbourne for providing a great location for the games.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-114333680566064866?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.melbourne2006.com.au/Schedule+and+Results/Medals/New+Zealand.htm' title='Commonwealth Games Results'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/114333680566064866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=114333680566064866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114333680566064866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114333680566064866'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/03/commonwealth-games-results.html' title='Commonwealth Games Results'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-114172544164235557</id><published>2006-03-07T22:55:00.000+13:00</published><updated>2006-11-15T14:49:34.552+13:00</updated><title type='text'>The bloody Aussies!</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/2324/1643/1600/Australian%20DST%20Patch.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2324/1643/400/Australian%20DST%20Patch.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-114172544164235557?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/114172544164235557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=114172544164235557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114172544164235557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/114172544164235557'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/03/bloody-aussies.html' title='The bloody Aussies!'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-113998187154161069</id><published>2006-02-15T18:29:00.000+13:00</published><updated>2006-11-15T14:49:34.458+13:00</updated><title type='text'>eMusic blows goats!</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/2324/1643/1600/eMusic.2.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2324/1643/200/eMusic.jpg" border="0" alt="" /&gt;&lt;/a&gt;Well, I downloaded the latest version of Winamp the other day, and decided to try out the offer for 100 free MP3s from &lt;A HREF="http://www.emusic.com/"&gt;eMusic.com&lt;/A&gt;. What a waste of time. I should have seen it coming. I mean, why else would any self-respecting dotcom site be willing to give away 100 MP3s?&lt;br /&gt;&lt;br /&gt;I was expecting to see a huge variety of music from some of the major artists like Coldplay, Eminem, Prodigy, etc, but really it's a whole load of flipside tracks that no other company was willing to buy. It can be broken into three main categories:&lt;br /&gt;&lt;br /&gt;- startup bands who don't have (read: will never get) a record deal,&lt;br /&gt;- flipside tracks you'd expect on compilation albums, and&lt;br /&gt;- tracks from dead people.&lt;br /&gt;&lt;br /&gt;You may be one of those who are interested in that sort of thing, but it's not my cup of tea.&lt;br /&gt;&lt;br /&gt;I prefer coffee...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-113998187154161069?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.emusic.com/' title='eMusic blows goats!'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/113998187154161069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=113998187154161069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113998187154161069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113998187154161069'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/02/emusic-blows-goats.html' title='eMusic blows goats!'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-113970404323561352</id><published>2006-02-12T13:03:00.000+13:00</published><updated>2006-11-15T14:49:34.382+13:00</updated><title type='text'>Another usability rant...</title><content type='html'>It continues to amaze me that there are a large number of developers, developing Microsoft Windows user interfaces, who haven't heard of the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwue/html/welcome.asp"&gt;Offical User Interface Guidelines&lt;/A&gt;. That's right, Microsoft supply freely accessible information on how user interfaces should look and behave when they are running under Microsoft Windows. And most of this is basic stuff. Consider these points from the User-Centered Design Principles:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;- The operational assumption is that the user (not the computer or software) initiates actions. The user plays an active rather than reactive role. You can automate tasks, but implement the automation in a way that allows the user to choose or control it. &lt;br /&gt;&lt;br /&gt;- Because of their widely varying skills and preferences, users must be able to personalize aspects of the interface. The system software provides user access to many of these aspects. Your software should reflect user settings for different system properties, such as colors, fonts, or other options. &lt;br /&gt;&lt;br /&gt;- Your software should be as interactive and responsive as possible. Avoid modes whenever possible. A mode is a state that excludes general interaction or otherwise limits the user to specific interactions. When a mode is the best or only design alternative (for example, for selecting a particular tool in a drawing program) make sure the mode is obvious, visible, the result of an explicit user choice, and easy to cancel.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;And there's other basic stuff in there too, like:&lt;br /&gt;&lt;br /&gt;- ensuring your application supports the tab key to move between text boxes (yes, Relic Entertainment this applies to you!),&lt;br /&gt;&lt;br /&gt;- making menus and buttons are accessible using keyboard shortcuts (Alt-x, etc),&lt;br /&gt;&lt;br /&gt;- ensuring you can cancel a process after it has started,&lt;br /&gt;&lt;br /&gt;- when menus are used, make sure the File menu handles file operations, the Edit menu handles editing operations, and the Help menu provides access to help documentation.&lt;br /&gt;&lt;br /&gt;And ANY user interface developer should make sure that they are familiar with &lt;a href="http://www.useit.com/papers/heuristic/heuristic_list.html"&gt;Jakob Nielsen's ten usability heuristics&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's all basic stuff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-113970404323561352?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwue/html/welcome.asp' title='Another usability rant...'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/113970404323561352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=113970404323561352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113970404323561352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113970404323561352'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/02/another-usability-rant.html' title='Another usability rant...'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-113861284176727046</id><published>2006-01-30T22:07:00.000+13:00</published><updated>2006-11-15T14:49:34.270+13:00</updated><title type='text'>You know you're a geek when...</title><content type='html'>- you consider shop assistants to be search engines, pre-planning queries to ensure you get the most relevant results for minimum effort.&lt;br /&gt;- the last time you visited a bank was when you opened the account.&lt;br /&gt;- you order your pizza over the Internet.&lt;br /&gt;- you have never met your best friend face-to-face.&lt;br /&gt;- you talk to your mates via Skype, VOIP and TeamSpeak.&lt;br /&gt;- you own more game CDs/DVDs than you do music CDs/movie DVDs.&lt;br /&gt;- your curtains are always shut.&lt;br /&gt;- you drink more cola than you do water.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-113861284176727046?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/113861284176727046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=113861284176727046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113861284176727046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113861284176727046'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/01/you-know-youre-geek-when.html' title='You know you&apos;re a geek when...'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-113758166078886015</id><published>2006-01-18T23:39:00.000+13:00</published><updated>2006-11-15T14:49:34.125+13:00</updated><title type='text'>Asterisk - The free PABX!</title><content type='html'>We've spent the last few nights configuring our new &lt;A HREF="http://asteriskathome.sourceforge.net/"&gt;Asterisk @ Home&lt;/A&gt; installation, and it's working great. The web-based administration console makes it a doddle to configure the large feature set offered by Asterisk.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-113758166078886015?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://asteriskathome.sourceforge.net/' title='Asterisk - The free PABX!'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/113758166078886015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=113758166078886015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113758166078886015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113758166078886015'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/01/asterisk-free-pabx.html' title='Asterisk - The free PABX!'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-113607864730204644</id><published>2006-01-01T14:02:00.000+13:00</published><updated>2006-11-15T14:49:33.805+13:00</updated><title type='text'>Xmas Rox!</title><content type='html'>&lt;a href="http://www.thermaltake.com/xaserCase/soprano/bws/bws.htm"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2324/1643/320/Soprano.png" border="0" alt="" /&gt;&lt;/a&gt;Well, look what I got for Christmas...&lt;br /&gt;&lt;br /&gt;Nice, huh? Yep, that's right, it's a new &lt;a href="http://www.thermaltake.com/xaserCase/soprano/bws/bws.htm"&gt;Thermaltake Soprano&lt;/a&gt; PC case. This thing has five hard drive bays, two 3.5" removable media bays, and four 5.25" removable media bays. It has a 430W power supply and seven PCI/AGP/PCI Express slots. It's a beauty!&lt;br /&gt;&lt;br /&gt;I did my first bit of case modding too: I added a couple of &lt;a href="http://www.jaycar.co.nz/productView.asp?ID=SL2882"&gt;300mm blue Cold Cathode Fluorescents&lt;/a&gt; (CCFL) to jazz the thing up.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/2324/1643/1600/With%20CCFLs%20%28Small%29.jpg"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2324/1643/320/With%20CCFLs%20%28Small%29.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jaycar.co.nz/"&gt;Jaycar&lt;/a&gt; sell both the tubes and the inverter boards pre-wired, so all I had to do was put a 4-pin Molex connector on the end of the power leads and mount it all. There's one CCFL behind the support that runs horizontally, underneath the power supply, and another sitting at the bottom of the case. I cut up an old reflector from a small fluorescent tube, and mounted that behind each tube to reflect the light in the right direction. A simple mod, but it looks great!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-113607864730204644?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.thermaltake.com/xaserCase/soprano/bws/bws.htm' title='Xmas Rox!'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/113607864730204644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=113607864730204644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113607864730204644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113607864730204644'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2006/01/xmas-rox.html' title='Xmas Rox!'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-113356930002299704</id><published>2005-12-03T12:12:00.000+13:00</published><updated>2006-11-15T14:49:33.699+13:00</updated><title type='text'>Usability: To be or not to be...</title><content type='html'>&lt;p&gt;I stumbled across &lt;a href="http://gug.sunsite.dk/forum/?threadid=1630"&gt;this thread&lt;/a&gt; the other day, which discusses (read argues) the merits of developing user interfaces to behave based on the platform the software is running on. The original post was created by a guy called Joe Marshall, who had developed a Windows plugin for &lt;a href="http://www.gimp.org/"&gt;The GIMP&lt;/a&gt; that created a single window which took ownership of all the other windows.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gimp.org/screenshots/solaris_screenshot1.png"&gt;&lt;img style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/2324/1643/200/solaris_screenshot1.jpg" border="0" /&gt;&lt;/a&gt;&lt;p&gt;Traditionally, The GIMP has been a *nix-based application, with a multitude of windows. While this has been a standard *nix GUI convention for years, most Windows applications these days use a single MDI (Multiple Document Interface) window in place of multiple windows. Joe mentioned that this provided multiple benefits for Windows users:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Users could Alt-Tab between GIMP and other applications in one go, rather than having to Alt-Tab through each GIMP window.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Users could minimize/restore all the GIMP windows in one go.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Users could select each window from a Window menu on the main window.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;There was only one button on the taskbar, rather than one for each window.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The file selector dialog was replaced with a standard Window file browser dialog box.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Here are his comments:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;Basically it makes it into a usable application, it's a bit mac-like still with all the windows, but in a similar way to on the mac, the separate windows behave like one application and don't clutter up your taskbar. Also if you maximize the background window, you get rid of the irritating thing where you miss click on a tool and open up another application. Previously I'd had to minimize all other applications when using gimp, that was getting to be a right lot of hassle. &lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Responses were varied, including BiggyP's comment:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;well, it sounds absolutely appalling to me...&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Twelve Parsecs made the most controversial comment:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;The other thing is that under no circumstances should a user have to adapt and get used to the quirks of a program's interface. Never. The interface should adapt to the user. As the Fool in King Lear asks, "May not an ass know when the cart draws the horse?" &lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;This drew a barage of comments, but raises an interesting point. A large amount of software these days, particularly Open Source software like GIMP, is implemented in platform independent languages and then compiled for each platform they want to release the software for. So a *nix application, built to follow *nix GUI conventions, simply gets recompiled to run under Windows. While the gap between Windows and *nix GUI conventions seems to be narrowing, there are still significant differences that could confuse users.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Other people posted commments about the fact that if the GIMP UI was changed to follow these conventions it could confuse existing GIMP users. This is where plugins and skins work together to ensure users can make applications behave the way that they are expecting them to behave.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Software developers need to bear in mind that users have different expectations of user interfaces based on their knowledge and experience.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-113356930002299704?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://gug.sunsite.dk/forum/?threadid=1630' title='Usability: To be or not to be...'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/113356930002299704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=113356930002299704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113356930002299704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113356930002299704'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/12/usability-to-be-or-not-to-be.html' title='Usability: To be or not to be...'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-113334206380376953</id><published>2005-11-30T22:06:00.000+13:00</published><updated>2006-11-15T14:49:33.588+13:00</updated><title type='text'>More silicon images...</title><content type='html'>&lt;a href="http://www.chipworks.com/gallery/Milhouse.asp"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px;" src="http://www.chipworks.com/gallery/gallery1-2/milhous.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;A HREF="http://x-cubed.blogspot.com/2005/10/is-your-pc-powered-by-dilbert.html"&gt;I mentioned a while ago&lt;/A&gt; that there are a wide variety of images etched in the dice of our CPUs, and other silicon devices. I have since found another image gallery &lt;A HREF="http://www.chipworks.com/gallery/gallery1.asp"&gt;over at Chipworks.com&lt;/A&gt;.&lt;br /&gt;&lt;br /&gt;Pride of place is &lt;A HREF="http://www.chipworks.com/gallery/Milhouse.asp"&gt;Milhouse&lt;/A&gt;, but &lt;A HREF="http://www.chipworks.com/gallery/Z-Kermit.asp"&gt;Kermit the Frog&lt;/A&gt; and &lt;A HREF="http://www.chipworks.com/gallery/Z-Waldo.asp"&gt;Waldo&lt;/A&gt; also feature.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-113334206380376953?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.chipworks.com/gallery/gallery1.asp' title='More silicon images...'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/113334206380376953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=113334206380376953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113334206380376953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113334206380376953'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/11/more-silicon-images.html' title='More silicon images...'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-113237939069260159</id><published>2005-11-19T18:39:00.000+13:00</published><updated>2006-11-15T14:49:33.513+13:00</updated><title type='text'>Build your own game console</title><content type='html'>So the &lt;a href="http://www.xbox360.com"&gt;Xbox 360&lt;/a&gt; and the &lt;a href="http://www.ps3land.com/"&gt;Playstation 3&lt;/a&gt; are due out shortly, and everyone has there own opinions on which will be the 'better' games console. But now you can prove them all wrong, by &lt;a href="http://www.xgamestation.com/"&gt;building your own games console&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xgamestation.com/view_product.php?id=12"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2324/1643/320/xgs_me_thumb.jpg" border="0" alt="" /&gt;&lt;/a&gt;Ok, so the &lt;a href="http://www.xgamestation.com/view_product.php?id=12"&gt;XGameStation Micro Edition&lt;/a&gt; might not be quite as high powered as the two leading consoles, but the satisfaction of building it yourself should be reward enough.&lt;br /&gt;&lt;br /&gt;Check out what you get in the kit:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- Complete XGS Micro Edition console, fully assembled and ready to use.  &lt;br /&gt;- Andre' LaMothe's one-of-a-kind eBook, Designing Your Own Video Game Console, explaining the entire design and implementation of the XGS Micro. Covers the basics of electrical engineering, circuit board design, layout and routing, video techniques, sound generation, I/O techniques, relevant software tools, low-level programming, and much more!  &lt;br /&gt;- Official XGS Micro Edition Development Studio tool chain for Windows PCs supporting "To the Metal" Assembly Language programming.  &lt;br /&gt;- Complete, electronic copy of Andre' LaMothe's best selling "Tricks of the Windows Game Programming Gurus" (a $60 value!).  &lt;br /&gt;- Parallax's "Beginning Assembly Language for the SX Microcontroller" eBook.  &lt;br /&gt;- Comprehensive collection of useful software tools and utilities for XGS Micro development.  &lt;br /&gt;- XGS-compatible joystick/gamepad (actual joystick may not match item pictured).  &lt;br /&gt;- Parallel cable for interfacing XGS Micro to development PC.  &lt;br /&gt;- A/V cables for output to any television.  &lt;br /&gt;- Wall adapter power supply.  &lt;br /&gt;- Printed copy of the XGS Micro Edition User Guide to get you up to speed fast.  &lt;br /&gt;- NTSC or PAL color burst crystal options.&lt;/blockquote&gt;&lt;br /&gt;Pretty cool, huh?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-113237939069260159?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.xgamestation.com/' title='Build your own game console'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/113237939069260159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=113237939069260159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113237939069260159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113237939069260159'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/11/build-your-own-game-console.html' title='Build your own game console'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-113011409650239971</id><published>2005-10-24T13:14:00.000+13:00</published><updated>2006-11-15T14:49:33.421+13:00</updated><title type='text'>Media key didn't wanna work no more</title><content type='html'>I was having a wierd issue with my Microsoft Wireless Natural Keyboard, where the Media key wouldn't start my media player, and I got a message saying that the customizable key was not available. Wierd...&lt;br /&gt;&lt;br /&gt;Anyway, it seems that IntelliType determines the current media player by checking to see which program is used to play audio CDs. So if you get this message, or you want to change the default media player, simply associate it with the Play command of an audio CD.&lt;br /&gt;&lt;br /&gt;Yeah, I know you can 'hard-wire' the media key to a specific program, but that seems like a messy idea to me coz you have to do it within IntelliType. The nice idea with this solution is that you can change it directly within the media player by checking the appropriate box to associate it with audio CDs.&lt;br /&gt;&lt;br /&gt;And a related factoid which I only found out a few weeks ago: you have to check the Enabled box within the properties of the Global Hotkeys plugin in Winamp to use the media control keys on the keyboard to control Winamp. I don't know why this isn't enabled by default! And there's nothing in the properties page of the Global Hotkeys plugin to mention that it is designed to work with multimedia keyboards. I used to think it was for wierdos that wanted to hold down Ctrl-Alt-Insert to play a track...&lt;br /&gt;&lt;br /&gt;While I'm on the subject of Winamp, if you have a TV tuner card, check out the &lt;a href="http://www.brics.dk/~barnie/WinampTV/"&gt;Winamp TV&lt;/a&gt; plugin. Oh, and the &lt;a href="http://www.winamp.com/skins/details.php?id=143975"&gt;Nullsoft Media Player 10 skin&lt;/a&gt; looks fantastic!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-113011409650239971?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/113011409650239971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=113011409650239971' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113011409650239971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113011409650239971'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/10/media-key-didnt-wanna-work-no-more.html' title='Media key didn&apos;t wanna work no more'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-113006553473265230</id><published>2005-10-23T23:46:00.000+13:00</published><updated>2006-11-15T14:49:33.330+13:00</updated><title type='text'>Most valuable Firefox extensions</title><content type='html'>Firefox is a great web browser, but the best thing about it is the way you can use extensions to change it's behaviour. Here are some of my favourites:&lt;br /&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=10"&gt;AdBlock&lt;/a&gt; and the matching &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=1136"&gt;filterset updater&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=158"&gt;Tabbrowser Preferences&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=398"&gt;Forecast Fox&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=1269"&gt;FasterFox&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=60"&gt;Web Developer Toolbar&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=139"&gt;Image Zoom&lt;/a&gt;&lt;br /&gt;- &lt;a href="&lt;br /&gt;https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=219"&gt;FoxyTunes&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=256"&gt;Download Manager Tweak&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=1122"&gt;Tab Mix Plus&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=189"&gt;GooglePreview&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=357"&gt;SmoothWheel&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=748"&gt;GreaseMonkey&lt;/a&gt;&lt;br /&gt;- &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&amp;id=349"&gt;Resize Search Box&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-113006553473265230?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://addons.mozilla.org/?application=firefox' title='Most valuable Firefox extensions'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/113006553473265230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=113006553473265230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113006553473265230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/113006553473265230'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/10/most-valuable-firefox-extensions.html' title='Most valuable Firefox extensions'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-112934447267748356</id><published>2005-10-15T15:17:00.000+13:00</published><updated>2006-11-15T14:49:33.041+13:00</updated><title type='text'>Is your PC "Powered by Dilbert"?</title><content type='html'>&lt;a href="http://microscopy.fsu.edu/wallpaper/winpaper/siliconzoo/characters/index.html"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2324/1643/320/dilbert.gif" border="0" alt="" /&gt;&lt;/a&gt;It's suprising what silicon chips can do these days, they just keep getting smaller, faster and more complex. But what do the designers do with the small amounts of blank space left on the die? They add an image of their favourite cartoon character of course!&lt;br /&gt;&lt;br /&gt;Dilbert, Waldo and Mickey Mouse all feature in some of the images that Michael Davidson has found at the &lt;a href="http://microscopy.fsu.edu/creatures/index.html"&gt;Silicon Zoo&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-112934447267748356?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://news.com.com/Whats+hiding+on+your+microchip/2100-1006_3-5893374.html' title='Is your PC &quot;Powered by Dilbert&quot;?'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/112934447267748356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=112934447267748356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112934447267748356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112934447267748356'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/10/is-your-pc-powered-by-dilbert.html' title='Is your PC &quot;Powered by Dilbert&quot;?'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-112891457037690362</id><published>2005-10-10T16:17:00.000+13:00</published><updated>2006-11-15T14:49:32.928+13:00</updated><title type='text'>Make the scroll wheel scroll</title><content type='html'>One of Windows 'features' is that a window must have focus before it will listen to messages from the scroll wheel. This means that you have to keep clicking on each window to give it focus before you can scroll it, a real pain when your desktop is covered in windows.&lt;br /&gt;&lt;br /&gt;But there's a simple solution: &lt;a href="http://ehiti.sdf-eu.org/katmouse/"&gt;KatMouse&lt;/a&gt;. KatMouse ensures that you can use the scroll wheel to scroll in any window under the cursor. (It also has the ability to reassign the scroll wheel button, but I find that to be a pain so I turn that option off).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-112891457037690362?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://ehiti.sdf-eu.org/katmouse/' title='Make the scroll wheel scroll'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/112891457037690362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=112891457037690362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112891457037690362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112891457037690362'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/10/make-scroll-wheel-scroll.html' title='Make the scroll wheel scroll'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-112889940422868314</id><published>2005-10-10T12:00:00.000+13:00</published><updated>2006-11-15T14:49:32.830+13:00</updated><title type='text'>Eudora</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/2324/1643/1600/eudora2.jpg"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/2324/1643/320/eudora2.jpg" border="0" alt="" /&gt;&lt;/a&gt;Just spotted this on the &lt;A HREF="http://www.ascent.co.nz/"&gt;Ascent Technology&lt;/A&gt; website &lt;A HREF="http://www.ascent.co.nz/mn-software-template.asp?cname=Comms+%26+fax"&gt;here&lt;/A&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So you need an email client huh? Well, I've never used it or meet anybody that uses it, but you might want to take a look at QualComm's Eudora. Because they don't keep a regular supply of stock of Eudora, Ascent don't know whether it's possible to order it at the moment or how long it would take to arrive. So how do you find out if they can get it? Email them.&lt;br /&gt;&lt;br /&gt;Well I would, but...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-112889940422868314?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.ascent.co.nz/mn-software-template.asp?cname=Comms+%26+fax' title='Eudora'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/112889940422868314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=112889940422868314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112889940422868314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112889940422868314'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/10/eudora.html' title='Eudora'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-112866250438348913</id><published>2005-10-07T17:53:00.000+13:00</published><updated>2006-11-15T14:49:32.746+13:00</updated><title type='text'>Xandros Desktop OS - Open Circulation Edition</title><content type='html'>"Linux, huh? Too hard."&lt;br /&gt;&lt;br /&gt;Not anymore. Try &lt;a href="http://www.xandros.com/products/home/desktopoc/dsk_oc_intro.html"&gt;Xandros Desktop (Open Circulation Edition)&lt;/a&gt;, a great Linux distro with a full suite of applications on the disc. And best of all it's free!&lt;br /&gt;&lt;br /&gt;Xandros is one of the most usable Linux distributions I've found, with a simple install process and a wizard that configures it to look similar to your old operating system (Windows, MacOS, etc).&lt;br /&gt;&lt;br /&gt;And if you can't part with your Windows apps, check out the Deluxe or Business editions which feature CrossOver Office, which allow you to run Windows apps directly in Xandros.&lt;br /&gt;&lt;br /&gt;Xandros Desktop OCE features include:&lt;br /&gt;- Full support for Windows file and printer sharing&lt;br /&gt;- OpenOffice.org office suite&lt;br /&gt;- CD burning&lt;br /&gt;- Mozilla Firefox and Thunderbird (web browser and email client)&lt;br /&gt;- Easy software update utility&lt;br /&gt;- Trial version of CrossOver Office&lt;br /&gt;- USB scanner support&lt;br /&gt;- Skype internet calling&lt;br /&gt;&lt;br /&gt;Yeah, I know that most of the applications listed here are free, but what do you expect from a free OS? The best bit is, you don't need to worry about compiling and installing them.&lt;br /&gt;&lt;br /&gt;Although, if you want to install something else, you can do that too. Xandros supports both Redhat installer packages (RPM) and Debian packages. If you want to go hard out, bring up a console and compile it yourself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-112866250438348913?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.xandros.com/products/home/desktopoc/dsk_oc_intro.html' title='Xandros Desktop OS - Open Circulation Edition'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/112866250438348913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=112866250438348913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112866250438348913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112866250438348913'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/10/xandros-desktop-os-open-circulation.html' title='Xandros Desktop OS - Open Circulation Edition'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-112821743290960720</id><published>2005-10-01T14:40:00.000+12:00</published><updated>2006-11-15T14:49:32.674+13:00</updated><title type='text'>Labour leads by two seats...</title><content type='html'>Well, at last, the special votes have been counted, and Labour has been announced the winner by only two seats.&lt;br /&gt;&lt;br /&gt;Check out the official results &lt;a href="http://www.electionresults.govt.nz/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-112821743290960720?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.electionresults.govt.nz/' title='Labour leads by two seats...'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/112821743290960720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=112821743290960720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112821743290960720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112821743290960720'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/10/labour-leads-by-two-seats.html' title='Labour leads by two seats...'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-112777372089804011</id><published>2005-09-27T10:19:00.000+12:00</published><updated>2006-11-15T14:49:32.513+13:00</updated><title type='text'>Intelligent Design vs Evolution</title><content type='html'>There have been recent discussions in parts of the States about introducing students to Intelligent Design (ID) in their science classes, as well as evolution. As we all know, evolution is the idea that we are related to the apes, and that we as a species have evolved over time. Intelligent Design is the idea that there is one greater being, such as a god, who is controlling our destiny and the world around us.&lt;br /&gt;&lt;br /&gt;The fact that Intelligent Design is not testable, scientific fact, does not seem to be putting off the school boards. &lt;a href="http://www.theregister.co.uk/2005/09/26/evolution_in_court/"&gt;This recent article&lt;/a&gt; in The Register, is proof of how bad things have become. Since when should a school board be able to determine what is and isn't science?&lt;br /&gt;&lt;br /&gt;But my personal favourite has always been &lt;a href="http://www.venganza.org/"&gt;the letter that Bobby Henderson wrote&lt;/a&gt; to the Kansas School Board. I'm off to order an FSM mug...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-112777372089804011?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.theregister.co.uk/2005/09/26/evolution_in_court/' title='Intelligent Design vs Evolution'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/112777372089804011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=112777372089804011' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112777372089804011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112777372089804011'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/09/intelligent-design-vs-evolution.html' title='Intelligent Design vs Evolution'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-112769908053680938</id><published>2005-09-26T13:26:00.000+12:00</published><updated>2006-11-15T14:49:32.364+13:00</updated><title type='text'>A night on the town...</title><content type='html'>Well, I headed into town the other night with some of my mates and we went around a few bars, so I thought it would be good to start with a review of some of them.&lt;br /&gt;&lt;br /&gt;We started off at Zinc, on Manchester Street, a nice loungy bar, with good music and comfy couches. The loud music doesn't really suit a lounge bar though; everybody sits around smiling at each other with nothing to do except drink. And it was pretty much vacant for the hour or so that we were there....&lt;br /&gt;&lt;br /&gt;We then headed next door to Iconic to play some pool. Iconic's quite cool, with plenty of pool tables and a good selection of music. Again, the volume was a pain. While the loud music is great for those dancing, I generally want to be able to talk with my mates as I play a game of pool.&lt;br /&gt;&lt;br /&gt;We called into The Loaded Hog, on the corner of Cashel and Manchester Street, for a bit. Fancy intelligent lights, good music, and you could actually hold a conversation with the person standing next to you. Like Zinc though, it was damn near empty....&lt;br /&gt;&lt;br /&gt;Later, we headed across the road to Shooters. A cross between a bar and a dance hall, this place was damn annoying. You had to fight through the crowd to move anywhere, your skull vibrated inside your head in time to the music, and your shoes stuck to the floor with all the spilt drinks. How can you dance when you're crammed in like sardines in a can?&lt;br /&gt;&lt;br /&gt;When I go to a lounge or pool bar, I expect to be able to hold a conversation. When I go to a dance bar, I expect to be able to dance. And why do none of the DJs know that bass sounds better when it's not wound all the way up? Bass is great, loud bass is better, but distorted bass is just painful. Maybe I'm just getting old....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-112769908053680938?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/112769908053680938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=112769908053680938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112769908053680938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112769908053680938'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/09/night-on-town.html' title='A night on the town...'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-112770033039247370</id><published>2005-09-25T15:04:00.000+12:00</published><updated>2006-11-15T14:49:32.446+13:00</updated><title type='text'>Interviews with Gabe Newell</title><content type='html'>This site has a couple of videos interviews with Gabe Newell, one of the head honchos at Valve. It's interesting to see what their planning next for the Half Life series and Steam...&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.1up.com/do/download?cId=3139501"&gt;The interviews at 1up.com&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-112770033039247370?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.1up.com/do/download?cId=3139501' title='Interviews with Gabe Newell'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/112770033039247370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=112770033039247370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112770033039247370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112770033039247370'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/09/interviews-with-gabe-newell.html' title='Interviews with Gabe Newell'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17123347.post-112778106561797425</id><published>2005-07-23T00:08:00.000+12:00</published><updated>2006-11-15T14:49:32.576+13:00</updated><title type='text'>MS Anti-Spyware built on MS Abandonware</title><content type='html'>Who said that Classic VB was dead?&lt;br /&gt;Check out &lt;A HREF="http://www.theregister.co.uk/2005/07/22/microsoft_spyware_vb6/"&gt;my article at The Register&lt;/A&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17123347-112778106561797425?l=x-cubed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.theregister.co.uk/2005/07/22/microsoft_spyware_vb6/' title='MS Anti-Spyware built on MS Abandonware'/><link rel='replies' type='application/atom+xml' href='http://x-cubed.blogspot.com/feeds/112778106561797425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17123347&amp;postID=112778106561797425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112778106561797425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17123347/posts/default/112778106561797425'/><link rel='alternate' type='text/html' href='http://x-cubed.blogspot.com/2005/07/ms-anti-spyware-built-on-ms.html' title='MS Anti-Spyware built on MS Abandonware'/><author><name>X-Cubed</name><uri>http://www.blogger.com/profile/06588225606059532097</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_si3A9i1-zQs/SLs8qhGUn5I/AAAAAAAAAk8/cVSYa7Fw0Gs/s1600-R/616c6bc17ec22b95fb5e8326786914807ddd3a04_full.jpg'/></author><thr:total>0</thr:total></entry></feed>
