<?xml version="1.0"?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007">
   <channel>
      <title>Lisp Pipe</title>
      <description>Pipes Output</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=po8sPivt2xGVMQcW6kjTQA</link>
      <pubDate>Sun, 22 Nov 2009 04:46:03 -0800</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <item>
         <title>The Zipper [PDF]</title>
         <link>http://www.reddit.com/r/programming/comments/a6r47/the_zipper_pdf/</link>
         <description>submitted by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.reddit.com/user/lispnik&quot;&gt; lispnik &lt;/a&gt; &lt;br/&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.st.cs.uni-saarland.de/edu/seminare/2005/advanced-fp/docs/huet-zipper.pdf&quot;&gt;[link]&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.reddit.com/r/programming/comments/a6r47/the_zipper_pdf/&quot;&gt;[16 comments]&lt;/a&gt;</description>
         <guid isPermaLink="false">http://www.reddit.com/r/programming/comments/a6r47/the_zipper_pdf/</guid>
         <pubDate>Sat, 21 Nov 2009 06:51:45 -0800</pubDate>
      </item>
      <item>
         <title>Zach Beane: Go try XONG</title>
         <link>http://xach.livejournal.com/234968.html</link>
         <description>&lt;p&gt;David O'Toole put out version 1.0 of his roguelike puzzle game &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://dto.github.com/notebook/xong.html&quot;&gt;XONG&lt;/a&gt; yesterday. &lt;p&gt;When he asked me to try it out, I expected some headache when downloading it, compiling it, grabbing libraries, etc. Nope! I'm using Snow Leopard on an Intel MacBook. I grabbed the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://cloud.github.com/downloads/dto/rlx/xong-1.0.dmg&quot;&gt;.dmg&lt;/a&gt;, double-clicked the xong icon, and it ran perfectly. It bundles an executable SBCL image together with the graphics, sounds, and libraries it needs, so it's completely self-contained and looks like any other Mac .app bundle. It's nice to see this kind of application delivery.</description>
         <guid isPermaLink="false">http://xach.livejournal.com/234968.html</guid>
         <pubDate>Sat, 21 Nov 2009 12:09:34 -0800</pubDate>
      </item>
      <item>
         <title>Lispjobs: Software/firmware developer (Lisp), San Diego, CA</title>
         <link>http://lispjobs.wordpress.com/2009/11/21/softwarefirmware-developer-lisp-san-diego-ca/</link>
         <description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;For biomedical devices, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://search9.smartsearchonline.com/sdrr/jobs/jobdetails.asp?current_page=3&amp;city=&amp;location=&amp;job_type=&amp;emp_status=&amp;direct_jo_num=&amp;country=&amp;k1=&amp;k2=&amp;k3=&amp;k4=&amp;k5=&amp;k6=&amp;k7=&amp;k8=&amp;salary_min=&amp;co_num=&amp;apply=yes&amp;job_number=1336&quot;&gt;Software/Firmware Developer &amp;#8211; Lisp &lt;/a&gt;(Contract to Hire).&lt;/p&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/lispjobs.wordpress.com/403/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/lispjobs.wordpress.com/403/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/lispjobs.wordpress.com/403/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/lispjobs.wordpress.com/403/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/lispjobs.wordpress.com/403/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/lispjobs.wordpress.com/403/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/lispjobs.wordpress.com/403/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/lispjobs.wordpress.com/403/&quot;/&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/lispjobs.wordpress.com/403/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/lispjobs.wordpress.com/403/&quot;/&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=lispjobs.wordpress.com&amp;blog=504450&amp;post=403&amp;subd=lispjobs&amp;ref=&amp;feed=1&quot;/&gt;&lt;/div&gt;</description>
         <guid isPermaLink="false">http://lispjobs.wordpress.com/2009/11/21/softwarefirmware-developer-lisp-san-diego-ca/</guid>
         <pubDate>Sat, 21 Nov 2009 08:18:09 -0800</pubDate>
      </item>
      <item>
         <title>Zach Beane: LISP is difficult to learn</title>
         <link>http://xach.livejournal.com/234685.html</link>
         <description>&lt;p&gt;The local grocery store has a big bin of used books for $1. After seeing a 1983 computer dictionary's description of LISP, I knew I had to buy it: &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/xach/4120160953/&quot; title=&quot;Dictionary of Computer Terms - 1983 by Zach Beane, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2672/4120160953_9461064d21_t.jpg&quot; width=&quot;70&quot; height=&quot;100&quot; alt=&quot;Dictionary of Computer Terms - 1983&quot;/&gt;&lt;/a&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/xach/4120161253/&quot; title=&quot;LISP, defined, circa 1983 by Zach Beane, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2785/4120161253_bb65f06314.jpg&quot; width=&quot;319&quot; height=&quot;500&quot; alt=&quot;LISP, defined, circa 1983&quot;/&gt;&lt;/a&gt; &lt;p&gt;It says: &lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;LISP&lt;/b&gt; acronym for &lt;b&gt;LIS&lt;/b&gt;T &lt;b&gt;P&lt;/b&gt;ROCESSING a high-level
programming language use primarily for list processing, symbol manipulation, and recursive operations: it can handle many different data types, treat programs as data, and provide for the self-modification of the program as it is executing: &lt;i&gt;generally considered a difficult language to learn&lt;/i&gt;
&lt;/blockquote&gt; &lt;p&gt;(Emphasis mine.)</description>
         <guid isPermaLink="false">http://xach.livejournal.com/234685.html</guid>
         <pubDate>Fri, 20 Nov 2009 15:05:35 -0800</pubDate>
      </item>
      <item>
         <title>François-René Rideau: Software Irresponsibility</title>
         <link>http://fare.livejournal.com/149264.html</link>
         <description>&lt;p&gt;
