<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    <title>Planet Erlang</title>
    <link>http://www.planeterlang.org/en/planet/planet</link>
    <description></description>
    <dc:language>en</dc:language>
    <dc:creator>Planet Erlang</dc:creator>
    <dc:rights>Copyright 2009</dc:rights>
    <dc:date>2009-01-06T21:24:49+01:00</dc:date>
    <admin:generatorAgent rdf:resource="http://www.expressionengine.com/" />
    

    <item>
      <title>Lighting the tunnErl Pt 4 &#45; Erlang from a OOPer</title>
      <link>http://www.planeterlang.org/en/planet/article/Lighting_the_tunnErl_Pt_4_-_Erlang_from_a_OOPer/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Lighting_the_tunnErl_Pt_4_-_Erlang_from_a_OOPer/</guid>
      <author></author>
      <description><![CDATA[<p>Well this is a little deviation from the previous posts but I&#8217;ve ponder writing this post and held back until going back and working with PHP for the first time in a number of weeks.<br />
I&#8217;ll focus purely on the productivity of Erlang vs C clones purely from an observation stand point and will leave code [...]</p> 
]]>
</description>
      <dc:subject>Blogs, Baphled</dc:subject>
      <dc:date>2009-01-06T21:24:49+01:00</dc:date>
    </item>

    <item>
      <title>Assez de 2008, vive 2009</title>
      <link>http://www.planeterlang.org/en/planet/article/Assez_de_2008_vive_2009/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Assez_de_2008_vive_2009/</guid>
      <author>cstar</author>
      <description><![CDATA[<h1>Ãa, câest fait</h1>  <p>Que 2009 vous soit profitable avec du bonheur, des enfants et GTA IV Ã  60 FPS. Et que vos projets soient couronnÃ©s de succÃ¨s.</p>  <p>Vue partielle de 2008 :</p>  <h1>XMPP</h1>  <p>Un de mes objectifs Ã  long terme Ã©tait de mâimpliquer dans un projet Open Source. Les quelques patches que jâai envoyÃ©s aux developpeurs dâejabberd semblent rentrer dans cette catÃ©gorie.</p>  <p>XMPP est vraiment passionnant Ã  travailler en ce moment. Il y a un <a rel="nofollow" target="_blank" href="http://oreilly.com/catalog/9780596157197/">livre chez OâReilly</a> en prÃ©paration, fini de lire les XEP et leur (nÃ©cessaire) sÃ©cheresse.</p>  <h1>HTTP</h1>  <p>Les services REST, atompub, lâimportance des headers de caching, Amazon S3 (en vrac â¦ rien de spÃ©cifique Ã  2008, sinon mon intÃ©rÃªt)</p>  <h1>All things Apple</h1>  <p>Bien quâil soit en rÃ©paration parce quâun ventilateur vibrait de maniÃ¨re insupportable, mon nouveau MacBook Pro a instantanÃ©ment rendu le design du prÃ©cÃ©dent obsolÃ¨te.</p>  <p>En 2008 aussi jâai enfin un accÃ¨s permanent, systÃ©matique et abordable Ã  internet, via mon iPhone et mais aussi sur mon portable grÃ¢ce Ã  feu <a rel="nofollow" target="_blank" href="http://www.igeneration.fr/fr/actu/6407/">NetShare</a>.</p>  <h1>Ohm Force</h1>  <p>2008 a Ã©tÃ© lâannÃ©e de lâembauche : 2 nouvelles tÃªtes, Cid Ã  la communication et David sur le dÃ©veloppement web, plus une troisiÃ¨me qui arrive bientÃ´t.</p>  <p>2008 a aussi Ã©tÃ© lâannÃ©e de lâexplosion. Les membres dâOhm Force sont maintenant tout autour de la France : Marseille, Chartres, Carhaix, et le reste en rÃ©gion parisienne. On avait aussi Vincent Ã  Nice, mais il a rÃ©ajustÃ© sa vie professionnelle en 2008.</p>  <h1>Martin</h1>  <p><img height="400" alt="IMG_0005.jpg" width="300"/></p>  <p>Certes, il date de 2007, mais les mises Ã  jours sont constantes, et il commence Ã  parler (plus de deux mots Ã  la suite). </p>  <p>Passions : </p>  <ul>
<li>les camions de pompier</li>
<li>la combo lave-linge/sÃ¨che-linge (un tas de boutons Ã  appuyer)</li>
<li>le lave-vaisselle, le vider, (avec lâaide de son papa et/ou de sa maman)</li>
</ul>  <p>Il a trouvÃ© ces passions-lÃ  tout seul, et avec une complÃ©mentaritÃ© sur les passions de son pÃ¨re (qui sont : ne pas vider le lave-vaisselle et ne pas faire la lessive)</p>  <p>Note pour plus tard : prendre une machine Ã  chargement frontal, et apprendre Ã  Martin Ã  trier les couleurs et le blanc.</p>  <p>Les autres jeux sont toujours basÃ© sur les rÃ¨gles du <a rel="nofollow" target="_blank" href="http://www.bartel.org/calvinball/">CalvinBall</a>, mais uniquement dans sa variation 1 joueur.</p>  <h1>Misc</h1>  <p>Je suis membre de lâAPRIL depuis cette fin dâannÃ©e.</p>  <h1>Quoi de neuf en 2009 ?</h1>  <p>Des tas de supers choses vachement bien. (Certains Ã  Ohm Force sont beaucoup plus pessimistes, je refais un stock de boite de conserves des fois quâils aient raison).</p>  <p>Mes objectifs en vrac :</p>  <ul>
<li>apprendre un nouveau langage (ou un vieux, je me remettrai bien Ã  Python)</li>
<li>faire des mises Ã  jour sur <a rel="nofollow" target="_blank" href="http://www.mangervite.com/">MangerVite</a> (je me demande si jâai pas Ã©cris Ã§a lâannÃ©e derniÃ¨re Ã  la mÃªme pÃ©riode â¦)</li>
<li>maÃ®triser mon <a rel="nofollow" target="_blank" href="http://www.docslumpy.info/ddd/public/affiche/picooz350.jpg">Picooz</a> (et Ã©viter les cheveux dâHÃ©lÃ¨ne et les poils de chat dans le rotor de queue)</li>
<li>amÃ©liorer la qualitÃ© de mon code</li>
<li><a rel="nofollow" target="_blank" href="http://fr.wikipedia.org/wiki/Getting_Things_Done">Getting Things Done</a> !</li>
<li>me faire battre par Martin Ã  <a rel="nofollow" target="_blank" href="http://www.smashbros.com/fr/index.html">Super Smash Bros Brawl</a></li>
<li>finir les campagnes de Left 4 Dead en expert</li>
<li>transformer lâintranet dâOhm Force en extranet</li>
<li>Utiliser Git.</li>
<li>Donner des cours, mais je sens dÃ©jÃ  que ca va Ãªtre dur.</li>
<li>???? ??? ? ???? ?? ????</li>
<li>??? ?? ????? ????? ??? ????</li>
</ul>  <p>(oui y en a deux autres, mais ce sont des surprises, jâai pas envie que Google vende la mÃ¨che Ã  ceux que Ã§a concerne)</p>  <p>GL HF guys !</p>  <p>(âgood luck and have funâ dans la terminologie des jeux vidÃ©os, et câest aussi adaptÃ© en dÃ©but dâannÃ©e)</p>  <div class="feedflare"><p>
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~f/LeBlogDeCstar?a=6PUP3b.P"><img src="http://feeds.feedburner.com/~f/LeBlogDeCstar?i=6PUP3b.P" border="0"></a>
</p></div><img src="http://feeds.feedburner.com/~r/LeBlogDeCstar/~4/504385754" height="1" width="1"/> 
]]>
</description>
      <dc:subject>Blogs, Eric Cestari</dc:subject>
      <dc:date>2009-01-06T16:28:22+01:00</dc:date>
    </item>

    <item>
      <title>Writing your own mod_roster in ejabberd</title>
      <link>http://www.planeterlang.org/en/planet/article/Writing_your_own_mod_roster_in_ejabberd/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Writing_your_own_mod_roster_in_ejabberd/</guid>
      <author></author>
      <description><![CDATA[<p>As promised, here is a short roundup of what proved helpful to me when we wrote our own mod_roster. I think this post may develop a bit over time, but now is just a quick reference of what to look at when you try to write your own mod_roster.</p>
<p>But first of all, why would you ever want to write your own mod_roster for ejabberd? Here is why:<br />
We have a massive database of users, user information and relationship status already, we store this in postgresql and are quite happy about that state. When we started to build ESL Wire around an XMPP-Server (first OpenFire, now ejabberd) we were quickly facing the problem of having two databases that need to be kept in sync, but basically hold the same data. Since syncronization of _the same data_ is generally a bad idea and most of the time leads to inconsistencies we had to think up something different. Since we already planned of &#8220;opening&#8221; our infrastructure a bit, to make it easier to scale to different countries, users and customers, we decided to have a field-test with the jabber-server. By now we are talking to the ESL database using a webservice and parsing it&#8217;s JSON responses. All data is being kept in one place and we no longer have any inconsitencies. So basically what we have now is a mod_roster_json&#8230;of course this brings other issues to the table, but hey, let&#8217;s take it step by step!</p>
<p>So, what is important information?</p>
<p>Read the Jabber RFC and escpecially focus on all it&#8217;s &#8220;exceptions from the rule&#8221;, read up on gateway-interaction and be sure you know how the subscription states in jabber work.</p>
<p>* <a rel="nofollow" target="_blank" href="http://xmpp.org/rfcs/rfc3921.html#roster">RFC3921</a></p>
<p>Then, look into the hooks ejabberd provides and what the functions that handle the hook need to return, this caused me a lot of headache, since I found this quite late&#8230;after a lot of reverse engineering other &#8220;mod_rosters&#8221;. </p>
<p>* <a rel="nofollow" target="_blank" href="https://support.process-one.net/doc/display/MESSENGER/Events+and+hooks">Events and Hooks</a></p>
<p>Relevant hooks for mod_roster are:<br />
<code><br />
remove_user(User, Server) -&gt; ok<br />
resend_subscription_requests_hook(Acc, User, Server) -&gt; [Packet]<br />
roster_get(Acc, {User, Server}) -&gt; [RosterItem]<br />
roster_get_jid_info(Acc, User, Server, JID) -&gt; {Subscription, Groups}<br />
roster_get_subscription_lists(Acc, User, Server) -&gt; {[FromSubscription], [ToSubscription]}<br />
roster_in_subscription(Acc, User, Server, JID, SubscriptionType, Reason) -&gt; bool()<br />
roster_out_subscription(Acc, User, Server, JID, SubscriptionType, Reason) -&gt; bool()<br />
roster_process_item(RosterItem, Server) -&gt; RosterItem<br />
</code><br />
If you want to implement <a rel="nofollow" target="_blank" href="http://xmpp.org/extensions/xep-0083.html">Nested Roster Groups</a>, you will need this as well:<br />
<code><br />
privacy_iq_get(Acc, From, To, IQ) -&gt; {result, Packet} | {error, Error}<br />
</code></p>
<p>In this context the return values mean this (in examples):<br />
<code><br />
ok = ok<br />
Error = ?STANZA_ERROR/3<br />
[Packet] = {xmlelement, &#8230;}<br />
[RosterItem] = #roster<br />
Subscription = none | from | to | both | remove<br />
Groups = [string()]<br />
bool() = true | false<br />
</code></p>
<p>After this, implement the functions as wanted above, set the debug level to 5 in ejabberd.cfg<br />
and put this everywhere you may need to see the current state of data:<br />
<code><br />
?DEBUG(&#8220;MY_MOD_ROSTER: DATA AT THIS POINT IS: ~p~n&#8221;, [Data])<br />
</code></p>
<p>Now walk through your code step-by-step and have a look at the original mod_roster and/or<br />
mod_roster_odbc to see what the hooks are supposed to do (will describe this here later).</p>
<p>* <a rel="nofollow" target="_blank" href="https://forge.process-one.net/browse/~raw,r=1666/ejabberd/trunk/src/mod_roster.erl">mod_roster.erl</a><br />
* <a rel="nofollow" target="_blank" href="https://forge.process-one.net/browse/~raw,r=1755/ejabberd/trunk/src/mod_roster_odbc.erl">mod_roster_odbc.erl</a></p>
<p>Comparing these two should give you a good idea of what the functions are supposed to do and how you should handle the incoming data to get to what you need to return to satisfy the hook. Once I have a bit more time, I will describe in depth what the hooks are supposed to do.</p>
<p>Oh, and one more thing: </p>
<p>If you have &#8220;slow&#8221; transactions on where you store your data (webservice, for example) be sure to play around with the queing setting of your module, since this can lead to some strange results when you just changed a rosteritem but another thread was too fast and fetched the old one again. Do this by playing around whith this line:<br />
<code><br /> IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),<br />
</code></p>
<p>See possible values here:</p>
<p>* no_queue: no thread is created to run the handler<br />
* one_queue: one thread is dedicated to run the handler<br />
* {queues, N}: N threads are created to run the handler<br />
* parallel: one thread is created for each IQ received</p><p>
<img src="http://feeds.feedburner.com/~r/EslDeveloperBlog/~4/503407602" height="1" width="1"/></p> 
]]>
</description>
      <dc:subject>Blogs, ESL Developer Blog</dc:subject>
      <dc:date>2009-01-05T15:26:47+01:00</dc:date>
    </item>

    <item>
      <title>Lighting up the tunnErl Pt. 3 &#45; AftErl the basics</title>
      <link>http://www.planeterlang.org/en/planet/article/Lighting_up_the_tunnErl_Pt._3_-_AftErl_the_basics/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Lighting_up_the_tunnErl_Pt._3_-_AftErl_the_basics/</guid>
      <author></author>
      <description><![CDATA[<p>As promised this post follows on from the previous post, documenting my experience with Erlang over the past few months.<br />
This one focuses on cock-ups and general mistakes I&#8217;ve made over the past few months, putting them here helps you to not make the same mistake &#38; helps me to remember what to I did at [...]</p> 
]]>
</description>
      <dc:subject>Blogs, Baphled</dc:subject>
      <dc:date>2009-01-05T12:20:31+01:00</dc:date>
    </item>

    <item>
      <title>Large set of ejabberd resources</title>
      <link>http://www.planeterlang.org/en/planet/article/Large_set_of_ejabberd_resources/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Large_set_of_ejabberd_resources/</guid>
      <author>Mickaël Rémond</author>
      <description><![CDATA[<p>Planet Erlang is fastly becoming a large index for Erlang projects resources, including ejabberd.  <p>Since its relaunch, <a href="http://www.planeterlang.org">Planet Erlang</a> is now indexing content from tens of Erlang related blogs. Thank to its search engine, you can now find many blog posts and articles on lots of different Erlang topic. ejabberd is one of the most covered topic there.</p>
<p>You should have a look and try searching for ejabberd in the search engine (search field on the right).</p>
<p>The list of resources is growing every day as we are adding even more older resources.</p>
<p>Your comments and feature requests are welcome !</p> 
]]>
</description>
      <dc:subject>Companies, ProcessOne</dc:subject>
      <dc:date>2009-01-05T09:57:00+01:00</dc:date>
    </item>

    <item>
      <title>Sendfile for Yaws</title>
      <link>http://www.planeterlang.org/en/planet/article/Sendfile_for_Yaws/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Sendfile_for_Yaws/</guid>
      <author>steve</author>
      <description><![CDATA[<p>A few months back Klacke gave me committer rights for <a rel="nofollow" target="_blank" href="http://yaws.hyber.org/">Yaws</a>. I&#8217;ve made a few fixes here and there, including adding support for <a rel="nofollow" target="_blank" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.2">passing &#8220;*&#8221; as the request URI for OPTIONS</a>, enabling OPTIONS requests to be dispatched to <a rel="nofollow" target="_blank" href="http://yaws.hyber.org/appmods.yaws">appmods</a> and <a rel="nofollow" target="_blank" href="http://yaws.hyber.org/yapp_intro.yaws">yapps</a>, and completing a <a rel="nofollow" target="_blank" href="http://sourceforge.net/mailarchive/forum.php?thread_name=48DA651E.80708@lionet.infoforum_name=erlyaws-list">previously-submitted patch for configuring the listen backlog</a>. Klacke has just started putting a test framework into the codebase and build system so that contributors can include tests with any patches or new code they submit, and I&#8217;ve contributed to that as well.</p>
<p>The biggest feature I&#8217;ve added to date, though, is a new linked-in driver that allows Yaws to use the <a rel="nofollow" target="_blank" href="http://www.freebsd.org/cgi/man.cgi?query=sendfilesektion=2">sendfile system call</a> on Linux, OS X, and FreeBSD. I never wrote a linked-in driver before, so I was happy and fortunate to have an Erlang expert like Klacke providing hints and reviewing my code.</p>
<p>I did some preliminary testing that showed that sendfile definitely improves CPU usage across the board but depending on file size, sometimes does so at the cost of increasing request times. I used my otherwise idle 2-core 2.4GHz Ubuntu 8.04.1 Dell box with 2 GB of RAM, and ran Apache Bench (ab) from another Linux host to simulate 50 concurrent clients downloading a 64k data file a total of 100000 times. I saw that user/system CPU on the web host tended to run around 33%/28% without sendfile, while with sendfile it dropped to 22%/17%. The trade-off was request time, though, where each request for the 64k file averaged 0.928ms with sendfile but 0.567ms without. With larger files, however, sendfile is slightly faster and still has better CPU usage. For example, with a 256k file, sendfile averaged 2.251ms per request with user/system CPU at 8%/16% whereas it was 2.255ms and 16%/27% CPU without sendfile, which makes me wonder if the figures for the 64k file are outliers for some reason. I performed these measurements fairly quickly, so while I believe they&#8217;re reasonably accurate, don&#8217;t take them as formal results.</p>
<p>On my MacBook Pro laptop running OS X 10.5.6, CPU usage didn&#8217;t seem to differ much whether I used sendfile or not, but requests across the board tended to be slightly faster with sendfile.</p>
<p>I ran FreeBSD 7.0.1 in a Parallels VM on my laptop, and there I saw significantly better system CPU usage with sendfile than without, sometimes as much as a 30% improvement. Requests were also noticeably faster with sendfile than without, sometimes by as much as 17%, and again depending on file size, with higher improvements for larger files. User CPU was not a factor. All in all, though, I don&#8217;t know how much the fact that I ran all this within a VM affected these numbers.</p>
<p>Given that Yaws is often used for delivering mainly dynamic content, sendfile won&#8217;t affect those cases. Still, I think it&#8217;s nice to have it available for the times when you do have to deliver file-based content, especially if the files are of the larger variety. Anyway, I committed this support to the <a rel="nofollow" target="_blank" href="http://erlyaws.svn.sourceforge.net/viewvc/erlyaws/trunk/yaws/">Yaws svn repository</a> back around December 21 or so. If you&#8217;d like to do your own testing, please feel free &mdash; I&#8217;d be interested in learning your results. Also, if you have ideas for further tests I might try, please leave a comment to let me know.</p> 
]]>
</description>
      <dc:subject>Blogs, Steve Vinoski</dc:subject>
      <dc:date>2009-01-05T08:22:54+01:00</dc:date>
    </item>

    <item>
      <title>Ejabberd hooks with twisted</title>
      <link>http://www.planeterlang.org/en/planet/article/Ejabberd_hooks_with_twisted/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Ejabberd_hooks_with_twisted/</guid>
      <author></author>
      <description><![CDATA[<p>Few days ago I&#8217;ve found on Launchpad an interesting project by Thomas Herv&eacute;, the <a rel="nofollow" target="_blank" href="https://launchpad.net/twotp">twisted interface to OTP,</a> which allows to connect to erlang nodes using Twisted Matrix. The idea is incredibily powerful because it allows to easily build mixed-distributed applications using both erlang and python/twisted where they are best. So I gave it a try with ejabberd which has hooks for adding callbacks to its internal components (i.e. it&#8217;s possible to intercept and modify packets). Unfortunately I&#8217;ve discovered that the present implementation of ejabberd hooks allows to connect only callbacks from the same node of ejabberd, i.e. as an extension module, but ejabberd folks have been incredibily quick in releasing <a rel="nofollow" target="_blank" href="https://support.process-one.net/browse/EJAB-829">a patch which allows distributed hooks</a>, by adding the &#8220;CallNode&#8221; atom as parameter. The patch may be not stable yet, but it works perfectly with the last release of ejabberd (2.0.2), and here is an example of a twisted node which intercepts and logs all packets sent and received by any user (<a rel="nofollow" target="_blank" href="http://blog.bluendo.com/download_file?bid=3;file_id=364">here is the full code</a>, change the node names accordingly to your setup). </p><p>It works very simply. The hooks are written as methods of a regular python class with the &#8220;remote_&#8221; prefix:</p><pre><font face="courier new,courier,monospace">class UserMonitor(object):<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; def remote_receive_packet(self, jid, frm, to, packet):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &#8220;&gt;&gt;&#8220;,&nbsp; to_domish(packet).toXml()<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; def remote_send_packet(self, frm, to, packet):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &#8220;&lt;&lt;&#8220;,&nbsp; to_domish(packet).toXml()</font></pre><p>which is published by using a PersistentPortMapper:</p><pre><font face="courier new,courier,monospace">nodeName = buildNodeName(&#8220;uccaro@olindo.bluendo.priv&#8221;)<br />epmd = PersistentPortMapperFactory(nodeName, cookie, &#8220;olindo.bluendo.priv&#8221;)<br />epmd.publish(proxy = UserMonitor()) </font></pre><p>After this it&#8217;s possible to call the methods proxy:receive_packtes and proxy:send_packet from any erlang node.<br /></p><p>Then we register with ejabberd using a second node which calls the register methods, using the ejabberd api:</p><font face="courier new,courier,monospace">@defer.inlineCallbacks<br />def register_hook(epmd): <br />&nbsp;&nbsp;&nbsp; # connect to the ejabberd node<br />&nbsp;&nbsp;&nbsp; inst = yield epmd.connectToNode(&#8220;ejabberd&#8221;)<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; # register hooks<br />&nbsp;&nbsp;&nbsp; r = yield inst.factory.callRemote(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inst, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;ejabberd_hooks&#8221;, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;add_dist&#8221;, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Atom(&#8220;user_receive_packet&#8221;), # hook name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;olindo.bluendo.priv&#8221;, # virtual host<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Atom(&#8220;uccaro@olindo.bluendo.priv&#8221;), # hook node<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Atom(&#8220;proxy&#8221;), # hook module <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Atom(&#8220;receive_packet&#8221;), # hook method<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10<br />&nbsp;&nbsp;&nbsp; )</font><br /><p>And bingo, after this ejabberd happily starts calling our hooks! </p><p>As bonus in the code you find also a function which translates from the ejabberd xml representation to twisted domish nodes, which is far more usable.<br /></p> 
]]>
</description>
      <dc:subject>Blogs, Fabio Forno</dc:subject>
      <dc:date>2009-01-05T01:46:10+01:00</dc:date>
    </item>

    <item>
      <title>Lighting up the tunnErl Pt 2 &#45; Discovering a new wErld</title>
      <link>http://www.planeterlang.org/en/planet/article/Lighting_up_the_tunnErl_Pt_2_-_Discovering_a_new_wErld/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Lighting_up_the_tunnErl_Pt_2_-_Discovering_a_new_wErld/</guid>
      <author></author>
      <description><![CDATA[<p>This post continues on from Part 1, this post focuses primarily with the concepts of Erlang, throwing in a few tips as I go along.<br />
The Basics<br />
There are heaps of places to pick up the basics as mentioned before (Erlang, TrapExit, PlanetErlang &#38; Lighting up the tunnErl Part 1 are good starts) but I&#8217;ll highlight some [...]</p> 
]]>
</description>
      <dc:subject>Blogs, Baphled</dc:subject>
      <dc:date>2009-01-05T01:19:36+01:00</dc:date>
    </item>

    <item>
      <title>Lighting up the tunnErl Pt 1.</title>
      <link>http://www.planeterlang.org/en/planet/article/Lighting_up_the_tunnErl_Pt_1/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Lighting_up_the_tunnErl_Pt_1/</guid>
      <author></author>
      <description><![CDATA[<p>Well after a few months of playing around with Erlang, I thought I&#8217;d put my findings in one place for myself and others.<br />
Well for those that aren&#8217;t familiar with Erlang or never heard of it, in a nut shell Erlang is a functional programming language create multiple processes across multiple nodes, allowing for a reliable [...]</p> 
]]>
</description>
      <dc:subject>Blogs, Baphled</dc:subject>
      <dc:date>2009-01-04T17:44:38+01:00</dc:date>
    </item>

    <item>
      <title>Revisiting &#8220;Purely Functional Retrogames&#8221;</title>
      <link>http://www.planeterlang.org/en/planet/article/Revisiting_Purely_Functional_Retrogames/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Revisiting_Purely_Functional_Retrogames/</guid>
      <author>James Hague</author>
      <description><![CDATA[<p>I wrote the <a href="23.html">Purely Functional Retrogames</a> series as an experiment.&nbsp; There&#8217;s been so much empty talk about how functional languages are as good or better than imperative languages&#8212;yet very little to back that up.&nbsp; Doubly so in regard to interactive applications.&nbsp; I&#8217;d bet there are more people learning to program the Atari 2600 hardware than writing games in Haskell.<br />
<br></br><br></br>For people who only read the beginnings of articles, let me say this up front: Regurgitating the opinion that functional programming (or any technology) is superior does absolutely nothing.&nbsp; That&#8217;s a road of endless conjecture and advocacy.&nbsp; One day you&#8217;ll realize you&#8217;ve been advocating something for ten years without having any substantial experience in it.&nbsp; If you think a particular technology shows promise, then get in there and figure it out.<br />
<br></br><br></br>The rest of this entry is about what I learned by writing some retro-style games in Erlang.<br />
<br></br><br></br><b>The divide between imperative and functional languages, in terms of thinking about and writing code, is much smaller than I once thought it was.</b>&nbsp; It is easy to <a href="36.html">accidentally</a> introduce side-effects and sequencing problems into purely functional code.&nbsp; It is easy to write spaghetti code, where the entanglement comes from threading data through functions rather than unstructured flow of control.&nbsp; There&#8217;s mental effort involved in avoiding these problems, just as there is when programming in any language.<br />
<br></br><br></br><b>Not being able to re-use names for values in functions sometimes led to awkward code.</b> I could have said &#8220;not being able to destructively update local variables&#8230;&#8220; but that would show a lack of understanding that local &#8220;variables&#8221; are just names for things, not storage locations.&nbsp; For example, the initial position of an object is passed in as &#8220;Pos.&#8220;&nbsp; I use it to create a new position, called &#8220;NewPos.&#8220;&nbsp; Sometimes, because it was the most straightforward approach, I&#8217;d end up with another value called &#8220;NewPos2&#8221; (which I will agree is a horrible name).&nbsp; Then I&#8217;d find myself referring to &#8220;NewPos&#8221; when I meant &#8220;NewPos2.&#8220;&nbsp; If the need arose to shuffle the logic around a bit, then it took care to manually rename these values without introducing errors.&nbsp; It would have been much nicer to create the new position and say &#8220;I&#8217;m repurposing the name &#8216;Pos&#8217;&#8221; to refer to this new position.<br />
<br></br><br></br><b>The lack of a simple dictionary type was the most significant hindrance.</b> This is where I found myself longing for the basic features of Perl, Python, Ruby&#8212;pretty much any common language.&nbsp; The ugliness of Erlang records has been well-documented, but syntax alone is not a reason to avoid them.&nbsp; The real problem is that records are brittle, exactly like structs in C.&nbsp; It&#8217;s difficult to come up with a record that covers the needs of a dozen game entities with varying behaviors.&nbsp; They all have some common data, like an X/Y position, but some have special flags, some use velocities and acceleration values instead of simple motion, some need references to other entities, and so on.&nbsp; I could either make a big generic record that works for everything (and keep adding fields as new cases arise) or switch to another data structure, such as a property list, that doesn&#8217;t allow pattern matching.<br />
<br></br><br></br><b>The biggest wins came from symbolic programming and consciously avoiding low-level efficiency</b>. I spent a lot of time focused on efficient representations of entity states and other data.&nbsp; The more thought I put into this, the more the code, as a whole, became awkward and unreadable.&nbsp; Everything started to flow much more nicely when I went down the road of comical inefficiency.&nbsp; Why use a fixed-size record when I can use a tree?&nbsp; Why use bare data types when I can tag them so the code that processes them is easier to read?&nbsp; Why transform one value to another when I can instead return a description of how to transform the value?&nbsp; Some years ago, John Carmack stated that a current PC was powerful enough to run every arcade game he played when he was growing up&#8212;some 300 or so games&#8212;at the same time. Yes, there&#8217;s a large execution time penalty simply for choosing to write in Erlang instead of C, but it&#8217;s nowhere near enough a factor to matter for most game logic, so use that excess to write code that&#8217;s clear and beautiful.</p> 
]]>
</description>
      <dc:subject>Blogs, Programming in the 21st Century</dc:subject>
      <dc:date>2009-01-04T07:00:00+01:00</dc:date>
    </item>

    <item>
      <title>Nginx vs Yaws vs MochiWeb : Web Server Performance Deathmatch, Part 2</title>
      <link>http://www.planeterlang.org/en/planet/article/Nginx_vs_Yaws_vs_MochiWeb_Web_Server_Performance_Deathmatch_Part_2/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Nginx_vs_Yaws_vs_MochiWeb_Web_Server_Performance_Deathmatch_Part_2/</guid>
      <author></author>
      <description><![CDATA[<p><em>Updated: Retest data (using different machine and Erlang kernel polling) added to bottom of post.</em></p>
<p>Almost a year ago I did some <a href="http://www.joeandmotorboat.com/2008/02/28/apache-vs-nginx-web-server-performance-deathmatch/">Apache and Nginx performance testing</a>. Apparently I have the bug again and have done some performance testing on <a href="http://www.nginx.net/" onclick="javascript:urchinTracker('/outbound/www.nginx.net');">Nginx</a>, <a href="http://yaws.hyber.org/" onclick="javascript:urchinTracker('/outbound/yaws.hyber.org');">Yaws</a> and <a href="http://code.google.com/p/mochiweb/" onclick="javascript:urchinTracker('/outbound/code.google.com');">MochiWeb</a>. The latter two being Erlang based. Again deathmatch may be an overstatement but this is my attempt at gleaning some interesting performance data from some high performance web servers. Also, I attempted to improve the graphs this time around since they were a bit hard to read the last time.</p>
<p><strong>The Setup:</strong></p>
<p>I was not able to use the same server and setup as the last time, so comparing between this and my last deathmatch probably isn&#8217;t very accurate. For this test I used a Intel Dual Core 2.2GHz, 4GB RAM machine running Ubuntu 8.10 (64bit) and for the test server. Erlang (R12B-3), Yaws (1.77) and Nginx (0.6.32) are installed from the standard repository and mochiweb from subversion (rev 88). All are using the <strong>default configurations</strong> outside of adjusting listening port numbers. The test is again against a basic robots.txt file. The tests were done using a consumer grade 100mb switch and all tests originated from an old laptop I had laying around. I think that about covers the test bed, if you have any questions let me know.</p>
<p>For the tests I used autobench (httperf under the hood) with the following command, each test ran ten minutes apart. The order of the tests were done in was MochiWeb then Yaws and lastly Nginx.</p>
<blockquote><p>autobench &#8211;single_host &#8211;host1 HOST &#8211;port1 PORT &#8211;uri1 /robots.txt &#8211;low_rate 10 &#8211;high_rate 200 &#8211;rate_step 10 &#8211;num_call 10 &#8211;num_conn 5000 &#8211;timeout 5 &#8211;file SERVER-results-`date +%F-%H:%M:%S`.tsv</p></blockquote>
<p><strong>The Results:</strong></p>
<p>There are a few results from httperf/autobench that I would like to show, errors, network I/O, reply rate (and it&#8217;s standard deviation) and response time. <em>(click on the graphs for a larger view)</em></p>
<p><a href="http://www.joeandmotorboat.com/files/errors.png"><img src="http://www.joeandmotorboat.com/files/errors.png" alt="nginx yaws mochiweb errors" width="514" height="387" /></a></p>
<p>MochiWeb and Yaws both seem to be the most consistent here. Nginx had a couple of funky spikes, I do not know if this was an issue with Nginx or with my tests and/or test bed. Take from it what you will.</p>
<p><a href="http://www.joeandmotorboat.com/files/network.png"><img src="http://www.joeandmotorboat.com/files/network.png" alt="mochiweb yaws nginx network io" width="514" height="387" /></a></p>
<p>Nginx seems to use a bit more network I/O consistently through the lower ranges of this test and then again as some spikes. MochiWeb and Yaws seem to have some inconsistencies as well.</p>
<p><a href="http://www.joeandmotorboat.com/files/replyrate.png"><img src="http://www.joeandmotorboat.com/files/replyrate.png" alt="mochiweb yaws nginx reply rate" width="514" height="387" /></a></p>
<p>The reply rate and network I/O graphs certainly seem to be tied, which would make sense. <em>Edit: Average reply rate is average replies per second.</em></p>
<p><a href="http://www.joeandmotorboat.com/files/replyratestddev.png"><img src="http://www.joeandmotorboat.com/files/replyratestddev.png" alt="mochiweb yaws nginx reply rate standard deviation" width="514" height="387" /></a></p>
<p>In the higher reaches of the tests Yaws seems to be most consistent.</p>
<p><a href="http://www.joeandmotorboat.com/files/responsetime.png"><img src="http://www.joeandmotorboat.com/files/responsetime.png" alt="mochiweb yaws nginx response time" width="514" height="387" /></a></p>
<p>MochiWeb seems to have consistently the highest response times with Nginx has the lowest. This also follows the data from the first deathmatch. Nginx had consistently low response times against Apache. <em>Edit: Response time is how quickly replies are sent in milliseconds.</em></p>
<p>Next up are the system graphs, I have CPU usage (both cores combined), context switches, interrupts and load. To help read these please note recall that each test ran ten minutes apart and the order of the tests was MochiWeb then Yaws and lastly Nginx. The data was gathered using sar at five minute intervals and graphed using ksar.</p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-mochi-yaws_all-cpu.png"><img src="http://www.joeandmotorboat.com/files/nginx-mochi-yaws_all-cpu.png" alt="nginx yaws mochiweb cpu usage" width="514" height="387" /></a></p>
<p>It seems Nginx is the clear winner here. Kernel polling may be the answer here, a retest may be in order to see if it makes a difference.</p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-mochi-yaws_LinuxcswchSar.png"><img src="http://www.joeandmotorboat.com/files/nginx-mochi-yaws_LinuxcswchSar.png" alt="nginx yaws mochiweb context switch" width="514" height="387" /></a></p>
<p>MochiWeb and Nginx seem pretty even on context switches with Yaws a little higher. I suppose turning on kernel polling might make this a bit more even, since Erlang and Nginx both use epoll. This may also account for the CPU usage difference above.</p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-mochi-yaws_LinuxintrSar.png"><img src="http://www.joeandmotorboat.com/files/nginx-mochi-yaws_LinuxintrSar.png" alt="nginx yaws mochiweb interrupts" width="514" height="387" /></a></p>
<p>Interrupts are fairly even across all of them.</p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-mochi-yaws_LinuxloadSar.png"><img src="http://www.joeandmotorboat.com/files/nginx-mochi-yaws_LinuxloadSar.png" alt="nginx yaws mochiweb load" width="514" height="387" /></a></p>
<p>Again Nginx takes it, again likely due to kernel polling being disabled. That&#8217;s my best guess anywho.</p>
<p>The data I used to create the graphs and etc is available <a href="http://www.joeandmotorboat.com/files/webservertests_results.tar.gz">here</a>. </p>
<p>Let me know if you are interested in me retesting anything, I may try to enable kernel polling and try again if I get a chance.</p>
<p>Note that these are *my* experiences with each webserver, your testing and experiences may be different. As with most things there are pro&#8217;s, con&#8217;s, trade offs and pitfalls. The only way to find out what will work best for your environment is to test, test and test. </p>
<p><strong>Update</strong>: </p>
<p>I performed the upper half of the tests again to see if there were any changes to sporadic jumps in the graphs http performance graphs. My initial test using the old laptop I saw the same results. I then ran the tests from a VM (running Ubuntu 8.10 in a KVM VM) on my dual core machine and found that the results were much more even. Unfortunately it&#8217;s the same machine that the webservers are running on but the results look much better. The first set is using the same setup as before but just adjusted to have the top half test. The second is the same test but with kernel polling turned on in Erlang.</p>
<p><a href="http://www.joeandmotorboat.com/files/avgreplyrate-test2.png"><img src="http://www.joeandmotorboat.com/files/avgreplyrate-test2.png" alt="nginx yaws mochiweb reply rate" width="514" height="387" /></a></p>
<p>All of them are very even and close, no real winners here.</p>
<p><a href="http://www.joeandmotorboat.com/files/responsetime-test2.png"><img src="http://www.joeandmotorboat.com/files/responsetime-test2.png" alt="nginx yaws mochiweb response time" width="514" height="387" /></a></p>
<p>Looks like Nginx is the clear winner with Yaws next, followed by MochiWeb.</p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-yaws-mochiweb-test2_all-cpu.png"><img src="http://www.joeandmotorboat.com/files/nginx-yaws-mochiweb-test2_all-cpu.png" alt="nginx yaws mochiweb cpu usage" width="514" height="387" /></a></p>
<p>Pretty much the same as last time (likely a little higher across the board due to running the tests in a VM on the same machine). Note that Nginx is a system process, so for Yaws and MochiWeb follow the blue line and Nginx follow the green. </p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-yaws-mochiweb-test2_LinuxcswchSar.png"><img src="http://www.joeandmotorboat.com/files/nginx-yaws-mochiweb-test2_LinuxcswchSar.png" alt="nginx yaws mochiweb context switches" width="514" height="387" /></a></p>
<p>About the same as before, other than being higher due to running a VM.</p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-yaws-mochiweb-test2_LinuxloadSar.png"><img src="http://www.joeandmotorboat.com/files/nginx-yaws-mochiweb-test2_LinuxloadSar.png" alt="nginx yaws mochiweb load" width="514" height="387" /></a></p>
<p>Pretty much the same as before again, Nginx seems the lowest.</p>
<p>Now for the tests <strong>with kernel polling enabled in Erlang</strong> (<em>erl +K true</em>).</p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-yaws-mochiweb-replyrate-wkernelpolling.png"><img src="http://www.joeandmotorboat.com/files/nginx-yaws-mochiweb-replyrate-wkernelpolling.png" alt="nginx yaws mochiweb reply rate kernel polling" width="514" height="387" /></a></p>
<p>With kernel polling on it looks like Yaws actually performs better in the reply rate test with MochiWeb performing worse and Nginx in the middle</p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-yaws-mochiweb-responsetime-wkernelpolling.png"><img src="http://www.joeandmotorboat.com/files/nginx-yaws-mochiweb-responsetime-wkernelpolling.png" alt="nginx yaws mochiweb response time kernel polling" width="514" height="387" /></a></p>
<p>In the response time test a huge change is noted, MochiWeb goes from roughly a ~14 ms response time at 2000 requests to ~65 ms. Also noted Yaws performs much better matching or beating Nginx.</p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-mochi-yaws-wkernelpolling_all-cpu.png"><img src="http://www.joeandmotorboat.com/files/nginx-mochi-yaws-wkernelpolling_all-cpu.png" alt="nginx yaws mochiweb cpu usage kernel polling" width="514" height="387" /></a></p>
<p>With kernel polling in the Erlang webservers Nginx still seems to come out on top for CPU usage.</p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-mochi-yaws-wkernelpolling_LinuxcswchSar.png"><img src="http://www.joeandmotorboat.com/files/nginx-mochi-yaws-wkernelpolling_LinuxcswchSar.png" alt="nginx yaws mochiweb context switches kernel polling" width="514" height="387" /></a></p>
<p>Following the performance trend we saw above Yaws sees a drop in context switches and MochiWeb increases.</p>
<p><a href="http://www.joeandmotorboat.com/files/nginx-mochi-yaws-wkernelpolling_LinuxloadSar.png"><img src="http://www.joeandmotorboat.com/files/nginx-mochi-yaws-wkernelpolling_LinuxloadSar.png" alt="nginx yaws mochiweb load kernel polling" width="514" height="387" /></a></p>
<p>Load-wise things stay roughly the same with Nginx being the lowest.</p>
<p>While it certainly seems that my old laptop that I did the original tests on is too slow or has a network issue, hopefully with these new tests we have some more clarity. It seems that Yaws improves with kernel polling enabled and competes well with Nginx. MochiWeb on the other hand apparently has issues with kernel polling and actually degrades performance. If anyone has more info on the internals of MochiWeb and possible causes I would be certainly interested.</p>
<p>If anyone would like the data from the second round of tests it is available <a href="http://www.joeandmotorboat.com/files/webservertests.3.tar.gz">here</a>.</p> 
]]>
</description>
      <dc:subject>Blogs, Joe Williams</dc:subject>
      <dc:date>2009-01-04T00:19:38+01:00</dc:date>
    </item>

    <item>
      <title>More SHA in Erlang</title>
      <link>http://www.planeterlang.org/en/planet/article/More_SHA_in_Erlang/</link>
      <guid>http://www.planeterlang.org/en/planet/article/More_SHA_in_Erlang/</guid>
      <author>steve</author>
      <description><![CDATA[<p>Yesterday I posted a <a href="http://steve.vinoski.net/blog/2009/01/02/sha-256-in-erlang/">SHA-256 Erlang module</a>, but I figured since other SHA algorithms are similar, I might as well finish the job. I grabbed the <a rel="nofollow" target="_blank" href="http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf">Secure Hash Standard</a> and went to work.</p>
<p>The resulting new module is named <a href="http://steve.vinoski.net/code/sha2.html">sha2</a> and it implements SHA-224, SHA-256, SHA-384, and SHA-512.</p>
<ul>
<li><a href="http://steve.vinoski.net/code/sha2.erl">Code</a></li>
<li>Light <a href="http://steve.vinoski.net/code/sha2.html">documentation</a></li>
<li>Tests are included in the module but you get the test vectors <a rel="nofollow" target="_blank" href="http://www.aarongifford.com/computers/sha2-1.0.tar.gz">here</a></li>
<li>It&#8217;s open source, <a rel="nofollow" target="_blank" href="http://www.opensource.org/licenses/bsd-license.php">BSD license</a></li>
</ul>
<p>I hope you find it useful.</p> 
]]>
</description>
      <dc:subject>Blogs, Steve Vinoski</dc:subject>
      <dc:date>2009-01-03T18:11:51+01:00</dc:date>
    </item>

    <item>
      <title>BeepBeep Is Another New Erlang Framework</title>
      <link>http://www.planeterlang.org/en/planet/article/BeepBeep_Is_Another_New_Erlang_Framework/</link>
      <guid>http://www.planeterlang.org/en/planet/article/BeepBeep_Is_Another_New_Erlang_Framework/</guid>
      <author>Chad DePue</author>
      <description><![CDATA[<p>Happy New Year! It&#8217;s been a great 2008 for Erlang, which we&#8217;ll cover in our 2008 Retrospective in another post later this week. For today, it&#8217;s a new, simple web framework for Erlang called <a href="http://github.com/davebryson/beepbeep/tree/master">BeepBeep</a>. Written by Dave Bryson, it uses <a href="http://code.google.com/p/mochiweb/">MochiWeb</a>, which most Erlang Web developers are familiar with, and <a href="http://code.google.com/p/erlydtl/">ErlyDTL</a>, which is an Erlang port of the Python Template Language. Travis Slicegood has a <a href="http://www.travisswicegood.com/index.php/2009/01/02/playing-with-beepbeep-and-flickr">demo application</a> written in BeepBeep grabbing photos from Flickr, and Dave Bryson has a sample <a href="http://github.com/davebryson/beepbeep-blog-demo/tree/master">Blog Application</a> as well.</p>
<p>The new set of Erlang web frameworks is more proof of the number of ambitious, sharp developers moving to the language is growing.</p> 
]]>
</description>
      <dc:subject>Blogs, Erlang Inside</dc:subject>
      <dc:date>2009-01-03T13:14:39+01:00</dc:date>
    </item>

    <item>
      <title>2008 in Review &amp;amp; 2009 Goals</title>
      <link>http://www.planeterlang.org/en/planet/article/2008_in_Review_2009_Goals/</link>
      <guid>http://www.planeterlang.org/en/planet/article/2008_in_Review_2009_Goals/</guid>
      <author></author>
      <description><![CDATA[<p>Yesterday was the day of &#8220;2008 in review&#8221; posts. I really enjoyed reading over
what people had accomplished during the year, and what they planned on doing in
the new year. I hadn&#8217;t planned on writing this post, but for some reason I&#8217;m
doing it anyway. So here goes, not much technical stuff ahead, so if personal
stuff bores you then click away now.</p>
<div class="section">
<h1><a rel="nofollow" id="in-review" name="in-review">2008 in Review</a></h1>
<p>What a fantastic year. What a crazy year. I don&#8217;t think there&#8217;s ever been a
year in my life so filled with change. For starters, I&#8230;</p>
<ul class="simple">
<li>Learned Erlang</li>
<li>Joined <a rel="nofollow" class="reference" target="_blank" href="http://twitter.com/ericflo">Twitter</a> and <a rel="nofollow" class="reference" target="_blank" href="http://friendfeed.com/ericflo">FriendFeed</a></li>
<li>Drove 3 hours to caucus in Iowa (what a strange ritual that is!)</li>
<li>Met <a rel="nofollow" class="reference" target="_blank" href="http://lazypython.blogspot.com/">some</a> <a rel="nofollow" class="reference" target="_blank" href="http://oebfare.com/">really</a> <a rel="nofollow" class="reference" target="_blank" href="http://blog.michaeltrier.com/">cool</a> <a rel="nofollow" class="reference" target="_blank" href="http://jtauber.com/">people</a> at <a rel="nofollow" class="reference" target="_blank" href="http://us.pycon.org/2008/about/">PyCon 2008</a></li>
<li>Became involved in the <a rel="nofollow" class="reference" target="_blank" href="http://pinaxproject.com/">Pinax</a> project</li>
<li>Wrote and released my first 7 open source Django applications</li>
<li>Guest hosted <a rel="nofollow" class="reference" target="_blank" href="http://thisweekindjango.com/">a podcast</a></li>
<li>Learned how to use <a rel="nofollow" class="reference" target="_blank" href="http://git.or.cz/">Git</a></li>
<li>Graduated from college with bachelor&#8217;s degree in Computer Science</li>
<li>Accepted a job offer with <a rel="nofollow" class="reference" target="_blank" href="http://www.mochimedia.com/">Mochi Media</a></li>
<li>Moved to San Francisco</li>
<li>Released a series of <a rel="nofollow" class="reference" target="_blank" href="http://thisweekindjango.com/screencasts/">14 screencasts</a> building a project from the ground up</li>
<li>Wrote <a rel="nofollow" class="reference" target="_blank" href="http://www.eflorenzano.com/blog/archive/2008/11/">one blog post every day</a> in the month of November</li>
<li>Quit drinking soda</li>
<li>Participated in the most notable election of my lifetime</li>
<li>Started a <a rel="nofollow" class="reference" target="_blank" href="http://www.meetup.com/The-San-Francisco-Django-Meetup-Group/">Django San Francisco local user group</a></li>
</ul>
<p>...but those are just the highlights. It&#8217;s been really interesting
transitioning from college student to the real world. Somehow I thought that
not having homework would mean that I would have more free time to do other
things, but it turns out that you actually have less time if you have a job to
go to every day.</p>
<p>But I don&#8217;t think that being a student ever stopped. I&#8217;ve learned so much from
my coworkers: different ways of thinking about problems, theoretical problems,
real world challenges, prioritizing work, RESTful principles of the web, and
a whole lot about databases. This is what I like about this industry. However
much you know, there&#8217;s more to learn, and people are generally willing to share
their expertise with you.</p>
<p>I&#8217;ve learned a lot about what it means to be part of a community; part of a
company. I&#8217;ve learned a lot about life, this year.</p>
<p>But the learning&#8217;s not over.</p>
</div>
<div class="section">
<h1><a rel="nofollow" id="goals-for-2009" name="goals-for-2009">Goals for 2009</a></h1>
<p>While I&#8217;m weary of posting my goals for all the world to see, I think it&#8217;s
important to codify them and make them public. That way, maybe it&#8217;ll compel me
to actually follow through on these goals. I&#8217;ve tried to keep them realistic
and with a few exceptions, specific enough to be testable. Without further ado,
here are my goals for 2009 (in no particular order):</p>
<ul class="simple">
<li>Learn a concatenative/stack-based language</li>
<li>Meet new people, especially those that I wouldn&#8217;t normally meet</li>
<li>Write a virtual machine</li>
<li>Double both my blog and Twitter followership</li>
<li>Be more consistent in my contributions to the Pinax project, instead of helping in fits and spurts like I currently am</li>
<li>Post at least twice a month to this blog</li>
<li>Release some non-open source software, and maybe even charge for it</li>
<li>Work out an average of 2 times a week or more over the whole year</li>
<li>Learn <a rel="nofollow" class="reference" target="_blank" href="http://processing.org/">Processing</a></li>
<li>Learn about investments, and invest 10% of my earnings each month</li>
<li>Give a talk at a conference</li>
</ul>
<p>I think that all of these goals are achievable. In fact, I&#8217;d like to do more
than just what I listed here, but these are the ones I&#8217;m willing to commit to.
Frankly, I can&#8217;t wait to see how this year shapes up. If it turns out to be
anything like last year, I&#8217;m in for quite a ride.</p>
</div> 
]]>
</description>
      <dc:subject>Blogs, Eric Florenzano</dc:subject>
      <dc:date>2009-01-02T22:19:17+01:00</dc:date>
    </item>

    <item>
      <title>SHA&#45;256 in Erlang</title>
      <link>http://www.planeterlang.org/en/planet/article/SHA-256_in_Erlang/</link>
      <guid>http://www.planeterlang.org/en/planet/article/SHA-256_in_Erlang/</guid>
      <author>steve</author>
      <description><![CDATA[<p><a rel="nofollow" target="_blank" href="http://www.sriramkrishnan.com/blog/">Sriram Krishnan</a> was recently <a rel="nofollow" target="_blank" href="http://www.sriramkrishnan.com/blog/2008/12/thoughts-on-erlang.html">lamenting the lack of SHA-256 support</a> in <a rel="nofollow" target="_blank" href="http://erlang.org/doc/man/crypto.html">Erlang&#8217;s crypto module</a>, so just for fun I wrote a simple <a href="http://steve.vinoski.net/code/sha256.erl">sha256 module</a> based on the <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/SHA1">pseudocode in Wikipedia</a>. The tests use the test data from <a rel="nofollow" target="_blank" href="http://www.aarongifford.com/computers/sha.html">this C implementation</a>.</p>
<p><em>[Update: I&#8217;ve posted a <a href="http://steve.vinoski.net/blog/2009/01/03/more-sha-in-erlang/">new module</a> that implements more SHA digest variants and so renders this module obsolete.]</em></p> 
]]>
</description>
      <dc:subject>Blogs, Steve Vinoski</dc:subject>
      <dc:date>2009-01-02T15:05:05+01:00</dc:date>
    </item>

    <item>
      <title>Chatterl &#45; Erlang based chat engine</title>
      <link>http://www.planeterlang.org/en/planet/article/Chatterl_-_Erlang_based_chat_engine/</link>
      <guid>http://www.planeterlang.org/en/planet/article/Chatterl_-_Erlang_based_chat_engine/</guid>
      <author></author>
      <description><![CDATA[<p>Well I&#8217;ve been hacking around for the past few months trying to get my head around Erlang. After playing around with Twitterl I decided I should start a new project (OTP based) which I have a decent understanding of &#38; have wanted to work on for some time. A chat system was the first thing [...]</p> 
]]>
</description>
      <dc:subject>Blogs, Baphled</dc:subject>
      <dc:date>2009-01-02T00:00:05+01:00</dc:date>
    </item>

    <item>
      <title>The Year That Will Be</title>
      <link>http://www.planeterlang.org/en/planet/article/The_Year_That_Will_Be/</link>
      <guid>http://www.planeterlang.org/en/planet/article/The_Year_That_Will_Be/</guid>
      <author></author>
      <description><![CDATA[<p>It&#8217;s 2009 now.  <h2>Scala and Erlang</h2><p>
I met Erlang 2 years ago, which finally brings me to Scala. I learnt a lot from Erlang, and I entered the Scala world with Erlang atmosphere surrounding me. The FP, the Pattern Match, the Actor/Process, I found these familiar friends in Scala everywhere.
</p><p>
Scala has extra bonus, to me. The domains I faced are usually with a lot of business logic, or, the worlds I try to describe are not only messages, they are, models I don&#8217;t think are suitable to describe in Function only.  <p>
The world itself is OO/FP mixed, like Martin&#8217;s quote: Two sides of coin. It&#8217;s something like the Particle/Wave in Quantum. The world is an infinite whole, but the reason of Human Being is always finite, it&#8217;s an unsolvable contradiction: Infinity vs Finite. We have to read our world in OO and, in FP, in snapshot and in continuation.
<p>
There won&#8217;t be &#8220;Super Hero&#8221; in computer languages, the world is getting self-organization and harmony, so do the languages. Each language is living in an eco-system, born, growing via interacting with environment, disappear ...  <h2>The Economy</h2>
It was bad in 2008. I tried to do some computing on stock market based on my neural network. What I can say is it will be swing in the next half-year, no big drop, no big rise. The Shanghai Stock Index will swing between 1200 and 3000. At least, no big worse any more.  <h2>My Self</h2>
I need to make some big decisions in this a year.
<p>&nbsp;</p> 
]]>
</description>
      <dc:subject>Blogs, Caoyuan Blog</dc:subject>
      <dc:date>2009-01-01T02:40:54+01:00</dc:date>
    </item>

    <item>
      <title>A Case Study of Scalability Related &#8220;Out of memory&#8221; Crash in Erlang</title>
      <link>http://www.planeterlang.org/en/planet/article/A_Case_Study_of_Scalability_Related_Out_of_memory_Crash_in_Erlang/</link>
      <guid>http://www.planeterlang.org/en/planet/article/A_Case_Study_of_Scalability_Related_Out_of_memory_Crash_in_Erlang/</guid>
      <author></author>
      <description><![CDATA[<p>
We are building a platform for message switching, in Erlang. Everything looks OK on stability and features. It actually have run more than half year with zero down. We tested its performance on our 2-core CPU machine before, and got about 140 transactions/second, it&#8217;s good enough.
<p>
Then, we got a 8-core CPU machine several weeks ago, and we did same performance testing on it, to see the scalability. Since Erlang is almost perfect on scalability, you can image the result, yes, about 700 transactions/second now, scaled almost linear. Until it crashed with &#8220;out of memory&#8221; when million hits processed.
<p>
It left a very big &#8220;erl_crash.dump&#8221; file there, I had to dig the issue now. My first guess was, were some remote requests (access db, access remote web service etc) timeout but the process itself was not timeout yet, and cause more and more processes kept in VM?
<p>
A quick <b>grep &#8220;=proc:&#8220; erl_crash.dump</b> showed that the total number of processes was about 900, which was resonable for our case.
<p>
So, which process ate so many memory? A quick <b>grep &#8220;Stack+head&#8221; erl_crash.dump</b> showed that there was indeed a process with 285082125 size of Stack+head there.
<p>
Following this clue, I caught this process:
<pre>
=proc:&lt;0.4.0&gt;
State: Garbing
Name: error_logger
Spawned as: proc_lib:init_p/5
Last scheduled in for: io_lib_format:pad_char/2
Spawned by: &lt;0.1.0&gt;
Started: Sun Apr 1 01:21:50 2012
Message queue length: 2086029
Number of heap fragments: 1234053
Heap fragment data: 281266956
Link list: [&lt;0.27.0&gt;, &lt;0.0.0&gt;, {from,&lt;0.42.0&gt;,#Ref&lt;0.0.0.88&gt;}]
Reductions: 72745575
Stack+heap: 285082125
OldHeap: 47828850
Heap unused: 121777661
OldHeap unused: 47828850
Program counter: 0x0764c66c (io_lib_format:pad_char/2 + 4)
CP: 0x0764c1b4 (io_lib_format:collect_cseq/2 + 124)
</pre>  <p>
This bad guy was error_logger, which is from OTP/Erlang standard lib: <b>error_log</b>, writing received messages to log file or tty. The typical usage is:
<pre class="sh_erlang">
error_logger:info_msg(&#8220;~p:~p &#8220; ++ Format, [?MODULE, ?LINE] ++ Data))
</pre>
<p>
Which will format Data to a <b>String</b> according to the Format string, and write it to tty or log file.
<p> The above case showed the message queue length of process &#8220;error_logger&#8221; had reached 1234053, and the Stack+heap is 285082125, about 272M size.  <p>
So the cause may be, that the message queue could not be processed in time, the messages were crowded in error_logger&#8217;s process and finally caused &#8220;out of memory&#8221;. The bottle-neck was that when error_logger tried to format the message to String, Erlang VM was weak on processing them, which seemed to need a lot of CPU cycles.
<p> In my previous blog, I talked about Erlang is bad on massive text processing. Erlang processes String/Text via List, which is obvious bottle-neck in Erlang now, with Erlang is getting much and much popular and more and more Erlang applications are written.
<p>
But, why this did not happen on our 2-core CPU machine? It&#8217;s an interesting scalability related problem:
<p>
&#8220;error_logger&#8221; module will registered one and only one process to receive and handle all log messages. But Erlang VM&#8217;s scheduler can not distribute <b>ONE</b> process to use multiple CPUs&#8217; computing ability. In our 2-core machine, the whole ability is about 140 transactions/second, the one process of &#8220;error_logger&#8221; just happened to have the power to handle corresponding log messages in time. Under 8-core CPUs machine, our platform scales to handle 700 transactions/second, but there still only one process of &#8220;error_logger&#8221;, which can not use 8-core CPUs&#8217; ability at all, and finally fail on it.
<p>
BTW, I think error_logger should cut its message queue when can not process them in time (disk IO may also be slower than receiving messages).
<p> 
]]>
</description>
      <dc:subject>Blogs, Caoyuan Blog</dc:subject>
      <dc:date>2008-12-31T20:42:51+01:00</dc:date>
    </item>

    <item>
      <title>The Best of Bill &#45; 2008</title>
      <link>http://www.planeterlang.org/en/planet/article/The_Best_of_Bill_-_2008/</link>
      <guid>http://www.planeterlang.org/en/planet/article/The_Best_of_Bill_-_2008/</guid>
      <author></author>
      <description><![CDATA[<p>It&#8217;s time for the last post of 2008. On December 31, 2004, I created a &#8220;Best of Bill&#8221; posting for 2004 and it was quite popular (based on the number of unique hits the posting got). So, I continued the tradition each successive year after that. Since 2007 my year-end posting has been cumulative, so it includes the best postings from previous years as well. The latest cumulative summary is always available from the side bar (via the &#8220;Best Posts&#8221; link).<br> <br> You can always find my past weblog postings by either drilling down from the monthly summaries (available when you click on the month name in the calendar in the side bar or by clicking on the month name in the summary below) or by using the search utility (also in the side bar). It&#8217;s hard to know which posts others find most interesting, but hit counts and email comments seem to be as good a measure as any. So, a feature that I introduced to the summary (from 2006 onward) is that I&#8217;ve flagged (using &#8220;[*]&#8220; as the &#8220;flag&#8221;) the posts that either got the most &#8220;hits&#8221; on my blog each month or ones that resulted in a significant amount of email to me. However, when one of my posts appears on Reddit or Digg, that always drives up the page count even though the post may not be what I would have considered one of my &#8220;better&#8221; posts. So, I use some &#8220;subjective&#8221; assessment as well as raw numbers in my rankings. For a number of months, it was too close to call, so I flagged multiple high-ranking posts for those months. <br /><br /> I have deliberately tried to leave out of the summary any postings that are personal, or product/meeting announcements, or non-Lisp related (although my definition of &#8220;lisp-related&#8221; might be fairly &#8220;broad&#8221; in some cases <img src="http://www.planeterlang.org/images/smileys/wink.gif" width="19" height="19" alt="wink" style="border:0;" /> ). <br><br> My five &#8220;most popular&#8221; posts of the past year were:<ol> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080429.html"> What Emacs is to editors, Stumpwm is to window managers</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081201.html"> Clojure could be to Concurrency-Oriented Programming what Java was to OOP</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080128.html"> Hacking the OLPC XO Laptop - Part 1: Initial Setup</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081209.html"> Understanding SLIME (Using Emacs and Lisp Cooperatively)</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080427.html"> My Lisp-centric &#8220;Good Easy&#8221;</a></li> </ol> Best wishes for the New Year and here is the 2003-2008 summary:<br><br> <b><u>2008:</u></b>  <ol> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0801.html"> <b>January:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080101.html"> Happy New Year and Happy 50th Birthday to Lisp!</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080110.html"> Installing w3m for Emacs Internet browsing on Mac OS X Leopard</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080111.html"> Lisp on the OLPC XO Laptop</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080116.html"> clbuild - (Lisp with Batteries Included - Part 2)</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080118.html"> Git for SBCL Hackers</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080128.html"> Hacking the OLPC XO Laptop - Part 1: Initial Setup</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080130.html"> Hacking the OLPC XO Laptop - Part 2: Xfce</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0802.html"> <b>February:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080204.html"> Hacking the OLPC XO Laptop - Part 3: Ubuntu</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080207.html"> Hacking the OLPC XO Laptop - Part 4: Debian and Ratpoison</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080229.html"> Summary of lispvan February meeting - Doing Evil Things with CL</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0803.html"> <b>March:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080325.html"> What a Long Strange Trip It&#8217;s Been</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080327.html"> The OLPC XO &#8220;sticky key&#8221; Syndrome</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0804.html"> <b>April:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080427.html"> My Lisp-centric &#8220;Good Easy&#8221;</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080429.html"> What Emacs is to editors, Stumpwm is to window managers</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0805.html"> <b>May:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080523.html"> Summary of lispvan May 2008 meeting - LoL with Drew</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0807.html"> <b>June:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080616.html"> Lisp by Analogy: Macros=Kanji, Continuations=YouTube</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080620.html"> Summary of lispvan June 2008 meeting - Using PLT Scheme for Game Development</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0807.html"> <b>July:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080704.html"> Lisp in the Comics - Part 4</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080714.html"> iPhone: Ubiquitous Computing circa 2008</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080724.html"> Summary of lispvan July 2008 meeting - Web development with Lisp and UCW (With Lisp it&#8217;s cheaper)</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0808.html"> <b>August:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080821.html"> Little Brother</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0809.html"> <b>September:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080923.html"> Embed Books in a Web Page</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080926.html"> Summary of lispvan September 2008 meeting - The BKNR Common Lisp web application development environment</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/080927.html"> iPhone version of my Blog</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0810.html"> <b>October:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081022.html"> Exploring Clojure (Lisp on the JVM) - Part 1</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081023.html"> Exploring Clojure (Lisp on the JVM) - Part 2 - Setup</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081027.html"> Exploring Clojure (Lisp on the JVM) - Part 3 - Some Language Features</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081029.html"> Exploring Clojure (Lisp on the JVM) - Part 4: Not Your Daddy&#8217;s Namespaces</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081031.html"> Exploring Clojure (Lisp on the JVM) - Part 5: Clojure Documentation using FreeMind</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0811.html"> <b>November:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081108.html"> Clojure is about programming to abstractions</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081116.html"> How I Use My Mac</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081118.html"> A Basic Emacs Setup for Clojure</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081120.html"> Clojure SLIME Mods for Java Documentation</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081128.html"> Summary of lispvan November 2008 meeting - 0x20 Years of Lisp Systems, a Personal Journey</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0812.html"> <b>December:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081201.html"> Clojure could be to Concurrency-Oriented Programming what Java was to OOP</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081205.html"> My Clojure Emacs Setup (I&#8217;ll show mine if you show yours)</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081206.html"> Clojure Blogs | Yahoo Pipes | Clojure Pipe</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/081209.html"> Understanding SLIME (Using Emacs and Lisp Cooperatively)</a> [*]</li> </ul></li> </ol>  <p> <b><u>2007:</u></b>  <ol> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0701.html"> <b>January:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070120.html"> SLIME Tips and Techniques - Part 1</a> [*] (See also <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070121.html"> Part 2</a>, <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070122.html"> Part 3</a>, <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070129.html"> Part 4</a>, <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070208.html"> Part 5</a>, <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070424.html"> Part 6</a>, <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070425.html"> Part 7</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070125.html"> Emacs Keymaps and the SLIME scratch buffer</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0702.html"> <b>February:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070225.html"> Using &#8220;Open with&#8221; Emacs on a Mac</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0703.html"> <b>March:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070301.html"> God Wrote in Lisp Code</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070302.html"> Darcs Repositories for Edi Weitz&#8217;s Libraries</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070306.html"> Emacs and Google Calendars</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070319.html"> Mac OS X GeekTool</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070322.html"> Emacs GeekTool</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0704.html"> <b>April:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070403.html"> Lisp with Batteries Included</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070408.html"> KPAX - A CL Web Application Framework</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070409.html"> Knowledge Representation Tutorial</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0705.html"> <b>May:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070503.html"> Backups and the Cobbler&#8217;s Children</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070504.html"> Lisp Blogs | Yahoo Pipes | Lisp Mashup</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070514.html"> Concurrent Beer Song in Erlang</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070515.html"> Lispdoc - Online Lisp Documentation Search</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070520.html"> MapReduce Beer Song in Erlang</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070523.html"> Farm Where the Fertilizer is Thickest</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070527.html"> Concurrent Beer Song in Erlang - Part 2</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070528.html"> Distel = Emacs erlang-mode++</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0707.html"> <b>June:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070601.html"> Parallel Map Beer Song in Erlang</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070611.html"> Y Combinator in Erlang</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070613.html"> Test Libraries for Erlang</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070615.html"> My Emacs Color Themes</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0707.html"> <b>July:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070711.html"> Quicksilver for Emacs: anything.el</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070713.html"> Live Code Update in Erlang</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070719.html"> Distel = Erlang-like Concurrency in Emacs</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0708.html"> <b>August:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070810.html"> Summary of lispvan August 2007 meeting: JazzScheme</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070813.html"> Gnus and Gmail Setup for Dummies</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070827.html"> Getting Git on Mac OS X</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070830.html"> View PDF/PS/DVI files in an Emacs buffer</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0709.html"> <b>September:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070904.html"> Converting QuickTime Movies to Ogg</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070924.html"> Reddit Clone with Hunchentoot</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/070927.html"> SLIME Refactoring</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0710.html"> <b>October:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/071001.html"> Emacs Running All The Time</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/071015.html"> Working with a Metadata-based DSL in Emacs</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/071028.html"> More LispCasts</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/071030.html"> How to start a Lisp User Group</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0711.html"> <b>November:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/071103.html"> Regex-tool for Emacs</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/071112.html"> Why you should buy an OLPC XO Laptop</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/071118.html"> The reason there&#8217;s a &#8220;Cult of Mac&#8221;</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/071129.html"> Running Windows/Linux in a VM on Mac OS X</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0712.html"> <b>December:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/071226.html"> Emacs Fortune File</a> [*]</li> </ul></li> </ol>  <p> <b><u>2006:</u></b>  <ol> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0601.html"> <b>January:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060105.html"> Concurrent/Parallel Programming - The Next Generation </a> (Follow-ups were posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060111.html"> here</a>, <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060212.html"> here</a>, and <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060509.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060116.html"> Surviving Emacs</a> (Follow-ups were posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041024.html"> here</a>, <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041029.html"> here</a>, <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060131.html"> here</a>, <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060609.html"> here</a>) [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060118.html"> Lisp is for Entrepreneurs</a> (Follow-up posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060304.html"> here</a>) [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060122.html"> Update on Termite (A Lisp for Concurrent/Parallel Programming)</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0602.html"> <b>February:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060205.html"> Falling off the wagon with DrScheme </a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060216.html"> New Lisp Online Search Tools</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060219.html"> Summmary of lispvan February 2006 meeting: PLT Scheme Simulation Collection</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060222.html"> Who is this guy?</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060224.html"> The Most Important Idea in Computer Science </a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0603.html"> <b>March:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060302.html"> The Emacs Learning Curve</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060317.html"> St Patrick&#8217;s Day Update on CROMA - An Arc-like Lisp </a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060322.html"> Graphing Directories with Flash and CL </a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060323.html"> Summmary of lispvan March 2006 meeting: DSL&#8217;s and Lisp Work </a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0604.html"> <b>April:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060403.html"> The Best Open Source CL Implementation</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060409.html"> Fractal Movies in Lisp - Part 2</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060415.html"> Emacs Nostalgia</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060421.html"> Summmary of lispvan April 2006 meeting: Wearing Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060422.html"> Screen and the Benefit of a Change of Perspective </a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0605.html"> <b>May:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060515.html"> CL-MUPROC - Erlang-style Concurrent Programming in CL</a> (Follow-up posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060711.html"> here</a>) [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060529.html"> Firefox for Emacs users</a> (Follow-up posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060603.html"> here</a>) [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0606.html"> <b>June:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060601.html"> Summary of lispvan May 2006 meeting: Surviving Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060604.html"> Elephant and Rucksack - Comparison of two CL Open Source Prevalence packages</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060606.html"> SBCL, 666, and the Number of the Beast </a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060620.html"> Mac OS X for Emacs Users</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060623.html"> Emacs Keyboard Customizations </a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060624.html"> Using SLIME to Front-end your App</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0607.html"> <b>July:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060709.html"> MOP Retrospective - Gregor Kiczales speaks to lispvan </a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0608.html"> <b>August:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060811.html"> Lisp is the Red Pill</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060819.html"> Summary of lispvan August meeting - Web Continuations Considered Harmful</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060828.html"> LispM Manuals Online</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0609.html"> <b>September:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060912.html"> Concurrency-related Updates</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060925.html"> Summary of lispvan September meeting - Client-side continuations for web programming</a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0610.html"> <b>October:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061004.html"> Paul Graham is still working on Arc</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061005.html"> The Kenny Tilton CLL fortune file</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061013.html"> Hunchentoot - The CL web server formerly known as TBNL</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061015.html"> Some MzScheme Interactive Stuff for console/emacs use</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061023.html"> VM and Gmail Setup for Dummies </a> [*]</li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0611.html"> <b>November:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061106.html"> Summary of lispvan October meeting - The PLT Scheme Inference Collection Monday, November 6, 2006</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061112.html"> Minimal .emacs for Win32</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061115.html"> We&#8217;ll always have Emacs</a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061119.html"> Black Hat and White Hat Hacking with Lisp </a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061122.html"> Macro Stepper for DrScheme</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061129.html"> SBCL 1.0</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0612.html"> <b>December:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061212.html"> Object Debugger for DrScheme </a> [*]</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061220.html"> Learning Lisp from Franz - Part 2</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/061226.html"> The Programmer Hierarchy</a></li> </ul></li> </ol>  <p> <b><u>2005:</u></b>  <ol> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0501.html"> <b>January:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050105.html"> DSL Design Considerations</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050106.html"> LispWorks Professional/Enterprise with Emacs/SLIME on Win32</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050110.html"> Audio of Paul Graham&#8217;s &#8220;Great Hackers&#8221; talk</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050111.html"> Symbolics domain name is #1</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050117.html"> Parallel Computing in Lisp</a> (Follow-ups were posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050119.html"> here</a> and <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050125.html"> here</a> and <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050716.html"> here</a>)</li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0502.html"> <b>February:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050213.html"> Escher in Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050215.html"> Minion-bot for AIM</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0503.html"> <b>March:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050323.html"> Reading Paul Graham&#8217;s essays online</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050327.html"> CL Implementations for Mac OS X</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0504.html"> <b>April:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050417.html"> Customizing Emacs for Mac OS X</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050423.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050429.html"> Zen and the Art of Lisp Programming</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0505.html"> <b>May:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050501.html"> CL, Music and SLIME Tutorials</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0506.html"> <b>June:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050608.html"> Dynamically Edit/Debug Lisp Web Apps with SLIME</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050615.html"> Lispwire - A New Lisp Software Repository</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050616.html"> Some useful CL debugging code</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050620.html"> ILC2005 Conference Photos</a> (Follow-ups were posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050621.html">here</a> and <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050622.html"> here</a>)</li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0507.html"> <b>July:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050704.html"> Martin Fowler thinks DSL&#8217;s are Hot</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050711.html"> Developing DSL&#8217;s in Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050714.html"> CLSQL and PostgreSQL on Mac OS X</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050724.html"> Fractal Movies in Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050727.html"> Uncommon Web &#8220;Hello World&#8221; Tutorial Movie</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050728.html"> Definitive SLIME Tutorial Movie</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050731.html"> Continuations in Uncommon Web</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0508.html"> <b>August:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050801.html"> Long Form of define-method-combination in CLOS</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050803.html"> All Your Closures Are Belong To Us</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050810.html"> Hints to Macro Writers</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050817.html"> Some Things Need to be Easy, and Not Just Possible, to Take Advantage of Them</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050824.html"> OpenMCL Presentation</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050826.html"> Summmary of lispvan August 2005 meeting - Seaside movie</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050831.html"> Resistance is Futile - LispWorks Editor Customizations</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0509.html"> <b>September:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050901.html"> SLIME Web Development Workflow</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050908.html"> Learning CL Web Application Development</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050911.html"> Return of the Lisp Machine</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050913.html"> The Holy Grail of Business App Development</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050914.html"> Doing the Undoable</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050919.html"> CL&#8217;s MOP vs Java&#8217;s Reflection</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/050923.html"> What&#8217;s so great about jazz?</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0510.html"> <b>October:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051002.html"> MIT Open Sources the LispM Code</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051003.html"> LispM Links</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051004.html"> Managing CL Libraries</a> (Follow-up posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/060108.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051008.html"> Now, you too can write a best-selling Lisp book!</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051011.html"> How are Lisps implemented?</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051012.html"> ASDF Dependency Graphs</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051021.html"> Summmary of lispvan October 2005 meeting - Extreme CL Presentation</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051024.html"> Lisp is the red pill</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051028.html"> Lisp Logos</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051123.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051029.html"> Maxima, SBCL, Emacs, Imaxima, oh my!</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0511.html"> <b>November:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051101.html"> Franz and Macsyma</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051120.html"> Summmary of lispvan November 2005 meeting - AllegroCache and Dabble movies</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0512.html"> <b>December:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051214.html"> Learning Lisp from Franz</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051215.html"> Lisp Books</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051216.html"> LispWorks HTTP Client/Server Movie</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051219.html"> Using a Lisp Web Server Behind Apache</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051221.html"> (Re)writing Reddit in Lisp Movie</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051223.html"> Summmary of lispvan December 2005 meeting: Lisp on Lines movie</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051227.html"> Remote Lisp Development with SLIME/Emacs</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051228.html"> Using Circular Structures in CL</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/051230.html"> Creating Stand-Alone EXE&#8217;s With CLISP</a></li> </ul></li></ol>  <p> <b><u>2004:</u></b>  <ol> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0401.html"> <b>January:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040109.html"> What is the best Open Source Lisp?</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040111.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040117.html"> Setting up Emacs for PLT Scheme</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040126.html"> VisiCalc-like development in Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040127.html"> Linux written in Lisp!</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040128.html"> What is Lisp best suited for?</a></li> </ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0402.html"> <b>February:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040205.html"> Lisp and the future of development environments at the EclipseCon conference</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040207.html"> The 3 Worlds of Lisp Development</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040221.html"> How to make money with Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040223.html"> Dynamically changing running Lisp code</a> (Follow-ups were posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040224.html"> here</a> and <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040225.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040229.html"> New Alternatives for Developing CL code with Emacs</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0403.html"> <b>March:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040303.html"> Using SLIME/Emacs with Allegro CL on Windows</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040304.html"> Reconnecting to a running Lisp with SLIME</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040306.html"> Configuring SLIME for 3 Win32 CL Implementations</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040308.html"> Lisp is slow (NOT!)</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040310.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040314.html"> Why Learn Lisp?</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040315.html"> Using LispWorks Personal with Emacs/SLIME on Windows</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0404.html"> <b>April:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040402.html"> Common Lisp is the Borg of programming languages</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040404.html"> Modal (Continuation-based) Web Server Framework example</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040412.html"> Modifying Object behavior in CL</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040425.html"> Coming to Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040427.html"> Parallel Computing in Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040430.html"> Thinking in Java/Lisp</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0405.html"> <b>May:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040512.html"> Code Walkers in Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040514.html"> Online sources of On Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040520.html"> Lisp Books</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040521.html"> Implementing call/cc in CL</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040523.html"> Nesting backquotes</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040526.html"> CL SAX XML Parser Out-Performs Java Xerces</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040527.html"> Funcallable Macros</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0406.html"> <b>June:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040602.html"> Using MySql with Allegro CL</a> (Follow-ups on CLSQL were posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040606.html"> here</a> and <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040608.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040610.html"> Symbolics LispM&#8217;s - What might have been</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040613.html"> CL and Tail-Call Elimination</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040614.html"> CL proven to be the best programming language <img src="http://www.planeterlang.org/images/smileys/wink.gif" width="19" height="19" alt="wink" style="border:0;" /></a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040616.html"> Gregory Chaitin, Math, Philosophy and Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040619.html"> Genetic Programming in Common Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040623.html"> SOAP Web Services in CL</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040627.html"> CL to Java</a> (Follow-ups were posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040703.html"> here</a>, <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040707.html"> here</a>, and <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040711.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040628.html"> Debugging Approaches in CL</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040922.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040630.html"> CL Implementation Benchmarks on Win2000</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0407.html"> <b>July:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040704.html"> Setting Up SLIME for Win32 CL Implementations</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040715.html"> Hackers &amp; Painters</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0408.html"> <b>August:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040811.html"> Mandelbrot Set ASCII art</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040822.html"> Initializing structures in CL using BOA Constructors</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040823.html"> Object Prevalence in CL</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040826.html"> Printing CLOS class graphs</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040829.html"> here</a>)</li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0409.html"> <b>September:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040916.html"> AllegroCache - Object-Prevalence++</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040919.html"> Allegro Prolog - A Prolog in Lisp</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040920.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040927.html"> Lisp .Net</a> (Follow-ups were posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041210.html"> here</a> and <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041216.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/040930.html"> Another CL to Java option - Lisplets</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041001.html"> here</a>)</li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0410.html"> <b>October:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041003.html"> Loop extensibility</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041007.html"> Elephant Object Database now works on Win32</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041008.html"> Araneida web server now works on Win32</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041012.html"> CL HTML template languages</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041017.html"> CL Web Server Options</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041020.html"> Lisppaste - an interesting program</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041022.html"> CL Symbols</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041030.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041023.html"> Introduction to CL development environments</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041024.html"> Surviving Emacs</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041029.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041027.html"> Lisp Success Stories</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041028.html"> Trivial Socket programming in CL</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0411.html"> <b>November:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041103.html"> XSLT-like processing in CL</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041105.html"> Using the Apache Web Server with CL on Win32</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041111.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041106.html"> Re-building stale FASL files after ACL upgrade</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041109.html"> ACL 7.0 is smokin!</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041113.html"> Locating ASDF packages on Win32</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041130.html"> How do people develop code in CL?</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0412.html"> <b>December:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041203.html"> CL Implementations</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041205.html"> Nested Backquotes considered harmful</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041207.html"> OS X - My new Lisp platform</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041215.html"> The Lisp Difference</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041219.html"> Using LispWorks Personal with Emacs/SLIME on Mac OS X</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041220.html"> Metaprogramming is hard</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041221.html"> DSL and Metaprogramming Resources</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041222.html"> ASDF Build Directories</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/041229.html"> Use continuations to develop complex Web applications</a></li></ul></li> </ol>  <p> <b><u>2003:</u></b>  <ol> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0308.html"> <b>August:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030822.html"> First weblog posting! - Lisp Web Server APIs</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030826.html"> Concise Code and Packages</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030828.html"> Continuation-based web servers</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030831.html"> Continuation State Issues</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0309.html"> <b>September:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030901.html"> Continuations and CL Cookbook mods</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030902.html"> Web Interactions paper</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030903.html"> On Lisp gems</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030908.html"> More Continuation stuff</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030911.html"> Experimenting with Cells</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030920.html"> JavaScript and Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030921.html"> Philip Greenspun&#8217;s Epiphany</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030922.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030927.html"> Elevator Pitch: Continuations for Web Apps</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/030928.html"> Java/Smalltalk Web Framework comparison</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0310.html"> <b>October:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031002.html"> CL Hyperspec in Info format in Emacs</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031014.html"> Back from ILC2003</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031030.html"> Rebel With a Cause</a></li></ul></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0311.html"> <b>November:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031101.html"> Using Emacs as a Lisp IDE now on CL Cookbook site</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031102.html"> I&#8217;m Learning Scheme Again</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031103.html"> R5RS in Info format in Emacs</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031106.html"> Where is macroexpand in Scheme?</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031107.html"> CPS transformer that provides a restricted call/cc for Common Lisp</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031112.html"> Macroexpand in PLT Scheme</a> (A follow-up was posted <a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031113.html"> here</a>)</li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031114.html"> Article about Seaside - a continuation-based Web Framework in Smalltalk</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031122.html"> Continuation-based Web Framework for CL</a></li></ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/0312.html"> <b>December:</b></a><ul> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031203.html"> Multi-Paradigm Development</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031204.html"> A useful function when working with Scheme in Emacs - Eval DWIM</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031205.html"> Another useful Emacs function - Balanced Comments</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031207.html"> Some more useful Emacs code - Enable Greek fonts for pretty-lambda - in quack.el</a></li> <li><a rel="nofollow" target="_blank" href="http://bc.tech.coop/blog/031212.html"> Some good intros to Scheme macros</a></li></ul></li></ol>  <p>&nbsp;</p> 
]]>
</description>
      <dc:subject>Blogs, Bill Clementson</dc:subject>
      <dc:date>2008-12-31T16:31:12+01:00</dc:date>
    </item>

    <item>
      <title>OneTeam for iPhone 1.2.0</title>
      <link>http://www.planeterlang.org/en/planet/article/OneTeam_for_iPhone_1.2.0/</link>
      <guid>http://www.planeterlang.org/en/planet/article/OneTeam_for_iPhone_1.2.0/</guid>
      <author>Mickaël Rémond</author>
      <description><![CDATA[<p>OneTeam for iPhone 1.2.0 is scheduled for submission on Apple Appstore.  <p>OneTeam for iPhone is a Jabber / XMPP for iPhone that supports a large subset of the XMPP protocol. It is clean, easy to use and to not rely on third party server (it connects directly to your XMPP server).</p>

<p>I think we have reached a point in development where we are really happy with this client. It supports a really large number of XMPP server and authentication method. One of our biggest surprise has been with iChat server that require very unusual authentication methods. OneTeam for iPhone is probably one of the few XMPP clients that now supports it.</p>

<p>We have been quite far today in supporting XMPP features. For example we support gateways discovery and configuration directly from the phone (and gateway contact addition as well). The next big feature is probably be going to be groupchat support.</p>

<p>We are listening to your comments to help us improve this mobile XMPP client. Currently we think it is one of the most usable mobile client, but we are expecting to make it even better. Your feedback is welcome <img src="http://www.planeterlang.org/images/smileys/smile.gif" width="19" height="19" alt="smile" style="border:0;" /></p>

<p>More details on the product page <a href="/en/solutions/oneteam_iphone/">OneTeam for iPhone</a>.</p> 
]]>
</description>
      <dc:subject>Companies, ProcessOne</dc:subject>
      <dc:date>2008-12-30T17:30:00+01:00</dc:date>
    </item>

	
    </channel>
</rss>