<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nklein software &#187; New Versions</title>
	<atom:link href="http://nklein.com/releases/new-versions/feed/" rel="self" type="application/rss+xml" />
	<link>http://nklein.com</link>
	<description>software development and consulting</description>
	<lastBuildDate>Thu, 22 Dec 2011 04:42:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>USerial &#8212; v0.8.2011.06.02</title>
		<link>http://nklein.com/2011/06/userial-v0-8-2011-06-02-2/</link>
		<comments>http://nklein.com/2011/06/userial-v0-8-2011-06-02-2/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 00:31:40 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[New Versions]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[userial]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1745</guid>
		<description><![CDATA[I am releasing a new version of the USerial library. New in this version: Fix (make-int-serializer) to be big-endian 2&#8242;s complement Add :symbol and :keyword serializers Add (make-vector-serializer) Add (make-key-slot-serializer) and (make-key-accessor-serializer) Add (define-serializing-funcall) Obtaining The USerial home page: http://nklein.com/software/unet/userial/ The tarball: userial_0.8.2011.06.02.tar.gz The signature: userial_0.8.2011.06.02.tar.gz.asc The main git repository: http://git.nklein.com/lisp/libs/userial.git/ Browsable git mirror: https://github.com/nklein/userial [...]]]></description>
			<content:encoded><![CDATA[<p>I am releasing a new version of the USerial library.  New in this version:</p>
<ul>
<li>Fix (make-int-serializer) to be big-endian 2&#8242;s complement</li>
<li>Add :symbol and :keyword serializers</li>
<li>Add (make-vector-serializer)</li>
<li>Add (make-key-slot-serializer) and (make-key-accessor-serializer)</li>
<li>Add (define-serializing-funcall)</li>
</ul>
<h3>Obtaining</h3>
<ul>
<li>The USerial home page: <a href="http://nklein.com/software/unet/userial/">http://nklein.com/software/unet/userial/</a></li>
<li>The tarball:  <a href="http://nklein.com/wp-content/uploads/2011/06/userial_0.8.2011.06.02.tar.gz">userial_0.8.2011.06.02.tar.gz</a></li>
<li>The signature: <a href="http://nklein.com/wp-content/uploads/2011/06/userial_0.8.2011.06.02.tar.gz.asc">userial_0.8.2011.06.02.tar.gz.asc</a></li>
<li>The main git repository: <a href="http://git.nklein.com/lisp/libs/userial.git">http://git.nklein.com/lisp/libs/userial.git/</a></li>
<li>Browsable git mirror: <a href="https://github.com/nklein/userial">https://github.com/nklein/userial</a></li>
<li>Issue reporting: <a href="https://github.com/nklein/userial/issues">https://github.com/nklein/userial/issues</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2011/06/userial-v0-8-2011-06-02-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USerial &#8212; v0.7.2011.05.24</title>
		<link>http://nklein.com/2011/05/userial-v0-7-2011-05-24-3/</link>
		<comments>http://nklein.com/2011/05/userial-v0-7-2011-05-24-3/#comments</comments>
		<pubDate>Wed, 25 May 2011 04:28:43 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[New Versions]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[userial]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1728</guid>
		<description><![CDATA[I am releasing a new version of my USerial library. This version cleans up many messes from earlier releases. Unfortunately, in that process, it breaks compatibility with earlier releases. Obtaining Getting the USerial library: The home page: http://nklein.com/software/unet/userial/ The tar-ball: userial_0.7.2011.05.24.tar.gz The GPG signature for the tar-ball: userial_0.7.2011.05.24.tar.gz.asc The main git repository: http://git.nklein.com/lisp/libs/userial.git A browsable [...]]]></description>
			<content:encoded><![CDATA[<p>I am releasing a new version of my <a href="http://nklein.com/software/unet/userial/userial">USerial</a> library. This version cleans up many messes from earlier releases. Unfortunately, in that process, it breaks compatibility with earlier releases.</p>
<h4>Obtaining</h4>
<p>Getting the USerial library:</p>
<ul>
<li>The home page: <a href="http://nklein.com/software/unet/userial/">http://nklein.com/software/unet/userial/</a></li>
<li>The tar-ball: <a href="http://nklein.com/wp-content/uploads/2011/05/userial_0.7.2011.05.24.tar.gz">userial_0.7.2011.05.24.tar.gz</a></li>
<li>The GPG signature for the tar-ball: <a href="http://nklein.com/wp-content/uploads/2011/05/userial_0.7.2011.05.24.tar.gz.asc">userial_0.7.2011.05.24.tar.gz.asc</a></li>
<li>The main git repository: <a href="http://git.nklein.com/lisp/libs/userial.git/">http://git.nklein.com/lisp/libs/userial.git</a></li>
<li>A browsable mirror of the git repository: <a href="http://github.com/nklein/userial/">http://github.com/nklein/userial</a></li>
</ul>
<h4>Differences</h4>
<p>The differences between this version and earlier versions of this library include:</p>
<ul>
<li>Use of <a href="http://common-lisp.net/project/closer/contextl.html">ContextL</a> layered functions instead of CLOS methods</li>
<li>Elimination of <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span></span></code> parameter in favor of using the <code class="codecolorer lisp default"><span class="lisp">*buffer*</span></code> special variable</li>
<li>Cleaning up macros which no longer required the <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span></span></code> parameter</li>
<li>Serializers for arbitrarily large integers and unsigned integers</li>
<li>Serializer for raw sequence of bytes</li>
<li>New <code class="codecolorer lisp default"><span class="lisp">make-list-serializer</span></code> macro</li>
</ul>
<p>By using ContextL layered functions, one has the ability to define a serializer and/or unserializer in a particular ContextL layer.  This can be used to create new versions of the serializer without losing the ability to use the older version when required.</p>
<p>In the process, I have created macros to assist in creating completely custom serializers.  This both streamlines their definition and should allow any future modifications to the USerial library to fly under the radar.  Code that before looked like this:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>defmethod serialize <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>key <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eql</span> <span style="color: #66cc66;">:</span><span style="color: #555;">foo</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">value</span> foo-struct<span style="color: #66cc66;">&#41;</span>
                      <span style="color: #66cc66;">&amp;</span>key <span style="color: #66cc66;">&#40;</span>buffer userial<span style="color: #66cc66;">:</span>*buffer*<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&amp;</span>amp<span style="color: #808080; font-style: italic;">;allow-other-keys)</span>
  <span style="color: #66cc66;">...</span> some code <span style="color: #66cc66;">...</span>
  buffer<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>defmethod unserialize <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>key <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eql</span> <span style="color: #66cc66;">:</span><span style="color: #555;">foo</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&amp;</span>key <span style="color: #66cc66;">&#40;</span>buffer userial<span style="color: #66cc66;">:</span>*buffer*<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&amp;</span>amp<span style="color: #808080; font-style: italic;">;allow-other-keys)</span>
  <span style="color: #66cc66;">&#40;</span>values <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">progn</span> <span style="color: #66cc66;">...</span> some code <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span>
          buffer<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>Should now look like this:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>define-serializer <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">value</span> foo-struct<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">...</span> some code <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>define-unserializer <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">...</span> some code <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>And, when you find you need to add a new version of your <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span></span></code> serializer but you don&#8217;t want to lose the old one, you can add:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>contextl<span style="color: #66cc66;">:</span><span style="color: #555;">deflayer</span> new-version<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>define-serializer <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">value</span> foo-struct<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">:</span><span style="color: #555;">layer</span> new-version<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">...</span> some new code <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>Without the <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span></span></code> parameter everywhere, code that used to look like this:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>serialize* <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">string</span> aa <span style="color: #66cc66;">:</span><span style="color: #555;">uint8</span> bb<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span> buf<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>buffer-rewind <span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span> buf<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>unserialize-slots* <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">string</span> <span style="color: #b1b100;">name</span> <span style="color: #66cc66;">:</span><span style="color: #555;">uint8</span> age<span style="color: #66cc66;">&#41;</span> object <span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span> buf<span style="color: #66cc66;">&#41;</span></pre></div>
<p>Should now look like this:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>with-buffer buf
  <span style="color: #66cc66;">&#40;</span>serialize* <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> aa <span style="color: #66cc66;">:</span><span style="color: #555;">uint8</span> bb<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>buffer-rewind<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>unserialize-slots* object <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> <span style="color: #b1b100;">name</span> <span style="color: #66cc66;">:</span><span style="color: #555;">uint</span> age<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>There are now <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">int</span></span></code> and <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">uint</span></span></code> serializers that encode arbitrarily large integers and unsigned integers, respectively.  There is also a serializer that copies a sequence of bytes as is without any prefix or suffix. To unserialize, you either have to provide a buffer of the appropriate length with the <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">output</span></span></code> parameter or provide appropriate <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">start</span></span></code> and <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">end</span></span></code> keywords.</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>serialize <span style="color: #66cc66;">:</span><span style="color: #555;">raw-bytes</span> uchar-<span style="color: #b1b100;">array</span> <span style="color: #66cc66;">&amp;</span>key <span style="color: #66cc66;">&#40;</span>start <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
                                       <span style="color: #66cc66;">&#40;</span>end <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> uchar-<span style="color: #b1b100;">array</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>unserialize <span style="color: #66cc66;">:</span><span style="color: #555;">raw-bytes</span> <span style="color: #66cc66;">&amp;</span>key output
                             <span style="color: #66cc66;">&#40;</span>start <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
                             <span style="color: #66cc66;">&#40;</span>end <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> output<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>And, if you have a serialize/unserialize pair for type <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span></span></code> you can use the <code class="codecolorer lisp default"><span class="lisp">make-list-serializer</span></code> macro to create a serialize/unserialize pair for a list of items that can be serialized with the <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span></span></code> serializer.</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>make-list-serializer <span style="color: #66cc66;">:</span><span style="color: #555;">list-of-uint8</span> <span style="color: #66cc66;">:</span><span style="color: #555;">uint8</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>serialize <span style="color: #66cc66;">:</span><span style="color: #555;">list-of-int8</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">8</span> <span style="color: #cc66cc;">13</span> <span style="color: #cc66cc;">21</span> <span style="color: #cc66cc;">34</span> <span style="color: #cc66cc;">55</span> <span style="color: #cc66cc;">89</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>At the USerial home page, you can find <a href="http://nklein.com/software/unet/userial/userial">more complete documentation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2011/05/userial-v0-7-2011-05-24-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USerial &#8212; v0.7.2011.05.24</title>
		<link>http://nklein.com/2011/05/userial-v0-7-2011-05-24-2/</link>
		<comments>http://nklein.com/2011/05/userial-v0-7-2011-05-24-2/#comments</comments>
		<pubDate>Wed, 25 May 2011 04:28:16 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[New Versions]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[userial]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1726</guid>
		<description><![CDATA[I am releasing a new version of my USerial library. This version cleans up many messes from earlier releases. Unfortunately, in that process, it breaks compatibility with earlier releases. Obtaining Getting the USerial library: The home page: http://nklein.com/software/unet/userial/ The tar-ball: userial_0.7.2011.05.24.tar.gz The GPG signature for the tar-ball: userial_0.7.2011.05.24.tar.gz.asc The main git repository: http://git.nklein.com/lisp/libs/userial.git A browsable [...]]]></description>
			<content:encoded><![CDATA[<p>I am releasing a new version of my <a href="http://nklein.com/software/unet/userial/userial">USerial</a> library. This version cleans up many messes from earlier releases. Unfortunately, in that process, it breaks compatibility with earlier releases.</p>
<h4>Obtaining</h4>
<p>Getting the USerial library:</p>
<ul>
<li>The home page: <a href="http://nklein.com/software/unet/userial/">http://nklein.com/software/unet/userial/</a></li>
<li>The tar-ball: <a href="http://nklein.com/wp-content/uploads/2011/05/userial_0.7.2011.05.24.tar.gz">userial_0.7.2011.05.24.tar.gz</a></li>
<li>The GPG signature for the tar-ball: <a href="http://nklein.com/wp-content/uploads/2011/05/userial_0.7.2011.05.24.tar.gz.asc">userial_0.7.2011.05.24.tar.gz.asc</a></li>
<li>The main git repository: <a href="http://git.nklein.com/lisp/libs/userial.git/">http://git.nklein.com/lisp/libs/userial.git</a></li>
<li>A browsable mirror of the git repository: <a href="http://github.com/nklein/userial/">http://github.com/nklein/userial</a></li>
</ul>
<h4>Differences</h4>
<p>The differences between this version and earlier versions of this library include:</p>
<ul>
<li>Use of <a href="http://common-lisp.net/project/closer/contextl.html">ContextL</a> layered functions instead of CLOS methods</li>
<li>Elimination of <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span></span></code> parameter in favor of using the <code class="codecolorer lisp default"><span class="lisp">*buffer*</span></code> special variable</li>
<li>Cleaning up macros which no longer required the <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span></span></code> parameter</li>
<li>Serializers for arbitrarily large integers and unsigned integers</li>
<li>Serializer for raw sequence of bytes</li>
<li>New <code class="codecolorer lisp default"><span class="lisp">make-list-serializer</span></code> macro</li>
</ul>
<p>By using ContextL layered functions, one has the ability to define a serializer and/or unserializer in a particular ContextL layer.  This can be used to create new versions of the serializer without losing the ability to use the older version when required.</p>
<p>In the process, I have created macros to assist in creating completely custom serializers.  This both streamlines their definition and should allow any future modifications to the USerial library to fly under the radar.  Code that before looked like this:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>defmethod serialize <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>key <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eql</span> <span style="color: #66cc66;">:</span><span style="color: #555;">foo</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">value</span> foo-struct<span style="color: #66cc66;">&#41;</span>
                      <span style="color: #66cc66;">&amp;</span>key <span style="color: #66cc66;">&#40;</span>buffer userial<span style="color: #66cc66;">:</span>*buffer*<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&amp;</span>amp<span style="color: #808080; font-style: italic;">;allow-other-keys)</span>
  <span style="color: #66cc66;">...</span> some code <span style="color: #66cc66;">...</span>
  buffer<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>defmethod unserialize <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>key <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eql</span> <span style="color: #66cc66;">:</span><span style="color: #555;">foo</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&amp;</span>key <span style="color: #66cc66;">&#40;</span>buffer userial<span style="color: #66cc66;">:</span>*buffer*<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&amp;</span>amp<span style="color: #808080; font-style: italic;">;allow-other-keys)</span>
  <span style="color: #66cc66;">&#40;</span>values <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">progn</span> <span style="color: #66cc66;">...</span> some code <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span>
          buffer<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>Should now look like this:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>define-serializer <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">value</span> foo-struct<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">...</span> some code <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>define-unserializer <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">...</span> some code <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>And, when you find you need to add a new version of your <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span></span></code> serializer but you don&#8217;t want to lose the old one, you can add:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>contextl<span style="color: #66cc66;">:</span><span style="color: #555;">deflayer</span> new-version<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>define-serializer <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">value</span> foo-struct<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">:</span><span style="color: #555;">layer</span> new-version<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">...</span> some new code <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>Without the <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span></span></code> parameter everywhere, code that used to look like this:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>serialize* <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">string</span> aa <span style="color: #66cc66;">:</span><span style="color: #555;">uint8</span> bb<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span> buf<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>buffer-rewind <span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span> buf<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>unserialize-slots* <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">string</span> <span style="color: #b1b100;">name</span> <span style="color: #66cc66;">:</span><span style="color: #555;">uint8</span> age<span style="color: #66cc66;">&#41;</span> object <span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span> buf<span style="color: #66cc66;">&#41;</span></pre></div>
<p>Should now look like this:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>with-buffer buf
  <span style="color: #66cc66;">&#40;</span>serialize* <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> aa <span style="color: #66cc66;">:</span><span style="color: #555;">uint8</span> bb<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>buffer-rewind<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>unserialize-slots* object <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> <span style="color: #b1b100;">name</span> <span style="color: #66cc66;">:</span><span style="color: #555;">uint</span> age<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>There are now <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">int</span></span></code> and <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">uint</span></span></code> serializers that encode arbitrarily large integers and unsigned integers, respectively.  There is also a serializer that copies a sequence of bytes as is without any prefix or suffix. To unserialize, you either have to provide a buffer of the appropriate length with the <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">output</span></span></code> parameter or provide appropriate <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">start</span></span></code> and <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">end</span></span></code> keywords.</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>serialize <span style="color: #66cc66;">:</span><span style="color: #555;">raw-bytes</span> uchar-<span style="color: #b1b100;">array</span> <span style="color: #66cc66;">&amp;</span>key <span style="color: #66cc66;">&#40;</span>start <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
                                       <span style="color: #66cc66;">&#40;</span>end <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> uchar-<span style="color: #b1b100;">array</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>unserialize <span style="color: #66cc66;">:</span><span style="color: #555;">raw-bytes</span> <span style="color: #66cc66;">&amp;</span>key output
                             <span style="color: #66cc66;">&#40;</span>start <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
                             <span style="color: #66cc66;">&#40;</span>end <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> output<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>And, if you have a serialize/unserialize pair for type <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span></span></code> you can use the <code class="codecolorer lisp default"><span class="lisp">make-list-serializer</span></code> macro to create a serialize/unserialize pair for a list of items that can be serialized with the <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">foo</span></span></code> serializer.</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>make-list-serializer <span style="color: #66cc66;">:</span><span style="color: #555;">list-of-uint8</span> <span style="color: #66cc66;">:</span><span style="color: #555;">uint8</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>serialize <span style="color: #66cc66;">:</span><span style="color: #555;">list-of-int8</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">8</span> <span style="color: #cc66cc;">13</span> <span style="color: #cc66cc;">21</span> <span style="color: #cc66cc;">34</span> <span style="color: #cc66cc;">55</span> <span style="color: #cc66cc;">89</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>At the USerial home page, you can find <a href="http://nklein.com/software/unet/userial/userial">more complete documentation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2011/05/userial-v0-7-2011-05-24-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Method Versions &#8212; v0.1.2011.05.18</title>
		<link>http://nklein.com/2011/05/method-versions-v0-1-2011-05-18-2/</link>
		<comments>http://nklein.com/2011/05/method-versions-v0-1-2011-05-18-2/#comments</comments>
		<pubDate>Thu, 19 May 2011 04:00:50 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[New Versions]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[method-versions]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1702</guid>
		<description><![CDATA[Edit: After re-reading some of the ContextL papers, I believe that I am actually just going to use ContextL as it&#8217;s a much more flexible superset of this library. I will probably still keep this library published as an example of a non-trivial, but glarkable, method combination. I am releasing a new library that allows [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><b>Edit: </b> After re-reading some of the ContextL papers, I believe that I am actually just going to use ContextL as it&#8217;s a much more flexible superset of this library.  I will probably still keep this library published as an example of a non-trivial, but glarkable, method combination.</p></blockquote>
<p>I am releasing a new library that allows one to dispatch generic methods based on the value of a global parameter.</p>
<p>There are situations where one might like to dispatch a method on some information other than the required parameters of the method.  For many situations, it is sufficient to switch between those methods based on some external parameter.  The <a href="http://nklein.com/software/method-versions/">method-versions</a> library allows one to do just that.</p>
<h4><a name="obtaining">Obtaining</a></h4>
<ul>
<li>The home page: <a href="http://nklein.com/software/method-versions/">http://nklein.com/software/method-versions/</a></li>
<li>The tar-ball: <a href="http://nklein.com/wp-content/uploads/2011/05/method-versions_0.1.2011.05.18.tar.gz">method-versions_0.1.2011.05.18.tar.gz</a></li>
<li>The GPG signature for the tar-ball: <a href="http://nklein.com/wp-content/uploads/2011/05/method-versions_0.1.2011.05.18.tar.gz.asc">method-versions_0.1.2011.05.18.tar.gz.asc</a></li>
<li>The main git repository: <a href="http://git.nklein.com/lisp/libs/method-versions.git">http://git.nklein.com/lisp/libs/method-versions.git</a></li>
<li>A browsable mirror of the git repository: <a href="http://github.com/nklein/method-versions">http://github.com/nklein/method-versions</a></li>
</ul>
<h4><a name="internationalization">Internationalization Example</a></h4>
<p>In this example, we do a silly form of internationalization. To that end, we will use English as the default language and define some other languages.</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"> <span style="color: #66cc66;">&#40;</span>method-versions<span style="color: #66cc66;">:</span><span style="color: #555;">define-method-version</span> latin<span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span>method-versions<span style="color: #66cc66;">:</span><span style="color: #555;">define-method-version</span> pig-latin<span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span>method-versions<span style="color: #66cc66;">:</span><span style="color: #555;">define-method-version</span> french latin<span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span>method-versions<span style="color: #66cc66;">:</span><span style="color: #555;">define-method-version</span> spanish latin<span style="color: #66cc66;">&#41;</span></pre></div>
<p>We will prepare a language parameter and a welcome method that is versioned on the language.</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"> <span style="color: #66cc66;">&#40;</span>declaim <span style="color: #66cc66;">&#40;</span>special *language*<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span>defparameter *language* <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
 <span style="color: #66cc66;">&#40;</span>defgeneric welcome <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">method-combination</span> method-versions<span style="color: #66cc66;">:</span><span style="color: #555;">method-version-method-combination</span>
                        *language*<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>And, we define welcome methods for the various languages (accidentally forgetting <code class="codecolorer lisp default"><span class="lisp">spanish</span></code>).</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"> <span style="color: #66cc66;">&#40;</span>defmethod welcome <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">:</span><span style="color: #555;">welcome</span><span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span>defmethod welcome <span style="color: #66cc66;">:</span><span style="color: #555;">latin</span>     <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">:</span><span style="color: #555;">velkominum</span><span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span>defmethod welcome <span style="color: #66cc66;">:</span><span style="color: #555;">pig-latin</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">:</span><span style="color: #555;">elcomeway</span><span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span>defmethod welcome <span style="color: #66cc66;">:</span><span style="color: #555;">french</span>    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">:</span><span style="color: #555;">bonjour</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>Then, we will try each of the languages in turn.</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">mapcar</span> #'<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>ll<span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>*language* ll<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
               <span style="color: #66cc66;">&#40;</span>welcome<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         '<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">nil</span> <span style="color: #66cc66;">:</span><span style="color: #555;">latin</span> <span style="color: #66cc66;">:</span><span style="color: #555;">pig-latin</span> <span style="color: #66cc66;">:</span><span style="color: #555;">french</span> <span style="color: #66cc66;">:</span><span style="color: #555;">spanish</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">=&gt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">welcome</span> <span style="color: #66cc66;">:</span><span style="color: #555;">velkominum</span> <span style="color: #66cc66;">:</span><span style="color: #555;">elcomeway</span> <span style="color: #66cc66;">:</span><span style="color: #555;">bonjour</span> <span style="color: #66cc66;">:</span><span style="color: #555;">velkominum</span><span style="color: #66cc66;">&#41;</span></pre></div>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2011/05/method-versions-v0-1-2011-05-18-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>USerial &#8212; v0.6.2011.05.12</title>
		<link>http://nklein.com/2011/05/userial-v0-6-2011-05-12/</link>
		<comments>http://nklein.com/2011/05/userial-v0-6-2011-05-12/#comments</comments>
		<pubDate>Fri, 13 May 2011 02:24:18 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[New Versions]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[userial]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1672</guid>
		<description><![CDATA[The latest release of my USerial library provides a way to make a simple serialize/unserialize pair for a list where every item can be serialized using the same key. &#40;make-list-serializer :list-of-integers :uint32&#41; &#160; &#40;with-buffer &#40;make-buffer&#41; &#40;serialize :list-of-integers '&#40;1 2 3 4 5 6 7&#41;&#41; &#40;buffer-rewind&#41; &#40;reduce #'+ &#40;unserialize :list-of-integers&#41;&#41;&#41; =&#62; 28 Here is the latest: [...]]]></description>
			<content:encoded><![CDATA[<p>The latest release of my <a href="http://nklein.com/software/unet/userial/">USerial</a> library provides a way to make a simple serialize/unserialize pair for a list where every item can be serialized using the same key.</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>make-list-serializer <span style="color: #66cc66;">:</span><span style="color: #555;">list-of-integers</span> <span style="color: #66cc66;">:</span><span style="color: #555;">uint32</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>with-buffer <span style="color: #66cc66;">&#40;</span>make-buffer<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>serialize <span style="color: #66cc66;">:</span><span style="color: #555;">list-of-integers</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">6</span> <span style="color: #cc66cc;">7</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>buffer-rewind<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>reduce #'+ <span style="color: #66cc66;">&#40;</span>unserialize <span style="color: #66cc66;">:</span><span style="color: #555;">list-of-integers</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=&gt;</span> <span style="color: #cc66cc;">28</span></pre></div>
<p>Here is the latest:</p>
<ul>
<li>Code <a href="http://nklein.com/wp-content/uploads/2011/05/userial_0.6.2011.05.12.tar.gz">userial_0.6.2011.05.12.tar.gz</a>, and</li>
<li>Signature <a href="http://nklein.com/wp-content/uploads/2011/05/userial_0.6.2011.05.12.tar.gz.asc">userial_0.6.2011.05.12.tar.gz.asc</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2011/05/userial-v0-6-2011-05-12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USerial &#8212; v0.5.2011.04.21 released</title>
		<link>http://nklein.com/2011/04/userial-v0-5-2011-04-21-released/</link>
		<comments>http://nklein.com/2011/04/userial-v0-5-2011-04-21-released/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 00:12:07 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[New Versions]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[userial]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1657</guid>
		<description><![CDATA[I am releasing a new version of my USerial library. This release extends the &#40;make-slot-serializer ...&#41; and &#40;make-accessor-serializer ...&#41; so that you can pass an existing instance into the unserializers with the :object parameter rather than having the factory form allocate a new instance. This release also provides ways to serialize and unserialize from slots [...]]]></description>
			<content:encoded><![CDATA[<p>I am releasing a new version of my <a href="http://nklein.com/software/unet/userial">USerial</a> library.</p>
<p>This release extends the <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">&#40;</span>make-slot-serializer <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span></span></code> and <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">&#40;</span>make-accessor-serializer <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span></span></code> so that you can pass an existing instance into the unserializers with the <code class="codecolorer lisp default"><span class="lisp"><span style="color: #66cc66;">:</span><span style="color: #555;">object</span></span></code> parameter rather than having the factory form allocate a new instance.</p>
<p>This release also provides ways to serialize and unserialize from slots and accessors in other code to allow even greater flexibility:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>serialize-accessors* <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">string</span> person-<span style="color: #b1b100;">name</span>
                       <span style="color: #66cc66;">:</span><span style="color: #555;">uint8</span>  person-age
                       <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> person-hair-color<span style="color: #66cc66;">&#41;</span>
     *person-instance* <span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span> buffer<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>unserialize-slots* <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">string</span> <span style="color: #b1b100;">name</span>
                     <span style="color: #66cc66;">:</span><span style="color: #555;">uint8</span>  age
                     <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> hair-color<span style="color: #66cc66;">&#41;</span>
     *person-instance* <span style="color: #66cc66;">:</span><span style="color: #555;">buffer</span> buffer<span style="color: #66cc66;">&#41;</span></pre></div>
<p>The <code class="codecolorer lisp default"><span class="lisp">serialize-slots*</span></code> and <code class="codecolorer lisp default"><span class="lisp">unserialize-accessors*</span></code> macros are also available.</p>
<p>Here is the latest:</p>
<ul>
<li>Code <a href="http://nklein.com/wp-content/uploads/2011/04/userial_0.5.2011.04.21.tar.gz">userial_0.5.2011.04.21.tar.gz</a>, and</li>
<li>Signature <a href="http://nklein.com/wp-content/uploads/2011/04/userial_0.5.2011.04.21.tar.gz.asc">userial_0.5.2011.04.21.tar.gz.asc</a></li>
</ul>
<p><b>Edit:</b> Special thanks to <a href="http://elliottslaughter.net/">Elliott Slaughter</a>.  The above improvements came out of recommendations from him.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2011/04/userial-v0-5-2011-04-21-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USerial &#8212; v0.4.2011.04.11</title>
		<link>http://nklein.com/2011/04/userial-v0-4-2011-04-11/</link>
		<comments>http://nklein.com/2011/04/userial-v0-4-2011-04-11/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 04:22:53 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[New Versions]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[unet]]></category>
		<category><![CDATA[userial]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1648</guid>
		<description><![CDATA[Made an addition to the USerial library to support logging of binary messages (so far only cl-log supported). &#40;serialize-log :log-category :uint32 uint-to-log :string &#34;string to log&#34; ...&#41; Here is the latest tarball: userial_0.4.2011.04.11.tar.gz and its signature: userial_0.4.2011.04.11.tar.gz.asc.]]></description>
			<content:encoded><![CDATA[<p>Made an addition to the <a href="http://nklein.com/software/unet/userial/">USerial</a> library to support logging of binary messages (so far only <a href="http://www.nicklevine.org/cl-log/">cl-log</a> supported).</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&#40;</span>serialize-log <span style="color: #66cc66;">:</span><span style="color: #555;">log-category</span> <span style="color: #66cc66;">:</span><span style="color: #555;">uint32</span> uint-to-log <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> <span style="color: #ff0000;">&quot;string to log&quot;</span> <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>Here is the latest tarball: <a href="http://nklein.com/wp-content/uploads/2011/04/userial_0.4.2011.04.11.tar.gz">userial_0.4.2011.04.11.tar.gz</a> and its signature: <a href="http://nklein.com/wp-content/uploads/2011/04/userial_0.4.2011.04.11.tar.gz.asc">userial_0.4.2011.04.11.tar.gz.asc</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2011/04/userial-v0-4-2011-04-11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CL-FFT v1.4.2011.03.24 released</title>
		<link>http://nklein.com/2011/03/cl-fft-v1-4-2011-03-24-released/</link>
		<comments>http://nklein.com/2011/03/cl-fft-v1-4-2011-03-24-released/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 03:48:26 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Bug Fixes]]></category>
		<category><![CDATA[New Versions]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[cl-fft]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1633</guid>
		<description><![CDATA[Elliott Johnson provided me with some patches for my CL-FFT library so that it will work with Allegro modern mode (mlisp). Here is the new tarball: fft_1.4.2011.03.24.tar.gz and its GPG signature: fft_1.4.2011.03.24.tar.gz.asc Thank you!]]></description>
			<content:encoded><![CDATA[<p>Elliott Johnson provided me with some patches for my CL-FFT library so that it will work with Allegro modern mode (mlisp).</p>
<ul>
<li>Here is the new tarball: <a href="http://nklein.com/wp-content/uploads/2011/03/fft_1.4.2011.03.24.tar.gz">fft_1.4.2011.03.24.tar.gz</a></li>
<li>and its GPG signature: <a href="http://nklein.com/wp-content/uploads/2011/03/fft_1.4.2011.03.24.tar.gz.asc">fft_1.4.2011.03.24.tar.gz.asc</a></li>
</ul>
<p>Thank you!</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2011/03/cl-fft-v1-4-2011-03-24-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USerial Library &#8212;  v0.3.2011.03.05</title>
		<link>http://nklein.com/2011/03/userial-library-v03/</link>
		<comments>http://nklein.com/2011/03/userial-library-v03/#comments</comments>
		<pubDate>Fri, 04 Mar 2011 22:23:00 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[New Versions]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[unet]]></category>
		<category><![CDATA[userial]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1603</guid>
		<description><![CDATA[I have released a new version of my serialization library. I hope no one has dug in too far on using it yet because I rearranged the interface a fair bit in this release. To accommodate more complex serializers and unserializers as well as supporting a with-buffer macro, the buffer is no longer the first [...]]]></description>
			<content:encoded><![CDATA[<p>I have released a new version of my serialization library.  I hope no one has dug in too far on using it yet because I rearranged the interface a fair bit in this release.  To accommodate more complex serializers and unserializers as well as supporting a <b>with-buffer</b> macro, the buffer is no longer the first argument to the serialize and unserialize methods.  Now, it is a <b>&#038;key</b> argument to the serialize and unserialize generics.  Further, the serialize and unserialize generics also <b>&#038;allow-other-keys</b>.</p>
<p>In an intervening and unannounced release, I added serializers for slots and accessors.</p>
<p>In this release, I have also really fleshed out the documentation and examples.</p>
<p>For instructions on obtaining and using the USerial library, please refer to the <a href="http://nklein.com/software/unet/userial/">USerial library web page</a>.</p>
<p><b>Edit:</b> This had been v0.3.2011.03.04, but I made a minor update to add MIT License and correct a few glitches in the docs.  Now, it&#8217;s v0.3.2011.03.05.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2011/03/userial-library-v03/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Animal Artwork and More Languages in iPhone Spelling App</title>
		<link>http://nklein.com/2010/03/animal-artwork-and-more-languages-in-iphone-spelling-app/</link>
		<comments>http://nklein.com/2010/03/animal-artwork-and-more-languages-in-iphone-spelling-app/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 16:09:02 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[New Versions]]></category>
		<category><![CDATA[spell-it]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1261</guid>
		<description><![CDATA[I just finished up some animal artwork for my iPhone Spelling Toy. I also added translations for Japanese and German (in addition to the English, French, and Spanish that were already there). After I double-check the translations, I will get it uploaded to the App Store. If you have any expertise in Spanish, French, German, [...]]]></description>
			<content:encoded><![CDATA[<p>I just finished up some animal artwork for my iPhone Spelling Toy.  I also added translations for Japanese and German (in addition to the English, French, and Spanish that were already there).  After I double-check the translations, I will get it uploaded to the App Store.</p>
<p><center><a href="http://nklein.com/wp-content/uploads/2010/03/spell-fish.png"><img src="http://nklein.com/wp-content/uploads/2010/03/spell-fish.png" alt="" title="spell-fish" width="480" height="320" class="alignnone size-full wp-image-1262" /></a></center></p>
<p>If you have any expertise in Spanish, French, German, or Japanese, I&#8217;d appreciate any feedback you can give me about the <a href="http://nklein.com/spell-it-words/">words I chose in those languages</a>.  Would they be the word one would think of when shown the picture?  Thanks, in advance.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/03/animal-artwork-and-more-languages-in-iphone-spelling-app/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