In the way of achieving a healthy software development environment,
a lot of projects fall in one of these two DON'Ts:
irresponsibility and territoriality.
Irresponsibility is when there is no one in charge
of making things right (with respect to a whole category of problems).
Territoriality is when there is someone in charge,
and he won't let anyone else touch the code without him.
They may sound opposite to one another, but often
irresponsibility is a result of territoriality, where
the person in charge just isn't interested in the kind of problem
you're experiencing, and so any consideration for such problems
gets disregarded in favor of whatever fits the interests of the maintainer.
&lt;/p&gt;&lt;a rel=&quot;nofollow&quot; name=&quot;cutid1&quot;&gt;&lt;/a&gt;
&lt;p&gt;
As a notorious example of irresponsible software design,
I will cite PHP, whose maintainer has repeatedly claimed
he was never interested in designing a good programming language.
It shows.
But I'm sure you'll find plenty of familiar examples
in your own experience,
from the irresponsive provider of some proprietary software
you've been locked into using,
to maybe someone from some other department of your company
that you've had to deal with,
and perhaps even to yourself with respect to your own users.
&lt;/p&gt;&lt;p&gt;
Of course, it is always possible to start a new project
to replace the software you're dissatisfied with.
But the costs associated to such endeavour are often huge.
You will have to reimplement not just the parts
that the replaced software did wrong,
but also the parts it did right.
While by assumption you can clearly see parts of the design that are wrong
and do better with respect to those parts, you may be lacking
the proficiency, time and interest to do as well on these other parts.
Last but not least, the community around the original software,
that made it valuable, will not switch to the new one for merely small gains,
and the transition from the old system to the new system
may impose demanding constraints of backwards compatibility.
&lt;/p&gt;&lt;p&gt;
Free Software can drastically reduce the cost of starting a new project,
by allowing you to fork the existing code base, copy large chunks of it,
or at the very least read the code of what you may have to be compatible with.
It does make the cost go down to zero, however.
There again, cruft that made the original software bad enough
that you felt like changing it
will be a heavy burden upon you if you keep it,
and a huge setback to reimplement if you decide to throw it away.
And even in the world of free software, some licenses can incur
a higher cost to forking than others: for instance, licenses that
force you to distribute the code as source, that prevent you
from making any adaptation and keep the name, or otherwise put
hurdles in the way of forkers.
&lt;/p&gt;&lt;p&gt;
In the world of Common Lisp, an interesting case
of not-so-responsible software is
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.cliki.net/ASDF&quot;&gt;ASDF&lt;/a&gt;.
Yeah, some of you might be tempted to sneer,
is he going to blame the problem with ASDF on
the original author who is long gone,
and the current maintainer who isn't committing enough energy
and availability to making the project go forward?
No, not at all.
Dan Barlow actually did a great job while he was there,
and if no one is stepping up to offer more than Gary King provides,
it's certainly not Gary who's to blame;
he is getting blatant bugs fixed and accepting consensual patches,
and at this point forking would be trivial to fork the git repo
if anyone were dissatisfied with Gary's performance.
Rather, I'll argue that any problem with ASDF is a symptom of the way
responsibilities are distributed with respect to its update,
and propose a small technical change that can hopefully improve things a lot.
&lt;/p&gt;&lt;p&gt;
When Dan Barlow wrote ASDF in 2001, he only wanted a better CL build system
that he could use on top of SBCL for his own projects,
something that would be more declarative than the previous best alternative,
MK:DEFSYSTEM,
and would only need to support modern ANSI CL implementations,
not old forgotten Lisp variants.
In developing ASDF, he loosely followed the better design principles
once proposed by Kent Pitman for an extensible CL build system.
In all those objectives, ASDF was a tremendous success,
and CL users should all be grateful to Dan was his achievement.
However, as usual the problem lies with issues he didn't try to tackle.
&lt;/p&gt;&lt;p&gt;
Problems with ASDF include
the painful way you have to configure it,
deficient support for
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://bugs.launchpad.net/asdf/+bug/479470&quot;&gt;documentation&lt;/a&gt;
or &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://bugs.launchpad.net/asdf/+bug/479478&quot;&gt;testing&lt;/a&gt;,
broken support for conditional compilation,
missing support for generated files,
its weird TRAVERSE algorithm,
etc.
Unlike the issue of
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://common-lisp.net/project/xcvb/doc/ilc09-xcvb-paper.pdf&quot;&gt;deterministic incremental compilation&lt;/a&gt;
that prompted me to start XCVB,
none of the above issues is unsolvable in itself.
But the constraints within which ASDF is developed make it hard to solve them.
Happily, some of these constraints can be removed with a little bit of hackery.
Unhappily, others are intrinsic to the choice of constraints.
&lt;/p&gt;&lt;p&gt;
Indeed, ASDF has a distribution bootstrap problem:
it specifies how to load other systems, but
nothing specifies how ASDF itself is loaded into your system.
That problem is left to whoever writes the Lisp implementation,
distributes the Lisp package, or maintains a larger project
within which ASDF is used.
And in the world of Common Lisp, there are tens of different implementations,
many of them packaged in various ways.
To make the problem tractable, ASDF follows the constraint that it
comes as a single file that may be loaded independently of its location,
and doesn't depend on any third party library beside what is included
by each supported implementation.
&lt;/p&gt;&lt;p&gt;
This means that the provider of libraries that use ASDF
must rely on the least common denominator of ASDF features,
unless he wants to force his users to make sure they upgrade their ASDF.
Upgrading the current ASDF could conceivably be easy, but is actually hard,
because of the
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://bugs.launchpad.net/asdf/+bug/485687&quot;&gt;inability to hot-upgrade a loaded ASDF&lt;/a&gt;.
It is still possible to remove an old ASDF and replace it,
and XCVB does it in an ugly way
(see how xcvb/no-asdf deletes the ASDF package and anything that uses it);
however, files compiled against the old ASDF may not work with the new one
and vice versa
(I've had &quot;interesting&quot; issues that way
while using xcvb-master in slightly different setups).
&lt;/p&gt;&lt;p&gt;
This inability to upgrade further
makes the pre-packaging of a Lisp implementation
with a given version ASDF a bit of a damned if you do, damned if you don't
proposition to Lisp implementers and distributors.
Happily, implementers have the option of only providing ASDF when REQUIRE'd,
and this is the preferred way for users to specify they want to use ASDF,
when it is available.
Distributors may not have this option inasmuch as
there is no standard mechanism to hook into an implementation's REQUIRE.
An example of a failed attempt at distributing Common Lisp with ASDF is
common-lisp-controller. It tried to provide a way to make sure there is always
a configured ASDF, but their solution only works if everyone uses only
debian or another supported OS distribution,
and only if the debian maintainers keep up with all
the common-lisp software (implementations and libraries)
that one may want to use;
two hypotheses that have been disproved in practice
with respect to the needs of many users.
&lt;/p&gt;&lt;p&gt;
To step back to the problem of responsibility,
the current constraints of ASDF are such that a consistent upgrade of ASDF
requires action on the part of tens of people, each in his own territory:
ASDF contributors, Lisp implementers, package distributors.
If only one hacker alone decides to upgrade ASDF,
he has to incur the cost of the associated work of modifying ASDF
and the risk that this will introduce incompatibilities,
for little overall progress in terms of what users may rely upon
unless he convinces tens of other people also do the same.
Thus, the costs of adoption are high, the benefits of development are low,
development is slow, and a cycle of stagnation continues.
&lt;/p&gt;&lt;p&gt;
If someone cares about the future of ASDF, I recommend they should address
the upgradability bug, which will itself unlock a big hurdle on the way
of further evolution of ASDF. Note that this upgradability includes both
the technical ability to load a new ASDF on top of an old one, but probably
also the proper configuration of ASDF, to load systems from a series of
configured paths declared in user and system preference files.
&lt;/p&gt;&lt;p&gt;
Personally, I'd rather work on XCVB, and invite
people interested in build systems to work on it instead of ASDF.
But if XCVB is to prevail, it may as well prevail
against the best ASDF that ASDF can be.
&lt;/p&gt;&lt;p&gt;
XCVB tries to avoid all the problems of ASDF by stepping back
from the assumption that everything happens
in a one Lisp world that has already been setup.
Instead, XCVB will manage many Lisp worlds that it will help you setup.
It doesn't live inside your Lisp image, and thus doesn't depend
on Lisp implementers or distributors to provide it for you;
it can therefore evolve fast without any issue due to slow distribution.
It is also liberated from the constraint ASDF has
of itself having no dependencies,
because these dependencies would both make bootstrap more difficult
and interfere with other versions of same software
as part of the software being built.
XCVB thus reuses plenty of libraries and is richer in features,
and will use even more libraries in the future.
All this in addition to its original essential distinguishing feature
of providing deterministic incremental compilation.
&lt;/p&gt;&lt;p&gt;
XCVB isn't complete yet, but I believe that on supported implementations
(currently only SBCL, CCL, CLISP, but I could add more on demand,
or you could do it yourself), it is already better than ASDF.
If you care for CL build systems, please fix ASDF;
but please give XCVB a try, too.
&lt;/p&gt;&lt;p&gt;
Even if you don't care for CL build systems,
organize your software developments so that
every upgrade step can be done by the single maintainer of a single project,
without requiring the coordination
between many people in many different projects.
&lt;/p&gt;&lt;p&gt;
This lesson should be particularly dear to those who dream of
making a Standard for Lisp, Scheme, Javascript, Java
or any other language or piece of software:
if you need to agree on something that will require
future coordination between plenty of people,
it is almost sure to fail to evolve fast enough to remain relevant,
even though one or two iterations might make it live
(see e.g. R6RS and its current attempted successor).
Instead, you should offer software that already runs
with a free software reference implementation that
others can trivially adapt to their systems if needed
(also in Scheme, compare the SRFI process).
After your code has become de facto standard, you might not even care
for it being any kind of de jure standard anymore.
Whereas if there's going to be a de jure standard,
it will be blood and conflict as long as there's anything to disagree about,
and still resentment at the unsatisfying compromise that results.
&lt;/p&gt;&lt;p&gt;
The same idea also accounts for
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Conway%27s_Law&quot;&gt;Conway's Law&lt;/a&gt;:
if you divide your software project between many teams,
each team will build its own code base,
and the structure of the software will end up following
the structure of the teams that build it.
Parts of the software where the ownership is not clearly assigned
but where authority is divided will be the scene for
conflict, slow evolution, bad design (if design at all), etc.
Vertical disintegration, where independent teams
manage layers of the software and its life-cycle,
will in particular lead to a multiplication of such dysfunctional interfaces
between entrenched overlapping code bases
the global architecture of which cannot be refactored.
&lt;/p&gt;&lt;p&gt;
Happily, solving the problem of irresponsible software
is much easier than solving the problem of
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://unqualified-reservations.blogspot.com/2009/01/gentle-introduction-to-unqualified_29.html&quot;&gt;irresponsible government&lt;/a&gt;.
&lt;/p&gt;</description>
         <guid isPermaLink="false">http://fare.livejournal.com/149264.html</guid>
         <pubDate>Fri, 20 Nov 2009 06:05:02 -0800</pubDate>
      </item>
      <item>
         <title>Vladimir Sedach: November Montreal Scheme/Lisp User Group presentation</title>
         <link>http://carcaddar.blogspot.com/2009/11/november-montreal-schemelisp-user-group.html</link>
         <description>On November 17, I gave a presentation to the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://schemeway.dyndns.org/mslug/mslug-home&quot;&gt;Montreal Scheme/Lisp User Group&lt;/a&gt; about &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://vsedach.googlepages.com/lisp_high_perf_servers.pdf&quot;&gt;developing high-performance network servers in Lisp&lt;/a&gt;. I looked at the lessons to be learned from existing Common Lisp web servers, notably &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://hoytech.com/antiweb/&quot;&gt;Antiweb&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://common-lisp.net/project/teepeedee2/&quot;&gt;TPD2&lt;/a&gt;, tried out some of the ideas in my own new under-development web server &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://github.com/vsedach/HTTP-DOHC&quot;&gt;HTTP DOHC&lt;/a&gt; along with some new ideas about threading and concurrency, and put the results of my findings into the presentation.&lt;br /&gt;&lt;br /&gt;If you're interested in the topic, you should also watch &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.youtube.com/watch?v=uUymzUdWBuo&quot;&gt;John Fremlin's TPD2 presentation to the Shibuya Lisp user's group&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I plan on making &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://github.com/vsedach/HTTP-DOHC&quot;&gt;HTTP DOHC&lt;/a&gt; a full-featured Common Lisp web server with an interface that's somewhat compatible with &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weitz.de/hunchentoot/&quot;&gt;Hunchentoot&lt;/a&gt; 1.0.&lt;br /&gt;&lt;br /&gt;In other news, I now have time available for contract work. Get in touch at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;mailto:vsedach@gmail.com&quot;&gt;vsedach@gmail.com&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5728814948530385321-1882612070763049940?l=carcaddar.blogspot.com&quot; alt=&quot;&quot;/&gt;&lt;/div&gt;</description>
         <guid isPermaLink="false">http://carcaddar.blogspot.com/2009/11/november-montreal-schemelisp-user-group.html</guid>
         <pubDate>Thu, 19 Nov 2009 13:36:00 -0800</pubDate>
      </item>
      <item>
         <title>Patrick Stein: Playing with Sheeple-based GUI atop CL-OpenGL</title>
         <link>http://nklein.com/2009/11/playing-with-sheeple-based-gui-atop-cl-opengl/</link>
         <description>&lt;p&gt;Inspired by the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://tclispers.org/news/sheeple-presentation&quot;&gt;previous TC Lispers meeting&lt;/a&gt; and spurred on by the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://tclispers.org/should-we-discuss-question-cl-and-uis-november-meeting&quot;&gt;probable topic of the next TC Lispers meeting&lt;/a&gt;, I have spent the little bit of coding time I&amp;#8217;ve had over the past two weeks on making a GUI layer using &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sykosomatic.org/sheeple/&quot;&gt;Sheeple&lt;/a&gt; atop &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://common-lisp.net/project/cl-opengl/&quot;&gt;CL-OpenGL&lt;/a&gt; and employing &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.xach.com/lisp/zpb-ttf/&quot;&gt;ZPB-TTF&lt;/a&gt; for font-loading.&lt;/p&gt;
