<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>John's Blog</title>
<link>http://www.ebay.johnavis.com/</link>
<description>My blog including my Classic ASP tips and tricks, sample scripts, and applications, plus JavaScript; and my experiences with buying and selling on eBay and using PayPal.</description>
<item>
<title>Classic ASP Title Case</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=416</link>
<description>Need a function that capitalises the first letter of each word, as used in titles?
&lt;p&gt;
Unlike some title case functions, this one doesn't just look for spaces, but capitilises the first letter after each non-alpha character which means that hyphenated words and words after numbers are considered new words.
&lt;p&gt;
&lt;textarea cols=40 rows=10 style=&quot;width:95%&quot;&gt;Function TitleCase(byVal strValue)
       Dim intChat, intLastChar, blnUCase
       strValue = LCase(strValue)
       For intChar = 1 To Len(strValue)
              blnUCase = False
              If intChar = 1 Then
                     blnUCase = True
              Else
                     intLastChar = Asc(Mid(strValue, intChar - 1, 1))
                     If Not ((intLastChar &gt;= 97 And intLastChar &lt;= 122) Or (intLastChar &gt;= 65 And intLastChar &lt;= 90)) Then
                           blnUCase = True
                     End If
              End If
              If blnUCase Then
                     strValue = Left(strValue, intChar - 1) &amp; UCase(Mid(strValue, intChar, 1)) &amp; Mid(strValue, intChar + 1)
              End If 
       Next
       TitleCase = strValue
