<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-10236677</atom:id><lastBuildDate>Mon, 08 Mar 2010 04:27:02 +0000</lastBuildDate><title>JSDB History</title><description></description><link>http://www.jsdb.org/history.html</link><managingEditor>noreply@blogger.com (Shanti)</managingEditor><generator>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-8293508183284663696</guid><pubDate>Mon, 08 Mar 2010 04:27:00 +0000</pubDate><atom:updated>2010-03-07T20:27:02.057-08:00</atom:updated><title>JSDB 1.8.0.2</title><description>Bugs fixed&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;encodeURL() could crash. Fixed. Debugger works again on Windows. Haven't tested Mac or Linux yet.&lt;/li&gt;&lt;li&gt;Server tries harder to get a valid host name on OSX &lt;/li&gt;&lt;/ul&gt;New features&lt;br /&gt;&lt;ul&gt;&lt;li&gt;New Stream functions: readFloat32(), writeFloat32(), readFloat64(), writeFloat64(), readDouble(), writeDouble()&lt;/li&gt;&lt;li&gt;New system.remove() function to delete files or directories. &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-8293508183284663696?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#8293508183284663696</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-8369883934354934005</guid><pubDate>Wed, 27 Jan 2010 05:43:00 +0000</pubDate><atom:updated>2010-01-30T21:05:38.741-08:00</atom:updated><title>Version 1.8.0.1 - now 50x faster</title><description>New features&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JSDB now uses the TraceMonkey just-in-time (JIT) compiler, with the SpiderMonkey engine from FireFox 3.5.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you don't want the JIT, use the command-line option &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-nojit&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;The build script has been simplified, and make.js updated accordingly, for those of you who use JSDB to build JSDB from sources.&lt;/li&gt;&lt;/ul&gt;Thanks to Michael Iola for helping decipher Mozilla's configure script!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-8369883934354934005?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#8369883934354934005</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-128861537139598355</guid><pubDate>Wed, 11 Nov 2009 18:21:00 +0000</pubDate><atom:updated>2009-11-19T16:52:11.552-08:00</atom:updated><title>JSDB 1.8</title><description>New features&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Uses SpiderMonkey version 1.8. This is significantly faster, though the Just-in-time compiler doesn't work yet.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Bug fixed&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Record.clear() no longer crashes&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-128861537139598355?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#128861537139598355</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-5690613736422824052</guid><pubDate>Wed, 28 Oct 2009 01:24:00 +0000</pubDate><atom:updated>2009-10-27T18:24:48.568-07:00</atom:updated><title>Version 1.7.3.6</title><description>Bugs fixed&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fixed a bug in SQLite.exec()&lt;/li&gt;&lt;li&gt;Added "i" option for "immediate" in TCP streams. This makes it more consistent with the other Stream constructors. Backward compatible to existing code.&lt;/li&gt;&lt;li&gt;system.attributes(file) returns local time, not UTC&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-5690613736422824052?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#5690613736422824052</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-6726131871400197530</guid><pubDate>Fri, 09 Oct 2009 18:22:00 +0000</pubDate><atom:updated>2009-10-09T11:24:21.049-07:00</atom:updated><title>JSDB 1.7.3.5</title><description>Bugs fixed&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;crc32, encodeB64, decodeB64 now accept strings with embedded nulls&lt;/li&gt;&lt;li&gt;Fixed a truncation bug in utf-8 to UCS-2 conversion, fixing some windows system call bugs like system.attributes()&lt;/li&gt;&lt;li&gt;ODBC.setAutoCommit(), ODBC.commit(), ODBC.rollback()&lt;/li&gt;&lt;li&gt;Improve sqlite lock contention&lt;/li&gt;&lt;li&gt;JSDB detects whether it's in a CGI environment. If so, errors that stop execution will print Content-type: text/plain\n\n before the error message.&lt;/li&gt;&lt;li&gt;Record.toObject(), new Record(object)&lt;/li&gt;&lt;li&gt;Removed Stream::read(wchar_t*,int) for type rule changes in Visual Studio 2008. Use Stream::read(char*, int) instead.utf-8 to UCS-2 conversion can detect invalid characters and convert them as if they were ANSI characters. Many web browsers will send you ANSI quotation marks, even if you specifically request utf-8 encoding. Bah!&lt;/li&gt;&lt;/ul&gt;Special thanks to yak van KrakLog, Michael Iola, and Árgylán Nándor&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-6726131871400197530?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#6726131871400197530</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-7146944705304542523</guid><pubDate>Wed, 15 Jul 2009 04:19:00 +0000</pubDate><atom:updated>2009-07-15T21:42:53.866-07:00</atom:updated><title>Version 1.7.3.4</title><description>New&lt;br /&gt;* system.name is the computer name&lt;br /&gt;* system.script is the main script, but empty for -load&lt;br /&gt;* system.arguments is defined (as an empty array) for -load script.js&lt;br /&gt;* Matrix.inverse() in matrix.js&lt;br /&gt;&lt;br /&gt;Bug fixes&lt;br /&gt;* Changed how file size &gt; 4Gb is reported by system.attributes()&lt;br /&gt;* Fixed a buffer overrun (non-hazardous, but annoying) in WStr() constructor.&lt;br /&gt;* Fixed some typos in error reporting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-7146944705304542523?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#7146944705304542523</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-6642976943745988280</guid><pubDate>Fri, 10 Jul 2009 04:59:00 +0000</pubDate><atom:updated>2009-07-09T22:08:53.242-07:00</atom:updated><title>JSDB 1.7.3.3</title><description>Bugs fixed&lt;br /&gt;* DecodeANSI was truncating&lt;br /&gt;* Process accessed a bad pointer on Windows.&lt;br /&gt;* Record(false) never worked.&lt;br /&gt;* SQLite updated to 3.6.16.&lt;br /&gt;&lt;br /&gt;Download from &lt;a href="http://www.jsdb.org/download.html"&gt;http://www.jsdb.org/download.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-6642976943745988280?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#6642976943745988280</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-386483065998304201</guid><pubDate>Mon, 22 Jun 2009 18:11:00 +0000</pubDate><atom:updated>2009-06-22T11:12:10.872-07:00</atom:updated><title>JSDB 1.7.3.2</title><description>Bugs fixed&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SQlite updated to 3.6.15 (fixed 64-bit alignment bug on SunOS)&lt;/li&gt;&lt;li&gt;Run from Zip fixed (also accepts JAR)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-386483065998304201?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#386483065998304201</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-4275368378649123629</guid><pubDate>Thu, 04 Jun 2009 04:31:00 +0000</pubDate><atom:updated>2009-06-03T22:03:23.170-07:00</atom:updated><title>Version 1.7.3.1</title><description>Bugs fixed&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SQLite.escape() lost a '. Fixed.&lt;/li&gt;&lt;li&gt;Source is automatically converted from UTF-8 &lt;/li&gt;&lt;li&gt;system.files() and system.folders() fixed on Windows&lt;/li&gt;&lt;li&gt;Error message generated if you run "jsdb file.js" and file.js doesn't exist.  Errorlevel 1 = file doesn't exist, 2 = can't open file.&lt;br /&gt;If JSDB is being run in a server environment (checks for GATEWAY_INTERFACE=CGI/*), it prints Content-type: text/plain\nWarn: 500\n\n before the error messages.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-4275368378649123629?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#4275368378649123629</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-3145670931588932453</guid><pubDate>Sat, 09 May 2009 21:57:00 +0000</pubDate><atom:updated>2009-05-10T13:58:43.471-07:00</atom:updated><title>JSDB 1.7.3.0</title><description>Big changes! &lt;a href="http://www.jsdb.org/download.html"&gt;Download JSDB 1.7.3.0&lt;/a&gt; if you're feeling adventurous. Otherwise, stick with 1.7.2.6. JSDB is completely overhauled to fix your character set difficulties. Report your bugs to shanti@shantirao.com.&lt;br /&gt;&lt;br /&gt;Functions are either UCS-2 (Unicode) or 8-bit. Most functions accept 16-bit strings, assume they are UCS-2, and convert them to utf-8 when interacting with the operating system, and convert them back to UCS-2 for the return value. See &lt;a href="http://www.joelonsoftware.com/articles/Unicode.html"&gt;http://www.joelonsoftware.com/articles/Unicode.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Functions called out below (like Stream I/O) are 8-bit, and will only use the lowest 8 bits of a unicode string. There are also new Stream.read16() and Stream.write16() functions.&lt;br /&gt;&lt;br /&gt;If you get tired of writing decodeUTF8(stream.readln()), recompile JSDB by running&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;jsdb make.js jsdb.project win32|osx|linux|sun /define JS_C_STRINGS_ARE_UTF8&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or make a wrapper object&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;function UTF8Stream(stream)&lt;br /&gt;{&lt;br /&gt;this.stream = stream;&lt;br /&gt;this.read = function(length) {return decodeUTF8(this.stream.read(length));}&lt;br /&gt;this.write = &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;function() {return this.stream.write.apply(&lt;br /&gt;this.stream,arguments.map(encodeUTF8));}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;Note that JavaScript's 16-bit character set is not necessarily UCS-2 or UTF-16, because it faithfully stores binary values that may not be part of the Unicode character set. The functions that convert between JavaScript strings and UTF-8 do not know about the character set, so round-trip conversions will not lose data as long as there are no null-value characters.&lt;br /&gt;&lt;br /&gt;If you're working with binary data, consider Array, Stream, or Numbers instead.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SQLite.createFunction() (Thanks, Yak!)&lt;/li&gt;&lt;li&gt;Archive.compress() and Archive.uncompress() (Thanks, Argyelan!)&lt;/li&gt;&lt;/ul&gt;Bug fixes&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You can change the directory with system.cwd="/home"&lt;/li&gt;&lt;li&gt;SQLite updated to 3.6.14 &lt;/li&gt;&lt;li&gt;Fix problems to compile on 64bit&lt;/li&gt;&lt;li&gt;system.files() and system.folders() understands wildcards on Unix&lt;/li&gt;&lt;li&gt;Table.save(filename) works for spreadsheet tables&lt;/li&gt;&lt;li&gt;Table.index(field1,field2,...) works&lt;/li&gt;&lt;li&gt;ODBC.escape() leaves _ and % alone.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Character set notes&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SQLite functions all accept and return unicode, but save utf-8 in the database.&lt;/li&gt;&lt;li&gt;ODBC functions all accept and return unicode, but save utf-8 in the database.&lt;/li&gt;&lt;li&gt;This means that SQLite.escape() and ODBC.escape() appear to operate in unicode. Conversion is done before the SQL_Exec() call.&lt;/li&gt;&lt;li&gt;ODBC connection strings are 8-bit (only the lowest 8 bits of the JS string are used)&lt;/li&gt;&lt;li&gt;File i/o Windows file and directory names are unicode&lt;/li&gt;&lt;li&gt;UNIX file and directory names are converted to and from utf-8. &lt;/li&gt;&lt;li&gt;I/O functions like read(), write(), Stream.read(), and Stream.write() are 8-bit&lt;/li&gt;&lt;li&gt;The debugger converts strings to utf-8&lt;/li&gt;&lt;li&gt;Numbers.toString(delimiter) is 8-bit (only the lowest 8 bits of the JS string are used)&lt;/li&gt;&lt;li&gt;Mail logins are 8-bit (only the lowest 8 bits of the JS string are used), but Mail.send() automatically converts strings to utf-8.&lt;/li&gt;&lt;li&gt;The Record object stores strings internally as utf-8, and converts them automatically to and from UCS-2.&lt;/li&gt;&lt;li&gt;Windows registry functions are 8-bit. Sorry. That's a bug.&lt;/li&gt;&lt;li&gt;system.execute() will pass parameters as Unicode, unless your program is http://xxx, which should be already utf-8 and URL-encoded&lt;/li&gt;&lt;li&gt;Network addresses are 8-bit, so as to preserve utf-8 encoding without translation.&lt;/li&gt;&lt;li&gt;encodeURL() converts strings to utf-8 before %-escaping.&lt;/li&gt;&lt;li&gt;decodeURL() undoes whatever encodeURL did.&lt;/li&gt;&lt;li&gt;encodeB64() and decodeB64() are 8-bit. If you want to encode a unicode string, use encodeB64(encodeUTF8('foobar'))&lt;/li&gt;&lt;li&gt;encodeHTML() accepts Unicode and returns a 7-bit string with appropriate &amp;amp;-escapes.&lt;/li&gt;&lt;li&gt;decodeHTML() returns a 7-bit or utf-8 input to unicode.&lt;/li&gt;&lt;/ul&gt;Upcoming&lt;br /&gt;&lt;br /&gt;Several people have asked about switching to V8 or TraceMonkey. The former lacks a working toSource() function, and the latter has too many bugs. We'll get there eventually.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-3145670931588932453?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#3145670931588932453</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-8909863863753475313</guid><pubDate>Sat, 17 Jan 2009 00:33:00 +0000</pubDate><atom:updated>2009-01-16T16:48:04.795-08:00</atom:updated><title>Version 1.7.2.5</title><description>Bug fixes&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SQLite: added lastid property&lt;/li&gt;&lt;li&gt;SQLite: wait for locks for longer before giving up&lt;/li&gt;&lt;li&gt;Linux: compiled without ODBC fixed&lt;/li&gt;&lt;li&gt;All load() and run() functions know about and skip the shebang #! line&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-8909863863753475313?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#8909863863753475313</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-2252303944789247501</guid><pubDate>Sat, 13 Dec 2008 21:19:00 +0000</pubDate><atom:updated>2008-12-13T14:54:19.165-08:00</atom:updated><title>Version 1.7.2.4: Improvements and fixes</title><description>Warning - Changes may break existing code! If you need to read a web page in a backward-compatible way, use&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var s = new Stream('http://www.jsdb.org/')&lt;br /&gt;if (!s.header) s.header = s.readMIME()&lt;br /&gt;var data = s.read(s.header['Content-Length'])&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bug fixes:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Safe Mode: system.status() and system.exists() are allowed in Safe Mode.&lt;/li&gt;&lt;li&gt;SQLite: Fix dropped columns in sparse result sets.&lt;/li&gt;&lt;li&gt;ActiveX: Replace lost CoCreateInstance() call. Sorry! This fix is also made for the 1.7.2.3 binary and sources on the Downloads page.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Process: Works on UNIX, uses /bin/sh to run commands.&lt;/li&gt;&lt;li&gt;Stream: exec:// streams work on UNIX. Use Stream.canRead to detect program termination -- the stream detects empty read() calls and flags itself as closed if waitpid() fails.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Improvements:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JS objects may be used anywhere in place of Record objects (though with a substantial efficiency hit for database transactions). I hope to phase out the Record class eventually.&lt;/li&gt;&lt;li&gt;Stream: You can pass HTTP header parameters to the server (see below).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;New read-only properties system.pid and system.cwd.&lt;/li&gt;&lt;li&gt;New system.getcwd() function, behaves the same as system.setcwd().&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Changes:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Stream class is changed to make it easier to download web data. In this version, the code to read the contents of a web page is&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;var s = new Stream('http://www.jsdb.org/')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The response HTTP header, status code, and status text are stored in the &lt;span style="font-family:courier new;"&gt;header&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;status&lt;/span&gt;, and &lt;span style="font-family:courier new;"&gt;statusText &lt;/span&gt;properties of the stream, respectively. The server response is automatically de-chunked, and the header modified accordingly. If you want to use the old Stream interface, whereby you had to parse the header yourself, use&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var s = new Stream('http://www.jsdb.org/',1)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are occasions when you may want to send custom headers to the server. In that case, use&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;var s = new Stream('http://www.jsdb.org/',&lt;br /&gt;       {header-field: "header-value", ...})&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;/span&gt;&lt;/span&gt;If you want to send custom headers, &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; parse the entire HTTP response yourself, including the status reply, use&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;var s = new Stream('http://www.jsdb.org/',0,&lt;br /&gt;       {header-field: "header-value", ...})&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-2252303944789247501?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#2252303944789247501</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-8950393086990887376</guid><pubDate>Thu, 25 Sep 2008 04:59:00 +0000</pubDate><atom:updated>2008-09-25T11:52:55.405-07:00</atom:updated><title>Version 1.7.2.3: Bug fixes</title><description>Bug fixes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Allow newlines in quoted strings in CSV, TSV files&lt;/li&gt;&lt;li&gt;ActiveX works more reliably&lt;/li&gt;&lt;li&gt;Stream.eof works for exec:// streams on Windows&lt;/li&gt;&lt;/ul&gt;For ActiveX:&lt;br /&gt;&lt;br /&gt;The handling of number data types was changed, so that integers returned  from ActiveX calls that fit within 31 bits are represented as INTs,  while larger integers are automatically promoted to DOUBLEs. Note that  the ECMA specification says that all numbers are double-precision  floating-point, but INTs may be used for storage convenience. There's  still a problem that 64-bit integers can not be represented in  JavaScript, but the language standards folks are working on that. Also,  a few instances of redundant AddRef() and Release() calls were removed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-8950393086990887376?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#8950393086990887376</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-5422237243078085864</guid><pubDate>Sat, 12 Jul 2008 03:13:00 +0000</pubDate><atom:updated>2008-07-11T21:20:23.730-07:00</atom:updated><title>Version 1.7.2.2: Minor upgrade + bug fixes</title><description>Bug fixes&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Changed uint64 definition in compiler.h to auto-detect 64-bit OSs&lt;/li&gt;&lt;li&gt;ODBC.table() doesn't crash when returning a null set.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;New functions&lt;br /&gt;&lt;ul&gt;&lt;li&gt;stream.readInt32() and stream.writeInt32()&lt;/li&gt;&lt;li&gt;SQLite.tables(), odbc.keys(), odbc.columns(), odbc.escape()&lt;/li&gt;&lt;li&gt;ODBC.tables(), odbc.keys(), odbc.escape()&lt;/li&gt;&lt;li&gt;Updated ODBC.exec(query, callback, ...) to match SQLite.exec()&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;New features&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In-memory FIFO streams. new Stream("fifo://")&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Thanks, Jason!&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Cross-platform Web GUI&lt;/li&gt;&lt;li&gt;Linux image is relocateable; reads argv[0] from /proc/self/exe&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-5422237243078085864?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#5422237243078085864</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-6209059045854149381</guid><pubDate>Fri, 06 Jun 2008 17:51:00 +0000</pubDate><atom:updated>2008-06-06T10:56:27.734-07:00</atom:updated><title>Version 1.7.2.1</title><description>Bug fixes&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fixed a byte order error in Stream.readTag() that affected Sparc/PPC&lt;/li&gt;&lt;li&gt;Fixed a byte order error in Stream.readInt() and Stream.writeInt().&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-6209059045854149381?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#6209059045854149381</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-1426966996088038789</guid><pubDate>Fri, 02 May 2008 05:41:00 +0000</pubDate><atom:updated>2008-05-04T16:50:03.659-07:00</atom:updated><title>SunOS, Bug Fixes</title><description>JSDB now compiles on SunOS. Run &lt;span style="font-family:courier new;"&gt;makejsdb.sun&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Bug Fixes&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Table.add({field:'value', field:'value'}) works without crashing.&lt;/li&gt;&lt;li&gt;Table.create() now works when field types are specified.&lt;/li&gt;&lt;li&gt;On UNIX, ls *.foo no longer crashes when *.foo is not found&lt;/li&gt;&lt;li&gt;Added _atoi64() to libraries for systems that don't provide it.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-1426966996088038789?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#1426966996088038789</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-641955666574853383</guid><pubDate>Mon, 31 Mar 2008 07:49:00 +0000</pubDate><atom:updated>2008-07-11T20:12:23.684-07:00</atom:updated><title>SQLite! Version 1.7.2</title><description>Version 1.7.2 integrates the SQLite3 engine. Here's a test:&lt;br /&gt;&lt;pre&gt;db = new SQLite("myfile.db")&lt;br /&gt;if (!db.exec("create table people (name varchar(32), email varchar(32));"))&lt;br /&gt;writeln(db.error)&lt;br /&gt;&lt;br /&gt;db.exec("insert into people (name, email) values ('shanti','shanti@shantirao.com')")&lt;br /&gt;&lt;br /&gt;db.exec("select * from people",writeln)&lt;br /&gt;&lt;br /&gt;function callback(record, tableName)&lt;br /&gt;{&lt;br /&gt;writeln(tableName,' ',record.get('name'))&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;db.exec("select * from people",callback,"people")&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-641955666574853383?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#641955666574853383</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-2443390710987949134</guid><pubDate>Mon, 03 Mar 2008 05:29:00 +0000</pubDate><atom:updated>2008-03-02T21:30:47.229-08:00</atom:updated><title>New: ODBC.table()</title><description>New function, ODBC.table('tablename') for opening read/write tables directly from an ODBC connection.&lt;br /&gt;&lt;br /&gt;SQLite coming soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-2443390710987949134?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#2443390710987949134</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-8720138644877046417</guid><pubDate>Wed, 20 Feb 2008 06:18:00 +0000</pubDate><atom:updated>2008-02-19T22:24:06.593-08:00</atom:updated><title>Version 1.7</title><description>JSDB 1.7 is now available, based on the latest version of the language.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You can do cool things like multiple return values, and use the new keywords like "let". &lt;a href="http://developer.mozilla.org/en/docs/New_in_JavaScript_1.7"&gt;More on JS 1.7&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ActiveX handling is improved. You should be able to use VARIANT types that JavaScript doesn't understand as opaque variables without crashing.&lt;/li&gt;&lt;li&gt;OSX is pre-compiled with the iODBC library&lt;/li&gt;&lt;li&gt;Linux is pre-compiled without ODBC (working on that), but build scripts for unixODBC and for iODBC are included in the source&lt;/li&gt;&lt;/ul&gt;A few more fixes are in the pipeline, like making the image relocatable under Linux. Thanks for all the feedback.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-8720138644877046417?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#8720138644877046417</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-7573604947829380521</guid><pubDate>Sun, 26 Aug 2007 06:59:00 +0000</pubDate><atom:updated>2007-08-26T00:20:03.892-07:00</atom:updated><title>Mac OS X version</title><description>I bought a Mac, and now JSDB 1.6 is available in an OS X binary!&lt;br /&gt;&lt;br /&gt;To build it yourself, use the &lt;span style="font-family: courier new;"&gt;makejsdb.osx&lt;/span&gt; script. There are a few gotchas in XCode 2.4.1, which this script will do for you.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Link with g++ instead of gcc&lt;/li&gt;&lt;li&gt;The -s linker option doesn't work. Run &lt;span style="font-family: courier new;"&gt;strip &lt;/span&gt;after linking.&lt;/li&gt;&lt;li&gt;XCode can't use template classes if the .h file containing the template and the .cpp file including it are in different directories. Strange, eh?&lt;/li&gt;&lt;li&gt;SpiderMonkey 1.6 doesn't recognize __APPLE__ as having a built-in int64 type, so define JS_HAVE_LONG_LONG on the command line.&lt;/li&gt;&lt;/ol&gt;The web server (httpd.js) works just great!&lt;br /&gt;&lt;br /&gt;There's obviously some work yet to do. The system.openBrowser() function doesn't point to Safari. An installer package would be nifty, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-7573604947829380521?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#7573604947829380521</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-6963857234682537039</guid><pubDate>Fri, 08 Jun 2007 06:31:00 +0000</pubDate><atom:updated>2007-06-08T00:31:45.123-07:00</atom:updated><title>Version 1.6.1</title><description>Bug fixes&lt;br /&gt;&lt;ul&gt;&lt;li&gt;load() fixed on Linux&lt;/li&gt;&lt;li&gt;load() and run() run different functions. Run() can take a stream as a parameter&lt;/li&gt;&lt;li&gt;Linux binary and build script are for ODBC. Read readme.txt for instructions on building JSDB for Linux without ODBC, say for an embedded device.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;New features&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Record(object) constructor&lt;a href="javascript:void(0)" onclick="return false;" tabindex="7"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Record.toObject() function&lt;/li&gt;&lt;li&gt;Linux -- load() and resource() search path set to /etc/jsdb/&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-6963857234682537039?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#6963857234682537039</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-7078728173708530414</guid><pubDate>Mon, 28 May 2007 20:35:00 +0000</pubDate><atom:updated>2009-05-09T18:24:24.624-07:00</atom:updated><title></title><description>fo&lt;span style="font-weight: bold;"&gt;obar&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-7078728173708530414?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-4583695456134346832</guid><pubDate>Wed, 25 Apr 2007 05:10:00 +0000</pubDate><atom:updated>2007-04-24T22:25:01.310-07:00</atom:updated><title>Version 1.6</title><description>New! JavaScript language version 1.6!&lt;br /&gt;&lt;br /&gt;Download and unzip &lt;a href="http://www.jsdb.org/jsdb_win_1.6.zip"&gt;JSDB for Windows&lt;/a&gt; or &lt;a href="http://www.jsdb.org/jsdb_linux_1.6.zip"&gt;JSDB for Linux (x86).&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use the E4X language extensions, just like in Firefox 1.5&lt;/li&gt;&lt;li&gt;Nifty new array methods: &lt;code&gt;&lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:indexOf" title="Core JavaScript 1.5 Reference:Objects:Array:indexOf"&gt;indexOf()&lt;/a&gt;&lt;/code&gt; , &lt;code&gt;&lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:lastIndexOf" title="Core JavaScript 1.5 Reference:Objects:Array:lastIndexOf"&gt;lastIndexOf()&lt;/a&gt;&lt;/code&gt; , &lt;code&gt;&lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:every" title="Core JavaScript 1.5 Reference:Objects:Array:every"&gt;every()&lt;/a&gt;&lt;/code&gt; , &lt;code&gt;&lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:filter" title="Core JavaScript 1.5 Reference:Objects:Array:filter"&gt;filter()&lt;/a&gt;&lt;/code&gt; , &lt;code&gt;&lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:forEach" title="Core JavaScript 1.5 Reference:Objects:Array:forEach"&gt;forEach()&lt;/a&gt;&lt;/code&gt; , &lt;code&gt;&lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:map" title="Core JavaScript 1.5 Reference:Objects:Array:map"&gt;map()&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:some" title="Core JavaScript 1.5 Reference:Objects:Array:some"&gt;some()&lt;/a&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Generic functions.&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://developer.mozilla.org/en/docs/New_in_JavaScript_1.6"&gt;Read the Mozilla notes on the language update&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Just to make life interesting, the standard download is the open-source version, compiled with gcc. This means that native Lotus Notes mail doesn't work anymore (not that anyone uses it anymore). If you need Notes, send me a message and I'll hook you up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-4583695456134346832?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#4583695456134346832</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-6671471842499529506</guid><pubDate>Wed, 04 Apr 2007 08:12:00 +0000</pubDate><atom:updated>2007-04-04T01:48:05.437-07:00</atom:updated><title>Version 1.51</title><description>Bugs fixed&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Stream.writeInt16() and Stream.writeInt32() would sometimes reverse the byte order. Oops! Found and fixed that.&lt;/li&gt;&lt;/ol&gt;New features&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Spiffy new Numbers class for implementing an array of double-precision floating-point numbers. The Numbers.exec() function is a simple RPN calculator for vector math operations.&lt;/li&gt;&lt;li&gt;A new &lt;a href="http://www.jsdb.org/jsdbhelp.html#Matrix"&gt;Matrix class&lt;/a&gt; that fits data to polynomials and solves systems of equations. &lt;a href="http://www.jsdb.org/matrix.html"&gt;Check it out!&lt;/a&gt; &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://www.jsdb.org/matrix.html"&gt;&lt;/a&gt;It uses Array by default, but it can also use Numbers for efficiency.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Added Stream.readUInt16() and Stream.readUInt32().&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;The JavaScript language version 1.7 is coming soon. Real soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-6671471842499529506?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#6671471842499529506</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-10236677.post-4059712190374799847</guid><pubDate>Sun, 18 Mar 2007 05:07:00 +0000</pubDate><atom:updated>2007-03-17T23:08:14.157-07:00</atom:updated><title>Version 1.5</title><description>Did you ever spend a day writing a routine, only to discover that you'd already done it a few weeks ago? Anyhow, I now understand the ANSI and Unicode character sets much better -- at least for the next few weeks.&lt;br /&gt;&lt;br /&gt;JSDB is updated with a few bug fixes. The version is changed to 1.5&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mail.send() is more tolerant of funny recipient addresses&lt;/li&gt;&lt;li&gt;decodeANSI is updated (but gives the same results)&lt;/li&gt;&lt;li&gt;load() works better at finding source files and keeping track of whether it needs to re-load a modified file.&lt;/li&gt;&lt;li&gt;xml.js is updated. Instead of using readXML(), use XML.read()&lt;/li&gt;&lt;li&gt;make.js is updated. I think it's a pretty nifty build system.&lt;/li&gt;&lt;/ul&gt;JSDB's next release will have the JavaScript 1.7 language interpreter. Let me know if you would like:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;An installer&lt;/li&gt;&lt;li&gt;A web-based IDE&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A better debugger&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Large arrays of numbers&lt;/li&gt;&lt;li&gt;A graphical mail client&lt;/li&gt;&lt;li&gt;An AJAX toolkit&lt;/li&gt;&lt;li&gt;Microsoft speech-recognition examples&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10236677-4059712190374799847?l=www.jsdb.org%2Fhistory.html' alt='' /&gt;&lt;/div&gt;</description><link>http://www.jsdb.org/history.html#4059712190374799847</link><author>noreply@blogger.com (Shanti)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></item></channel></rss>