&lt;p&gt;I have dubbed this project &lt;q&gt;Woolly&lt;/q&gt; (because it&amp;#8217;s made from Sheeple and because &lt;q&gt;Woolly&lt;/q&gt; sounds sorta like &lt;q&gt;GUI&lt;/q&gt;).&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://nklein.com/wp-content/uploads/2009/11/woolly-peek.png&quot;&gt;&lt;img src=&quot;http://nklein.com/wp-content/uploads/2009/11/woolly-peek-300x235.png&quot; alt=&quot;woolly-peek&quot; title=&quot;woolly-peek&quot; width=&quot;300&quot; height=&quot;235&quot; class=&quot;alignright size-medium wp-image-1008&quot;/&gt;&lt;/a&gt;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.&lt;/p&gt;
&lt;p&gt;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&amp;#8217;re ever stuck rendering fonts in OpenGL, you won&amp;#8217;t be stuck with pixelated blockiness or resorting to rendering to a texture-map and letting the mipmapper figure it out.&lt;/p&gt;
&lt;p&gt;For this post, however, I&amp;#8217;ll just show you the code that sets up the interface depicted here.&lt;/p&gt;
&lt;div class=&quot;codecolorer-container lisp blackboard&quot;&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div class=&quot;lisp codecolorer&quot;&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;require &lt;span&gt;:&lt;/span&gt;&lt;span&gt;asdf&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;#40;&lt;/span&gt;asdf&lt;span&gt;:&lt;/span&gt;&lt;span&gt;operate&lt;/span&gt; 'asdf&lt;span&gt;:&lt;/span&gt;&lt;span&gt;load-op&lt;/span&gt; 'woolly-gl &lt;span&gt;:&lt;/span&gt;&lt;span&gt;verbose&lt;/span&gt; &lt;span&gt;nil&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span&gt;;; make it easier to change renderer/controller later&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;#40;&lt;/span&gt;rename-package 'woolly-gl 'toolkit&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt; test &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;let&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;font &lt;span&gt;&amp;#40;&lt;/span&gt;sheeple&lt;span&gt;:&lt;/span&gt;&lt;span&gt;object&lt;/span&gt; &lt;span&gt;:&lt;/span&gt;&lt;span&gt;parents&lt;/span&gt; toolkit&lt;span&gt;:=&lt;/span&gt;font&lt;span&gt;=&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;:&lt;/span&gt;&lt;span&gt;em-size&lt;/span&gt; &lt;span&gt;48&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;:&lt;/span&gt;&lt;span&gt;pathname&lt;/span&gt; &lt;span&gt;&quot;okolaks/okolaksRegular.ttf&quot;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;let&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;app &lt;span&gt;&amp;#40;&lt;/span&gt;sheeple&lt;span&gt;:&lt;/span&gt;&lt;span&gt;object&lt;/span&gt; &lt;span&gt;:&lt;/span&gt;&lt;span&gt;parents&lt;/span&gt; toolkit&lt;span&gt;:=&lt;/span&gt;app&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;#40;&lt;/span&gt;win &lt;span&gt;&amp;#40;&lt;/span&gt;sheeple&lt;span&gt;:&lt;/span&gt;&lt;span&gt;object&lt;/span&gt; &lt;span&gt;:&lt;/span&gt;&lt;span&gt;parents&lt;/span&gt; toolkit&lt;span&gt;:=&lt;/span&gt;window&lt;span&gt;=&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;title&lt;/span&gt; &lt;span&gt;&quot;Woolly Window 1&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;width&lt;/span&gt; &lt;span&gt;640&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;height&lt;/span&gt; &lt;span&gt;480&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;#40;&lt;/span&gt;but &lt;span&gt;&amp;#40;&lt;/span&gt;sheeple&lt;span&gt;:&lt;/span&gt;&lt;span&gt;object&lt;/span&gt; &lt;span&gt;:&lt;/span&gt;&lt;span&gt;parents&lt;/span&gt; toolkit&lt;span&gt;:=&lt;/span&gt;button&lt;span&gt;=&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;offset-x&lt;/span&gt; &lt;span&gt;40&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;offset-y&lt;/span&gt; &lt;span&gt;40&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;width&lt;/span&gt; &lt;span&gt;300&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;height&lt;/span&gt; &lt;span&gt;100&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;font&lt;/span&gt; font&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;label&lt;/span&gt; &lt;span&gt;&quot;Button&quot;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;#40;&lt;/span&gt;woolly&lt;span&gt;:&lt;/span&gt;&lt;span&gt;display-window&lt;/span&gt; win&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;#40;&lt;/span&gt;woolly&lt;span&gt;:&lt;/span&gt;&lt;span&gt;add&lt;/span&gt; win but&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;#40;&lt;/span&gt;woolly&lt;span&gt;:&lt;/span&gt;&lt;span&gt;main-loop&lt;/span&gt; app&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&amp;#40;&lt;/span&gt;woolly&lt;span&gt;:&lt;/span&gt;&lt;span&gt;destroy-window&lt;/span&gt; win&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Next up on my agenda is to make the background and button prettier. It should be easy enough to do with &lt;b&gt;GL_LIGHTING&lt;/b&gt; and some vertex-coloring for gradations. After that, it&amp;#8217;s on to more controls like labels, panels, checkboxes, drop-downs, borders, and (my dread) text input boxes. Then, it&amp;#8217;s on to a layout manager.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://nklein.com/wp-content/uploads/2009/11/woolly-peek1.png&quot;&gt;&lt;img src=&quot;http://nklein.com/wp-content/uploads/2009/11/woolly-peek1-150x117.png&quot; alt=&quot;woolly-peek&quot; title=&quot;woolly-peek&quot; width=&quot;150&quot; height=&quot;117&quot; class=&quot;alignright size-thumbnail wp-image-1013&quot;/&gt;&lt;/a&gt;Edit: Here&amp;#8217;s the same GUI a day later. I&amp;#8217;m using a simple lighting scheme and rendering the button in 3D. I haven&amp;#8217;t yet hooked in the bit to render it depressed when the button is pressed. I&amp;#8217;ve tested the code that draws it the other way, but I haven&amp;#8217;t hooked it into the mouse handlers yet.&lt;/p&gt;
&lt;p&gt;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&amp;#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&amp;#8230; it looks pretty spiffy.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://nklein.com/2009/11/playing-with-sheeple-based-gui-atop-cl-opengl/</guid>
         <pubDate>Thu, 19 Nov 2009 08:59:55 -0800</pubDate>
      </item>
      <item>
         <title>Christophe Rhodes: 19 Nov 2009</title>
         <link>http://www.advogato.org/person/crhodes/diary.html?start=136</link>
         <description>A while ago now, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://random-state.net/&quot;&gt;Nikodemus Siivola&lt;/a&gt; moved
bug information for &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.sbcl.org/&quot;&gt;SBCL&lt;/a&gt;
from a flat text file to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://bugs.launchpad.net/sbcl&quot;&gt;Launchpad&lt;/a&gt;. Historically I have had almost nothing but displeasure
working with the &quot;standard&quot; or &quot;industrial&quot; bug trackers; I
have found &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.bugzilla.org&quot;&gt;Bugzilla&lt;/a&gt;
horrible to work with, both as a bug reporter and as an
administrator; lighter-weight solutions such as &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://trac.edgewall.org/&quot;&gt;Trac&lt;/a&gt; are just about
tolerable, but basically anything that &lt;em&gt;requires&lt;/em&gt; me
to have a Web Browser seems to end up confusing and
distracting me. An honourable mention at this point goes to
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://packages.qa.debian.org/d/debbugs.html&quot;&gt;debbugs&lt;/a&gt;:
being able to report, manipulate, update and close bugs by
e-mail is close to my idea of Nirvana. &lt;p&gt; So, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://launchpad.net/&quot;&gt;Launchpad&lt;/a&gt;. Initially, I was dismayed, because there doesn't seem to be
a way of getting notifications of bug updates over RSS,
which would be a second-best to getting updates by e-mail. I managed to ignore all SBCL bug reports for a while, but eventually I bit the bullet and signed up (having
refused to do so a good long while ago, when shortly after I
used &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt;'s bugzilla
to report a bug they closed the bugzilla in favour of
launchpad without managing to transfer accounts across.) &lt;p&gt; A large motivation for signing up was the discovery that
launchpad does, in fact, have an &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://help.launchpad.net/Bugs/EmailInterface&quot;&gt;email
interface&lt;/a&gt; to the bug tracker; as long as you can emit
GPG-signed mail (which I can), it seems to have all the
required functionality for doing things without needing to
go near a web browser; I can now receive bug reports and
reply to them, and in at least some cases the
&lt;tt&gt;References:&lt;/tt&gt; headers in the mail I receive allows &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://gnus.org/&quot;&gt;my client&lt;/a&gt; to thread the
discussion properly (I haven't really stress-tested this
yet, but it works at least well enough for now.) &lt;p&gt; If that were all, this would not be news (and not even
worthy of a blog post). But now I get to demonstrate my
Emacs lisp &amp;ldquo;scripting&amp;rdquo; ability, in much the same
way as &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.coruskate.net/&quot;&gt;Dan Barlow&lt;/a&gt;
did for me &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://web.archive.org/web/20030608101412/http://ww.telent.net/diary/2003/1/#14.28515&quot;&gt;many
years ago&lt;/a&gt;: SBCL has a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://lists.sourceforge.net/lists/listinfo/sbcl-bugs&quot;&gt;mailing
list for reporting bugs&lt;/a&gt;, for people who are unsure as to
whether their problem is a bug or not, or for people who
don't want to go to the trouble to get a launchpad account
just to report a bug. When such a report does describe a
new bug that we should be tracking, that report needs to
make its way to launchpad. &lt;p&gt; Without too much further ado, I present
&lt;tt&gt;sbcl-bugs-mail-forward&lt;/tt&gt;, which constructs a message
(almost) ready to be sent: &lt;p&gt; &lt;pre&gt;
(defun sbcl-bugs-mail-forward () (interactive) (let ((message-forward-ignored-headers &quot;&quot;) from subject) (gnus-summary-mail-forward 4) (message-goto-to) (insert &quot;new@bugs.launchpad.net&quot;) (message-goto-subject) (message-beginning-of-line) (re-search-forward &quot;&amp;#92;&amp;#92;[&amp;#92;&amp;#92;(.*&amp;#92;&amp;#92;)&amp;#92;&amp;#92;].*&amp;#92;&amp;#92;[&amp;#92;&amp;#92;(.*&amp;#92;&amp;#92;)&amp;#92;&amp;#92;] &amp;#92;&amp;#92;(.*&amp;#92;&amp;#92;)$&quot;) (setq from (match-string 1) subject (match-string 3)) (message-beginning-of-line) (let ((kill-whole-line nil)) (kill-line)) (insert subject) (message-goto-body) (insert &quot;Report from &quot; from &quot;&amp;#92;n&amp;#92;n&quot;) (insert &quot; affects sbcl&amp;#92;n status confirmed&amp;#92;n importance &quot;) (save-excursion (insert &quot;&amp;#92;n tag &amp;#92;n done&amp;#92;n&amp;#92;n&quot;) (message-goto-body) (re-search-forward &quot;^&amp;#92;&amp;#92;(-&amp;#92;&amp;#92;)+ Start of forwarded message &amp;#92;&amp;#92;(-&amp;#92;&amp;#92;)+$&quot;) (beginning-of-line) (let ((kill-whole-line t)) (kill-line)) (re-search-forward &quot;^&amp;#92;&amp;#92;(-&amp;#92;&amp;#92;)+$&quot;) (beginning-of-line) (end-of-buffer) (kill-region (mark) (point))) (mml-secure-message-sign-pgpmime)))
&lt;/pre&gt; &lt;p&gt; You can tell it's scripting, really: it's an odd mixture of
plausible and dubious ways of getting things done: regular
expressions to extract the original sender of the report,
and to remove the forwarded message information (and the
dull advert inserted in the footer by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sourceforge.net/&quot;&gt;SourceForge&lt;/a&gt;'s mailing
list system). On the other hand, that function, coupled
with something along the lines of &lt;p&gt; &lt;pre&gt;
(setq gnus-parameters '((&quot;nnml&amp;#92;&amp;#92;+private:list.sbcl-bugs&quot; (gnus-summary-prepared-hook '(lambda () (local-set-key (kbd &quot;C-c C-f&quot;) 'sbcl-bugs-mail-forward) (local-set-key (kbd &quot;S o m&quot;) 'sbcl-bugs-mail-forward))))))
&lt;/pre&gt; &lt;p&gt; gives me exactly what I think I want: a simple way of
creating, tagging and classifying an entry in the bug
tracker from a mail report. &lt;p&gt; I couldn't find any convenient emacs/launchpad interfaces
(or any at all, in fact); I'm not sure this counts as one
either, but by all means use, adapt and improve on the above
for your purposes &amp;ndash; I'll happily take criticism of and
improvements to this hack.</description>
         <guid isPermaLink="false">http://www.advogato.org/person/crhodes/diary.html?start=136</guid>
         <pubDate>Thu, 19 Nov 2009 05:24:17 -0800</pubDate>
      </item>
      <item>
         <title>Vladimir Sedach: Templates and code generation</title>
         <link>http://carcaddar.blogspot.com/2009/11/templates-and-code-generation.html</link>
         <description>Earlier this month Google released &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://code.google.com/closure/templates/&quot;&gt;Closure Templates&lt;/a&gt;, a new templating library intended for generating HTML. Who cares? I personally dislike HTML templating, and avoid it whenever possible in lieu of s-expression based generation tools like &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weitz.de/cl-who/&quot;&gt;CL-WHO&lt;/a&gt;. At first look, Closure Templates didn't seem to be anything new or useful.&lt;br /&gt;&lt;br /&gt;The one thing that makes Closure Templates somewhat interesting is that the library works in both Java and JavaScript, so you get client and server-side templates in one place. I did a similar thing with &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://common-lisp.net/project/uri-template/&quot;&gt;uri-template&lt;/a&gt; by having the URI template expand into code that executed in both Common Lisp and JavaScript via &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://common-lisp.net/project/parenscript/&quot;&gt;Parenscript&lt;/a&gt; (here I have to state that despite being an author of a templating library, I still dislike templating libraries and even find my own creation annoying at times).&lt;br /&gt;&lt;br /&gt;About a week after Closure Templates was released, Andrey Moskvitin (&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://archimag-dev.blogspot.com/&quot;&gt;archimag&lt;/a&gt;) wrote an implementation in Common Lisp (interesting note: it took him &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://translate.google.com/translate?js=n&amp;prev=_t&amp;hl=en&amp;ie=UTF-8&amp;u=http%3A%2F%2Farchimag-dev.blogspot.com%2F2009%2F11%2Fclosure-template-5.html&amp;sl=ru&amp;tl=en&amp;swap=1&amp;swap=1&quot;&gt;only five days and 1/15 the number of lines of code&lt;/a&gt; as the original). The resulting system, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://code.google.com/p/cl-closure-template/&quot;&gt;cl-closure-template&lt;/a&gt;, similarly generates JavaScript via Parenscript.&lt;br /&gt;&lt;br /&gt;I still didn't understand the motivation. Yesterday, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://translate.google.com/translate?js=y&amp;prev=_t&amp;hl=en&amp;ie=UTF-8&amp;u=http%3A%2F%2Farchimag-dev.blogspot.com%2F2009%2F11%2Fclosure-templates.html&amp;sl=ru&amp;tl=en&quot;&gt;Andrey was kind enough to explain it&lt;/a&gt;. Those pampered by web development in Common Lisp using s-expression HTML generation tools simply don't encounter the problem of trying to fit HTML templating onto the paradigm of incremental page updating via AJAX. So if you want to build an AJAX web application and use HTML templating, give &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://code.google.com/p/cl-closure-template/&quot;&gt;cl-closure-template&lt;/a&gt; a try.&lt;br /&gt;&lt;br /&gt;[Blog metanote: if you're reading this blog through its feed, you will shortly see this post show up in Russian. &lt;i&gt;a CONS is an object which cares&lt;/i&gt; is now syndicated on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lisper.ru/planet/&quot;&gt;Russian Lisp Planet&lt;/a&gt;, and I'm going to be writing Lisp-related posts in Russian as well as English. All such posts will be tagged 'lisp-ru'. Filter out that tag if you don't want the Russian version of the posts to show up in your feed reader.]&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5728814948530385321-1287513206168526102?l=carcaddar.blogspot.com&quot; alt=&quot;&quot;/&gt;&lt;/div&gt;</description>
         <guid isPermaLink="false">http://carcaddar.blogspot.com/2009/11/templates-and-code-generation.html</guid>
         <pubDate>Wed, 18 Nov 2009 14:12:00 -0800</pubDate>
      </item>
      <item>
         <title>Christophe Rhodes: 18 Nov 2009</title>
         <link>http://www.advogato.org/person/crhodes/diary.html?start=135</link>
         <description>As mentioned earlier: the 2010 European Lisp Symposium
invites your contributions. Unfortunately, the website for
the 2010 event is not set up yet; you can get an impression
of what the event is like by looking at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.european-lisp-symposium.org/&quot;&gt;last year's
website&lt;/a&gt;, which in the fullness of time (soon, I hope)
will be updated with ELS2010 information. In the meantime,
here's the Call for Contributions: we would welcome both
papers describing original work, not published elsewhere,
and submissions for tutorial sessions. Submission will be
through &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.easychair.org/conferences/?conf=els2010&quot;&gt;EasyChair's
conference management system&lt;/a&gt;. &lt;p&gt; &lt;div&gt;
&lt;big&gt;&lt;b&gt;3rd European Lisp Symposium&lt;/b&gt;&lt;/big&gt; &lt;p&gt; &lt;p&gt;May 6-7, 2010, Funda&amp;ccedil;&amp;atilde;o Calouste Gulbenkian, Lisbon, Portugal &lt;div&gt;
&lt;b&gt;Important Dates&lt;/b&gt;
&lt;div&gt; &lt;p&gt; &lt;ul&gt;
&lt;li&gt;
Submission Deadline: &lt;b&gt;January 29, 2010&lt;/b&gt; &lt;li&gt;
Author Notification: March 1, 2010 &lt;li&gt;
Final Paper Due: March 26, 2010 &lt;li&gt;
Symposium: &lt;b&gt;May 6-7, 2010&lt;/b&gt; &lt;p&gt; &lt;/ul&gt; &lt;p&gt; &lt;p&gt;Authors of accepted research contributions will be
invited to submit
an extended version of their papers to a special issue of the
Journal of Universal Computer Science (J.UCS).
&lt;/div&gt; &lt;p&gt; &lt;/div&gt; &lt;p&gt; &lt;div&gt;
&lt;b&gt;Scope&lt;/b&gt;
&lt;div&gt; &lt;p&gt; &lt;p&gt;The purpose of the European Lisp Symposium is to provide
a forum
for the discussion and dissemination of all aspects of design,
implementation and application of any of the Lisp dialects. We
encourage everyone interested in Lisp to participate. &lt;p&gt;
The European Lisp Symposium 2010 invites high quality papers
about
novel research results, insights and lessons learned from
practical
applications, and educational perspectives, all involving Lisp
dialects, including Common Lisp, Scheme, Emacs Lisp, AutoLisp,
ISLISP, Dylan, Clojure, and so on. &lt;p&gt;
Topics include, but are not limited to:
&lt;ul&gt;
&lt;li&gt;
Language design and implementation &lt;li&gt;
Language integration, interoperation and deployment &lt;li&gt;
Development methodologies, support and environments &lt;li&gt;
Reflection, protocols and meta-level architectures &lt;li&gt;
Lisp in Education &lt;li&gt;
Parallel, distributed and scientific computing &lt;li&gt;
Large and ultra-large-scale systems &lt;li&gt;
Hardware, virtual machine and embedded applications &lt;li&gt;
Domain-oriented programming &lt;li&gt;
Lisp pearls &lt;li&gt;
Experience reports and case studies &lt;p&gt; &lt;/ul&gt; &lt;p&gt; &lt;p&gt;We invite submissions in two categories: original
contributions and
tutorials. &lt;ul&gt;
&lt;li&gt;
Original contributions should neither have been published
previously nor be under review in any other refereed events or
publication. Research papers should describe work that advances
the current state of the art, or presents old results from a new
perspective. Experience papers should be of broad interest and
should describe insights gained from substantive practical
applications. The programme committee will evaluate each
contributed paper based on its relevance, significance, clarity,
and originality. &lt;p&gt; &lt;li&gt;
Tutorial submissions should be extended abstracts of up to four
pages for in-depth presentations about topics of special
interest
for at least 90 minutes and up to 180 minutes. The programme
committee will evaluate tutorial proposals based on the likely
interest in the topic matter, the clarity of the presentation in
the extended abstract, and the scope for interactive
participation. &lt;p&gt; &lt;/ul&gt; &lt;p&gt; &lt;p&gt;The tutorials will run during the symposium on May 6, 2010.
&lt;/div&gt; &lt;p&gt; &lt;/div&gt; &lt;p&gt; &lt;div&gt;
&lt;b&gt;Programme Chair&lt;/b&gt;
&lt;div&gt; &lt;p&gt; &lt;p&gt;Christophe Rhodes, Goldsmiths, University of London, UK
&lt;/div&gt; &lt;p&gt; &lt;/div&gt; &lt;p&gt; &lt;div&gt;
&lt;b&gt;Local Chair&lt;/b&gt;
&lt;div&gt; &lt;p&gt; &lt;p&gt;Ant&amp;oacute;nio Leit&amp;atilde;o, Technical University of Lisbon, Portugal
&lt;/div&gt; &lt;p&gt; &lt;/div&gt; &lt;p&gt; &lt;div&gt;
&lt;b&gt;Programme Committee&lt;/b&gt;
&lt;div&gt; &lt;p&gt; &lt;ul&gt;
&lt;li&gt;
Marco Antoniotti, Universit&amp;agrave; Milano Bicocca, Italy &lt;li&gt;
Giuseppe Attardi, Universit&amp;agrave; di Pisa, Italy &lt;li&gt;
Pascal Costanza, Vrije Universiteit Brussel, Belgium &lt;li&gt;
Ir&amp;egrave;ne Anne Durand, Universit&amp;eacute; Bordeaux I, France &lt;li&gt;
Marc Feeley, Universit&amp;eacute; de Montr&amp;eacute;al, Canada &lt;li&gt;
Ron Garret, Amalgamated Widgets Unlimited, USA &lt;li&gt;
Gregor Kiczales, University of British Columbia, Canada &lt;li&gt;
Nick Levine, Ravenbrook Ltd, UK &lt;li&gt;
Scott McKay, ITA Software, Inc., USA &lt;li&gt;
Peter Norvig, Google Inc., USA &lt;li&gt;
Kent Pitman, PTC, USA &lt;li&gt;
Christian Queinnec, Universit&amp;eacute; Pierre et Marie Curie, France &lt;li&gt;
Robert Strandh, Universit&amp;eacute; Bordeaux I, France &lt;li&gt;
Didier Verna, EPITA Research and Development Laboratory, France &lt;li&gt;
Barry Wilkes, Citi, UK &lt;li&gt;
Taiichi Yuasa, Kyoto University, Japan &lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
         <guid isPermaLink="false">http://www.advogato.org/person/crhodes/diary.html?start=135</guid>
         <pubDate>Wed, 18 Nov 2009 04:02:50 -0800</pubDate>
      </item>
      <item>
         <title>Andreas Fuchs: Hunchentoot gets a debugging-acceptor</title>
         <link>http://boinkor.net/archives/2009/11/hunchentoot-gets-a-debugging-a.html</link>
         <description>&lt;p&gt;Today, I submitted a patch (the first free software lisp one in months for me!) to the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://weitz.de/hunchentoot/&quot;&gt;Hunchentoot&lt;/a&gt; project, and it got accepted. Yay!&lt;/p&gt; &lt;p&gt;Some backstory: Hunchentoot&amp;#8217;s 1.0.0 release dropped a lot of implementation-dependent features, among them functionality to invoke the debugger if an error happens while handling a request. While &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://paste.lisp.org/display/81046&quot;&gt;workarounds&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lispworks.com/documentation/HyperSpec/Body/v_break_.htm&quot;&gt;exist&lt;/a&gt;, none of them were obvious to new users or users who recently upgraded.&lt;/p&gt; &lt;p&gt;The patch I sent should fix this, hopefully. It adds a rudimentary error handling protocol to Hunchentoot, and provides two generic functions whose behavior can be adapted to your error handling needs. You can see for yourself in Hunchentoot&amp;#8217;s &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bknr.net/trac/browser/trunk/thirdparty/hunchentoot&quot;&gt;svn repository&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;If you&amp;#8217;re a Hunchentoot user, I urge you to test this (in both development mode using debuggable-acceptor and running with the default settings). The sooner you find bugs, the sooner they can be fixed, the sooner a release can be pushed out. And if you don&amp;#8217;t find bugs at all, that&amp;#8217;s cool, too (-:&lt;/p&gt;</description>
         <guid isPermaLink="false">http://boinkor.net/archives/2009/11/hunchentoot-gets-a-debugging-a.html</guid>
         <pubDate>Sun, 15 Nov 2009 13:11:36 -0800</pubDate>
      </item>
      <item>
         <title>Back from vacation</title>
         <link>http://bc.tech.coop/blog/090925.html</link>
         <description>I just got back from a 2-week vacation, so I've been busy catching up on things.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Sun, 27 Sep 2009 22:28:02 -0700</pubDate>
      </item>
      <item>
         <title>Xcode Requirement for iPhone OS 3.0.1</title>
         <link>http://bc.tech.coop/blog/090731.html</link>
         <description>I've just updated my iPhone OS to 3.0.1 (it's a security upgrade to fix the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.forbes.com/2009/07/28/hackers-iphone-apple-technology-security-hackers.html&quot;&gt; iPhone SMS vulnerability that was recently announced&lt;/a&gt;) and found that I could no longer build/install development apps on my iPhone. A bit of searching uncovered this Apple advisory:&lt;br /&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://adcdownload.apple.com/iphone/iphone_sdk_3.0__final/iphone_os_3.0.1_advisory.pdf&quot;&gt; http://adcdownload.apple.com/iphone/iphone_sdk_3.0__final/iphone_os_3.0.1_advisory.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; So, if you plan to install iPhone OS 3.0.1 on an iPhone that you use for iPhone app development, you'll need to follow the instructions in the advisory. Note that the terminal command that is described in the advisory is one long line, not 2 lines.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Fri, 31 Jul 2009 14:20:15 -0700</pubDate>
      </item>
      <item>
         <title>HebrewBible App Store Rankings</title>
         <link>http://bc.tech.coop/blog/090721.html</link>
         <description>I use a variety of different tools to measure how my &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sites.google.com/site/hebrewsoftware/&quot;&gt; HebrewBible iPhone App&lt;/a&gt; is doing. With the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bc.tech.coop/blog/090717.html&quot;&gt; latest 2.0 version&lt;/a&gt; of the app, it has now moved into the top 100 of the &quot;Reference&quot; app category in both the USA and France (the top markets for the app). The following &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://majicjungle.com/majicrank.html&quot;&gt; MajicRank&lt;/a&gt; graph illustrates the current rankings:&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;http://bc.tech.coop/blog/images/majicrank.jpg&quot; alt=&quot;MajicRank rating&quot;/&gt;&lt;br /&gt;&lt;br /&gt; Woohoo!&lt;br /&gt;&lt;br /&gt; &lt;b&gt;Update-2009-07-28:&lt;/b&gt; After 1 week, the app's performance in both the USA and France has improved even more and I've broken into the top 100 for another &quot;Big Eight&quot; country - Canada!:&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;http://bc.tech.coop/blog/images/majicrank1.jpg&quot; alt=&quot;MajicRank rating&quot;/&gt;&lt;br /&gt;&lt;br /&gt; Woohoo, Woohoo!</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Tue, 28 Jul 2009 12:39:03 -0700</pubDate>
      </item>
      <item>
         <title>New Version of Hebrew Bible iPhone App Available</title>
         <link>http://bc.tech.coop/blog/090717.html</link>
         <description>Today, Apple approved Version 2.0 of my &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sites.google.com/site/hebrewsoftware/&quot;&gt; Hebrew Bible iPhone application&lt;/a&gt;. In addition to providing 8 different versions of the Hebrew Bible (which can either be read online with no content stored on the iPhone or cached locally for off-network reading) and Hebrew word lookup/lexicon, this version includes links to over 200 Wikipedia articles and provides Google Maps of over 1,000 locations.&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;http://sites.google.com/site/hebrewsoftware/_/rsrc/1247861497558/images/bible1.png&quot; alt=&quot;Hebrew/English version&quot;/&gt;&amp;nbsp;&amp;nbsp;&lt;img src=&quot;http://sites.google.com/site/hebrewsoftware/_/rsrc/1247861497558/images/topic1.png&quot; alt=&quot;Hebrew/English version&quot;/&gt;&amp;nbsp;&amp;nbsp;&lt;img src=&quot;http://sites.google.com/site/hebrewsoftware/_/rsrc/1247861497558/images/map2.png&quot; alt=&quot;Hebrew/English version&quot;/&gt;&lt;br /&gt;&lt;br /&gt; Apple made me change the rating of the app to &quot;17+&quot; to indicate that there are &quot;Frequent/Intense&quot; types of &quot;Mature/Suggestive Themes&quot;. Their reasoning for this was:&lt;blockquote&gt; &quot;Our review indicates that the application content is not consistent with the current rating. HebrewBible allows unfiltered access to wikipedia.org, where content with mature or suggestive themes can be accessed.&quot;&lt;/blockquote&gt; Come on guys, you've got to be kidding - give me a break! Hmm, a rating of &quot;17+&quot; seems to boost sales of certain movies - maybe I can expect a sudden spike in downloads now! ;-)</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Sat, 18 Jul 2009 18:47:07 -0700</pubDate>
      </item>
      <item>
         <title>Good thing I got my iPhone 3GS last week</title>
         <link>http://bc.tech.coop/blog/090629.html</link>
         <description>It looks like Rogers is all sold out of all models of the iPhone 3GS throughout Canada. Good thing I got mine last week - I've been really pleased by how much better the user experience is with the 3GS over my old iPhone 3G. The features I find most compelling are:&lt;ul&gt; &lt;li&gt;Speed: The increase in processor speed (600MHz CPU as opposed to the 412MHz iPhone 3G) and RAM (256 MB vs 128MB on the iPhone 3G) make a HUGE difference. &lt;/li&gt; &lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://gizmodo.com/5302097/giz-bill-nye-explains-the-iphone-3gss-oleophobic-screen&quot;&gt; Oleophobic Screen&lt;/a&gt;: The yucky fingerprint-covered screen of the iPhone 3G is now a thing of the past. The new iPhone's screen coating is the secret and it makes a big difference in the visual appeal of the display.&lt;/li&gt; &lt;li&gt;Video and Camera: The video camera was a nice additon; however, the camera has improved significantly as well. The camera is now 3 megapixels (vs 2 megapixels in the 3G) and both video and camera have geotagging, autofocus, and tap-to-focus functionality. I rarely used the camera on the 3G because of the poor picture quality but I can see myself using the 3GS camera a lot. &lt;/li&gt; &lt;li&gt;Magnetometer: This is most visible in the new Compass app that comes with the 3GS. However, the more useful application of the direction-awareness provided by the magnetometer is in the Maps app. If you press the &quot;location&quot; icon in the bottom-left of the Maps app, it displays your current location (as it did with the iPhone 3G). However, if you press it a second time, the map reorients itself to the direction you're facing and the blue location dot displays a &quot;flashlight&quot; to illustrate the direction you're heading. Very useful when you're in an unfamiliar neighborhood!&lt;/li&gt; &lt;/ul&gt; &lt;img src=&quot;http://bc.tech.coop/blog/images/rogers3gs.jpg&quot; alt=&quot;Rogers iPhone 3GS&quot;/&gt;</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Mon, 29 Jun 2009 16:00:25 -0700</pubDate>
      </item>
      <item>
         <title>New iPhone + New Apple Developer Provisioning Profile</title>
         <link>http://bc.tech.coop/blog/090621.html</link>
         <description>Yesterday, I took some time off from the nice weather and gardening tasks to go out and get a new iPhone 3GS. First off, let me say that the speed difference is really great! I've only played around with a few of the new features (such as the video camera and compass), but the speed increase is a huge plus. Today, I got around to creating a new developer profile for my new iPhone 3GS. My old iPhone was having some problems a few months ago and Apple replaced it, so I remembered the hassles I had then setting up a new provisioning profile for the replacement device (this seems to be a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.google.com/search?client=safari&amp;rls=en-us&amp;q=apple+provisioning+profile&amp;ie=UTF-8&amp;oe=UTF-8&quot;&gt; common iPhone developer complaint&lt;/a&gt;). I had similar problems this time with the 3GS, so I've decided to note down all the things that I did to get it setup properly. Hopefully, this will help someone else (or, at least, it might remind me of the necessary steps the next time I have to do it!). Not all these steps may be necessary (and it's probably a lot easier if you're just adding a device to an existing profile rather than replacing a provisioning profile); however, I wanted to make sure I knew all the steps this time and it's what worked for me!&lt;br /&gt;&lt;br /&gt; When you upgrade to a new device, you need to do the following:&lt;br /&gt;&lt;br /&gt; In Apple's iPhone Developer Program Program Portal:&lt;ol&gt; &lt;li&gt;Create a new provisioning profile for the device&lt;/li&gt; &lt;li&gt;Set up a new device profile&lt;/li&gt; &lt;li&gt;Download the new provisioning profile to the Desktop&lt;/li&gt; &lt;/ol&gt; On the Mac:&lt;ol&gt; &lt;li&gt;Delete the old provisioning profile from ~/Library/MobileDevice/Provisioning Profiles/&lt;/li&gt; &lt;li&gt;Drag the new provisioning profile from the Desktop into ~/Library/MobileDevice/Provisioning Profiles/&lt;/li&gt; &lt;/ol&gt; In the Organizer window in Xcode:&lt;ol&gt; &lt;li&gt;Click on the device (in the left-hand pane)&lt;/li&gt; &lt;li&gt;Drag the new provisioning profile into the &quot;Provisioning&quot; box&lt;/li&gt; &lt;li&gt;Click on the &quot;Provisioning Profiles&quot; (in the left-hand pane)&lt;/li&gt; &lt;li&gt;Double-click on the new profile name (in the top pane) - it should appear in the &quot;Included Devices&quot; bottom pane with an &quot;Installed&quot; status&lt;/li&gt; &lt;li&gt;Close the Organizer window&lt;/li&gt; &lt;li&gt;Press the Xcode/Empty Caches... menu option&lt;/li&gt; &lt;li&gt;Close Xcode&lt;/li&gt; &lt;/ol&gt; On the Mac and iPhone:&lt;ol&gt; &lt;li&gt;Power off both the Mac and the iPhone &lt;/li&gt; &lt;li&gt;Power on both the Mac and the iPhone&lt;/li&gt; &lt;li&gt;Attach the iPhone to the Mac&lt;/li&gt; &lt;/ol&gt; For each project you previously built with the old provisioning profile:&lt;ol&gt; &lt;li&gt;Right-click on the [projectname].xcodeproj file and select &quot;Show Package Contents&quot;&lt;/li&gt; &lt;li&gt;Make a backup copy of the project.pbxproj file&lt;/li&gt; &lt;li&gt;Use a text editor (I used Emacs) to edit the project.pbxproj file:&lt;ol&gt; &lt;li&gt;Delete any lines that have the key CODE_SIGN_IDENTITY&lt;/li&gt; &lt;li&gt;Delete any lines that have the key PROVISIONING_PROFILE&lt;/li&gt; &lt;li&gt;Delete any lines that have the key &quot;CODE_SIGN_IDENTITY[sdk=iphoneos*]&quot;&lt;/li&gt; &lt;li&gt;Delete any lines that have the key &quot;PROVISIONING_PROFILE[sdk=iphoneos*]&quot;&lt;/li&gt; &lt;/ol&gt;&lt;/li&gt; &lt;/ol&gt; In Xcode, for each project you previously built with the old provisioning profile:&lt;ol&gt; &lt;li&gt;Open the project&lt;/li&gt; &lt;li&gt;Press the Build/Clean All Targets menu option&lt;/li&gt; &lt;li&gt;Press the Project/Edit Project Settings menu option&lt;/li&gt; &lt;li&gt;On the Build tab under &quot;All Configurations&quot;, chage the &quot;Code Signing Identity&quot; value to iPhone Developer&lt;/li&gt; &lt;li&gt;On the Xcode dropdown menu, select to build on the Device &lt;/li&gt; &lt;li&gt;Press the Build/Build and Run menu option (the application should build and load on the device)&lt;/li&gt; &lt;/ol&gt; That's what worked for me. If anyone has an easier/alternative approach, let me know and I'll publish relevant comments in updates to this post.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Sun, 21 Jun 2009 21:54:27 -0700</pubDate>
      </item>
      <item>
         <title>Twin Cities Lisp Group Inaugural Meeting</title>
         <link>http://bc.tech.coop/blog/090508.html</link>
         <description>Two years ago, Robert Goldman &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bc.tech.coop/blog/070712.html&quot;&gt; gave a presentation&lt;/a&gt; to our Vancouver lispvan group. I'm pleased to note that he's decided to start up his own Lisp User Group in Minneapolis. Here are the details of their upcoming inaugural meeting:&lt;blockquote&gt;&lt;em&gt; &lt;center&gt;TWIN CITIES LISP GROUP INAUGURAL MEETING&lt;/center&gt; &lt;center&gt;9 June 2009, 6:00 PM - 8:00 PM CDT&lt;/center&gt; &lt;center&gt;Common Roots Cafe&lt;/center&gt; &lt;center&gt;Corner of 26th and Lyndale, Minneapolis, MN&lt;/center&gt; &lt;center&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://preview.tinyurl.com/tclisp-crc&quot;&gt; http://preview.tinyurl.com/tclisp-crc&lt;/a&gt;&lt;/center&gt; &lt;center&gt;Temporary web page: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://rpgoldman.real-time.com/tc-lisp.html&quot;&gt; http://rpgoldman.real-time.com/tc-lisp.html&lt;/a&gt;&lt;/center&gt; &lt;br /&gt; There's a lisp renaissance out there, spurred by the availability of several high-quality open source Common Lisp implementations (SBCL, CMUCL, Clozure CL, and CLISP, at least). After attending the 2009 International Lisp Conference in Cambridge (&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.international-lisp-conference.org/2009/index&quot;&gt; http://www.international-lisp-conference.org/2009/index&lt;/a&gt;) I was fired up to see if we could share in some of this renaissance here in the Twin Cities.&lt;br /&gt; &lt;br /&gt; I was also inspired by visiting with the Vancouver Lisp group, Lispvan. They meet roughly monthly at some location offering coffee, beer, and wine, where they have a talk and some mingling. &lt;br /&gt; &lt;br /&gt; In the interests of setting up something like this here, I've (well, Josh Hamell did all the real work) set up a mailman mailing list, tc-lispers (&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://sift.info/mailman/listinfo/tc-lispers_sift.info&quot;&gt; http://sift.info/mailman/listinfo/tc-lispers_sift.info&lt;/a&gt;), and I've reserved the meeting room at Common Roots Cafe (&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.commonrootscafe.com/ourcommunity.htm&quot;&gt; http://www.commonrootscafe.com/ourcommunity.htm&lt;/a&gt;), which offers the aforementioned coffee, beer, and wine (and tasty food --- vegetarian is available and there seem to be at least some vegan options).&lt;br /&gt; &lt;br /&gt; At the first meeting John Maraist will talk about the NST unit testing framework for Common Lisp, which he has been developing at SIFT (abstract follows). Then we can plan a next meeting, chat, mingle, and swap stories. Share and learn the latest Lisp applications, techniques, packages, and implementations. Show off your lambda tattoos, evil hacks, and wigflip graphics.&lt;br /&gt; &lt;br /&gt; Please come if you can and, whether you can or not, please sign up for the tc-lispers mailing list.&lt;br /&gt; &lt;br /&gt; Best,&lt;br /&gt; &lt;br /&gt; Robert Goldman&lt;br /&gt; &lt;center&gt;NST: A Unit Test Framework for Common Lisp&lt;/center&gt; &lt;br /&gt; In this talk we will introduce the Lisp unit test framework NST. SIFT developed NST for internal use on a number of ongoing Lisp projects, and we believe that the system is now mature enough to release more broadly. In this talk we will review the notion of a unit test, and introduce the use of NST in Lisp project development. NST's implementation makes interesting use of a number of Lisp features --- macro expansion, compile-time execution, metaobject protocols --- and we will discuss its current implementation as well as the lessons we learned along the way.&lt;/em&gt;&lt;/blockquote&gt; If you will be in the Twin Cities area on June 9, be sure to attend this new user group meeting. Best wishes to Robert and all the other Twin Cities lispers! By the way, if anyone else is inspired to start a new Lisp User Group, you might want to read my &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bc.tech.coop/blog/071030.html&quot;&gt; &quot;How to start a Lisp User Group&quot;&lt;/a&gt; blog post. I've tried to summarize my experiences in that post.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Fri, 08 May 2009 11:53:01 -0700</pubDate>
      </item>
   </channel>
</rss>
<!-- fe5.pipes.sp1.yahoo.com uncompressed/chunked Sun Nov 22 04:45:59 PST 2009 -->