End Function&lt;/textarea&gt;</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=416&amp;comments=on#comments</comments>
<pubDate>2008-07-29T12:00:00+10:00</pubDate>
</item>
<item>
<title>Does stopfax.com.au really stop junk faxes?</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=414</link>
<description>I received a &quot;spam&quot; fax some time ago on my home fax machine. I was pleased to see an opt-out website link at the bottom of the page which was www.stopfax.com.au/companyname. I didn't want any more faxes sent to my home fax so I went to the address and through the process to remove myself from this list.&lt;br&gt;&lt;br&gt;However, over the following months I continued to receive &quot;spam&quot; faxes all from different companies but with a similar stopfax.com.au link to be removed from list.&lt;br&gt;&lt;br&gt;I did follow the removal process with each fax but the faxes have not stopped.&lt;br&gt;&lt;br&gt;I did a whois lookup of the stopfax.com.au domain name and found the owner to be:&lt;br&gt;&lt;br&gt;&lt;i&gt;CBOX PTY LTD&lt;br&gt;www.cbox.com.au&lt;/i&gt;&lt;br&gt;&lt;br&gt;I have sent the following message through their contact us form on their website and will see what the response is.&lt;br&gt;&lt;br&gt;&lt;i&gt;Please remove my fax number from your database - 02xxxxxxxx. This is a home fax machine and I do not wish to receive any more faxes from any of your customers ever again. Thank you.&lt;/i&gt;</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=414&amp;comments=on#comments</comments>
<pubDate>2008-07-26T12:00:00+10:00</pubDate>
</item>
<item>
<title>SQL Injection Protection - b.js</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=407</link>
<description>There is a automated SQL injection attack doing the rounds at the moments which injects some html (&amp;lt;script src=http://www.domain.com/b.js&amp;gt;&amp;lt;/script&amp;gt;) into certain fields in all the tables in a database.
&lt;p&gt;
If you have been attacked don't feel bad as an Internet search of &quot;b.js&quot; reveals tens of thousands of hacked sites.
&lt;p&gt;
The attack cleverly appends a series of SQL commands onto  your querystrings and if your code is unprotected, and you don't use Access databases, the commands may be passed on to your SQL server and the damage done.
&lt;p&gt;
Considering the damage that could be done by this sort of attack, I guess we are lucky that they chose only to append on their little JavaScript.
&lt;p&gt;
However, this attack could render your website as &quot;unsafe&quot; in search engine results.
&lt;p&gt;
&lt;strong&gt;Reversing the Damage&lt;/strong&gt;
&lt;p&gt;
We are also extremely fortunate that the changes can be easily reversed with a few changes of the attackers original SQL commands.
&lt;p&gt;
Simply execute the following to clean up the damage. If you have been attacked multiple times (ie. you have multiple script blocks appended to your SQL data) then you will need to execute the following script for each attack.
&lt;p&gt;
&lt;textarea cols=5 rows=10 style=&quot;width:95%&quot;&gt;DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
  EXEC(
    'update ['+@T+'] set ['+@C+'] = left(
            convert(varchar(8000), ['+@C+']),
            len(convert(varchar(8000), ['+@C+'])) - 6 -
            patindex(''%tpircs&lt;%'',
                      reverse(convert(varchar(8000), ['+@C+'])))
            )
      where ['+@C+'] like ''%&lt;script%&lt;/script&gt;'''
      );
  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;&lt;/textarea&gt;
&lt;p&gt;
&lt;strong&gt;Protecting against attacks&lt;/strong&gt;
&lt;p&gt;
There are many methods out there to protect against this sort of attack.
&lt;p&gt;
The following function is a good method which removes multiple inline SQL commands. If you issue multiple inline SQL commands in one go then obviously it will not be suitable but for everyone else it should stop any attack.
&lt;p&gt;
Parse your SQL command strings with the following syntax:
&lt;p&gt;
&lt;i&gt;SQLCheck(sql-string-here)&lt;/i&gt;
&lt;p&gt;
&lt;textarea cols=5 rows=10 style=&quot;width:95%&quot;&gt;Function SQLCheck(strCommand)
	Dim intChar
	Dim blnQuotes
	SQLCheck = strCommand
	blnQuotes = False
	For intChar = 1 To Len(strCommand)
		If Mid(strCommand, intChar, 1) = &quot;'&quot; Then
			If Not blnQuotes Then
				blnQuotes = True
			Else
				If intChar &lt; Len(strCommand) Then
					If Mid(strCommand, intChar + 1, 1) = &quot;'&quot; Then
						intChar = intChar + 1
					Else
						blnQuotes = False
					End If
				End If

			End If
		ElseIf Mid(strCommand, intChar, 1) = &quot;;&quot; Then
			If Not blnQuotes Then
				SQLCheck = Left(strCommand, intChar - 1)
				Exit For
			End If
		End If
	Next
End Function&lt;/textarea&gt;</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=407&amp;comments=on#comments</comments>
<pubDate>2008-06-30T12:00:00+10:00</pubDate>
</item>
<item>
<title>Unfair eBay fees for used cars</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=402</link>
<description>Having just been through the process of selling a cheap used car on eBay I have seen first hand the unfairness of eBay's fees for this category.&lt;br&gt;&lt;br&gt;By a cheap car I mean $250.&lt;br&gt;&lt;br&gt;eBay's fees are $5 for the listing and a fixed commission of $40 upon successful sale.&lt;br&gt;&lt;br&gt;For a $250 car that means the fees total nearly 20%.&lt;br&gt;&lt;br&gt;Selling a $50,000 car? Your fees would be just a fraction of 1%.&lt;br&gt;&lt;br&gt;I realise that eBay have to be price competitive with other online car advertising sites but surely for cheap cars they could have a lower commission based on the sale price.&lt;br&gt;&lt;br&gt;Now I see why I often see cheap used cars advertised outside of the used car category.</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=402&amp;comments=on#comments</comments>
<pubDate>2008-06-10T12:00:00+10:00</pubDate>
</item>
<item>
<title>100% CSS Layout</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=397</link>
<description>I had been looking for a CSS layout that has three components - a header, footer and content area - and the following characteristics:
&lt;ul&gt;
&lt;li&gt;When the content in the content area does not fill the available window space the footer should be set to the bottom of the page.&lt;/li&gt;
&lt;li&gt;When the content overflows the footer should be positioned at the end of the document, off the screen.&lt;/li&gt;
&lt;li&gt;The content area should fill at least all remaining window space so that any object I put inside it can scale to 100% of its height.&lt;/li&gt;
&lt;li&gt;The content area should have a minimum height so that it won't look silly in a very tiny window (unlikely)&lt;/li&gt;
&lt;li&gt;If the user resizes the browser the content area should resize.&lt;/li&gt;
&lt;/ul&gt;
I couldn't find a pure CSS solution so I came up with a solution that uses CSS and JavaScript.
&lt;p&gt;
&lt;a href=&quot;/blog/uploads/att397_layout.htm&quot; target=&quot;_blank&quot;&gt;View Sample (new window)&lt;/a&gt;
&lt;p&gt;
&lt;textarea rows=20 cols=50 style=&quot;width:95%&quot;&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &gt;
&lt;head&gt;
    &lt;title&gt;Untitled Page&lt;/title&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
		function maxContent(){
			var divContent = getElementDimensions(document.getElementById(&quot;content&quot;));
			var divHeader = getElementDimensions(document.getElementById(&quot;header&quot;));
			var divFooter = getElementDimensions(document.getElementById(&quot;footer&quot;));
			var remainder = document.documentElement.clientHeight - divContent.y - divFooter.height - 0
			if(remainder&lt;250){remainder=250}; //minimum height of content
			document.getElementById(&quot;content&quot;).style.height = remainder + &quot;px&quot;;
			function getElementDimensions(q){
				var offsetY=offsetX=0;
				var height=q.scrollHeight;
				var width=q.scrollWidth;
				while(q){
					offsetX+=q.offsetLeft;
					offsetY+=q.offsetTop;
					q=q.offsetParent;
				}
				return{
					&quot;x&quot;:offsetX,&quot;y&quot;:offsetY,&quot;height&quot;:height,&quot;width&quot;:width
				};
			}
		}
		window.onload = maxContent;
		window.onresize = maxContent;
    &lt;/script&gt;
    &lt;style type=&quot;text/css&quot;&gt;
		html,body {
			margin:0;
			padding:0;
		}
		div#container {
		}
		div#header {
			background-color:#fbb;
		}
		div#content {
			background-color:#bfb;
		}
		div#footer {
			background-color:#bbf;
			width:100%;
			bottom:0;
		}
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div id=&quot;container&quot;&gt;
		&lt;div id=&quot;header&quot;&gt;
			Header
		&lt;/div&gt;
		&lt;div id=&quot;content&quot;&gt;
			&lt;table border=&quot;1&quot; height=&quot;100%&quot;&gt;
				&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;3&lt;/td&gt;
				&lt;/tr&gt;
				&lt;tr&gt;
					&lt;td&gt;b1&lt;/td&gt;
					&lt;td&gt;b2&lt;/td&gt;
					&lt;td&gt;b3&lt;/td&gt;
				&lt;/tr&gt;
			&lt;/table&gt;
		&lt;/div&gt;

		&lt;div id=&quot;footer&quot;&gt;
			Footer
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;/textarea&gt;</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=397&amp;comments=on#comments</comments>
<pubDate>2008-05-28T12:00:00+10:00</pubDate>
</item>
<item>
<title>MySql: Data Types</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=389</link>
<description>
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Type {storage}&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Range&lt;/th&gt;
&lt;th&gt;Attributes&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numeric&lt;br /&gt;{1 byte}&lt;/td&gt;
&lt;td&gt;TINYINT[(M)]&lt;/td&gt;
&lt;td&gt;-128 TO 127&lt;br /&gt; [0 to 255 if UNSIGNED]&lt;/td&gt;
&lt;td&gt;AUTO_INCREMENT&lt;br /&gt; UNSIGNED, ZEROFILL,&lt;br /&gt;SERIAL&amp;nbsp;DEFAULT&amp;nbsp;VALUE&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [0 if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numeric&lt;br /&gt;{2 bytes}&lt;/td&gt;
&lt;td&gt;SMALLINT[(M)]&lt;/td&gt;
&lt;td&gt;-32,768 to 32,767&lt;br /&gt; [0 to 65,535]&lt;/td&gt;
&lt;td&gt;AUTO_INCREMENT,&lt;br /&gt; UNSIGNED, ZEROFILL,&lt;br /&gt;SERIAL&amp;nbsp;DEFAULT&amp;nbsp;VALUE&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [0 if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numeric&lt;br /&gt;{3 bytes}&lt;/td&gt;
&lt;td&gt;MEDIUMINT[(M)]&lt;/td&gt;
&lt;td&gt;-8,388,608 to 8,388,607&lt;br /&gt; [0 to 16,777,215]&lt;/td&gt;
&lt;td&gt;AUTO_INCREMENT,&lt;br /&gt; UNSIGNED, ZEROFILL,&lt;br /&gt;SERIAL&amp;nbsp;DEFAULT&amp;nbsp;VALUE&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [0 if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numeric&lt;br /&gt;{4 bytes}&lt;/td&gt;
&lt;td&gt;INT[(M)]&lt;/td&gt;
&lt;td&gt;-/+2.147E+9&lt;br /&gt; [0 to 4.294E+9]&lt;/td&gt;
&lt;td&gt;AUTO_INCREMENT,&lt;br /&gt; UNSIGNED, ZEROFILL,&lt;br /&gt;SERIAL&amp;nbsp;DEFAULT&amp;nbsp;VALUE&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [0 if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numeric&lt;br /&gt;{8 bytes}&lt;/td&gt;
&lt;td&gt;BIGINT[(M)]&lt;/td&gt;
&lt;td&gt;-/+9.223E+18&lt;br /&gt; [0 to 18.45E+18]&lt;/td&gt;
&lt;td&gt;AUTO_INCREMENT,&lt;br /&gt; UNSIGNED, ZEROFILL,&lt;br /&gt;SERIAL&amp;nbsp;DEFAULT&amp;nbsp;VALUE&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [0 if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numeric&lt;br /&gt;{4 or 8}&lt;/td&gt;
&lt;td&gt;FLOAT(p)&lt;/td&gt;
&lt;td&gt;p=0-24 &amp;nbsp;--&gt; &quot;FLOAT&quot;&lt;br /&gt;p=25-53 &amp;nbsp;--&gt; &quot;DOUBLE&quot;&lt;/td&gt;
&lt;td&gt;UNSIGNED, ZEROFILL&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [0 if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numeric&lt;br /&gt;{4 bytes}&lt;/td&gt;
&lt;td&gt;FLOAT[(M,D)]&lt;/td&gt;
&lt;td&gt;Min=+/-1.175E-38&lt;br /&gt; Max=+/-3.403E+38&lt;/td&gt;
&lt;td&gt;UNSIGNED, ZEROFILL&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [0 if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numeric&lt;br /&gt;{8 bytes}&lt;/td&gt;
&lt;td&gt;DOUBLE[(M,D)]&lt;/td&gt;
&lt;td&gt;Min=+/-2.225E-308&lt;br /&gt; Max=+/-1.798E+308&lt;/td&gt;
&lt;td&gt;UNSIGNED, ZEROFILL&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [0 if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numeric&lt;br /&gt;{M+2}&lt;/td&gt;
&lt;td&gt;DECIMAL[(M,[D])]&lt;br /&gt;Stored as string&lt;/td&gt;
&lt;td&gt;Max Range = DOUBLE range&lt;br /&gt;Fixed point vs. DOUBLE float&lt;/td&gt;
&lt;td&gt;UNSIGNED, ZEROFILL&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [0 if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bit&lt;br /&gt;{8 bytes}&lt;/td&gt;
&lt;td&gt;BIT[(M)]&lt;/td&gt;
&lt;td&gt;Binary. Display by [add zero |&lt;br /&gt;converting with BIN()]. M=1-64&lt;/td&gt;
&lt;td&gt;Prior to 5.03&lt;br /&gt;TINYINT(1) Synonym&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [0 if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{M char's}&lt;/td&gt;
&lt;td&gt;CHAR[(M)]&lt;/td&gt;
&lt;td&gt;M=0-255 Characters, FIXED.&lt;br /&gt;Right padded with spaces.&lt;/td&gt;
&lt;td&gt;BINARY, CHARACTER&amp;nbsp;SET&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{M char's&lt;sup&gt;1&lt;/sup&gt;}&lt;/td&gt;
&lt;td&gt;VARCHAR(M)&lt;/td&gt;
&lt;td&gt;M=0-65,535 Characters&lt;br /&gt;M=0-255 &amp;lt;v5.0.3&lt;/td&gt;
&lt;td&gt;BINARY, CHARACTER&amp;nbsp;SET&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{#char's&lt;sup&gt;1&lt;/sup&gt;}&lt;/td&gt;
&lt;td&gt;TINYTEXT&lt;sup&gt;2&lt;/sup&gt;&lt;/td&gt;
&lt;td&gt;0-255 Characters&lt;/td&gt;
&lt;td&gt;BINARY, CHARACTER&amp;nbsp;SET&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{#char's&lt;sup&gt;1&lt;/sup&gt;}&lt;/td&gt;
&lt;td&gt;TEXT&lt;sup&gt;2&lt;/sup&gt;&lt;/td&gt;
&lt;td&gt;0-65,535 Char's&lt;/td&gt;
&lt;td&gt;BINARY, CHARACTER&amp;nbsp;SET&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{#char's&lt;sup&gt;1&lt;/sup&gt;}&lt;/td&gt;
&lt;td&gt;MEDIUMTEXT&lt;sup&gt;2&lt;/sup&gt;&lt;/td&gt;
&lt;td&gt;0-16,777,215 Char's&lt;/td&gt;
&lt;td&gt;BINARY, CHARACTER&amp;nbsp;SET&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{#char's&lt;sup&gt;1&lt;/sup&gt;}&lt;/td&gt;
&lt;td&gt;LONGTEXT&lt;sup&gt;2&lt;/sup&gt;&lt;/td&gt;
&lt;td&gt;0-4,294,967,295 Char's&lt;/td&gt;
&lt;td&gt;BINARY, CHARACTER&amp;nbsp;SET&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{M bytes}&lt;/td&gt;
&lt;td&gt;BINARY[(M)]&lt;/td&gt;
&lt;td&gt;M=0-255 bytes, FIXED.&lt;/td&gt;
&lt;td&gt;Global Only&lt;br /&gt;(case sensitive)&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{M bytes}&lt;/td&gt;
&lt;td&gt;VARBINARY(M)&lt;/td&gt;
&lt;td&gt;0-65,535 bytes&lt;br /&gt;M=0-255 &amp;lt;v5.0.3&lt;/td&gt;
&lt;td&gt;Global Only&lt;br /&gt;(case sensitive)&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{#bytes&lt;sup&gt;1&lt;/sup&gt;}&lt;/td&gt;
&lt;td&gt;TINYBLOB&lt;/td&gt;
&lt;td&gt;0-255 bytes&lt;/td&gt;
&lt;td&gt;Global Only&lt;br /&gt;(case sensitive)&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{#bytes&lt;sup&gt;1&lt;/sup&gt;}&lt;/td&gt;
&lt;td&gt;BLOB&lt;/td&gt;
&lt;td&gt;0-65,535 bytes&lt;/td&gt;
&lt;td&gt;Global Only&lt;br /&gt;(case sensitive)&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{#bytes&lt;sup&gt;1&lt;/sup&gt;}&lt;/td&gt;
&lt;td&gt;MEDIUMBLOB&lt;/td&gt;
&lt;td&gt;0-16,777,215 bytes&lt;/td&gt;
&lt;td&gt;Global Only&lt;br /&gt;(case sensitive)&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{#bytes&lt;sup&gt;1&lt;/sup&gt;}&lt;/td&gt;
&lt;td&gt;LONGBLOB&lt;/td&gt;
&lt;td&gt;0-4,294,967,295 bytes&lt;/td&gt;
&lt;td&gt;Global Only&lt;br /&gt;(case sensitive)&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{1-2 bytes}&lt;/td&gt;
&lt;td&gt;ENUM&lt;sup&gt;2&lt;/sup&gt;&lt;br /&gt;(&quot;A1&quot;,&quot;A2&quot;,...)&lt;/td&gt;
&lt;td&gt;Column is exactly 1 of 1-65,535 values&lt;/td&gt;
&lt;td&gt;CHARACTER SET&lt;/td&gt;
&lt;td&gt;NULL [1st value if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;br /&gt;{1-8 bytes}&lt;/td&gt;
&lt;td&gt;SET&lt;sup&gt;2&lt;/sup&gt;&lt;br /&gt;(&quot;A1&quot;,&quot;A2&quot;,...)&lt;/td&gt;
&lt;td&gt;Column is 0 or more values in list of 1-64 members&lt;/td&gt;
&lt;td&gt;CHARACTER SET&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt; [&quot;&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date &amp;amp; Time&lt;br /&gt;{3 bytes}&lt;/td&gt;
&lt;td&gt;DATE&lt;/td&gt;
&lt;td&gt;&quot;1000-01-01&quot; - &quot;9999-12-31&quot;&lt;/td&gt;
&lt;td&gt;Global Only&lt;br /&gt;(YYYY-MM-DD)&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt;[&quot;0000-00-00&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date &amp;amp; Time&lt;br /&gt;{8 bytes}&lt;/td&gt;
&lt;td&gt;DATETIME&lt;/td&gt;
&lt;td&gt;&quot;1000-01-01 00:00:00&quot; -&lt;br /&gt;&quot;9999-12-31 23:59:59&quot;&lt;/td&gt;
&lt;td&gt;Global Only&lt;br /&gt;(YYYY-MM-DD hh:mm:ss)&lt;/td&gt;
&lt;td&gt;NULL [&quot;0000-00-00 00:00:00&quot;&lt;br /&gt; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date &amp;amp; Time&lt;br /&gt;{3 bytes}&lt;/td&gt;
&lt;td&gt;TIME&lt;/td&gt;
&lt;td&gt;&quot;-838:59:59&quot; - &quot;838:59:59&quot;&lt;/td&gt;
&lt;td&gt;Global Only&lt;br /&gt;(hh:mm:ss)&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt;[&quot;00:00:00&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date &amp;amp; Time&lt;br /&gt;{4 bytes}&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;19700101000000 -&lt;br /&gt;2037+&lt;/td&gt;
&lt;td&gt;Global Only&lt;br /&gt;(YYYYMMDDhhmmss)&lt;/td&gt;
&lt;td&gt;Current Date &amp;amp; Time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date &amp;amp; Time&lt;br /&gt;{1 bytes}&lt;/td&gt;
&lt;td&gt;YEAR&lt;/td&gt;
&lt;td&gt;1900 - 2155&lt;/td&gt;
&lt;td&gt;Global Only&lt;br /&gt;(YYYY)&lt;/td&gt;
&lt;td&gt;NULL&lt;br /&gt;[&quot;0000&quot; if NOT NULL]&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=389&amp;comments=on#comments</comments>
<pubDate>2008-05-03T12:00:00+10:00</pubDate>
</item>
<item>
<title>MS-SQL: Data Types</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=388</link>
<description>&lt;table&gt;
&lt;th&gt;
Data Types
&lt;/th&gt;
&lt;th&gt;
Description
&lt;/th&gt;

&lt;tr&gt;
&lt;td&gt;
bigint
&lt;/td&gt;
&lt;td&gt;
Integer data from -2^63 through 2^63-1
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
int
&lt;/td&gt;
&lt;td&gt;
Integer data from -2^31 through 2^31 - 1
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
smallint
&lt;/td&gt;
&lt;td&gt;
Integer data from -2^15 through 2^15 - 1
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
tinyint
&lt;/td&gt;
&lt;td&gt;
Integer data from 0 through 255
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
bit
&lt;/td&gt;
&lt;td&gt;
Integer data with either a 1 or 0 value
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
decimal
&lt;/td&gt;
&lt;td&gt;
Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
numeric
&lt;/td&gt;
&lt;td&gt;
Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
money
&lt;/td&gt;
&lt;td&gt;
Monetary data values from -2^63 through 2^63 - 1
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
smallmoney
&lt;/td&gt;
&lt;td&gt;
Monetary data values from -214,748.3648 through +214,748.3647
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
float
&lt;/td&gt;
&lt;td&gt;
Floating precision number data from -1.79E + 308 through 1.79E + 308
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
real
&lt;/td&gt;
&lt;td&gt;
Floating precision number data from -3.40E + 38 through 3.40E + 38
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
datetime
&lt;/td&gt;
&lt;td&gt;
Date and time data from January 1, 1753, through December 31, 9999,&lt;br&gt;
with an accuracy of 3.33 milliseconds
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
smalldatetime
&lt;/td&gt;
&lt;td&gt;
Date and time data from January 1, 1900, through June 6, 2079,&lt;br&gt;
with an accuracy of one minute
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
char
&lt;/td&gt;
&lt;td&gt;
Fixed-length  character data with a maximum length of 8,000 characters
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
varchar
&lt;/td&gt;
&lt;td&gt;
Variable-length  data with a maximum of 8,000 characters
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
text
&lt;/td&gt;
&lt;td&gt;
Variable-length  data with a maximum length of 2^31 - 1 characters
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
nchar
&lt;/td&gt;
&lt;td&gt;
Fixed-length Unicode data with a maximum length of 4,000 characters
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
nvarchar
&lt;/td&gt;
&lt;td&gt;
Variable-length Unicode data with a maximum length of 4,000 characters
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
ntext
&lt;/td&gt;
&lt;td&gt;
Variable-length Unicode data with a maximum length of 2^30 - 1 characters
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
binary
&lt;/td&gt;
&lt;td&gt;
Fixed-length binary data with a maximum length of 8,000 bytes
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
varbinary
&lt;/td&gt;
&lt;td&gt;
Variable-length binary data with a maximum length of 8,000 bytes
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
image
&lt;/td&gt;
&lt;td&gt;
Variable-length binary data with a maximum length of 2^31 - 1 bytes
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
cursor
&lt;/td&gt;
&lt;td&gt;
A reference to a cursor
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
sql_variant
&lt;/td&gt;
&lt;td&gt;
A data type that stores values of various data types,&lt;br&gt;
except text, ntext, timestamp, and sql_variant
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
table
&lt;/td&gt;
&lt;td&gt;
A special data type used to store a result set for later processing
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
timestamp
&lt;/td&gt;
&lt;td&gt;
A database-wide unique number that gets updated every time&lt;br&gt;
a row gets updated
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;
uniqueidentifier
&lt;/td&gt;
&lt;td&gt;
A globally unique identifier
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=388&amp;comments=on#comments</comments>
<pubDate>2008-05-03T12:00:00+10:00</pubDate>
</item>
<item>
<title>VBScript: Suggested Prefixes for Indicating the Data Type of a Variable</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=387</link>
<description>&lt;table&gt; &lt;tr&gt; &lt;th&gt; &lt;p&gt;Data Type&lt;/p&gt; &lt;/th&gt; &lt;th&gt; &lt;p&gt;Prefix&lt;/p&gt; &lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;ADO command&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;cmd&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;ADO connection&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;cnn&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;ADO field&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;fld&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;ADO parameter&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;prm&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;ADO recordset&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;rst&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Boolean&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;bln&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Byte&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;byt&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Collection object&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;col&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Currency&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;cur&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Date-time&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;dtm&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Double&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;dbl&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Error&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;err&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Integer&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;int&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Long&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;lng&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Object&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;obj&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Single&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;sng&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;String&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;str&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;User-defined type&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;udt&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;Variant&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;vnt&lt;br /&gt; &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=387&amp;comments=on#comments</comments>
<pubDate>2008-05-03T12:00:00+10:00</pubDate>
</item>
<item>
<title>Handling Boolean Fields in MS-SQL and MS-Access</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=385</link>
<description>If you have migrated from Microsoft Access to SQL Server or MySql then you have probably encountered the differences with boolean values.
&lt;p&gt;
In Microsoft Access you can use true or false in queries, for example:
&lt;p&gt;
&lt;pre&gt;SELECT * FROM tablename WHERE booleanfield=TRUE
SELECT * FROM tablename WHERE booleanfield=FALSE&lt;/pre&gt;
SQL Server/MySql require a different approach:
&lt;p&gt;
&lt;pre&gt;SELECT * FROM tablename WHERE booleanfield=1
SELECT * FROM tablename WHERE booleanfield=0&lt;/pre&gt;
The Microsoft Access query will not work in SQL Server/MySql and the SQL Server/MySql query will not work in Access as it treats true as -1 not 1.
&lt;p&gt;
For a cross-platform solution you can use the following:
&lt;p&gt;
&lt;pre&gt;SELECT * FROM tablename WHERE booleanfield&lt;&gt;0
SELECT * FROM tablename WHERE booleanfield=0&lt;/pre&gt;</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=385&amp;comments=on#comments</comments>
<pubDate>2008-05-03T12:00:00+10:00</pubDate>
</item>
<item>
<title>Fixing LCD Stuck Pixels, Dead Pixels and Burn-in</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=382</link>
<description>A stuck pixel is a coloured dot most noticable when the rest of the screen is black.&lt;br&gt;&lt;br&gt;A dead pixel is a black dot noticable when the rest of the screen is white.&lt;br&gt;&lt;br&gt;Burn-in (also known as image persistence) occurs when part or all of the display stays on screen for long periods without changing.&lt;br&gt;&lt;br&gt;If you have a dead pixel then there is nothing you can do. However if you have a stuck pixel then there is a small possibility that you may be able to get it working again. LCD burn-in can also be improved (but not completely eliminated) on LCD screens.&lt;br&gt;&lt;br&gt;To try and fix these problems you can download the applet at &lt;a href=http://www.jscreenfix.com/&gt;www.jscreenfix.com&lt;/a&gt; and follow the instructions there. Note: this applet cannot be downloaded or operated if you are using Internet Explorer. Instead use &lt;a href=http://www.mozilla.com/en-US/&gt;Firefox&lt;/a&gt; or another compatible browser.&lt;br&gt;&lt;br&gt;A proper screen blanker (one that keeps all parts of the display changing reasonably frequently) is a good idea on any type of monitor.</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=382&amp;comments=on#comments</comments>
<pubDate>2008-04-23T12:00:00+10:00</pubDate>
</item>
<item>
<title>I hate PayPal</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=372</link>
<description>Found an interesting contradition while paying for a purchase through PayPal today.&lt;br&gt;&lt;br&gt;If you read my previous post about how PayPal/eBay effectively forced me to upgrade to a fee-paying due to their requirement for all sellers to accept credit cards, even on the limited free account.&lt;br&gt;&lt;br&gt;For the payments I made tonight I see now that PayPal are trying to &quot;guide&quot; people towards making payments by bank transfer rather than credit card. They do this by defaulting to make the payment by bank transfer, making it difficult to change to credit card (by making the confirmation button almost look greyed out so you could easily accidently click the wrong button), and by various warnings about why you shouldn't pay by credit card.&lt;br&gt;&lt;br&gt;My guess is that bank transfers are more profitable than credit card transactions and that credit cards are not so secure for PayPal -- people can easily cancel purchases through their credit card issuer which creates extra work for PayPal and could result in losses.&lt;br&gt;&lt;br&gt;Anyway, I was a little angered to see the following message when I was &quot;warned&quot; against paying by credit card:&lt;br&gt;&lt;br&gt;&lt;i&gt;&quot;Note: Sellers with Personal accounts cannot receive credit card payments. Any PayPal user can receive bank account payments.&quot;&lt;/i&gt;&lt;br&gt;&lt;br&gt;Does this seem like the practices of an honest company?</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=372&amp;comments=on#comments</comments>
<pubDate>2008-04-15T12:00:00+10:00</pubDate>
</item>
<item>
<title>eBay Announcement - PayPal will be required on all listings</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=366</link>
<description>So eBay have announced that as of May/June 2008 virtually all auctions will have to be paid for by PayPal. (See &lt;a href=http://pages.ebay.com.au/useprotection/changes.html&gt;http://pages.ebay.com.au/useprotection/changes.html&lt;/a&gt;)&lt;br&gt;&lt;br&gt;Looking on the positive side, given my recent experience with fraud on eBay, this change will certainly make transactions safer.&lt;br&gt;&lt;br&gt;But I wonder if eBay have any plans to reduce PayPal fees now that everyone will be forced to use PayPal. Will they include PayPal fees as part of the estimate calculated when you preview a new item listing I wonder?&lt;br&gt;&lt;br&gt;As I am also involved with a business that lists around a thousand items at any one time on eBay, I am not happy that we can no longer offer our usual forms of payment. We would certainly like to continue to offer accepting credit cards directly (much cheaper than accepting credit cards through PayPal). I would say that credit cards are at least as secure form of payment as PayPal so not allowing them unless through PayPal goes against eBay's claims of this being for the protection of eBay customers.&lt;br&gt;&lt;br&gt;They will stand to make a lot more profit in PayPal fees which is most certainly some motivation for the change.&lt;br&gt;&lt;br&gt;Hopefully this change will give some people the impetus to look at some of the alternatives such as &lt;a href=http://www.oztion.com.au/?r=9956&gt;Oztion&lt;/a&gt;.</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=366&amp;comments=on#comments</comments>
<pubDate>2008-04-12T12:00:00+10:00</pubDate>
</item>
<item>
<title>I got defrauded!</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=365</link>
<description>Well for the first time I won something on eBay, paid for it, and it never arrived.&lt;br&gt;&lt;br&gt;I paid immediately upon winning the item by bank deposit as that was the only method the seller accepted. Bank deposit seemed like a reasonably safe payment method as it is traceable.&lt;br&gt;&lt;br&gt;Within a week the item hadn't arrived and other people who also won the same auction (it was a multiple listing) had already given the seller a negative rating. About this time eBay sent me a generic email warning me that I may have received a fraudulant offer from this seller.&lt;br&gt;&lt;br&gt;Then they sent another generic email saying the auction had been cancelled and the result was null and void. Here's a quote from it:&lt;br&gt;&lt;br&gt;&lt;i&gt;&quot;eBay has cancelled all bids or offers on this listing and you no longer have any obligation to purchase the item. If the seller chooses to relist the item, you're welcome to bid on it again.&quot;&lt;/i&gt;&lt;br&gt;&lt;br&gt;Not much use after the auction ended, eBay. And removing the listing also removed my record of the seller, their contact details and any of eBay's dispute resolution channels (not that they would help anyway).&lt;br&gt;&lt;br&gt;I notice the seller has also been deregistered.&lt;br&gt;&lt;br&gt;In eBay's help pages they suggest reporting these incidents with the police. eBay have not made this easy as they have removed the listing, and will not provide contact details because I cannot provide a valid listing number. All I have is the seller's user name, the listing number and the bank account details.&lt;br&gt;&lt;br&gt;I have sent eBay a question about what they can do to help.&lt;br&gt;&lt;br&gt;Will report updates here if anything actually happens.</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=365&amp;comments=on#comments</comments>
<pubDate>2008-04-02T12:00:00+10:00</pubDate>
</item>
<item>
<title>A Warning About Network Solutions</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=386</link>
<description>I used to use Network Solution's (NetSol) website to check availability of domain names as it allowed me to type in a list of domain names in one go.
&lt;p&gt;
Up until recently this had been fine.
&lt;p&gt;
Recently I did this as usual and when I chose the domain name I wanted to register I attempted to register it with another domain name registrar.
&lt;p&gt;
Strangely the other registrar said that the domain name had already been registered. I checked again with Network Solutions and it said the name was still available.
&lt;p&gt;
I investigated further and found that the name was just registered to Network Solutions.
&lt;p&gt;
Further investigation revealed that Network Solutions take advantage of a facility available to all registrars called &quot;Domain Tasting&quot;. This allows them to register a domain name for up to 5 days without paying for it, then they can choose not to pay for it and the name will be released.
&lt;p&gt;
I read elsewhere that Network Solutions increase the price to register the domain name over the next few days in an attempt to scare you into buying the domain name immediately.
&lt;p&gt;
So you have been warned. When you do a domain name search with Network Solutions they will register that domain name immediately, whether you end up registering with them or not. And if you choose to register it with another registrar you will have to wait at least 3 days.</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=386&amp;comments=on#comments</comments>
<pubDate>2008-03-03T12:00:00+10:00</pubDate>
</item>
<item>
<title>VBScript Class to Send Mail With CDOSYS</title>
<link>http://www.ebay.johnavis.com/blog/default.asp?id=350</link>
<description>This is my first attempt at a VBScript class.

&lt;p&gt;It allows full control of the CDO Message object.

&lt;p&gt;You can create a new instance of the class with the following:

&lt;pre&gt;Dim clsSendMail
Set clsSendMail = New SendMail&lt;/pre&gt;

&lt;p&gt;Then add the various properties of the email:

&lt;pre&gt;clsSendMail.SendTo = &quot;test@test.com&quot;
clsSendMail.From = &quot;test@test.com&quot;
clsSendMail.Subject = &quot;Test Message&quot;&lt;/pre&gt;

&lt;p&gt;Next you choose what type of mail you are going to send: plain text, HTML or from a URL or local file.

&lt;p&gt;&lt;table border=&quot;1&quot;&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Property/Method&lt;/th&gt;
&lt;th&gt;Syntax&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plain Text&lt;/td&gt;
&lt;td&gt;TextBody&lt;/td&gt;
&lt;td&gt;clsSendMail.TextBody = &quot;message here&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML&lt;/td&gt;
&lt;td&gt;HTMLBody&lt;/td&gt;
&lt;td&gt;clsSendMail.HTMLBody = &quot;&amp;lt;b&amp;gt;html&amp;lt;/b&amp;gt; message here&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;URL&lt;/td&gt;
&lt;td&gt;CreateMHTMLBody&lt;/td&gt;
&lt;td&gt;Call clsSendMail.CreateMHTMLBody &quot;http://www.url.com/pagename.htm&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local File&lt;/td&gt;
&lt;td&gt;CreateMHTMLBody&lt;/td&gt;
&lt;td&gt;Call clsSendMail.CreateMHTMLBody &quot;file://c:/mydocuments/test.htm&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;To add an attachment use the following:

&lt;pre&gt;Call clsSendMail.AddAttachment &quot;c:\mydocuments\test.txt&quot;&lt;/pre&gt;

&lt;p&gt;To embed files in your message use:

&lt;pre&gt;clsSendMail.AddRelatedBodyPart &quot;/older/imagefile.gif&quot;, &quot;image1.gif&quot;&lt;/pre&gt;

&lt;p&gt;This can then be included in your HTMLBody by referencing the second parameter as the CID, for example:

&lt;pre&gt;&amp;lt;img src=&quot;cid:image1.gif&quot;&amp;gt;&lt;/pre&gt;

&lt;p&gt;You can also set a SMTP server and port if neccessary:

&lt;pre&gt;Call clsSendMail.SMTPServer &quot;mail.test.com&quot;, 25&lt;/pre&gt;


&lt;p&gt;&lt;b&gt;SendMail Class&lt;/b&gt;

&lt;form&gt;&lt;textarea cols=&quot;50&quot; rows=&quot;20&quot; style=&quot;width:95%&quot;&gt;Class SendMail

	Private objCDOMessage
	Private objCDOBodyPart

	Private strTo
	Private strFrom
	Private strCC
	Private strBCC
	Private strSubject
	Private strTextBody
	Private strHTMLBody

	Private Sub Class_Initialize()
		Set objCDOMessage = CreateObject(&quot;CDO.Message&quot;)
	End Sub

	Private Sub Class_Terminate()
		Set objCDOMessage = Nothing
	End Sub

	Public Property Let SendTo(strParam1)
		strTo = strParam1
	End Property

	Public Property Let From(strParam1)
		strFrom = strParam1
	End Property

	Public Property Let CC(strParam1)
		strCC = strParam1
	End Property

	Public Property Let BCC(strParam1)
		strBCC = strParam1
	End Property

	Public Property Let Subject(strParam1)
		strSubject = strParam1
	End Property

	Public Property Let TextBody(strParam1)
		strTextBody = strParam1
	End Property

	Public Property Let HTMLBody(strParam1)
		strHTMLBody = strParam1
	End Property

	Public Sub CreateMHTMLBody(strParam1)
		objCDOMessage.CreateMHTMLBody strParam1
	End Sub

	Public Sub AddAttachment(strParam1)
		objCDOMessage.AddAttachment strParam1
	End Sub

	Public Sub SMTPServer(strParam1, intParam2)
		objCDOMessage.Configuration.Fields.Item(&quot;http://schemas.microsoft.com/cdo/configuration/sendusing&quot;) = 2
		objCDOMessage.Configuration.Fields.Item(&quot;http://schemas.microsoft.com/cdo/configuration/smtpserver&quot;) = strParam1
		objCDOMessage.Configuration.Fields.Item(&quot;http://schemas.microsoft.com/cdo/configuration/smtpserverport&quot;) = intParam2
		objCDOMessage.Configuration.Fields.Update
	End Sub

	Public Sub AddRelatedBodyPart(strParam1, strParam2)
		Set objCDOBodyPart = objCDOMessage.AddRelatedBodyPart(Server.MapPath(strParam1), strParam2, 1)
		objCDOBodyPart.Fields.Item(&quot;urn:schemas:mailheader:Content-ID&quot;) = &quot;&lt;&quot; &amp; strParam2 &amp; &quot;&gt;&quot;
		objCDOBodyPart.Fields.Update
	End Sub

	Public Sub Send()
		If strTo &lt;&gt; &quot;&quot; Then objCDOMessage.To = strTo
		If strFrom &lt;&gt; &quot;&quot; Then objCDOMessage.From = strFrom
		If strCC &lt;&gt; &quot;&quot; Then objCDOMessage.CC = strCC
		If strBCC &lt;&gt; &quot;&quot; Then objCDOMessage.BCC = strBCC
		If strSubject &lt;&gt; &quot;&quot; Then objCDOMessage.Subject = strSubject
		If strTextBody &lt;&gt; &quot;&quot; Then objCDOMessage.TextBody = strTextBody
		If strHTMLBody &lt;&gt; &quot;&quot; Then objCDOMessage.HTMLBody = strHTMLBody
		objCDOMessage.Send
	End Sub
End Class&lt;/textarea&gt;&lt;/form&gt;
</description>
<comments>http://www.ebay.johnavis.com/blog/default.asp?id=350&amp;comments=on#comments</comments>
<pubDate>2008-02-16T12:00:00+10:00</pubDate>
</item>
</channel>
</rss>
