<?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; Initial Releases</title>
	<atom:link href="http://nklein.com/releases/initial-releases/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 Library &#8212; v0.1.2010.12.26</title>
		<link>http://nklein.com/2010/12/userial-library-v01/</link>
		<comments>http://nklein.com/2010/12/userial-library-v01/#comments</comments>
		<pubDate>Mon, 27 Dec 2010 05:35:07 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Initial Releases]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[unet]]></category>
		<category><![CDATA[userial]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1558</guid>
		<description><![CDATA[I am putting together a networking library atop usocket for use in a multiplayer Lisp game. So far, I have implemented a library for serializing data into a byte buffer. Here is a simple example of serializing some things into a buffer: &#40;make-enum-serializer :opcode &#40;:login :run :jump :logout&#41;&#41; &#40;make-bitfield-serializer :login-flags &#40;:hidden :stay-logged-in&#41;&#41; &#160; &#40;serialize* &#40;:opcode [...]]]></description>
			<content:encoded><![CDATA[<p>I am putting together a networking library atop <a href="http://common-lisp.net/project/usocket/">usocket</a> for use in a multiplayer Lisp game.  So far, I have implemented a library for serializing data into a byte buffer.</p>
<p>Here is a simple example of serializing some things into a buffer:</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-enum-serializer <span style="color: #66cc66;">:</span><span style="color: #555;">opcode</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">login</span> <span style="color: #66cc66;">:</span><span style="color: #555;">run</span> <span style="color: #66cc66;">:</span><span style="color: #555;">jump</span> <span style="color: #66cc66;">:</span><span style="color: #555;">logout</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>make-bitfield-serializer <span style="color: #66cc66;">:</span><span style="color: #555;">login-flags</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">hidden</span> <span style="color: #66cc66;">:</span><span style="color: #555;">stay-logged-in</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>serialize* <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">opcode</span> <span style="color: #66cc66;">:</span><span style="color: #555;">login</span>
             <span style="color: #66cc66;">:</span><span style="color: #555;">uint32</span> sequence-number
             <span style="color: #66cc66;">:</span><span style="color: #555;">login-flags</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">hidden</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> login-<span style="color: #b1b100;">name</span>
             <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> password<span style="color: #66cc66;">&#41;</span> buffer<span style="color: #66cc66;">&#41;</span></pre></div>
<p>You can unserialize those bits into existing places:</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;">let</span> <span style="color: #66cc66;">&#40;</span>opcode sequence-number flags login-<span style="color: #b1b100;">name</span> password<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>unserialize* <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">opcode</span> opcode
                 <span style="color: #66cc66;">:</span><span style="color: #555;">uint32</span> sequence-number
                 <span style="color: #66cc66;">:</span><span style="color: #555;">login-flags</span> flags
                 <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> login-<span style="color: #b1b100;">name</span>
                 <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> password<span style="color: #66cc66;">&#41;</span> buffer<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>You can unserialize them into newly-created variables for use within a body:</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>unserialize-<span style="color: #b1b100;">let</span>* <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">opcode</span> opcode
                   <span style="color: #66cc66;">:</span><span style="color: #555;">uint32</span> sequence-number
                   <span style="color: #66cc66;">:</span><span style="color: #555;">login-flags</span> flags
                   <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> login-<span style="color: #b1b100;">name</span>
                   <span style="color: #66cc66;">:</span><span style="color: #555;">string</span> password<span style="color: #66cc66;">&#41;</span> buffer
  <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>Or, you can unserialize them into a list:</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;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>parts <span style="color: #66cc66;">&#40;</span>unserialize-<span style="color: #b1b100;">list</span>* <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">:</span><span style="color: #555;">opcode</span> 
                                 <span style="color: #66cc66;">:</span><span style="color: #555;">uint32</span>
                                 <span style="color: #66cc66;">:</span><span style="color: #555;">login-flags</span>
                                 <span style="color: #66cc66;">:</span><span style="color: #555;">string</span>
                                 <span style="color: #66cc66;">:</span><span style="color: #555;">string</span><span style="color: #66cc66;">&#41;</span> buffer<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>You can find out more about the serialization library <a href="http://nklein.com/software/unet/">on my unet page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/12/userial-library-v01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CL-Growl client library released</title>
		<link>http://nklein.com/2010/04/cl-growl-client-library-released/</link>
		<comments>http://nklein.com/2010/04/cl-growl-client-library-released/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 15:35:26 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Initial Releases]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[cl-growl]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1292</guid>
		<description><![CDATA[Growl is a notification system for Mac OS X. You run a Growl server on your machine. Then, applications can send notifications that will be displayed on your desktop. Growl supports a thin network protocol called Growl Talk that programs can use to send notifications to the Growl server (and hence, to your desktop). Growl [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://growl.info/">Growl</a> is a notification system for Mac OS X.  You run a Growl server on your machine.  Then, applications can send notifications that will be displayed on your desktop.  Growl supports a thin network protocol called <a href="http://growl.info/documentation/developer/protocol.php">Growl Talk</a> that programs can use to send notifications to the Growl server (and hence, to your desktop).</p>
<p>Growl is incredibly useful for any program that operates asynchronously with the user.  If you want to be notified when some portion of your job completes or when there is a critical error in your web application, Growl is a great tool to have at your disposal.</p>
<p>I wrote an implementation for Common Lisp of the client protocol.  Here is a simple example of how you might use it:</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;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>growl<span style="color: #66cc66;">:</span>*growl-default-app* <span style="color: #ff0000;">&quot;My Lisp Application&quot;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>growl<span style="color: #66cc66;">:</span>*growl-default-host* <span style="color: #ff0000;">&quot;localhost&quot;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>growl<span style="color: #66cc66;">:</span>*growl-default-password* <span style="color: #ff0000;">&quot;my-growl-password&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>growl<span style="color: #66cc66;">:</span><span style="color: #555;">register</span> <span style="color: #66cc66;">:</span><span style="color: #555;">enabled</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #ff0000;">&quot;Warn&quot;</span> <span style="color: #ff0000;">&quot;Error&quot;</span><span style="color: #66cc66;">&#41;</span>
                  <span style="color: #66cc66;">:</span><span style="color: #555;">disabled</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #ff0000;">&quot;Info&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>growl<span style="color: #66cc66;">:</span><span style="color: #555;">notify</span> <span style="color: #ff0000;">&quot;Program starting up...&quot;</span> 
                <span style="color: #66cc66;">:</span><span style="color: #555;">notification</span> <span style="color: #ff0000;">&quot;Info&quot;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>unless <span style="color: #66cc66;">&#40;</span>connect-to-database <span style="color: #66cc66;">...</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>growl<span style="color: #66cc66;">:</span><span style="color: #555;">notify</span> <span style="color: #ff0000;">&quot;Cannot connect to database!&quot;</span> 
                  <span style="color: #66cc66;">:</span><span style="color: #555;">title</span> <span style="color: #ff0000;">&quot;Critical Error!&quot;</span>
                  <span style="color: #66cc66;">:</span><span style="color: #555;">notification</span> <span style="color: #ff0000;">&quot;Error&quot;</span>
                  <span style="color: #66cc66;">:</span><span style="color: #555;">sticky</span> t
                  <span style="color: #66cc66;">:</span><span style="color: #555;">priority</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>For more complete usage information and to learn how to obtain the library, see <a href="http://nklein.com/software/cl-growl/">the CL-Growl web page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/04/cl-growl-client-library-released/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Parser Generator released</title>
		<link>http://nklein.com/2010/04/parser-generator-released/</link>
		<comments>http://nklein.com/2010/04/parser-generator-released/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 14:58:03 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Initial Releases]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[parser-generator]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1274</guid>
		<description><![CDATA[A few weeks back, I described an XML Parser Generator that I was working on. At the time, it could generate the parser it used itself. Now, it&#8217;s got Objective-C support and Lisp support. (The Lisp support is slightly better than the Objective-C support right now. With the Objective-C backend, you can create arrays of [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks back, I described an <a href="http://nklein.com/2010/03/xml-parser-generator/">XML Parser Generator</a> that I was working on.  At the time, it could generate the parser it used itself.  Now, it&#8217;s got Objective-C support and Lisp support.  (The Lisp support is slightly better than the Objective-C support right now.  With the Objective-C backend, you can create arrays of structs, but not arrays of strings or integers.)</p>
<p>Here is the <a href="http://nklein.com/software/parser-generator/">Parser Generator home page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/04/parser-generator-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Roto-Mortar:  A 7-Day Lisp Game</title>
		<link>http://nklein.com/2010/03/roto-mortar-a-7-day-lisp-game/</link>
		<comments>http://nklein.com/2010/03/roto-mortar-a-7-day-lisp-game/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 10:11:58 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Initial Releases]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[roto-mortar]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1253</guid>
		<description><![CDATA[Roto Mortar was written for the 2010 LISP Game Design Challenge. The challenge was to design and implement a game in seven days using some LISP dialect. The KPs have been beating on your base all week. Your defenses are just about to collapse. In fact, your mortar cannons are both on the fritz. Billy [...]]]></description>
			<content:encoded><![CDATA[<p>Roto Mortar was written for the <a href="http://dto.github.com/notebook/lgdc.html">2010 LISP Game Design Challenge</a>. The challenge was to design and implement a game in seven days using some LISP dialect.</p>
<p><a href="http://nklein.com/wp-content/uploads/2010/03/roto-mortar-screenshot.png"><img src="http://nklein.com/wp-content/uploads/2010/03/roto-mortar-screenshot-300x187.png" alt="" title="roto-mortar-screenshot" width="300" height="187" class="alignright size-medium wp-image-1248" /></a>The KPs have been beating on your base all week. Your defenses are just about to collapse. In fact, your mortar cannons are both on the fritz.  Billy Bob, the ACME Repair Guy, has just gotten one of your mortar cannons back online. Unfortunately, he had to wire things a little wonky. Your cannon is spinning all on its own. You’ve only got one button to control both the elevation of the cannon and when to fire it. And, you better fire it, because the KPs are still coming at you.</p>
<h3>Inspiration</h3>
<p>A few years ago, I read the book <a href="http://www.amazon.com/Game-Design-Workshop-Prototyping-Playtesting/dp/1578202221">Game Design Workshop:  Designing, Prototyping, and Playtesting Games</a>.  One of the exercises in the first chapter is to design a game with a &#8220;one-button interface&#8221;.  At the time, I didn&#8217;t come up with anything particularly thrilling.</p>
<p>When I started brainstorming what to do for this Game Challenge, I remembered that exercise.  I came up with this concept just under (as in 3.5 hours under) seven days ago.  The game is nowhere near as polished as I&#8217;d like&#8230; but it was a 7-day thing.  And, it was fun to take a break from Objective C to get back to some Lisp programming.</p>
<h3>Obtaining It</h3>
<p>You can find out more about the game, including where to get the source and a Mac OS X binary, <a href="http://nklein.com/software/roto-mortar/">on the game&#8217;s web page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/03/roto-mortar-a-7-day-lisp-game/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Burnt Paper plugin for GIMP</title>
		<link>http://nklein.com/2010/02/burnt-paper-plugin-for-gimp/</link>
		<comments>http://nklein.com/2010/02/burnt-paper-plugin-for-gimp/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 21:29:16 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Initial Releases]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[freeware]]></category>
		<category><![CDATA[gimp]]></category>
		<category><![CDATA[scheme]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1227</guid>
		<description><![CDATA[Yesterday, I decided to make the images in my article look like they were on old, burnt paper. I did this manually in the GIMP. I liked the effect, but I didn&#8217;t want the tedium of having to do all n steps manually next time I go to use it. So, I wrote a GIMP [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I decided to make the images in <a href="http://nklein.com/2010/02/finding-the-perfect-hyperbola/">my article</a> look like they were on old, burnt paper.  I did this manually in <a href="http://gimp.org/">the GIMP</a>.</p>
<p>I liked the effect, but I didn&#8217;t want the tedium of having to do all n steps manually next time I go to use it.  So, I wrote a GIMP plugin script to do it.</p>
<p>Here is an example of the plugin script in action.  As you can see, I started with a text layer and a selection that was bigger than the text layer.  The plugin uses the selection size as original edge of the paper (original, as in before the paper was burned).<br />
<center><a href="http://nklein.com/wp-content/uploads/2010/02/original-image.png"><img src="http://nklein.com/wp-content/uploads/2010/02/original-image.png" alt="" title="original-image" width="600" height="281" class="alignnone size-full wp-image-1228" /></a></center></p>
<p>And, here is the resulting image:<br />
<center><a href="http://nklein.com/wp-content/uploads/2010/02/final-image.png"><img src="http://nklein.com/wp-content/uploads/2010/02/final-image.png" alt="" title="final-image" width="600" height="300" class="alignnone size-full wp-image-1229" /></a></center></p>
<p>Here is the <a href="http://nklein.com/wp-content/uploads/2010/02/burnt-paper.scm">Burnt Paper plugin script</a>.  Plop this in a directory that&#8217;s in your script search path and refresh GIMP&#8217;s scripting and then you&#8217;ll find it in the <q>Filters &gt; Decor</q> menu.  [You can see the script search path by going to <q>Edit &gt; Preferences</q> and selecting <q>Scripts</q> under <q>Folders</q> in the left sidebar.  And, you can refresh the scripts by going to <q>Filters &gt; Script-Fu &gt; Refresh Scripts</q>.]</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/02/burnt-paper-plugin-for-gimp/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Spelling Toy iPhone App Released</title>
		<link>http://nklein.com/2010/02/spelling-toy-iphone-app-released/</link>
		<comments>http://nklein.com/2010/02/spelling-toy-iphone-app-released/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 02:30:37 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Initial Releases]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[iphone app]]></category>
		<category><![CDATA[spell-it]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1172</guid>
		<description><![CDATA[I am pleased to announce, that my Spelling Toy for Kids is now available on the iTunes Store. The first five respondents to this article will receive a Promotional Code to download the app for free! (Edit: all promo codes dished out&#8230; if you really want one and will publicly review my app in your [...]]]></description>
			<content:encoded><![CDATA[<p>I am pleased to announce, that my <a href="http://nklein.com/software/spell-it-iphone-app/">Spelling Toy for Kids</a> is now available on <a href="http://itunes.apple.com/us/app/nkleins-spell-it/id354611798?mt=8">the iTunes Store</a>.</p>
<p>The first five respondents to this article will receive a Promotional Code to download the app for free! <em>(Edit: all promo codes dished out&#8230; if you really want one and will publicly review my app in your blog, I&#8217;ll dig up another promo code for you.)</em></p>
<p><center><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/cJ4kh4aIakk&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/cJ4kh4aIakk&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></center></p>
<h3>Features</h3>
<ul>
<li>Kid-friendly interface!  Just pick the letters you want!</li>
<li>Guides your child to the proper spelling of each word.</li>
<li>Adapts to your child!  Cards that consistently give your child trouble show up more often.</li>
<li>Support for English, Spanish, and French! (German and Japanese Kana coming soon)</li>
<li>Lots of words to learn (with more coming soon).</li>
<li>Three different skill levels to challenge your kid!</li>
<li>Exercise some or all of the categories:  Numbers, Colors, Foods (with more coming soon).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/02/spelling-toy-iphone-app-released/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Public Domain Fourier Transform Library for Common Lisp</title>
		<link>http://nklein.com/2009/10/public-domain-fourier-transform-library-for-common-lisp/</link>
		<comments>http://nklein.com/2009/10/public-domain-fourier-transform-library-for-common-lisp/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 17:04:09 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Initial Releases]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[cl-fft]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=941</guid>
		<description><![CDATA[In response to my recent post about genetically selecting cosine waves for image approximation, several reddit commentors said that I should just have taken the Fourier transform, kept the largest 100 coefficients and did the inverse Fourier transform. [I haven't run the RMS calculation on the result yet, but visually, it looks pretty nice with [...]]]></description>
			<content:encoded><![CDATA[<p>In response to my recent post about <a href="http://nklein.com/2009/10/image-approximation-with-genetically-selected-cosines/">genetically selecting cosine waves for image approximation</a>, several <a href="http://www.reddit.com/r/programming/comments/9q9jk/image_approximation_with_genetically_selected/">reddit commentors</a> said that I should just have taken the Fourier transform, kept the largest 100 coefficients and did the inverse Fourier transform.  [I haven't run the RMS calculation on the result yet, but visually, it looks pretty nice with my test image.  More details on that in a later post.]</p>
<p>The Lisp code that I used in that article didn&#8217;t actually use Fast Fourier Transforms.  To test the commentors&#8217; claims, I needed an FFT library in Lisp.  I searched around a bit and found an FFI (Foreign Function Interface) wrapper around the <a href="http://www.fftw.org/">FFTW</a> library.  After fiddling with that library and the wrapper for about two hours, I bailed on it and wrote my own <a href="http://nklein.com/software/cl-fft/">Fast Fourier Transform library entirely in Lisp</a>.</p>
<p>More information as well as links to getting the code are here: <a href="http://nklein.com/software/cl-fft/">nklein / Software / CL-FFT</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2009/10/public-domain-fourier-transform-library-for-common-lisp/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

