
<?phpxml version="1.0" encoding="utf-8"?>
<rss version="2.0" 
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
>
<channel>
<title>Planet Erlang / Published News</title>
<link>http://www.planeterlang.org</link>
<description>Pligg Web 2.0 Content Management System  votes</description>
<pubDate>Tue, 22 Jul 2008 20:10:07 CEST</pubDate>
<language>en</language>
<item>
<title><![CDATA[Itching my programming nerve]]></title>
<link>http://www.planeterlang.org/out.php?title=Itching_my_programming_nerve</link>
<comments>http://www.planeterlang.org/story.php?title=Itching_my_programming_nerve</comments>
<pubDate>Tue, 22 Jul 2008 20:10:07 CEST</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Itching_my_programming_nerve</guid>
<description><![CDATA[Photo: oreillygmt<br />I've just got back from the first ever commercial Erlang conference. Some 40 talks in two days all related in some way or other to Erlang. It was a chance to meet old friends, make new friends and  connect people together in the hope that new synergy effects would arise.<br /><br />The most exciting thing was the emergence of what I think might be the first killer applications written in<br/><br/>7 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[UBF and VM opcocde design]]></title>
<link>http://www.planeterlang.org/out.php?title=UBF_and_VM_opcocde_design</link>
<comments>http://www.planeterlang.org/story.php?title=UBF_and_VM_opcocde_design</comments>
<pubDate>Fri, 11 Jul 2008 09:09:38 CEST</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=UBF_and_VM_opcocde_design</guid>
<description><![CDATA[UBF is a data encoding that allows structured terms (rather like XML) to be sent over the network. It also includes a protocol checking scheme to automatically determine if sequences of typed messages follow a particular protocol.<br /><br />This blog entry was stimulated by this posting on the erlang mailing list.<br /><br />One of the basic ideas of UBF of was to send programs not data structures. The programs<br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Invasion of Privacy]]></title>
<link>http://www.planeterlang.org/out.php?title=Invasion_of_Privacy</link>
<comments>http://www.planeterlang.org/story.php?title=Invasion_of_Privacy</comments>
<pubDate>Wed, 25 Jun 2008 16:58:42 CEST</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Invasion_of_Privacy</guid>
<description><![CDATA[On 18 June the Swedish Parliament passed a law giving sweeping new powers to the FRA (Swedish Defense Radio Establishment) allowing them to wiretap people in Sweden through phone conversations, email, text messages and more.<br /><br />All people in Sweden using electronic communication can have their communication monitored despite the fact that they are not suspected of committing any crime.<br /><br />In my view<br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Refactoring Erlang]]></title>
<link>http://www.planeterlang.org/out.php?title=Refactoring_Erlang</link>
<comments>http://www.planeterlang.org/story.php?title=Refactoring_Erlang</comments>
<pubDate>Fri, 30 May 2008 19:48:07 CEST</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Refactoring_Erlang</guid>
<description><![CDATA[<p>I&#8217;ve been playing around a bit with Wrangler&#8212;an Erlang refactoring package for Emacs. I like what I&#8217;ve seen of it so far but turning it on and off is a little ugly. Typing <code>M-x erlang-refactor-on</code> and <code>M-x erlang-refactor-off</code> gets tiresome after the third time.</p><br /><p>So I whipped up a function to toggle Wrangler on and off:</p><br /><pre><br />(setq erlang-refactor-status 0)<br />(defun toggle-erlang-refactor ()<br />  (interactive)<br />  (cond ((= erlang-refactor-status 0)<br />	 (call-interactively 'erlang-refactor-on)<br />	 (setq erlang-refactor-status 1))<br />	((= erlang-refactor-status 1)<br />	 (call-interactively 'erlang-refactor-off)<br />	 (setq erlang-refactor-status 0))))<br /></pre><br /><p>I dropped this into distel_config.el and bound it to <code>C-c C-r</code> like so:</p><br /><pre><br />(global-set-key (kbd "C-c C-r") 'toggle-erlang-refactor)<br /></pre><br /><p>Voila! Instant refactor mode toggle with two keystrokes.</p><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Another Bit O’ Erlang News]]></title>
<link>http://www.planeterlang.org/out.php?title=Another_Bit_Orsquo_Erlang_News</link>
<comments>http://www.planeterlang.org/story.php?title=Another_Bit_Orsquo_Erlang_News</comments>
<pubDate>Fri, 30 May 2008 19:47:58 CEST</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Another_Bit_Orsquo_Erlang_News</guid>
<description><![CDATA[<p>I can now announce my remaining Erlang project has come to fruition. Namely: Erlang By Example is now live and available for download.</p><br /><p>I’m always interested in suggestions in how I can make the screencasts better. Send suggestions to <b>kevin at (remove this) hypotheticalabs period com</b>. They’re targeted towards someone completely new to the language, so bear that in mind when writing up suggestions.</p><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[New ejabberd 2.0.1 installer released for Windows]]></title>
<link>http://www.planeterlang.org/out.php?title=New_ejabberd_2-0-1_installer_released_for_Windows</link>
<comments>http://www.planeterlang.org/story.php?title=New_ejabberd_2-0-1_installer_released_for_Windows</comments>
<pubDate>Fri, 30 May 2008 19:45:43 CEST</pubDate>
<dc:creator></dc:creator>
<category>ejabberd</category>
<guid>http://www.planeterlang.org/story.php?title=New_ejabberd_2-0-1_installer_released_for_Windows</guid>
<description><![CDATA[A version 4 of the Windows installer for ejabberd has been released to fix a problem related to SMP support on Windows with Erlang R12. <p>If you have downloaded a previous version of the installer, and if it does not work for you, you can give another try with the latest release, from the ejabberd download page.</p><br /><p>Erlang R12 is unsupported yet on Windows and will only be supported with the 2.0.2 release.</p><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[The Road we didn't go down]]></title>
<link>http://www.planeterlang.org/out.php?title=The_Road_we_didnt_go_down</link>
<comments>http://www.planeterlang.org/story.php?title=The_Road_we_didnt_go_down</comments>
<pubDate>Tue, 27 May 2008 08:51:24 CEST</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=The_Road_we_didnt_go_down</guid>
<description><![CDATA[I've been following an interesting discussion on the Erlang mailing list where Steve Vinoski and friends have been telling us what's wrong with RPC.<br /><br />The discussion started on 22 May, the general topic of conversation was the announcement that facebook had deployed a chat server written in Erlang.<br /><br />In one of the posts Steve said:<br />"What all those years of CORBA taught me, BTW, is that RPC, for a<br/><br/>8 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Facebook chat is developed in Erlang]]></title>
<link>http://www.planeterlang.org/out.php?title=Facebook_chat_is_developed_in_Erlang</link>
<comments>http://www.planeterlang.org/story.php?title=Facebook_chat_is_developed_in_Erlang</comments>
<pubDate>Tue, 20 May 2008 12:57:04 CEST</pubDate>
<dc:creator></dc:creator>
<category>erlang</category>
<guid>http://www.planeterlang.org/story.php?title=Facebook_chat_is_developed_in_Erlang</guid>
<description><![CDATA[Facebook recently announced that their chat system is based on Erlang code running on a large cluster. It confirms that Erlang is the key tools for building large scale applications, especially for social networks. <p>Like ProcessOne has used Erlang to build its Instant Messaging suite of tools, Facebook is using Erlang to build its web based chat infrastructure.</p><br /><p>The system uses a Comet based programming approach. From our knowledge the system uses Mochiweb as its web server to handle the massive number of long polling connections.</p><br /><p>More details are available from Facebook engineering blog.</p><br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[A RESTful web service demo in yaws]]></title>
<link>http://www.planeterlang.org/out.php?title=A_RESTful_web_service_demo_in_yaws</link>
<comments>http://www.planeterlang.org/story.php?title=A_RESTful_web_service_demo_in_yaws</comments>
<pubDate>Sun, 13 Apr 2008 15:33:43 CEST</pubDate>
<dc:creator></dc:creator>
<category>yaws</category>
<guid>http://www.planeterlang.org/story.php?title=A_RESTful_web_service_demo_in_yaws</guid>
<description><![CDATA[This is going to be a very brief guide to creating an erlang application that provides a RESTful interface to create, read, update and delete user records. We also want to provide a very basic means of ensuring that requests are complete and are not missing elements or fields. ...<br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Erlang statistics]]></title>
<link>http://www.planeterlang.org/out.php?title=Erlang_statistics</link>
<comments>http://www.planeterlang.org/story.php?title=Erlang_statistics</comments>
<pubDate>Thu, 03 Apr 2008 17:41:54 CEST</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Erlang_statistics</guid>
<description><![CDATA[<p>Judging by the visitor statistics for erlang.org (as of 1 April 2008), the Erlang community seems to be doing well.</p><br /><p><img src='http://ulf.wiger.net/weblog/wp-content/uploads/2008/04/erlang-requests-per-month-080401.thumbnail.gif' alt='Erlang requests per month' /></p><br /><p>(Thanks, Bjarne Däcker, for producing the graphs).</p><br/><br/>5 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Indentation-sensitive Erlang 2]]></title>
<link>http://www.planeterlang.org/out.php?title=Indentation-sensitive_Erlang_2</link>
<comments>http://www.planeterlang.org/story.php?title=Indentation-sensitive_Erlang_2</comments>
<pubDate>Thu, 27 Mar 2008 12:04:20 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Indentation-sensitive_Erlang_2</guid>
<description><![CDATA[<p>So, I considered the comments (thank you, all), and thought I&#8217;d have another go at making the ending &#8216;dot&#8217; optional.</p><br /><p>I decided to introduce another token, &#8216;GAP&#8217;, to denote an empty line. Most likely, the scanner, in its current state, will not be able to handle empty lines with white space in them, etc, and the code is starting to look a bit confused. Oh well&#8230;</p><br /><p>The toplevel rule for a function now becomes:</p><br /><blockquote><p><code><br /><br />form -&gt; function dot : '$1'.<br /><br />form -&gt; function 'GAP' : '$1'.<br /><br /></code></p></blockquote><br /><p>and the rule for alternative function clauses is as before:</p><br /><blockquote><p><br /><code><br /><pre><br />function_clauses -&gt; function_clause : ['$1'].<br />function_clauses -&gt;<br />   function_clause ';' function_clauses : ['$1'|'$3'].<br />function_clauses -&gt;<br />  function_clause 'OUT' : ['$1'].<br />function_clauses -&gt;<br />  function_clause 'END' function_clauses : ['$1'|'$3'].<br /></pre><br /><p></code></p></blockquote><br /><p>The first two rules are the original rules for indentation-insensitive code. The last two are for the indentation tokens. The &#8216;OUT&#8217; token is for symmetry, to match the &#8216;IN&#8217; token after the arrow in function_body. Remember that indentation tokens are normalized in the scanner.</p><br /><p>The test program now looks like this:</p><br /><blockquote><p><br /><code><br /><pre><br />-module(test).<br /><br />-compile(export_all).<br />-scan(indentation).<br /><br />f(X) -><br />    X+2<br /><br />g(X) -><br />    X+4<br />.<br /><br />h(X) -><br />    Y = case X of<br />          a -><br />            {a}<br />          b -><br />            {b}<br />    end<br />    Y<br /><br />i(a) -> a<br />i(b) -> b<br /><br />test() -><br />    2 = f(0),<br />    4 = f(2),<br />    4 = g(0),<br />    8 = g(4),<br />    {a} = h(a),<br />    {b} = h(b),<br />    a = i(a),<br />    b = i(b),<br />    ok.<br /></pre><br /><p></code></p></blockquote><br /><p>A little bit better. The &#8216;end&#8217; tokens are still needed, though. One thing at a time&#8230;</p><br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Indentation-sensitive Erlang]]></title>
<link>http://www.planeterlang.org/out.php?title=Indentation-sensitive_Erlang</link>
<comments>http://www.planeterlang.org/story.php?title=Indentation-sensitive_Erlang</comments>
<pubDate>Thu, 27 Mar 2008 12:04:18 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Indentation-sensitive_Erlang</guid>
<description><![CDATA[<p>I was inspired by Chris Okasaki&#8217;s blog article about mandatory indentation. Not that indentation could be made mandatory in Erlang - it would break way too much code - but the idea of inserting indentation tokens in the token stream did seem simple enough, that I at least had to try it.</p><br /><p>I made a copy of erl_scan.erl (named erl_scan_ind.erl) and made it figure out indentation tokens. Then I added to the Erlang grammar in erl_parse.yrl. All the old rules remain, but some new rules were added to account for indentation tokens. For example:</p><br /><blockquote><p><code><br /><br />clause_body -&gt; '-&gt;' exprs: '$2'<br /><br /></code></p></blockquote><br /><p>becomes:</p><br /><blockquote><p><code><br /><br />clause_body -&gt; '-&gt;' exprs: '$2'<br /><br />clause_body -&gt; '-&gt;' 'IN' exprs 'OUT' : '$3'.<br /><br /></code></p></blockquote><br /><p>The indentation tokens I used were:</p><br /><ul><br /><li>&#8216;IN&#8217; for indent</li><br /><li>&#8216;OUT&#8217; for outdent (one for each matching indent)</li><br /><li>&#8216;ALIGN&#8217; for when the next line keeps the same indentation</li><br /><li>&#8216;END&#8217; when indentation goes back to zero</li><br /></ul><br /><p>So a sequence of expressions could be written without commas, based on the following rule:</p><br /><blockquote><p><code><br /><br />exprs -&gt; expr : ['$1'].<br /><br />exprs -&gt; expr ',' exprs : ['$1' | '$3'].<br /><br />exprs -&gt; expr 'ALIGN' exprs : ['$1' | '$3'].<br /><br /></code></p></blockquote><br /><p>My test program, which I was eventually able to compile, looked like this:</p><br /><blockquote><p><code><br /><pre><br />-module(test).<br /><br />-compile(export_all).<br />-scan(indentation).<br /><br />f(X) -&gt;<br />    X+2<br />.<br /><br />g(X) -&gt;<br />    X+4<br />.<br /><br />h(X) -&gt;<br />    Y = case X of<br />          a -&gt;<br />            {a}<br />          b -&gt;<br />            {b}<br />    end<br />    Y<br />.<br /></pre><br /><p></code></p></blockquote><br /><p>(Note especially that the final &#8216;end&#8217; must be aligned with the Y, rather than the &#8216;case&#8217;. Perhaps this could be avoided&#8230;?)</p><br /><p>The ending dots don&#8217;t have to be on their own line. Getting rid of them was too hard for me, since &#8216;dot&#8217; is the end token for the Erlang grammar.</p><br /><p>The <code>-scan(indentation).</code> attribute tells epp to switch to the indentation-sensitive scanner. <code>-scan(normal).</code> tells it to switch to the normal scanner.</p><br /><p>I soon realised that I had to normalize the indentation tokens at the end of the scan. A few oddities were introduced, like inserting an &#8216;OUT&#8217; token before each dot (and corresponding additions to the grammar). But for the most part, the additions to the grammar seemed fairly logical. The parser seems to handle all the old  code, even though I should perhaps try recompiling the whole OTP source tree before making such a claim.</p><br /><p>The code (based on OTP R12B-1) can be found at http://svn.ulf.wiger.net/indent/trunk</p><br /><p>The grammar is still contaminated with some debug statements, which allowed me to print the productions as they were identified. They should of course be removed eventually.</p><br /><p>I&#8217;m not convinced that this is really a good idea, but at least I had fun doing it.</p><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[mue - embrace change: Please stop the complaining]]></title>
<link>http://www.planeterlang.org/out.php?title=mue_-_embrace_change_Please_stop_the_complaining</link>
<comments>http://www.planeterlang.org/story.php?title=mue_-_embrace_change_Please_stop_the_complaining</comments>
<pubDate>Tue, 18 Mar 2008 13:59:23 CET</pubDate>
<dc:creator></dc:creator>
<category>erlang</category>
<guid>http://www.planeterlang.org/story.php?title=mue_-_embrace_change_Please_stop_the_complaining</guid>
<description><![CDATA[Why do people always have useless discussions about a language syntax, especially for an old and grown language?<br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[In Response to &quot;What Sucks About Erlang&quot;]]></title>
<link>http://www.planeterlang.org/out.php?title=In_Response_to_What_Sucks_About_Erlang</link>
<comments>http://www.planeterlang.org/story.php?title=In_Response_to_What_Sucks_About_Erlang</comments>
<pubDate>Tue, 18 Mar 2008 13:49:42 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=In_Response_to_What_Sucks_About_Erlang</guid>
<description><![CDATA[<div class="blogmark segment"><p>In Response to “What Sucks About Erlang”. Yariv Sadan responds to Damien’s criticism.</p><br /></div><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Bringing you the 2008 Erlang eXchange!]]></title>
<link>http://www.planeterlang.org/out.php?title=Bringing_you_the_2008_Erlang_eXchange</link>
<comments>http://www.planeterlang.org/story.php?title=Bringing_you_the_2008_Erlang_eXchange</comments>
<pubDate>Tue, 04 Mar 2008 19:24:50 CET</pubDate>
<dc:creator></dc:creator>
<category>misc</category>
<guid>http://www.planeterlang.org/story.php?title=Bringing_you_the_2008_Erlang_eXchange</guid>
<description><![CDATA[Erlang Training and Consulting and Skills Matter have teamed up to bring you the 2008 International Erlang eXchange! The 2-day conference will be held on June 26th-27th in central London and features international speakers from all over. Aimed at Erlang Architects, Programmers, Project managers, Software and Platform Innovators, existing Erlang users as well as Erlang newbies and anyone interested in Erlang, concurrent and sequential programming, the Erlang eXchange 2008 promises to be an event not to be missed! The preliminary program and list of speakers are now online. Registrations and call for participation are now open. Book before April 1st, and save 100 GBP on the registration fees. For more information, visit the Erlang Exchange website.<br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[LFE - Lisp-Flavoured Erlang]]></title>
<link>http://www.planeterlang.org/out.php?title=LFE_-_Lisp-Flavoured_Erlang</link>
<comments>http://www.planeterlang.org/story.php?title=LFE_-_Lisp-Flavoured_Erlang</comments>
<pubDate>Tue, 04 Mar 2008 19:23:16 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=LFE_-_Lisp-Flavoured_Erlang</guid>
<description><![CDATA[<p>Robert Virding releases LFE - Lisp Flavoured Erlang. Combining Lisp&#8217;s elegant syntax (yes, I know about the parens and I don&#8217;t care) with Erlang&#8217;s capabilities could be very interesting. I&#8217;m especially interested in being able to write Lisp-style macros for Erlang. smerl is nice and all, but nothing beats the power of Lisp macros, IMHO.</p><br/><br/>5 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Tsung 1.2.2 has been released]]></title>
<link>http://www.planeterlang.org/out.php?title=Tsung_1-2-2_has_been_released</link>
<comments>http://www.planeterlang.org/story.php?title=Tsung_1-2-2_has_been_released</comments>
<pubDate>Tue, 04 Mar 2008 19:23:02 CET</pubDate>
<dc:creator></dc:creator>
<category>misc</category>
<guid>http://www.planeterlang.org/story.php?title=Tsung_1-2-2_has_been_released</guid>
<description><![CDATA[<p>Tsung 1.2.2 is an important improvement over the previous version, adding new features, improving the major plugins (such as the XMPP plugin) and fixing several bugs.</p><br /><br /><p>New features include:</p><br /><ul><br /><li>Bidirectionnal protocols support</li><br /><li>Kernel polling and SMP support</li><br /><li>Loops support in scenarii</li><br /><li>And many other smaller improvements.</li><br /></ul><br /><br /><p>Tsung 1.2.2 includes near than 30 improvements over Tsung 1.2.1.  A complete list of changes can be retrieved from Process-one support site.<br /><br /><p>The new code can be downloaded from Tsung download page.<br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Dead Simple Process Pooling]]></title>
<link>http://www.planeterlang.org/out.php?title=Dead_Simple_Process_Pooling</link>
<comments>http://www.planeterlang.org/story.php?title=Dead_Simple_Process_Pooling</comments>
<pubDate>Mon, 03 Mar 2008 14:11:35 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Dead_Simple_Process_Pooling</guid>
<description><![CDATA[<p>The <code>pool</code> module provide a really simple, but useful, process pooling and load balancing mechanism. <code>pool:start/1</code> is used to start worker Erlang nodes and <code>pool:pspawn/3</code> or <code>pool:pspawn_link/3</code> is used to queue work items into the pool.</p><br /><p>The thing I really like about <code>pool</code> is it handles code loading transparently. Meaning that the worker nodes can access all the code the master node has available on its code path. This makes setting up a process pool even easier since there&#8217;s no per-worker configuration needed.</p><br /><p>At the bottom of the post is the source for a Erlang module which uses <code>pool</code> to calculate fibnoacci numbers. Highly useful, I know. But sometimes the classic examples are the best <img src='http://weblog.hypotheticalabs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> A quick word of thanks to fellow Erlang Studio attendee Noah Thorp for his efficient fib implementation.</p><br /><p>There are four easy steps to using the <code>fibber</code> module:</p><br /><ol><br /><li>Configure the master node for disributed Erlang and setup the required code paths like so: <code>erl -sname foo -cookie erlang -pa .</code><br /></li><br /><li>Call <code>fibber:start/1</code> with the desired number of workers nodes.<br /><br />Example:</p><br /><pre><br />(foo@perdido)1> fibber:start(3).<br />Started worker3<br />Started worker2<br />Started worker1<br />ok<br />(foo@perdido)2><br /></pre><br /><p>If you&#8217;re running a Unix-like operating system, you can use the following command to verify that master + # of workers Erlang processes are running: <code>ps -A | grep beam | grep -v "grep beam" | wc -l</code><br /></li><br /><li>Start calculating fibonacci numbers by calling <code>fibber:calc</code>:<br /><pre><br />(foo@perdido)2> {Node, Result} = fibber:calc(15).<br />{worker1@perdido,610}<br />(foo@perdido)3> Node.<br />worker1@perdido<br />(foo@perdido)4> Result.<br />610<br /></pre><br /></li><br /><li>When you&#8217;re all done using <code>fibber</code>, call <code>fibber:stop()</code> to shutdown the process pool.</li><br /></ol><br /><p>No other language I&#8217;ve ever used, including Java, Python, Ruby, or C++, has made thread/process pooling so easy or flexible.</p><br /><pre><br />-module(fibber).<br /><br />-export([calc/1, calc/2, server_calc/2, start/1, stop/0]).<br /><br />start(0) -><br />	ok;<br /><br />start(Workers) -><br />	Name = list_to_atom("worker" ++ integer_to_list(Workers)),<br />	pool:start(Name),<br />	io:format("Started ~p~n", [Name]),<br />	start(Workers - 1).<br /><br />stop() -><br />	pool:stop().<br /><br />calc(N) -><br />	fibber:calc(N, 10000).<br /><br />calc(N, Timeout) -><br />	pool:pspawn(fibber, server_calc, [self(), N]),<br />	receive<br />		{reply, Result} -><br />			Result;<br />		Wtf -><br />			io:format("Didn't expect ~p~n", [Wtf])<br />	after Timeout -><br />		timeout<br />	end.<br /><br />server_calc(Caller, N) -><br />	Result = fib(N),<br />	Caller ! {reply, {node(), Result}}.<br /><br />fib(1) -> 1;<br />fib(2) -> 1;<br />fib(N) when N > 2 -> fib1(N,1,1).<br /><br />fib1(3,P1,P2) -> P1 + P2;<br />fib1(N,P1,P2) -><br />    fib1(N-1,P2, P1 + P2).<br /></pre><br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[John Hughes: Testing with QuickCheck]]></title>
<link>http://www.planeterlang.org/out.php?title=John_Hughes_Testing_with_QuickCheck</link>
<comments>http://www.planeterlang.org/story.php?title=John_Hughes_Testing_with_QuickCheck</comments>
<pubDate>Mon, 03 Mar 2008 14:10:41 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=John_Hughes_Testing_with_QuickCheck</guid>
<description><![CDATA[<p>From a Functional Programming seminar at Ericsson, 21 February 2008</p><br /><p>(See The full article for more details).</p><br /><p><strong>John Hughes</strong><br /><br />&#8220;Testing with QuickCheck&#8221; (Download) (Slides)<br /><br />[See post to watch Flash video]</p><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Practical Erlang Mini-Interview]]></title>
<link>http://www.planeterlang.org/out.php?title=Practical_Erlang_Mini-Interview</link>
<comments>http://www.planeterlang.org/story.php?title=Practical_Erlang_Mini-Interview</comments>
<pubDate>Sat, 01 Mar 2008 16:57:44 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Practical_Erlang_Mini-Interview</guid>
<description><![CDATA[<p>I&#8217;d like to thank Francesco Cesarini and Mike Loukides for taking a momen to answer a couple of questions about O&#8217;Reilly&#8217;s upcoming &#8216;Practical Erlang Programming&#8217; book.  I think getting answers straight from the horse's mouth is a lot better than the other rumours I&#8217;ve posted.  Hopefully, I&#8217;ll be able to pin Francesco, Jan, and Mike down for some more questions as the book progresses.</p><br /><br /><br /><br /><br /><p><strong>You talk about this book being less broad, but deeper than Programming Erlang: Software for a Concurrent World<img src="http://www.assoc-amazon.com/e/ir?t=urandomthough-20&amp;l=ur2&amp;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />. What does this mean to you?</strong></p><br /><br /><br /><blockquote><br /><p><strong>Francesco</strong> To me, it means the ability to ensure that everyone, regardless of background and previous knowledge of programming languages, is able to pick up the book and learn Erlang. Having taught Erlang to everyone, from corporate clients to university students, I know where they struggle and where the problems have been throughout the years. On one side, this resulted in our training materials evolving. On the other, it resulted in our teaching methods and hands on examples evolving. We are going into all of these details, explaining in depth areas we know readers will struggle with. We will be using many more examples, both from our training material and from our lectures, where we ask the delegates to use the shell as we explain the theory.</p><br /></blockquote><br /><br /><br /><p><strong>Why now?  What makes you think the market is ready for another book on Erlang?  What&#8217;s changed?</strong></p><br /><br /><br /><blockquote><br /><p><strong>Francesco</strong> Erlang is expanding exponentially. Concurrency and <span class="caps">SMP</span> together with Joe&#8217;s book have pushed it to its next level. This has resulted in a critical mass which is helping us generate even more users. The market is ready not for one or two books, but for many books, as they generate traction and help each other. My hope is that this will result in an even greater critical mass.</p><br /></blockquote><br /><br /><br /><blockquote><br /><p><strong>Mike</strong> I tend to sign books on technologies that I want to learn about, or that I think I need to learn about.  We tend to cover this up with lots of stuff that we call market analysis, but ultimately, that&#8217;s what it comes down to.</p><br /></blockquote><br /><br /><br /><blockquote><br /><p>I was really surprised to see that the Haskell talks at OSCon were not just well attended, they had all the top spots.  We didn&#8217;t have anything going on in Erlang, but my guess is that it would have shared the top of the list with Haskell.  It&#8217;s not entirely clear what&#8217;s driving this.  In the Ruby world, there are clearly a lot of concurrency issues that Erlang can help to solve.  (One of the things that convinced me of the importance of Erlang was Lucas Carlson&#8217;s drproxy, which is a distributed reverse proxy server written in Erlang.</p><br /></blockquote><br /><br /><br /><blockquote><br /><p>But I don&#8217;t think the Ruby community is really driving the interest in Erlang or in functional languages.  There have been many other things happening: Microsoft&#8217;s F#, functional features in Sun&#8217;s Fortress, the Scala language, etc.  What seems to be driving the interest is the idea that functional languages are going to make it easier to exploit parallelism, in a world where a low-end laptop has 8-16 cores.  We&#8217;re not there now, but give it a few years and we will be.  I certainly feel that programming paradigms are shifting, and they&#8217;re shifting in the direction of functional languages.  Erlang is benefitting from that shift&#8212;particularly since Erlang was designed from the bottom up with concurrency in mind.</p><br /></blockquote><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[ejabberd 2.0.0 has been released]]></title>
<link>http://www.planeterlang.org/out.php?title=ejabberd_2-0-0_has_been_released</link>
<comments>http://www.planeterlang.org/story.php?title=ejabberd_2-0-0_has_been_released</comments>
<pubDate>Sat, 23 Feb 2008 19:01:12 CET</pubDate>
<dc:creator></dc:creator>
<category>misc</category>
<guid>http://www.planeterlang.org/story.php?title=ejabberd_2-0-0_has_been_released</guid>
<description><![CDATA[<p>The release contains numerous changes as detailed in the release notes. ejabberd 2.0.0 is even more scalable and robust due to architecture improvements and adds lots of new features like Personnal Eventing, Pubsub application framework, file transfer proxy, integrated HTTP file server and HTTP binding for Web 2.0 applications,  PAM authentication, etc.</p><br /><br /><p>A detailed changelog is also available on ProcessOne bug tracker.</p><br /><br /><p>ejabberd 2.0.0 is available from ejabberd download page.</p><br /><br /><br /><br /><h2>Thanks</h2><br /><br /><p>A big thank you to everyone who helped making this version what it is<br />currently. This is a list extracted from ejabberd's ChangeLog since it<br />was started 5 years ago until 2.0.0:</p><br /><br /><p>AV, Andreas from Unstable.nl, Andrey Zamaraev, Andrzej Smyk, Andy<br />Turner, Anton Vanin, Asdx, Badlop, Balabanov Dmitry, Brian Campbell,<br />Carlos E. Lopez, Christophe Romain, Christophe Romain, Cord Beermann,<br />Doruk Fisek, EQHO Communications, Etan Reisner, Evgeniy Khramtsov,<br />Felipe Brito Vasconcellos, Geoff Cant, Iceburn, Igor Goryachev, Jacek<br />Konieczny, Jean-Sebastien Pedron, Jerome Sautret, Juraj Michalek,<br />Justin Karneges, Karl-Johan Karlsson, Konstantin Khomoutov, Leif<br />Johansson, Luca Brivio, Lucius Curado, Lukas Polivka alias Spike411,<br />Magnus Henoch, Marina Hahn, Marshall T. Rose, Martijn van Beers,<br />Martin Pokorny, Marvin Preuss, Massimiliano Mirra, Max Loparyev, Maxim<br />Ryazanov, Michael Scherer, Michael Shields, Mickael Remond, Miguel Gomard, Milos<br />Svasek, Nikolaus Polak, Oleg Palij, Oleg V. Motienko, Pablo Saratxaga,<br />Patrick Dreker, Pedro Melo, Pieter Rautenbach, Qu1j0t3, Renato Botelho, Robin Redeker, Ruslan<br />Rakhmanin, Samuel Tardieu, Sander Devrieze, Sergei Golovan, Shelley<br />Shyan, SkLUG, Stefan de Konink, Tomas Janousek, Tomasz Sterna, Tony<br />Finch, Torsten Werner, Tsukasa Hamano, Usercard, Vicent Alberola,<br />Victor Hugo dos Santos, Vincent Ricard, Vladimir Kulev, and Zbyszek<br />Zolkiewski.</p><br /><br /><br /><br />digg_url = 'http://www.process-one.net/en/news/article/ejabberd_200_has_been_released/';<br /><br /><br /><br /><br />slashdot_badge_style='v0';<br /><br /><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[More Book Rumours]]></title>
<link>http://www.planeterlang.org/out.php?title=More_Book_Rumours</link>
<comments>http://www.planeterlang.org/story.php?title=More_Book_Rumours</comments>
<pubDate>Thu, 21 Feb 2008 15:45:17 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=More_Book_Rumours</guid>
<description><![CDATA[<p>I spent about an hour on the phone with a publisher yesterday (not O'Reilly or the Prags) talking about their plans for functional and concurrent programming books.  I've got to say that I came away pretty excited about what they have in mind.  I won't name names or post a lot of details, but here are three cool things that stood out:<ul><br /><li>They get the idea that there are two groups of people wanting to learn Erlang (Erlang programmers and programmers who want to learn more about Erlang's approach to concurrency) and they are targeting both camps.</li><br /><li>They're talking about more than one book &mdash; I'm not sure how many though</li><br /><li>Their first book is planned to be very hands-on, which I think is great.</li><br /></ul></p><br /><br /><p>Once they're a little bit closer to making announcements, maybe I'll have some more news to post.  On a related note, I'm hoping to have some more information on O'Reilly's Practical Erlang soon too. </p><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Erlang Studio: Day 1]]></title>
<link>http://www.planeterlang.org/out.php?title=Erlang_Studio_Day_1</link>
<comments>http://www.planeterlang.org/story.php?title=Erlang_Studio_Day_1</comments>
<pubDate>Thu, 21 Feb 2008 15:41:03 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Erlang_Studio_Day_1</guid>
<description><![CDATA[<p>The first day of the Studio covered sequential Erlang in a fair amount of detail. Among the topics covered were: pattern matching, deconstructing/constructing lists and tuples, recursion, and list manipulation using all of these techniques and a brief introduction to the <code>lists</code> module.</p><br /><p>Almost everyone in the class had little to no experience with Erlang so the first day was necessarily slow. As Dave said several times, the first day of class is the hardest to get right because you have to bring everyone up to roughly the same level. There were a few of us who had Erlang experience so the day was more of a review but Joe and Dave did an excellent job presenting the basics. I even managed to learn a few new things I either didn&#8217;t know or did know but should use more often:</p><br /><ul><br /><li> In general, smaller programs benefit more from HiPE than larger programs, according to Joe.</li><br /><li>Message sends w/acks are common pattern in Erlang used to avoid producer overrunning the consumer. Thinking of Erlang messages more like network packets and less like Smalltalk/Ruby messages is the more accurate mental model, I think.</li><br /><li>Patterns can be used to assert an invariant when deconstructing a list or tuple. For example, if I wanted a pattern which asserted the first and third values in a tuple were the same I could use the following pattern:<br /><p><code>{A, B, A} = {1, 2, 1}</code><br /></li><br /><li>The head position of a list can be deconstructed in a single line of code. Instead of:<br /><br /><code>[H|T] = [{name, "Kevin"}, {favorite_lang, "Erlang"}]</code></p><br /><p>I can write:<br /><br /><code>[{name, Name} | T] = [{name, "Kevin"}, {favorite_lang, "Erlang}]</code><br /><br />I need to remember this more often. It&#8217;ll definitely a win in terms of lines of code written <em>and</em> it&#8217;s still comprehensible.<br /></li><br /><li>In the Erlang shell, v() returns the value of a previously evaluated expression. v(-1), v(-2), etc returns the value for the previous, next previous, and so on values. v(22) returns the value for the expression evaluated at that Erlang prompt number. This is <em>really</em> useful when I forget to save a value into a variable.</li><br /><li>Joe gets TDD, or at least appears to. We&#8217;re writing failing tests before writing working code in class</li><br /><li><code>term_to_binary</code>, <code>binary_to_term</code> &#8212; I need to prototype using these functions. A nice way to sling code around between Erlang nodes</li><br /></ul><br /><p>After class a bunch of us met up with Martin Logan and a few other Chicago Erlangers (sorry, I didn&#8217;t catch everyone&#8217;s names) for drinks and food at the Blue Line Club Car. Accommodations were a bit tight in the restaurant but it was great to sit around a few drinks and talk about Erlang with other enthusiasts. I&#8217;m really intrigued by Martin&#8217;s latest project, Erlware as I think it addresses a lot of the problems I see with CEAN. Erlang definitely has a RubyForge-shaped hole in it and I think Erlware might be a good way to fill it.  I&#8217;ll definitely give it a spin once the Studio is over and I&#8217;m back home and rested.</p><br /><p><br /><em>[Summary of Day 2]</em></p><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[We are hiring Erlang developers]]></title>
<link>http://www.planeterlang.org/out.php?title=We_are_hiring_Erlang_developers</link>
<comments>http://www.planeterlang.org/story.php?title=We_are_hiring_Erlang_developers</comments>
<pubDate>Wed, 20 Feb 2008 10:40:14 CET</pubDate>
<dc:creator></dc:creator>
<category>erlang</category>
<guid>http://www.planeterlang.org/story.php?title=We_are_hiring_Erlang_developers</guid>
<description><![CDATA[Join a company of talented developers today ! We are working on innovative projects with one goal in mind: build the de facto reference instant messaging platform. <p>We are now hiring Erlang coders to join our development and support team. You will participate to ejabberd development, customer projects but also work on the  new exciting projets we are currently preparing.</p><br /><p>Experience in Erlang and/or XMPP protocol is a big plus, but is not mandatory.</p><br /><p>The jobs are preferably based in France, but our company being international and our team distributed across the world, remote work is possible.</p><br /><p>If you are interested, please drop me a mail (mremond at this website domain) with a summary of your technical achievements and a description of why you would love working at Process-One.</p><br /><br /><br/><br/>5 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Books and Rumours of Books]]></title>
<link>http://www.planeterlang.org/out.php?title=Books_and_Rumours_of_Books</link>
<comments>http://www.planeterlang.org/story.php?title=Books_and_Rumours_of_Books</comments>
<pubDate>Wed, 13 Feb 2008 22:40:51 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Books_and_Rumours_of_Books</guid>
<description><![CDATA[<p>Hot on the heels of the news that &#8216;Hardcore Erlang&#8217; is no more I&#8217;m hearing rumours that O&#8217;Reilly is working on a &#8216;Practical Erlang&#8217; book to go alongside their &#8216;Practical Haskell&#8217; book.  My informant has told me a couple of things:<ol><br /><li>the authors are also involved in teaching Erlang classes</li><br /><li>there is going to be a website for the book soon</li><br /><li>the book is going to be deeper (though less broad) than Programming Erlang:  Software for a Concurrent World<img src="http://www.assoc-amazon.com/e/ir?t=urandomthough-20&amp;l=ur2&amp;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></li><br /></ol></p><br /><br /><br /><p>I&#8217;m hoping to get an interview with the authors as the book gets closer to publication.  Until then, I&#8217;ll see what more information I can lay my hands on.</p><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Erlang R12B-1 Is Out!]]></title>
<link>http://www.planeterlang.org/out.php?title=Erlang_R12B-1_Is_Out</link>
<comments>http://www.planeterlang.org/story.php?title=Erlang_R12B-1_Is_Out</comments>
<pubDate>Mon, 11 Feb 2008 12:35:50 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=Erlang_R12B-1_Is_Out</guid>
<description><![CDATA[<p>The latest version of Erlang was released with little fanfare yesterday. The readme contained this little nugget which made me all warm and fuzzy:</p><br /><blockquote><p><br /><em>&#8220;The runtime system with SMP support can now use multiple, thread specific instances of most memory allocators. This improves performance since it reduces lock contention in the memory allocators. It may however increase memory usage for some applications. The runtime system with SMP support will by default enable this feature on most allocators. The amount of instances used can be configured.&#8221;</em><br /></p></blockquote><br /><p>So SMP/multi-core machines should see a nice speed up due to more efficient memory allocation and garbage collection. </p><br /><p>So what are you waiting around for?! Download it now and discover the pleasure of easy concurrency!</p><br /><p>Oh, and if you need help figuring out how to build it on your OS X box, might I suggest my screencast on the very topic?</p><br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Dynamically sizing a fragmented mnesia store]]></title>
<link>http://www.planeterlang.org/out.php?title=Dynamically_sizing_a_fragmented_mnesia_store-1</link>
<comments>http://www.planeterlang.org/story.php?title=Dynamically_sizing_a_fragmented_mnesia_store-1</comments>
<pubDate>Sat, 09 Feb 2008 00:43:07 CET</pubDate>
<dc:creator></dc:creator>
<category>mnesia</category>
<guid>http://www.planeterlang.org/story.php?title=Dynamically_sizing_a_fragmented_mnesia_store-1</guid>
<description><![CDATA[<p>From the tutorial:</p><br /><blockquote>What I've really been having fun with is mnesia, the native data storage application. With it you can do some really powerful things like advanced data distribution, federation, complex queriers, full/compartmental replication and the list goes on and on.</blockquote><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[What is Erlang-Style Concurrency?]]></title>
<link>http://www.planeterlang.org/out.php?title=What_is_Erlang-Style_Concurrency</link>
<comments>http://www.planeterlang.org/story.php?title=What_is_Erlang-Style_Concurrency</comments>
<pubDate>Fri, 08 Feb 2008 11:06:51 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=What_is_Erlang-Style_Concurrency</guid>
<description><![CDATA[<p>Every now and then, a blog article appears on how to do &#8220;Erlang-Style Concurrency&#8221; in language X. I think this is a very good thing, as it indicates that people are starting to take a long hard look at concurrency.</p><br /><p>However, there doesn&#8217;t seem to be any authoritative definition of the term &#8220;Erlang-Style Concurrency&#8221;. I thought I&#8217;d at least try to give my view.</p><br /><p>Joe Armstrong writes the following in his book, Programming Erlang:</p><br /><blockquote><p>&#8220;In Erlang:</p><br /><ul><br /><li>Creating and destroying processes is very fast.</li><br /><li>Sending messages between processes is very fast.</li><br /><li>Processess behave the same way on all operating systems.</li><br /><li>We can have very large numbers of processes.</li><br /><li>Processes share no memory and are completely independent.</li><br /><li>The only way for processes to interact is through message passing.&#8221;</li><br /></ul><br /></blockquote><br /><p>I guess this is about as concise and authoritative definition as any. However, it&#8217;s not the whole story.<br /><br />I would add the following items:</p><br /><blockquote><ul><br /><li>Message passing is asynchronous.</li><br /><li>Processes can monitor each other.</li><br /><li>It is possible to selectively receive messages.</li><br /><li>Remote processes appear largely the same as local processes.</li><br /></ul><br /></blockquote><br /><p>So this roughly describes how concurrency works in Erlang. Are all these bullets necessary for Erlang-style Concurrency? Perhaps not.</p><br /><p>I would pick the following items as necessary for Erlang-style Concurrency:</p><br /><ul><br /><li>Fast process creation/destruction</li><br /><li>Ability to support >> 10 000 concurrent processes with largely unchanged characteristics.</li><br /><li>Fast asynchronous message passing.</li><br /><li>Copying message-passing semantics (share-nothing concurrency).</li><br /><li>Process monitoring.</li><br /><li>Selective message reception.</li><br /></ul><br /><p>A few words to explain the above:</p><br /><p><strong>Speed and scalability</strong><br /><br />In order for concurrency to be useful as a fundamental modelling paradigm, the programmer must feel that processes are cheap enough you can efficiently create as many processes as the problem calls for. If there is any single defining characteristic of Erlang-style Concurrency, it is that you should be able to model your application after the natural concurrency patterns present in your problem. If creating a process is perceived as expensive, programmers will reuse existing processes instead; if message passing is perceived to be expensive, various techniques will be invented to avoid sending messages. These workarounds are nearly always detrimental.</p><br /><p>There will always be limits. Erlang was designed for agent-style concurrency; not for massive data parallelism. You can &#8220;only&#8221; have ca 120 million concurrent processes in Erlang, provided you have enough memory. Personally, I&#8217;ve verified that Erlang performs consistently up to 20 million concurrent processes (I didn&#8217;t have enough memory to go further.) The cost of creating an Erlang process (ca 5-10 us) will be prohibitive for some applications, but it&#8217;s at least an order of magnitude cheaper than creating UNIX processes or POSIX threads. It&#8217;s reasonable to expect Erlang-style Concurrency to use roughly the same process granularity as Erlang does.</p><br /><p><strong>Asynchronous message passing</strong><br /><br />It has been argued that synchronous message passing is a better building block than asynchronous message passing. It is probably true that synchronous message passing is much easier to reason about, but asynchronous communication (&#8221;send and pray&#8221;) feels more intuitive in a distributed environment (in which case environments based on synchronous message passing will resort to some form of asynchronous communication as well). Anyway, it is reasonable to argue that asynchronous communication is a defining characteristic of Erlang-style Concurrency.</p><br /><p><strong>Copying semantics</strong><br /><br />Note that this doesn&#8217;t necessarily mean that messages <em>must</em> be copied, but they must act as if they were. There are several reasons why this is important:<br /><ul><br /><li>For reliability reasons, processes must not share memory</li><br /><li>In the distributed case, copying is inevitable, and we want as similar semantics as possible between local and distributed message passing.</li><br /></ul><br /><p>It is perhaps too strong to require that processes share nothing, as this would rule out Erlang-style concurrency in most existing languages (even languages like Scala make it possible to share data between processes). Let&#8217;s just say that the Erlang style is to make it <em>easier</em> to use share-nothing concurrency than to use sharing.</p><br /><p><strong>Process monitoring</strong><br /><br />This is the enabler of &#8220;out-of-band&#8221; error handling, or the &#8220;let it crash&#8221; philosophy, which is very typical for Erlang. The idea is that you program for the correct case, and rely on supervising processes for error handling. This has turned out to be a beautiful way of handling fault tolerance in large systems.</p><br /><p><strong>Selective message reception</strong><br /><br />There are many ways to achieve selective message reception, but for complex multi-way concurrency, you have to support at least one of them. This is something often overlooked when approaching concurrency. It&#8217;s not obviously needed in simple programs, but when it is needed, you will suffer complexity explosion if you don&#8217;t have it.</p><br /><p>I would suggest that ability to support selective message reception is sufficient for Erlang-style concurrency. It can be done either by matching on a single message queue (Erlang, OSE Delta), or by using different mailboxes/channels (Haskell, .NET, UNIX sockets). Pick one, and find a suitable example to experiment with. You may use my presentation &#8220;Structured Network Programming&#8221; (also attached as pdf) as inspiration, if you like.</p><br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Introducing the XMPP application server: The Twitter example]]></title>
<link>http://www.planeterlang.org/out.php?title=Introducing_the_XMPP_application_server_The_Twitter_example</link>
<comments>http://www.planeterlang.org/story.php?title=Introducing_the_XMPP_application_server_The_Twitter_example</comments>
<pubDate>Mon, 04 Feb 2008 10:23:00 CET</pubDate>
<dc:creator></dc:creator>
<category>erlang</category>
<guid>http://www.planeterlang.org/story.php?title=Introducing_the_XMPP_application_server_The_Twitter_example</guid>
<description><![CDATA[ejabberd is probably the first XMPP application server ever released. This article introduces this new concept and explains how to build a distributed event-based infrastructure for social networking. The example application that illustrate this article is a distributed Twitter-like microblogging platform. <br /><h2>Introduction</h2><br /><br /><p>Since I designed the first version of the pluggable pubsub module for ejabberd in early 2007, I had in mind to turn it into a powerful application server. I have already blogged about the power of the new API of ejabberd 2.0 pubsub engine. However, this single article does not do any justice to this idea and how it can change the face of the web.</p><br /><br /><p>Customizable services based on pubsub is XMPP (eXtensible Messaging and Presence Protocol) at its full speed. The XMPP protocol has been designed since the beginning to be a near real time routing / distribution engine. A piece in the puzzle was missing however. This is where I think our new plugin based pubsub API fills the gap and turn ejabberd into the first XMPP application server.</p><br /><br /><p>As a proof of concept and as a way to robustify our API, we have written the Personal Eventing via Pubsub (PEP) as a plugin of our pubsub engine. It is a big specification and should clearly show the potential of the framework.</p><br /><br /><br /><h2>The XMPP application server: The Twitter case</h2><br /><br /><p>The PEP implementation was still not enough to demonstrate that ejabberd is a fault-tolerant, highly scalable application development platform for the Web 2.0 era. I decided to start a serie of articles demonstrating how to build a distributed Twitter-like microblogging platform based on ejabberd 2.0.</p><br /><br /><br /><h2>Step 1</h2><br /><br /><p>The goals of the first development step are the following:</p><br /><ul><br /><li>Write a new ejabberd service as a pubsub extension: this is a XMPP Twitter-like application code itself.</li><br /><li>Show that you can integrate with other pieces of the XMPP framework and not only the event distribution: The code uses the service browser as a user interface, building a fully dynamic hierarchy.</li><br /><li>Write the near realtime publishing / distribution code. To show how powerfull it is, I wrote the code in a way that node creation and subscriptions are not necessary. You only have to publish content and it is distributed to anyone that can see your presence. The end result, like PEP, is closely integrated to the user roster.</li><br /></ul><br /><br /><p>The architecture is distributed across as many user base (domain) as you want: A user can get events from users having their account in a large number of different servers.</p><br /><br /><br /><h2>Writing a new plugin to define custom node hierarchy</h2><br /><br /><p>I wanted to build a special service hierarchy so that the application integrates nicely in XMPP service discovery. I wanted a dynamic discovery tree whose content was depending on who was doing the query. This would make the application more user friendly and the example much more impressive.</p><br /><br /><p>To write a custom node hierarchy with our API, you simply have to write a <i>nodetree</i> plugin. I have written the nodetree_twitter module to handle our special hierachy looking like the following:</p><br /><br /><ul><br /><li>Root node: "twitter"</li><br /><li>Special node: MyStream. This is a collection displaying your latest published posts.</li><br /><li>Special node: FriendsStream. It contains the latest posts of my friends.</li><br /><li>Special node: MyFriends. It contains the list of your friends and allow you to see the latest posts of a given contact.</li><br /></ul><br /><br /><p>Friends are taken from the instant messaging contacts list: I defined this friends list as "the people that already share their presence with me". This way users do not have to manage the cumbersome subscription process specially for this application: Their friends from their contact list are cleverly reused.</p><br /><br /><p>Note that the node hierarchy is not defined in the Pubsub specification (XEP-0060), but is totally needed to make the application flexible. This pubsub node hierarchy does not violate the Pubsub specification, so we are fine with it.</p><br /><br /><p>This is the result as shown by Psi's service discovery::</p><br /><br /><p align="center"><img src="http://www.process-one.net/images/uploads/xmpp_app_server1.jpg" style="border: 0;" alt="Psi: Service Discovery" width="500" height="405" /></p><br /><br /><p>The contact <i>Blaine</i> (thank you for your comments, by the way) is coming directly from my roster.</p><br /><br /><br /><h2>Posting entries</h2><br /><br /><p>Posting an event is simply sending a small piece of XML code in ejabberd. As Psi does not support publishing events to our special virtual nodes (yet <img src="http://www.process-one.net/images/smileys/wink.gif" width="19" height="19" alt="wink" style="border:0;" />), we will send it from Psi XML console.</p><br /><br /><p>For example, I can send the following piece of code in the XML console. I publish the post on my special pubsub node <i>MyStream</i>:</p><br /><pre><br />&lt;iq type=&#x27;set&#x27;<br />    to=&#x27;pubsub.localhost&#x27;<br />    id=&#x27;publish1&#x27;&gt;<br />   &lt;pubsub xmlns=&#x27;http://jabber.org/protocol/pubsub&#x27;&gt;<br />     &lt;publish node=&#x27;/twitter/MyStream&#x27;&gt;<br />      &lt;item&gt;Demoing my Twitter-like code&lt;/item&gt;<br />    &lt;/publish&gt;<br />  &lt;/pubsub&gt;<br />&lt;/iq&gt;<br /></pre><br /><br /><p>The message is received instantly by all the contacts that have subscribed to my presence. No polling mechanism is needed. This is the beauty of using ejabberd XMPP App Server.</p><br /><br /><p>The received message is the following:</p><br /><pre><br />&lt;message from=&quot;pubsub.localhost&quot; to=&quot;test1@localhost&quot; &gt;<br />  &lt;event xmlns=&quot;http://jabber.org/protocol/pubsub#event&quot;&gt;<br />    &lt;items node=&quot;/twitter/FriendsStream&quot; &gt;<br />      &lt;item id=&quot;4B2C8277256F&quot; &gt;Demoing my Twitter-like code&lt;/item&gt;<br />    &lt;/items&gt;<br />  &lt;/event&gt;<br />&lt;/message&gt;<br /></pre><br /><br /><p>Note that the dynamic hierarchy is very powerful: We publish on our special node. The message seems to come from another special node on the other end, for the sake of consistency.</p><br /><br /><br /><h2>Persistence</h2><br /><p>I did nothing special for persistence of the published items. It is handled as a default by the ejabberd pubsub framework.</p><br /><p>We can browse our new service to check  that the blog post has been actually published:</p><br /><p align="center"><img src="http://www.process-one.net/images/uploads/xmpp_app_server2_thumb.jpg" style="border: 0;" alt="Psi: Service discovery" width="500" height="405" /></p><br /><p>I did not yet write the part of the code to browse friends posts. This will be part of a second article.</p><br /><br /><br /><h2>Conclusions</h2><br /><br /><p>The end result is the basis of a Twitter-like application. It is fully distributed at the web scale. You can run this application on different servers and get events from people with account on different servers. It is compliant with ejabberd clustering and high scalability features. Most of all, thanks to our Pubsub API, I wrote this first code in 3 hours. It tooks something like 200 to 300 lines of code to write this extremely powerful infrastructure. Yes, that's amazing, I agree, as I was surprised myself by how easy and fast it was to write !</p><br /><br /><p>After a bit of clean-up, the code will be added to ProcessOne contributions Subversion repository. If you are impatient to play with the code, please drop me a mail <img src="http://www.process-one.net/images/smileys/smile.gif" width="19" height="19" alt="smile" style="border:0;" /></p><br /><br /><p>In a next article, I will present the second stage of this application. I will add better and complete browsing of the items and publish directly for the service browser thank to adhoc commands supported in Psi.</p><br /><br /><p>In the meantime, I hope to get this experiment running with client developers: It would be very nice see the messages received properly displayed in OneTeam and in Psi. Stay tuned !</p><br /><br /><br /><br />digg_url = 'http://www.process-one.net/en/blogs/article/introducing_the_xmpp_application_server/';<br /><br /><br /><br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[The AOL XMPP scalability challenge]]></title>
<link>http://www.planeterlang.org/out.php?title=The_AOL_XMPP_scalability_challenge</link>
<comments>http://www.planeterlang.org/story.php?title=The_AOL_XMPP_scalability_challenge</comments>
<pubDate>Wed, 30 Jan 2008 13:01:17 CET</pubDate>
<dc:creator></dc:creator>
<category>erlang</category>
<guid>http://www.planeterlang.org/story.php?title=The_AOL_XMPP_scalability_challenge</guid>
<description><![CDATA[It has been largely covered on the Internet, that AOL is experimenting an XMPP gateway that allows users to connect to<br />AIM and ICQ with a compliant XMPP (eXtensible Messaging and Presence Protocol) client. This is very good news for the XMPP proponents, but this move also mark the beginning of a new challenge for the XMPP community. <h2><br />	The AOL XMPP scalability challenge<br /></h2><br /><p><br />	It has been largely covered on the Internet, that AOL is experimenting an XMPP gateway that allows users to connect to AIM and ICQ with a compliant XMPP (eXtensible Messaging and Presence Protocol) client.<br /></p><br /><p><br />	This is still an early experience, but it proves that the interest in XMPP is growing at a tremendous rate. Big players like IBM, Google, Sun, Apple, Adobe and now possibly AOL are embrassing the protocol and it seems that the battle between XMPP and SIMPLE (Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions) is drawing to an end. The market has already choosen XMPP because it is closer to internet technology. SIMPLE feel like overly complicated Telco protocol. SIMPLE covers only a fraction of the scope of XMPP. XMPP supports a very large number of extensions.<br /></p><br /><p><br />	The other interesting thing is that XMPP can win the battle over SIMPLE, but also over other proprietary protocol. Google choose it for Google Talk. AOL is considering it. The Instant Messaging is moving and 2008 will probably be a very intereting year for XMPP.<br /></p><br /><p><br />	For us, XMPP protocol designers and XMPP server developers, this year might be one of the most challenging year. AOL is a very large IM domain on its own. We have tens of customers deployments that prove our XMPP server can scale to large number of users. Google Talk is proving too that XMPP can work on large scale. However, the next challenge is XMPP federation on a large scale.<br /></p><br /><p><br />	Federation in the XMPP world means putting together several different users base so that they can share presence information and exchange message with others users, no matter on which server (called domain) they have created their account. In practice, the couple of servers that need to put users in touch, connect together and route messages.<br /></p><br /><p><br />	Google Talk is federated with quite a good number of other XMPP servers as Jabber.org (powered by our XMPP implementation, ejabberd, and supported by ProcessOne) is. They must probably have the same number of connections, so around 3000 server connections for both is a good guess.<br /></p><br /><p><br />	With the rapid spread of XMPP, two challenges need to be addressed:<br /></p><br /><h3><br />	Challenge 1: Massive number of federated servers<br /></h3><br /><p><br />	AOL experience will probably boost the number of XMPP server in production. 3000 connections to servers no Jabber.org is still very small. This figure is for one most famous XMPP server so it is likely that it is the largest number of server-to-server connexion in production.<br /></p><br /><p><br />	What will happen when this number will grow ? Netcraft counted 70 millions of active domains in december 2007. This is a possible target for XMPP when all domains will have web, mail and Instant Messaging.<br /></p><br /><p><br />	I have been thinking a lot about this problem lately. The new version of ejabberd, ejabberd 2.0, is a good step in this direction. ejabberd 2.0 has put a lot of effort in imporving the management of server-to-server connection. It is clusterisable and rely on special technical features to handle tens of thousand of connections on a single node. Connections between servers in ejabberd are now multiplexed to cope with large traffic between servers. We have also added protection mechanisms to detect when another server stall and deconnect it gracefully.<br /></p><br /><p><br />	As a final note on this topic, my personnal view, however, is that we will need at some point in the future of XMPP to add meta routing nodes to avoid possibly 70 millions of servers to connect to 70 millions of other servers. We will share more thought on this point later on.<br /></p><br /><h3><br />	Massive number of users on two federated servers<br /></h3><br /><p><br />	This will exercice another possible scale limit: What will happen when two servers (for example AIM and Google) need to connect on each others for any reason, for example if one of the server need to restart ?<br /></p><br /><p><br />	If those two servers have a large overlap in their users base, that is to say if many users from one servers are linked to many users in the other, those two server would need to synchronize presence for millions of users at once.<br /></p><br /><p><br />	Again, we think we are leading the way in ejabberd with experimental code. We are experimenting priority mecanisms to synchronize presence in an incremental way when servers need to get in touch for the first time. We are also trying protocol improvement to limit the number of presence synchronization packets that need to be exchanged between two servers. If this works well we will propose this optimisation as extensions to the XMPP protocol.<br /></p><br /><p><br />	On the same topic, another important feature when you select an XMPP server is fault-tolerance and high-availability. Those features are not only important because you cannot schedule downtime when your users are spread all over the world, but also because, each time you need to restart your server, you generate a possibly costly presence resync with the servers your users are in relation with (if you enabled federation of course). Our Instant Messaging solution provide features to upgrade the code in a running system. It means less maintenance downtime and thus less synchronization burden over the whole XMPP network when you restart one server.<br /></p><br /><p><br />	Note that AOL experiment is only a gateway targeting only XMPP client use. We have no clue if AOL will allow communication with other XMPP servers in the future. This question is only purely theorical for the moment, but we need to make sure we are ready when it will become really important.<br /></p><br /><h3><br />	Conclusion<br /></h3><br /><p><br />	The big public servers are considering switching to XMPP. This is a great opportunity for the XMPP protocol and brings new challenge. As a XMPP server provider we think we are ready to face it. Let's hope 2008 will give us even more opportunity to prove it.<br /></p><br /><h3><br />	Other interesting read<br /></h3><br /><p><br />	On the scalability topic, you can read a previous blog post: Web 2.0: Shifting from "Get Fast" to "Get Massive"<br /></p><br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Erlang available for Nokias Maemo OS2008]]></title>
<link>http://www.planeterlang.org/out.php?title=Erlang_available_for_Nokias_Maemo_OS2008</link>
<comments>http://www.planeterlang.org/story.php?title=Erlang_available_for_Nokias_Maemo_OS2008</comments>
<pubDate>Sun, 27 Jan 2008 22:32:34 CET</pubDate>
<dc:creator></dc:creator>
<category>erlang</category>
<guid>http://www.planeterlang.org/story.php?title=Erlang_available_for_Nokias_Maemo_OS2008</guid>
<description><![CDATA[I've been keen to get our project Ajatus built on top of CouchDB which is built on top of Erlang to work with mobile device such as N800/N810. And today it became reality...<br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[P16Blog - Why Erlang Matters in 2008]]></title>
<link>http://www.planeterlang.org/out.php?title=P16Blog_-_Why_Erlang_Matters_in_2008-1</link>
<comments>http://www.planeterlang.org/story.php?title=P16Blog_-_Why_Erlang_Matters_in_2008-1</comments>
<pubDate>Sun, 27 Jan 2008 22:32:29 CET</pubDate>
<dc:creator></dc:creator>
<category>discussions</category>
<guid>http://www.planeterlang.org/story.php?title=P16Blog_-_Why_Erlang_Matters_in_2008-1</guid>
<description><![CDATA[Why is Erlang "poised for greatness" right now, in 2008? Here are some ideas.<br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[SD Times - Larry O’Brien: Erlang: What the Cool Kids Are Doing]]></title>
<link>http://www.planeterlang.org/out.php?title=SD_Times_-_Larry_OrsquoBrien_Erlang_What_the_Cool_Kids_Are_Doing</link>
<comments>http://www.planeterlang.org/story.php?title=SD_Times_-_Larry_OrsquoBrien_Erlang_What_the_Cool_Kids_Are_Doing</comments>
<pubDate>Mon, 21 Jan 2008 09:18:36 CET</pubDate>
<dc:creator></dc:creator>
<category>erlang</category>
<guid>http://www.planeterlang.org/story.php?title=SD_Times_-_Larry_OrsquoBrien_Erlang_What_the_Cool_Kids_Are_Doing</guid>
<description><![CDATA[Erlang: What the Cool Kids Are Doing<br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[ejabberd 2.0.0 rc1 has been released]]></title>
<link>http://www.planeterlang.org/out.php?title=ejabberd_2-0-0_rc1_has_been_released</link>
<comments>http://www.planeterlang.org/story.php?title=ejabberd_2-0-0_rc1_has_been_released</comments>
<pubDate>Mon, 21 Jan 2008 09:12:23 CET</pubDate>
<dc:creator></dc:creator>
<category>misc</category>
<guid>http://www.planeterlang.org/story.php?title=ejabberd_2-0-0_rc1_has_been_released</guid>
<description><![CDATA[<p>The release contains numerous changes as detailed in the release notes.</p><br /><br /><p>This version is ready for testing for adventurous users that would like to help us making ejabberd the best release ever.</p><br /><br /><p>A detailled changelog is also available on ProcessOne bug tracker.</p><br /><br /><p>ejabberd 2.0.0 release candidate is available from ejabberd download page.</p><br /><br /><br /><br /><br /><p>A big thank you to everyone who helped making this version what it is<br />currently. This is a list extracted from ejabberd's ChangeLog since it<br />was started 5 years ago until 2.0.0-rc1:</p><br /><br /><p>AV, Andreas from Unstable.nl, Andrey Zamaraev, Andrzej Smyk, Andy<br />Turner, Anton Vanin, Asdx, Badlop, Balabanov Dmitry, Brian Campbell,<br />Carlos E. Lopez, Christophe Romain, Christophe Romain, Cord Beermann,<br />Doruk Fisek, EQHO Communications, Etan Reisner, Evgeniy Khramtsov,<br />Felipe Brito Vasconcellos, Geoff Cant, Iceburn, Igor Goryachev, Jacek<br />Konieczny, Jean-Sebastien Pedron, Jerome Sautret, Juraj Michalek,<br />Justin Karneges, Karl-Johan Karlsson, Konstantin Khomoutov, Leif<br />Johansson, Luca Brivio, Lucius Curado, Lukas Polivka alias Spike411,<br />Magnus Henoch, Marina Hahn, Marshall T. Rose, Martijn van Beers,<br />Martin Pokorny, Marvin Preuss, Massimiliano Mirra, Max Loparyev, Maxim<br />Ryazanov, Michael Scherer, Michael Shields, Mickael Remond, Miguel Gomard, Milos<br />Svasek, Nikolaus Polak, Oleg Palij, Oleg V. Motienko, Pablo Saratxaga,<br />Patrick Dreker, Pedro Melo, Pieter Rautenbach, Qu1j0t3, Renato Botelho, Robin Redeker, Ruslan<br />Rakhmanin, Samuel Tardieu, Sander Devrieze, Sergei Golovan, Shelley<br />Shyan, SkLUG, Stefan de Konink, Tomas Janousek, Tomasz Sterna, Tony<br />Finch, Torsten Werner, Tsukasa Hamano, Usercard, Vicent Alberola,<br />Victor Hugo dos Santos, Vincent Ricard, Vladimir Kulev, and Zbyszek<br />Zolkiewski.</p><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Erlang IDE on it's way to 1.0]]></title>
<link>http://www.planeterlang.org/out.php?title=Erlang_IDE_on_its_way_to_1-0</link>
<comments>http://www.planeterlang.org/story.php?title=Erlang_IDE_on_its_way_to_1-0</comments>
<pubDate>Tue, 15 Jan 2008 16:52:06 CET</pubDate>
<dc:creator></dc:creator>
<category>erlide</category>
<guid>http://www.planeterlang.org/story.php?title=Erlang_IDE_on_its_way_to_1-0</guid>
<description><![CDATA[<p>A nice interview of Vlad Dimitrescu on the upcoming Erlang IDE 1.0.</p><br/><br/>3 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[State of the Erlang Internet Framework 2008]]></title>
<link>http://www.planeterlang.org/out.php?title=State_of_the_Erlang_Internet_Framework_2008</link>
<comments>http://www.planeterlang.org/story.php?title=State_of_the_Erlang_Internet_Framework_2008</comments>
<pubDate>Tue, 08 Jan 2008 09:35:30 CET</pubDate>
<dc:creator></dc:creator>
<category>other software</category>
<guid>http://www.planeterlang.org/story.php?title=State_of_the_Erlang_Internet_Framework_2008</guid>
<description><![CDATA[<br /><p>The idea of the Erlang Internet Framework, or EIF, was created at the beginning of 2007 therefore it is fitting to do a status update and ponder on the future of the project one year after it initial conception.</p><br /><p>The EIF was originally created to be a way to combine all of the projects that I had been working on into one focused project, since then it has grown and several projects have been added. The original projects beyond the EIF were ErlMail, ErlWeb and ErlDir. Each of these projects are still in early development stages and they have been joined by ErlVoIP, a Voice over IP server, and ErlMedia, a Flash Media Server written in Erlang.</p><br /><h2>ErlMedia/ErlyVideo</h2><br /><p>The code base for my flash media server, which I was calling ErlMedia has been joined with ErlyVideo, which is another Flash Media Server written in Erlang. Since my initial work on the ErlMedia/ErlyVideo in August and September I haven&#8217;t been able to spend much more time on the project and the other team members have done a wonderful job of mending the problems that were plaguing the code I was working with and taking it much further then I could have done alone.</p><br /><p>I am very hopefully that I will be able to spend a decent amount of time working on this project in early 2008, after the next release of ErlMail.</p><br /><h2>ErlMail</h2><br /><p>ErlMail has been the focus of my attention for most of 2007. The distinct lack of a complete email package, including library modules for both client and server, has been my inspiration for this projects since it&#8217;s inception. In my personal opinion, ErlMail has the most advanced email modules of anything currently available as open source in Erlang.</p><br /><p>For the past several months I have been working diligently on the IMAP server in ErlMail. I knew this server was going to be difficult to create, but I had severely underestimated the amount of time it was going to take to make an IMAP server operational. I am down to the last command, the FETCH command, in the IMAP server before I release a stable version of it. It is not going to be RFC compliant in the next version and there are still a few commands that I will need to include after the next version as well, most notably the search command.</p><br /><p>The feature that I think is the most notable in the ErlMail package is the modular message store. The modular message store allows users to create their own message store modules and simply change the user configuration file for ErlMail to use them. This feature already garners more interest then any other single feature in the ErlMail package and with my future directions, which you will read later, it will become even more important.</p><br /><h2>ErlWeb</h2><br /><p>ErlWeb, which is a web server and associated modules, got one official release in 2007. The most notable piece of this release is the tag based scripting language called Erlang Markup Language, or ERML. My intention with ERML is to create a way that people who do not know how to program in Erlang can still get the benifits of Erlang. The most recent shift in the design of ERML has been to add a way to extend ERML with user create modules that are not part of the ErlWeb package. This is being done now with the other packages in the EIF.</p><br /><p>For instance, a module in ErlMail called erml_erlmail will have all ERML commands that are associated with email commands for use in the ErlWeb application. This allows for users to create their own ERML commands, written in Erlang, and include them into ErlWeb without recompiling the system. In the case of ErlMail, this also allows all of the email logic to be contained in one application while still interacting with the ErlWeb application. This feature appeared in the code base in December of 2007 and I consider it as important to ErlWeb as the modular message store is to ErlMail.</p><br /><p>Similar files have been created for other EIF projects; such as erml_erldir and erml_erlvoip which are located in their respective applications.</p><br /><h2>Other Projects</h2><br /><p>The rest of the projects included in the EIF have not moved forward much in 2007. ErlDir did get an official release which is mostly library modules that handle packet encoding/decoding and compression/decompression and ErlVoIP has been announced although work on this project has not begun yet.</p><br /><h2>Google Code</h2><br /><p>During the second half of 2007 I moved all open source projects that I have onto Google Code. While this was a move on my part to allow me to be more portable with my development environment and create a pseudo backup system to ease my own mind this also allows for other people to join the projects and contribute their own code if they wish. I have one person who is helping me document (and correct my spelling errors) most of the projects already and I am open to the idea of other people joining the work to see these projects move forward faster then I could accomplish alone.</p><br /><h2>Future of EIF</h2><br /><p>I see a bright future for the EIF in 2008; starting with a new release of ErlMail in the first few weeks of the year. After that there are a few changes to the core idea of the system that I intend to implement. These changes reflect new innovations that were not around during the EIF initial conception and large needs that have arisen since then as well.</p><br /><h3>The EIF Director</h3><br /><p>I&#8217;m not sure I have ever described the main project for the EIF itself. The EIF project is intended to be a manager application that keeps track of the versions of the other applications and which nodes have what servers running. So while each application in the EIF will be independent, the EIF application will be the glue that holds them all together.</p><br /><p>Some of the features that are planned for the future of the EIF application itself are:</p><br /><ul><br /><li>Upgrading itself and other EIF applications</li><br /><li>Monitoring which nodes are running what servers</li><br /><li>Load balancing traffic across all nodes</li><br /><li>Fail-over on node crashes; allowing a user connection to move from one node to another without the user noticing</li><br /></ul><br /><p>The EIF application would handle much of the communications and some of the state data for each connection, and then the server processes on each node would do the work that each connection is requesting. The design goal of this is to allow nodes to be added or removed into the system without users noticing any interruptions. This would include the ability to move a long session that a user has, on say an IMAP server, from one node to another without the user needing to reconnect. I am also hoping to implement this into ErlWeb so that comet connections could be moved from one node to another without the user noticing that a node has been removed from the cluster.</p><br /><h3>Amazon EC2/S3/SimpleDB integration</h3><br /><p>The Amazon web services, or AWS, announcements, that have been on going for several months, have been unexpected and potentially a huge boost to the design on the EIF. I will be taking some time to look at these services and creating a road map to completely integrate these services into the EIF at every level that is reasonable.</p><br /><p>The first use of the AWS will be in ErlMail. I intend to create a modular message store that incorporates the AWS as the backend, most likely using the SimpleDB for user and domain information and the S3 storage for the actual messages.</p><br /><p>After the ErlMail message store is integrated with the AWS all other project will be designed to work with the EIF Director on EC2. With the flexibility of the EC2 cloud any number of Amazon Machine Images, or AMIs, could be made with different server configurations. Then as the EIF director noticed a burst in traffic or number of connections the EIF director could initiate a new instance of an EC2 AMI. When the load has lowered enough the EIF director could move sessions onto the oldest running instances (without users noticing) and disconnect from instances that are no longer needed.</p><br /><p>The core configuration of the EIF on AWS could start out as one instance with the EIF director and all other servers on the same instance and as load increases the EIF director will expand or contract the needed nodes. As more nodes are added the EIF director will move session that are active on itself onto other nodes allowing the EIF director to focus it&#8217;s resources on controlling traffic flow and balancing connections. Eventually as load decreases the EIF director would take the sessions back onto itself to minimize the number of instances back down to one instance.</p><br /><p>If implemented well this could create a system where no matter what type of services you want to provide you would be able to use the AWS to create the project and if the need arises the project could be moved to a dedicated hosting facility without the users noticing the move and zero downtime. Once you are on your own hardware when you manually add new nodes to your system the EIF director will immediately start making use of them.</p><br /><p>I see this as a boon to potential startups as the will be able to grow and move resources around in real-time without needing to incur major expenses up front. Once they are making money the can build their own infrastructure at their own pace and potentially still use the AWS when the need more capacity to their own infrastructure.</p><br /><h2>Conclusion</h2><br /><p>While 2007 was a great start to the EIF and all of the applications, 2008 looks to be even better. I&#8217;m sure there will be more shifts in direction and changes made to the ideas behind the system as the start to get implemented, but the core goal of making the most flexible, stable and powerful Internet development environment will always be there.</p><br/><br/>6 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[Python Versus Erlang for an MMOG]]></title>
<link>http://www.planeterlang.org/out.php?title=Python_Versus_Erlang_for_an_MMOG</link>
<comments>http://www.planeterlang.org/story.php?title=Python_Versus_Erlang_for_an_MMOG</comments>
<pubDate>Tue, 01 Jan 2008 14:42:35 CET</pubDate>
<dc:creator></dc:creator>
<category>erlang</category>
<guid>http://www.planeterlang.org/story.php?title=Python_Versus_Erlang_for_an_MMOG</guid>
<description><![CDATA[Blog entry on the use of Erlang vs. Python for the purposes of writing an MMORPG.  Also some good links to other related articles are included in the story.<br/><br/>6 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[ejabberd 2.0.0 beta1 has been released]]></title>
<link>http://www.planeterlang.org/out.php?title=ejabberd_2-0-0_beta1_has_been_released</link>
<comments>http://www.planeterlang.org/story.php?title=ejabberd_2-0-0_beta1_has_been_released</comments>
<pubDate>Sat, 29 Dec 2007 20:11:20 CET</pubDate>
<dc:creator></dc:creator>
<category>misc</category>
<guid>http://www.planeterlang.org/story.php?title=ejabberd_2-0-0_beta1_has_been_released</guid>
<description><![CDATA[<p>The release contains numerous changes as detailed in the release notes.</p><br /><br /><p>This version is ready for testing for adventurous users that would like to help us making ejabberd the best release ever.</p><br /><br /><p>A detailled changelog is also available on ProcessOne bug tracker.</p><br /><br /><p>ejabberd 2.0.0 beta is available from ejabberd download page.</p><br /><br /><br /><br /><br /><p>A big thank you to everyone who helped making this version what it is<br />currently. This is a list extracted from ejabberd's ChangeLog since it<br />was started 5 years ago until 2.0.0-beta1:</p><br /><br /><p>AV, Andreas from Unstable.nl, Andrey Zamaraev, Andrzej Smyk, Andy<br />Turner, Anton Vanin, Asdx, Badlop, Balabanov Dmitry, Brian Campbell,<br />Carlos E. Lopez, Christophe Romain, Christophe Romain, Cord Beermann,<br />Doruk Fisek, EQHO Communications, Etan Reisner, Evgeniy Khramtsov,<br />Felipe Brito Vasconcellos, Geoff Cant, Iceburn, Igor Goryachev, Jacek<br />Konieczny, Jean-Sebastien Pedron, Jerome Sautret, Juraj Michalek,<br />Justin Karneges, Karl-Johan Karlsson, Konstantin Khomoutov, Leif<br />Johansson, Luca Brivio, Lucius Curado, Lukas Polivka alias Spike411,<br />Magnus Henoch, Marina Hahn, Marshall T. Rose, Martijn van Beers,<br />Martin Pokorny, Marvin Preuss, Massimiliano Mirra, Max Loparyev, Maxim<br />Ryazanov, Michael Scherer, Michael Shields, Mickael Remond, Miguel Gomard, Milos<br />Svasek, Nikolaus Polak, Oleg Palij, Oleg V. Motienko, Pablo Saratxaga,<br />Patrick Dreker, Pedro Melo, Pieter Rautenbach, Qu1j0t3, Renato Botelho, Robin Redeker, Ruslan<br />Rakhmanin, Samuel Tardieu, Sander Devrieze, Sergei Golovan, Shelley<br />Shyan, SkLUG, Stefan de Konink, Tomas Janousek, Tomasz Sterna, Tony<br />Finch, Torsten Werner, Tsukasa Hamano, Usercard, Vicent Alberola,<br />Victor Hugo dos Santos, Vincent Ricard, Vladimir Kulev, and Zbyszek<br />Zolkiewski.<br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[What You Need To Know About Amazon SimpleDB]]></title>
<link>http://www.planeterlang.org/out.php?title=What_You_Need_To_Know_About_Amazon_SimpleDB-1</link>
<comments>http://www.planeterlang.org/story.php?title=What_You_Need_To_Know_About_Amazon_SimpleDB-1</comments>
<pubDate>Sun, 16 Dec 2007 16:36:52 CET</pubDate>
<dc:creator></dc:creator>
<category>erlang</category>
<guid>http://www.planeterlang.org/story.php?title=What_You_Need_To_Know_About_Amazon_SimpleDB-1</guid>
<description><![CDATA[<p>SimpleDB is an exciting new Amazon project build in Erlang.</p><br/><br/>4 Vote(s) ]]></description>
</item>

<item>
<title><![CDATA[ErlyBird 0.15.2 Released - An Erlang IDE based on NetBeans]]></title>
<link>http://www.planeterlang.org/out.php?title=ErlyBird_0-15-2_Released_-_An_Erlang_IDE_based_on_NetBeans</link>
<comments>http://www.planeterlang.org/story.php?title=ErlyBird_0-15-2_Released_-_An_Erlang_IDE_based_on_NetBeans</comments>
<pubDate>Sun, 16 Dec 2007 16:34:53 CET</pubDate>
<dc:creator></dc:creator>
<category>blogs</category>
<guid>http://www.planeterlang.org/story.php?title=ErlyBird_0-15-2_Released_-_An_Erlang_IDE_based_on_NetBeans</guid>
<description><![CDATA[<p>I'm pleased to announce ErlyBird 0.15.2, an Erlang IDE based on NetBeans. <br />This is an important feature release in size of 17.9M. <br /><p><br />CHANGELOG:<br /><ul><br /><li>Supported OTP/Erlang R12B new syntax.</li><br /><li>A new Emacs standard color theme.</li><br /><li>Fixed some formatter bugs.</li><br /><li>Better syntax error message.</li> <br /><li>Various bugs fixes.</li><br /></ul><br /><p><b>To switch color theme</b>, open [Tools]->[Options], click on 'Fonts & Colors', choose 'Profile' drop-down box.<br /><p><br /><b>Java JRE 5.0+ is required.</b><br /><p><br />To download, please go to:<br />http://sourceforge.net/project/showfiles.php?group_id=192439<br /><p><br />To install:<br /><ol><br /><li>Unzip erlybird-bin-0.15.2-ide.zip to somewhere.</li><br /><li><b>Make sure 'erl.exe' or 'erl' is under your environment path</b></li><br /><li>For Windows user, execute 'bin/erlybird.exe'. For *nix user, 'bin/erlybird'.</li><br /><li>Check/set your OTP path. From [Tools]->[Options], click on 'Erlang', then 'Erlang Installation' tab, fill in the full path of your 'erl.exe' or 'erl' file. For instance: "C:/erl/bin/erl.exe"</li><br /><li>The default -Xmx option for jvm is set to 256M, ErlyBird now <b>works good with less memory</b>, such as -Xmx128M. If you want to increase/decrease it, please open the config file that is located at etc/erlybird.conf, set -J-Xmx of 'default_options'. </li><br /></ol><br /><p><br /><b>When run ErlyBird first time, the OTP libs will be indexed. The indexing time varies from 10 to 30 minutes deponding on your computer. </b><br /><p><br /><b>Notice:</b><br /><b>If you have previous version ErlyBird installed, it's recommended to  delete the old cache files</b> which are located at:<br><br /><ul><br /><li>*nix: "${HOME}/.erlybird/dev"</li><br /><li>mac os x: "${HOME}/Library/Application Support/erlybird/dev"</li><br /><li>windows: "C:Documents and Settingsyourusername.erlybirddev" or some where</li><br /></ul><br /><p><br />The status of ErlyBird is still Alpha, feedbacks and bug reports are welcome.<br /><p><br/><br/>3 Vote(s) ]]></description>
</item>

</channel>
</rss>
