<?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; TC Lisp</title>
	<atom:link href="http://nklein.com/tags/tc-lisp/feed/" rel="self" type="application/rss+xml" />
	<link>http://nklein.com</link>
	<description>software development and consulting</description>
	<lastBuildDate>Tue, 22 May 2012 03:48:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>March TC-Lispers Meeting:  CL-MW:  The development of a Master/Worker framework in Common Lisp</title>
		<link>http://nklein.com/2012/02/march-tc-lispers-meeting-cl-mw-the-development-of-a-masterworker-framework-in-common-lisp/</link>
		<comments>http://nklein.com/2012/02/march-tc-lispers-meeting-cl-mw-the-development-of-a-masterworker-framework-in-common-lisp/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 02:31:59 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[TC Lisp]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1795</guid>
		<description><![CDATA[Next meeting will be on 5 March 2012, as usual at Common Roots (www.commonrootscafe.com) in the Community Room. However, our start time is *NOT* as usual. Our meeting will start at 7:00 PM (the room is reserved by another group until 7:00 PM); figure that the talk will start at 7:30PM. Some of us are [...]]]></description>
			<content:encoded><![CDATA[<p>Next meeting will be on 5 March 2012, as usual at Common Roots (www.commonrootscafe.com) in the Community Room. However, our start time is *NOT* as usual. Our meeting will start at 7:00 PM (the room is reserved by another group until 7:00 PM); figure that the talk will start at 7:30PM. Some of us are likely to be there starting around 6:00 PM to eat dinner, etc.</p>
<h3>CL-MW: The development of a Master/Worker framework in Common Lisp</h3>
<p>CL-MW is a Common Lisp Master/Worker framework for rapid prototyping of pleasantly parallel applications with fine-grained tasks. It focuses on low cognitive overhead for application development, easy integration with well-known batch scheduling systems, and scalability in the ~10K worker and the billions of tasks range. Hear about the challenges and solutions in the development of this framework.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2012/02/march-tc-lispers-meeting-cl-mw-the-development-of-a-masterworker-framework-in-common-lisp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deadline approaching: in the Find the People, Lisp Programming Contest</title>
		<link>http://nklein.com/2010/09/deadline-approaching-in-the-find-the-people-lisp-programming-contest/</link>
		<comments>http://nklein.com/2010/09/deadline-approaching-in-the-find-the-people-lisp-programming-contest/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 01:02:53 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[TC Lisp]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1478</guid>
		<description><![CDATA[If you haven&#8217;t started your entry for the TC Lisper&#8217;s Programming Contest, you&#8217;re not too late. The deadline is September 19th. If you have started, post a comment here or there to let us know how it&#8217;s going!]]></description>
			<content:encoded><![CDATA[<p>If you haven&#8217;t started your entry for the TC Lisper&#8217;s <a href="http://tclispers.org/contest-find-the-people">Programming Contest</a>, you&#8217;re not too late.  The deadline is September 19th.</p>
<p>If you have started, post a comment here or there to let us know how it&#8217;s going!</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/09/deadline-approaching-in-the-find-the-people-lisp-programming-contest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Find the People:  Lisp Programming Contest sponsored by TC Lispers</title>
		<link>http://nklein.com/2010/07/find-the-people/</link>
		<comments>http://nklein.com/2010/07/find-the-people/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 00:27:32 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[TC Lisp]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1468</guid>
		<description><![CDATA[Your Lisp program will be given two input images from the same web cam. The first image will contain zero people, the second image will contain at least one person. Your program&#8217;s goal is to find the people. You will get points for emitting the pixel coordinates of a pixel inside a person. You&#8217;ll get [...]]]></description>
			<content:encoded><![CDATA[<p>Your Lisp program will be given two input images from the same web cam.  The first image will contain zero people, the second image will contain at least one person.</p>
<p>Your program&#8217;s goal is to find the people.  You will get points for emitting the pixel coordinates of a pixel inside a person.  You&#8217;ll get bonus points if it&#8217;s a head pixel.  Be careful, though.  You&#8217;ll lose points for emitting more than one pixel per person.</p>
<ul>
<li>Deadline:  September 19th.</li>
<li>Target Platform:  SBCL or Clozure under Mac OS X (10.6.4).</li>
<li>Prizes for:  Tournament winner, Prettiest code</li>
<li>Full Details:  <a href="http://tclispers.org/contest-find-the-people">http://tclispers.org/contest-find-the-people</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/07/find-the-people/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>TC Lispers May Presentations online</title>
		<link>http://nklein.com/2010/05/tc-lispers-may-presentations-online/</link>
		<comments>http://nklein.com/2010/05/tc-lispers-may-presentations-online/#comments</comments>
		<pubDate>Thu, 27 May 2010 14:12:50 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[TC Lisp]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1401</guid>
		<description><![CDATA[The Twin Cities Lisp Users Group meeting for May was last Tuesday. Teaching Introductory Programming Using Scheme Daniel Feldman gave this presentation at the TC Lispers meeting in May 2010. Presentation Slides Course Description page Teaching Introductory Programming Using Scheme on Vimeo. ASDF2 Robert Goldman gave this lightning talk to the TC Lispers meeting in [...]]]></description>
			<content:encoded><![CDATA[<p>The Twin Cities Lisp Users Group meeting for May was last Tuesday.</p>
<h3>Teaching Introductory Programming Using Scheme</h3>
<p>Daniel Feldman gave this presentation at the TC Lispers meeting in May 2010.</p>
<ul>
<li><a href="http://nklein.com/wp-content/uploads/2010/05/1901.pdf">Presentation Slides</a></li>
<li><a href="http://www.cs.umn.edu/academics/undergraduate/class_desc/csci1901.php">Course Description page</a></li>
</ul>
<p>
<object width="640" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12071034&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=00ADEF&#038;fullscreen=1" /><embed type="application/x-shockwave-flash" width="640" height="400" src="http://vimeo.com/moogaloop.swf?clip_id=12071034&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=00ADEF&#038;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object>
</p>
<p><a href="http://vimeo.com/12071034">Teaching Introductory Programming Using Scheme</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<h3>ASDF2</h3>
<p>Robert Goldman gave this lightning talk to the TC Lispers meeting in May 2010.</p>
<ul>
<li><a href="http://nklein.com/wp-content/uploads/2010/05/asdf2.pdf">Presentation Slides</a></li>
<li><a href="http://common-lisp.net/projects/asdf/">ASDF home page</a></li>
</ul>
<p>
<object width="640" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12072117&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=00ADEF&#038;fullscreen=1" /><embed type="application/x-shockwave-flash" width="640" height="400" src="http://vimeo.com/moogaloop.swf?clip_id=12072117&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=00ADEF&#038;fullscreen=1" allowfullscreen="true" allowscriptaccess="always"></embed></object>
</p>
<p><a href="http://vimeo.com/12072117">ASDF2</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<h3>Programming Contest</h3>
<p>Patrick Stein gave this lightning talk to the TC Lispers meeting in May 2010.</p>
<ul>
<li><a href="http://nklein.com/wp-content/uploads/2010/05/Contest.pdf">Presentation Slides</a></li>
</ul>
<p>
<object width="640" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12078728&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=00ADEF&#038;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12078728&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=00ADEF&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="400"></embed></object></p>
<p><a href="http://vimeo.com/12078728">Programming Contest</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Lightning talk by Patrick Stein to the Twin Cities Lisp Users Group about hosting a Programming Contest.  This presentation was recorded on 2010-05-25.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/05/tc-lispers-may-presentations-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TC Lispers April Presentations online</title>
		<link>http://nklein.com/2010/04/tc-lispers-april-presentations-online/</link>
		<comments>http://nklein.com/2010/04/tc-lispers-april-presentations-online/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 14:45:49 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[TC Lisp]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1325</guid>
		<description><![CDATA[The Twin Cities Lisp Users Group meeting for April was last Monday. The main topic was Web Frameworks, but there were also two shorter talks. Weblocks Presentation Patrick Stein gave this presentation at the TC Lispers meeting in April 2010. Presentation Slides Weblocks on Vimeo. Allegro Serve and Web Actions Presentation Robert Goldman gave this [...]]]></description>
			<content:encoded><![CDATA[<p>The Twin Cities Lisp Users Group meeting for April was last Monday.  The main topic was Web Frameworks, but there were also two shorter talks.</p>
<h2>Weblocks Presentation</h2>
<p class="no-indent">Patrick Stein gave this presentation at the TC Lispers meeting in April 2010.</p>
<ul>
<li><a href="http://nklein.com/wp-content/uploads/2010/04/Weblocks-slides.pdf">Presentation Slides</a></li>
</ul>
<p class="no-indent">
<object width="640" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11310461&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="640" height="400" src="http://vimeo.com/moogaloop.swf?clip_id=11310461&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowfullscreen="true" allowscriptaccess="always"></embed></object>
</p>
<p><a href="http://vimeo.com/11310461">Weblocks</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<h2>Allegro Serve and Web Actions Presentation</h2>
<p class="no-indent">Robert Goldman gave this presentation at the TC Lispers meeting in April 2010.</p>
<ul>
<li><a href="http://nklein.com/wp-content/uploads/2010/04/allegroserve.pdf">Presentation Slides</a></li>
</ul>
<p><strong><em>Apology:</em></strong><em> Unfortunately, ScreenFlow bombed out on me when I went to stop recording.  It subsequently saw that it had a partial project there but was unable to recover it.  As such, there is no video available for this presentation.  Feh.  — Patrick</em></p>
<h2>Hunchentoot Presentation</h2>
<p>Paul Krueger gave this presentation at the TC Lispers meeting in April 2010.</p>
<ul>
<li><a href="http://nklein.com/wp-content/uploads/2010/04/Hunchentoot.pdf">Presentation Slides</a></li>
</ul>
<p class="no-indent">
<object width="640" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11312889&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="640" height="400" src="http://vimeo.com/moogaloop.swf?clip_id=11312889&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowfullscreen="true" allowscriptaccess="always"></embed></object>
</p>
<p><a href="http://vimeo.com/11312889">Hunchentoot</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<h2>Cocoa Lisp Controller Presentation</h2>
<p style="no-indent">Paul Krueger gave this presentation at the TC Lispers meeting in April 2010.</p>
<ul>
<li><a href="http://trac.clozure.com/ccl/browser/trunk/source/contrib/krueger/InterfaceProjects/Documentation/LispController%20Reference.pdf">LispController Reference Manual</a></li>
<li><a href="http://trac.clozure.com/ccl/browser/trunk/source/contrib/krueger/InterfaceProjects/Documentation/InterfaceBuilderWithCCLTutorial2.1.pdf">Tutorial Document for Building Cocoa Interfaces with Lisp</a></li>
<li><a href="http://trac.clozure.com/ccl/browser/trunk/source/contrib/krueger/InterfaceProjects">Paul Krueger&#8217;s Cocoa Lisp contributions to CCL</a></li>
</ul>
<p class="no-indent">
<object width="640" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11315777&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="640" height="400" src="http://vimeo.com/moogaloop.swf?clip_id=11315777&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowfullscreen="true" allowscriptaccess="always"></embed></object>
</p>
<p><a href="http://vimeo.com/11315777">Cocoa Lisp Controller</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<h2>CL-Growl Presentation</h2>
<p class="no-indent">Patrick Stein gave this presentation at the TC Lispers meeting in April 2010.</p>
<ul>
<li><a href="http://nklein.com/wp-content/uploads/2010/04/CL-Growl-with-notes.pdf">Presentation Slides</a></li>
<li><a href="http://nklein.com/software/cl-growl/">CL-Growl home page</a></li>
</ul>
<p class="no-indent">
<object width="640" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11315317&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="640" height="400" src="http://vimeo.com/moogaloop.swf?clip_id=11315317&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowfullscreen="true" allowscriptaccess="always"></embed></object>
</p>
<p><a href="http://vimeo.com/11315317">CL-Growl</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/04/tc-lispers-april-presentations-online/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Weblocks Slides</title>
		<link>http://nklein.com/2010/04/weblocks-slides/</link>
		<comments>http://nklein.com/2010/04/weblocks-slides/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 19:46:33 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[TC Lisp]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1300</guid>
		<description><![CDATA[At the TC Lispers meeting tonight, I will be giving a little presentation about weblocks. Here are slides for that presentation. ps. if you&#8217;re in range, come to the meeting&#8230; Common Roots Cafe in Minneapolis.]]></description>
			<content:encoded><![CDATA[<p>At the <a href="http://tclispers.org/events/april-meeting-topic-web-frameworks">TC Lispers meeting tonight</a>, I will be giving a little presentation about <a href="http://weblocks.viridian-project.de/">weblocks</a>.  Here are <a href="http://nklein.com/wp-content/uploads/2010/04/Weblocks-slides.pdf">slides for that presentation</a>.</p>
<p>ps. if you&#8217;re in range, come to the meeting&#8230; Common Roots Cafe in Minneapolis.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/04/weblocks-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CL-Growl Slides</title>
		<link>http://nklein.com/2010/04/cl-growl-slides/</link>
		<comments>http://nklein.com/2010/04/cl-growl-slides/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 04:45:13 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[cl-growl]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[TC Lisp]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1303</guid>
		<description><![CDATA[On Monday, I am giving a lightning talk at the TC Lispers meeting about my Common Lisp Growl client library. Here are the slides with presenter notes and the accompanying sample code.]]></description>
			<content:encoded><![CDATA[<p>On Monday, I am giving a lightning talk at the <a href="http://tclispers.org/events/april-meeting-topic-web-frameworks">TC Lispers meeting</a> about my <a href="http://nklein.com/software/cl-growl/">Common Lisp Growl client library</a>.</p>
<p>Here are the <a href="http://nklein.com/wp-content/uploads/2010/04/CL-Growl-with-notes.pdf">slides with presenter notes</a> and the accompanying <a href="http://nklein.com/wp-content/uploads/2010/04/growl-test.lisp">sample code</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2010/04/cl-growl-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GUI Discussion &#8212; TC Lispers November Meeting</title>
		<link>http://nklein.com/2009/12/gui-discussion-tc-lispers-november-meeting/</link>
		<comments>http://nklein.com/2009/12/gui-discussion-tc-lispers-november-meeting/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 12:05:41 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[TC Lisp]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[user interface toolkits]]></category>
		<category><![CDATA[woolly]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1045</guid>
		<description><![CDATA[Cross-posted from TCLispers.org: Lisp GUI Discussion on Vimeo. Robert Goldman, Paul Krueger, and Patrick Stein gave short presentations on different approaches to Graphical User Interfaces with Common Lisp. Lisp GUIs or &#8220;Bloodied but Unbowed&#8221; by Robert Goldman CCL/Cocoa Interface by Paul Krueger GUIs with CL-OpenGL by Patrick Stein]]></description>
			<content:encoded><![CDATA[<p><em>Cross-posted from <a href="http://tclispers.org/">TCLispers.org</a>:</em></p>
<p><object width="640" height="480"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7933728&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="640" height="480" src="http://vimeo.com/moogaloop.swf?clip_id=7933728&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><a href="http://vimeo.com/7933728">Lisp GUI Discussion</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Robert Goldman, Paul Krueger, and Patrick Stein gave short presentations on different approaches to Graphical User Interfaces with Common Lisp.</p>
<ul>
<li><a href="http://nklein.com/wp-content/uploads/2009/12/lisp-guis.pdf">Lisp GUIs or &#8220;Bloodied but Unbowed&#8221;</a> by <a href="http://rpgoldman.real-time.com/">Robert Goldman</a></li>
<li><a href="http://nklein.com/wp-content/uploads/2009/12/TCL-Slides-Nov-2009.pdf">CCL/Cocoa Interface</a> by Paul Krueger</li>
<li><a href="http://nklein.com/wp-content/uploads/2009/12/CL-OpenGL-GUI.pdf">GUIs with CL-OpenGL</a> by <a href="http://nklein.com/">Patrick Stein</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2009/12/gui-discussion-tc-lispers-november-meeting/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Cross-Platform Development</title>
		<link>http://nklein.com/2009/11/cross-platform-development/</link>
		<comments>http://nklein.com/2009/11/cross-platform-development/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 01:31:04 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[TC Lisp]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[woolly]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1018</guid>
		<description><![CDATA[In preparation for the upcoming TC Lispers meeting, I was testing my Sheeple-based CL-OpenGL GUI code on all of the different systems that I use. This was important because part of my goal in starting from bare-bones OpenGL was to make something that was pretty easy to port. The OpenGL libraries are the only non-Lisp [...]]]></description>
			<content:encoded><![CDATA[<p>In preparation for the <a href="http://tclispers.org/events/november-meeting">upcoming TC Lispers meeting</a>, I was testing my <a href="http://sykosomatic.org/sheeple/">Sheeple</a>-based <a href="http://nklein.com/2009/11/playing-with-sheeple-based-gui-atop-cl-opengl/">CL-OpenGL GUI</a> code on all of the different systems that I use.  This was important because part of my goal in starting from bare-bones OpenGL was to make something that was pretty easy to port.  The OpenGL libraries are the only non-Lisp dependencies, and they are pretty standard.</p>
<p>I run Mac OS X 10.6.2 as my primary development machine.  I knew everything I had so far worked there under SBCL 1.0.30 and CMU-CL 20a.  It took a little tweaking to get Sheeple built under Allegro CL 8.1 (Trial Edition), but after that I was five-by-five under Allegro, too.  Unfortunately, I cannot get CL-OpenGL to run under Clozure 1.3-r11936 on Mac OS X.  Also, ECL 9.10.2 doesn&#8217;t support weak key hashtables which Sheeple needs.  And, my install of clisp broke somewhere along the lines, so I haven&#8217;t tried it.</p>
<p>I have an Ubuntu Linux box.  There, I am using SBCL 1.0.11.debian (eeps).  Everything ran perfectly over there (even displaying through X Windows back to my Mac).</p>
<p>I also run Windows Vista under VMWare Fusion on my Mac.  I hadn&#8217;t done any development on it for months and months.  Fortunately, in Google-ing to find out how to fix it, I stumbled upon <a href="http://nklein.com/2009/05/emacs-slime-sbcl-on-windows-vista/">what I had written about how I got things set up originally</a>.  Over the last two hours, I got SBCL upgraded to 1.0.29 under Vista.  I got ASDF-Install set up with a bunch of help from <a href="http://sean-ross.blogspot.com/2007/05/asdf-install-windows.html">this article</a>.  And, from there, I got CFFI and cl-opengl and ZPB-TTF and Sheeple installed.</p>
<p>ZPB-TTF and Sheeple both used some tar format options that <a href="http://www.method-combination.net/blog/archives/2007/04/30/new-archive-release.html">archive_0.7.0</a> didn&#8217;t like.  For those, I had to jump through some hoops to untar and retar them to get them to install.</p>
<p>Here was my final <b>/Users/Patrick/.sbclrc</b> file:</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><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>require <span style="color: #66cc66;">:</span><span style="color: #555;">asdf</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; from Zach Beane</span>
<span style="color: #66cc66;">&#40;</span>defmethod asdf<span style="color: #66cc66;">:</span><span style="color: #555;">perform</span> <span style="color: #66cc66;">:</span><span style="color: #555;">around</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>o asdf<span style="color: #66cc66;">:</span><span style="color: #555;">load-op</span><span style="color: #66cc66;">&#41;</span>
                                <span style="color: #66cc66;">&#40;</span>c asdf<span style="color: #66cc66;">:</span><span style="color: #555;">cl-source-file</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>handler-<span style="color: #b1b100;">case</span> <span style="color: #66cc66;">&#40;</span>call-next-method o c<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>#+sbcl sb-ext<span style="color: #66cc66;">:</span><span style="color: #555;">invalid-fasl</span>
     #+allegro excl<span style="color: #66cc66;">::</span><span style="color: #555;">file-incompatible-fasl-</span><span style="color: #b1b100;">error</span>
     #+lispworks conditions<span style="color: #66cc66;">:</span><span style="color: #555;">fasl-</span><span style="color: #b1b100;">error</span>
     #+cmu ext<span style="color: #66cc66;">:</span><span style="color: #555;">invalid-fasl</span>
     #-<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">or</span> sbcl allegor lispworks cmu<span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">error</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
     <span style="color: #66cc66;">&#40;</span>asdf<span style="color: #66cc66;">:</span><span style="color: #555;">perform</span> <span style="color: #66cc66;">&#40;</span>make-instance 'asdf<span style="color: #66cc66;">:</span><span style="color: #555;">compile-op</span><span style="color: #66cc66;">&#41;</span> c<span style="color: #66cc66;">&#41;</span>
     <span style="color: #66cc66;">&#40;</span>call-next-method<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">dolist</span> <span style="color: #66cc66;">&#40;</span>pkg  '<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;alexandria/&quot;</span>
                <span style="color: #ff0000;">&quot;archive_0.7.0/&quot;</span>
                <span style="color: #ff0000;">&quot;asdf-install/asdf-install/&quot;</span>
                <span style="color: #ff0000;">&quot;babel_0.3.0/&quot;</span>
                <span style="color: #ff0000;">&quot;cffi_0.10.5/&quot;</span>
                <span style="color: #ff0000;">&quot;cl-opengl/&quot;</span>
                <span style="color: #ff0000;">&quot;flexi-streams-1.0.7/&quot;</span>
                <span style="color: #ff0000;">&quot;gzip-stream_0.2.8/&quot;</span>
                <span style="color: #ff0000;">&quot;salza2-2.0.7/&quot;</span>
                <span style="color: #ff0000;">&quot;sykopomp-sheeple-ceab213/&quot;</span>
                <span style="color: #ff0000;">&quot;trivial-features_0.6/&quot;</span>
                <span style="color: #ff0000;">&quot;trivial-gray-streams-2008-11-02/&quot;</span>
                <span style="color: #ff0000;">&quot;woolly/&quot;</span>
                <span style="color: #ff0000;">&quot;zpb-ttf-1.0/&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>pushnew <span style="color: #66cc66;">&#40;</span>merge-pathnames pkg
                            <span style="color: #66cc66;">&#40;</span>merge-pathnames <span style="color: #ff0000;">&quot;ASDF-Systems/&quot;</span>
                                             <span style="color: #66cc66;">&#40;</span>user-homedir-pathname<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
           asdf<span style="color: #66cc66;">:</span>*central-registry*<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span>asdf<span style="color: #66cc66;">:</span><span style="color: #555;">oos</span> 'asdf<span style="color: #66cc66;">:</span><span style="color: #555;">load-op</span> 'asdf-install<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; for my sanity</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setf</span> asdf-install<span style="color: #66cc66;">:</span>*locations*
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span>merge-pathnames <span style="color: #ff0000;">&quot;ASDF-Systems/&quot;</span> <span style="color: #66cc66;">&#40;</span>user-homedir-pathname<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                  <span style="color: #66cc66;">&#40;</span>merge-pathnames <span style="color: #ff0000;">&quot;ASDF-Systems/&quot;</span> <span style="color: #66cc66;">&#40;</span>user-homedir-pathname<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                  <span style="color: #ff0000;">&quot;My install spot&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; via http://sean-ross.blogspot.com/2007/05/asdf-install-windows.html</span>
#+win32
<span style="color: #66cc66;">&#40;</span>asdf<span style="color: #66cc66;">:</span><span style="color: #555;">oos</span> 'asdf<span style="color: #66cc66;">:</span><span style="color: #555;">load-op</span> 'gzip-stream<span style="color: #66cc66;">&#41;</span>
&nbsp;
#+win32
<span style="color: #66cc66;">&#40;</span>asdf<span style="color: #66cc66;">:</span><span style="color: #555;">oos</span> 'asdf<span style="color: #66cc66;">:</span><span style="color: #555;">load-op</span> 'archive<span style="color: #66cc66;">&#41;</span>
&nbsp;
#+win32
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> asdf-install-extractor <span style="color: #66cc66;">&#40;</span>to-dir tarball<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><span style="color: #b1b100;">name</span> <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>gzip-stream<span style="color: #66cc66;">:</span><span style="color: #555;">with-open-gzip-file</span> <span style="color: #66cc66;">&#40;</span>ins tarball<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>archive<span style="color: #66cc66;">:</span><span style="color: #555;">with-open-archive</span> <span style="color: #66cc66;">&#40;</span>archive ins<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>*default-pathname-defaults* <span style="color: #66cc66;">&#40;</span>pathname to-dir<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
	  <span style="color: #66cc66;">&#40;</span>archive<span style="color: #66cc66;">:</span><span style="color: #555;">do-archive-entries</span> <span style="color: #66cc66;">&#40;</span>entry archive <span style="color: #b1b100;">name</span><span style="color: #66cc66;">&#41;</span>
	    <span style="color: #66cc66;">&#40;</span>archive<span style="color: #66cc66;">:</span><span style="color: #555;">extract-entry</span> archive entry<span style="color: #66cc66;">&#41;</span>
	    <span style="color: #66cc66;">&#40;</span>unless <span style="color: #b1b100;">name</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setf</span> <span style="color: #b1b100;">name</span> <span style="color: #66cc66;">&#40;</span>archive<span style="color: #66cc66;">:</span><span style="color: #b1b100;">name</span> entry<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</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>string <span style="color: #b1b100;">name</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
#+win32
<span style="color: #66cc66;">&#40;</span>push 'asdf-install-extractor asdf-install<span style="color: #66cc66;">:</span>*tar-extractors*<span style="color: #66cc66;">&#41;</span></pre></div>
<p>The list of packages in the middle were about half installed manually to get the archive extraction code working and half installed through ASDF-Install.  If I recall correctly, I had to manually install: <b>archive_0.7.0</b>, <b>flexi-streams-1.0.7</b>, <b>gzip-stream_0.2.8</b>, <b>salza2-2.0.7</b>, <b>trivial-gray-streams-2008-11-02</b>, and a fresh copy of <b>asdf-install</b>.  I also had to download a compiled version of <b>freeglut.dll</b> and tuck it into my Windows\system32 directory.</p>
<p>Getting SBCL to use the fresh copy of <b>asdf-install</b> was annoying.  I ended up starting up a Command Prompt as Administrator (right click on the &#8220;command.exe&#8221; icon or menu-item and select &#8220;Run as Administrator&#8221;).  Then, I went to the SBCL directory (&#8220;C:\Program Files\Steel Bank Common Lisp\1.0.29\&#8221;) and did the following:</p>
<div class="codecolorer-container bash blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><pre class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">%</span> rename asdf-install asdf-install.old
<span style="color: #000000; font-weight: bold;">%</span> mklink <span style="color: #000000; font-weight: bold;">/</span>d asdf-install <span style="color: #ff0000;">&quot;C:\Users\Patrick\ASDF-Systems\asdf-install\asdf-install<span style="color: #000099; font-weight: bold;">\&quot;</span></span></pre></div>
<p>I had extracted the tar-ball from the ASDF-Install distribution into my ASDF-Systems directory.</p>
<p>Then, I went back and made my GUI code use double-buffered OpenGL windows because running Lisp to OpenGL to Windows Vista to VMWare to Quartz had some wicked flickering going on.</p>
<p>Two hours is a long time for something that&#8217;s supposed to be <q>easily portable</q>.  But, I would have spent at least 95% of that time even if I were using an all-Lisp solution.  And, this is far less time than I ever spent porting anything else to Windows.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2009/11/cross-platform-development/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Playing with Sheeple-based GUI atop CL-OpenGL</title>
		<link>http://nklein.com/2009/11/playing-with-sheeple-based-gui-atop-cl-opengl/</link>
		<comments>http://nklein.com/2009/11/playing-with-sheeple-based-gui-atop-cl-opengl/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 16:59:55 +0000</pubDate>
		<dc:creator>pat</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[TC Lisp]]></category>
		<category><![CDATA[woolly]]></category>

		<guid isPermaLink="false">http://nklein.com/?p=1007</guid>
		<description><![CDATA[Inspired by the previous TC Lispers meeting and spurred on by the probable topic of the next TC Lispers meeting, I have spent the little bit of coding time I&#8217;ve had over the past two weeks on making a GUI layer using Sheeple atop CL-OpenGL and employing ZPB-TTF for font-loading. I have dubbed this project [...]]]></description>
			<content:encoded><![CDATA[<p>Inspired by the <a href="http://tclispers.org/news/sheeple-presentation">previous TC Lispers meeting</a> and spurred on by the <a href="http://tclispers.org/should-we-discuss-question-cl-and-uis-november-meeting">probable topic of the next TC Lispers meeting</a>, I have spent the little bit of coding time I&#8217;ve had over the past two weeks on making a GUI layer using <a href="http://sykosomatic.org/sheeple/">Sheeple</a> atop <a href="http://common-lisp.net/project/cl-opengl/">CL-OpenGL</a> and employing <a href="http://www.xach.com/lisp/zpb-ttf/">ZPB-TTF</a> for font-loading.</p>
<p>I have dubbed this project <q>Woolly</q> (because it&#8217;s made from Sheeple and because <q>Woolly</q> sounds sorta like <q>GUI</q>).</p>
<p><a href="http://nklein.com/wp-content/uploads/2009/11/woolly-peek.png"><img src="http://nklein.com/wp-content/uploads/2009/11/woolly-peek-300x235.png" alt="woolly-peek" title="woolly-peek" width="300" height="235" class="alignright size-medium wp-image-1008" /></a>I spent about half of my coding time so far getting the basic framework in place (proven through clickable buttons with labels).  I am trying to keep it cleanly separated between generic GUI stuff and the CL-OpenGL specifics in the event that someone would like to port it to some other I/O spec.</p>
<p>The other half of my coding time was spent getting the font-rendering to be anti-aliased.  I promise to write more about how I accomplished the font-rendering in a future post so that if you&#8217;re ever stuck rendering fonts in OpenGL, you won&#8217;t be stuck with pixelated blockiness or resorting to rendering to a texture-map and letting the mipmapper figure it out.</p>
<p>For this post, however, I&#8217;ll just show you the code that sets up the interface depicted here.</p>
<div class="codecolorer-container lisp blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><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>require <span style="color: #66cc66;">:</span><span style="color: #555;">asdf</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>asdf<span style="color: #66cc66;">:</span><span style="color: #555;">operate</span> 'asdf<span style="color: #66cc66;">:</span><span style="color: #555;">load-op</span> 'woolly-gl <span style="color: #66cc66;">:</span><span style="color: #555;">verbose</span> <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; make it easier to change renderer/controller later</span>
<span style="color: #66cc66;">&#40;</span>rename-package 'woolly-gl 'toolkit<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> test <span style="color: #66cc66;">&#40;</span><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>font <span style="color: #66cc66;">&#40;</span>sheeple<span style="color: #66cc66;">:</span><span style="color: #555;">object</span> <span style="color: #66cc66;">:</span><span style="color: #555;">parents</span> toolkit<span style="color: #66cc66;">:=</span>font<span style="color: #66cc66;">=</span>
                              <span style="color: #66cc66;">:</span><span style="color: #555;">em-size</span> <span style="color: #cc66cc;">48</span>
                              <span style="color: #66cc66;">:</span><span style="color: #555;">pathname</span> <span style="color: #ff0000;">&quot;okolaks/okolaksRegular.ttf&quot;</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><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>app <span style="color: #66cc66;">&#40;</span>sheeple<span style="color: #66cc66;">:</span><span style="color: #555;">object</span> <span style="color: #66cc66;">:</span><span style="color: #555;">parents</span> toolkit<span style="color: #66cc66;">:=</span>app<span style="color: #66cc66;">=</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>win <span style="color: #66cc66;">&#40;</span>sheeple<span style="color: #66cc66;">:</span><span style="color: #555;">object</span> <span style="color: #66cc66;">:</span><span style="color: #555;">parents</span> toolkit<span style="color: #66cc66;">:=</span>window<span style="color: #66cc66;">=</span>
                               <span style="color: #66cc66;">:</span><span style="color: #555;">title</span> <span style="color: #ff0000;">&quot;Woolly Window 1&quot;</span>
                               <span style="color: #66cc66;">:</span><span style="color: #555;">width</span> <span style="color: #cc66cc;">640</span>
                               <span style="color: #66cc66;">:</span><span style="color: #555;">height</span> <span style="color: #cc66cc;">480</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>but <span style="color: #66cc66;">&#40;</span>sheeple<span style="color: #66cc66;">:</span><span style="color: #555;">object</span> <span style="color: #66cc66;">:</span><span style="color: #555;">parents</span> toolkit<span style="color: #66cc66;">:=</span>button<span style="color: #66cc66;">=</span>
                               <span style="color: #66cc66;">:</span><span style="color: #555;">offset-x</span> <span style="color: #cc66cc;">40</span>
                               <span style="color: #66cc66;">:</span><span style="color: #555;">offset-y</span> <span style="color: #cc66cc;">40</span>
                               <span style="color: #66cc66;">:</span><span style="color: #555;">width</span> <span style="color: #cc66cc;">300</span>
                               <span style="color: #66cc66;">:</span><span style="color: #555;">height</span> <span style="color: #cc66cc;">100</span>
                               <span style="color: #66cc66;">:</span><span style="color: #555;">font</span> font
                               <span style="color: #66cc66;">:</span><span style="color: #555;">label</span> <span style="color: #ff0000;">&quot;Button&quot;</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>woolly<span style="color: #66cc66;">:</span><span style="color: #555;">display-window</span> win<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>woolly<span style="color: #66cc66;">:</span><span style="color: #555;">add</span> win but<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>woolly<span style="color: #66cc66;">:</span><span style="color: #555;">main-loop</span> app<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>woolly<span style="color: #66cc66;">:</span><span style="color: #555;">destroy-window</span> win<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div>
<p>Next up on my agenda is to make the background and button prettier.  It should be easy enough to do with <b>GL_LIGHTING</b> and some vertex-coloring for gradations.  After that, it&#8217;s on to more controls like labels, panels, checkboxes, drop-downs, borders, and (my dread) text input boxes.  Then, it&#8217;s on to a layout manager.</p>
<p><a href="http://nklein.com/wp-content/uploads/2009/11/woolly-peek1.png"><img src="http://nklein.com/wp-content/uploads/2009/11/woolly-peek1-150x117.png" alt="woolly-peek" title="woolly-peek" width="150" height="117" class="alignright size-thumbnail wp-image-1013" /></a>Edit: Here&#8217;s the same GUI a day later.  I&#8217;m using a simple lighting scheme and rendering the button in 3D.  I haven&#8217;t yet hooked in the bit to render it depressed when the button is pressed.  I&#8217;ve tested the code that draws it the other way, but I haven&#8217;t hooked it into the mouse handlers yet.</p>
<p>Edit #2: Actually, it only took a few minutes for me to hook in the rendering it pressed vs. unpressed.  When I did it though, it looked like the label was sliding around because the effect of the contrast between the light and dark edges of the button was so great that you perceive the whole button sliding when it&#8217;s pressed.  So, I added a little bit in there to actually slide the text by an amount close to what is perceived.  So, now&#8230; it looks pretty spiffy.</p>
]]></content:encoded>
			<wfw:commentRss>http://nklein.com/2009/11/playing-with-sheeple-based-gui-atop-cl-opengl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

