<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planet Trapexit - Erlang/OTP News</title>
	<link>http://planet.trapexit.org</link>
	<language>en</language>
	<description>Planet Trapexit - Erlang/OTP News - http://planet.trapexit.org</description>

<item>
	<title>Damien Katz: Win a Nexus One from Couchio</title>
	<guid>tag:damienkatz.net,2010://1.557</guid>
	<link>http://damienkatz.net/2010/03/win_a_nexus_one_from_couchio.html</link>
	<description>&lt;p&gt;Port CouchDB to an Android app and get our phone! &lt;a href=&quot;http://blog.couch.io/post/440148422/win-this-nexus-one-phone&quot;&gt;Details.&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 11 Mar 2010 01:58:29 +0000</pubDate>
</item>
<item>
	<title>ejabberd@jabber.ru: ejabberd 2.1.3 - Third bugfix release</title>
	<guid>http://www.ejabberd.im/3893 at http://www.ejabberd.im</guid>
	<link>http://www.ejabberd.im/ejabberd-2.1.3</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://www.process-one.net/en/blogs/article/ann_ejabberd_2.1.3_bugfix_release/&quot;&gt;ejabberd 2.1.3&lt;/a&gt; has been released. It contains many bugfixes and some improvements.&lt;/p&gt;
&lt;p&gt;This is a short list of changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New ejabberd_c2s option: max_fsm_queue&lt;/li&gt;
&lt;li&gt;ejabberdctl: Support concurrent connections with bound connection names&lt;/li&gt;
&lt;li&gt;Cross-domain HTTP-Bind support (&lt;a href=&quot;https://support.process-one.net/browse/EJAB-1168&quot;&gt;EJAB-1168&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Hibernate http-bind process after handling a request&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href=&quot;http://www.ejabberd.im/ejabberd-2.1.3&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 08 Mar 2010 16:28:03 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: CouchDB Case Study: Assay Depot</title>
	<guid>tag:damienkatz.net,2010://1.556</guid>
	<link>http://damienkatz.net/2010/03/couchdb_case_study_assay_depot.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://blog.couch.io/post/430899411/assay-depot-cio-chris-petersen-discusses-couchdb&quot;&gt;Apache CouchDB Case Study: Assay Depot&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;div&gt;...replication give this ability that would have been much more difficult to accomplish in MySQL. We could have done this in a relational manner but it would have been very challenging, very custom. CouchDB give a lot of the benefits for free.
&lt;/div&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;div&gt;CouchDB has changed the way I think about developing web applications&lt;/div&gt;&lt;/blockquote&gt;</description>
	<pubDate>Sat, 06 Mar 2010 23:40:35 +0000</pubDate>
</item>
<item>
	<title>Erlware: Erlware on R13B04</title>
	<guid>tag:blogger.com,1999:blog-4167999740082219489.post-3562133908906710729</guid>
	<link>http://erlware.blogspot.com/2010/03/erlware-on-r13b04.html</link>
	<description>Erlware tools are now running on R13B04 for Mac OSX Leopard  (Intel and PowerMac)Mac OSX Snow LeopardLinux i686Linux x86_64To install the 'erl' shell and start playing use 'faxien install-release erl'Note* escript still needs an update - contributions welcome.</description>
	<pubDate>Wed, 03 Mar 2010 18:15:13 +0000</pubDate>
	<author>martinjlogan@erlware.org (Martin J. Logan)</author>
</item>
<item>
	<title>Erlware: How to create and Erlware repository with Portius</title>
	<guid>tag:blogger.com,1999:blog-4167999740082219489.post-4346585784085491941</guid>
	<link>http://erlware.blogspot.com/2010/03/how-to-create-and-erlware-repository.html</link>
	<description>Erlware tools, primarily Faxien, pull Erlang packages (Applications and Releases) from a repository.  The Portius release makes it trivial for any group, company, or individual to host their own repository for their private resources. This video shows you how to use Portius to create an Erlware Erlang/OTP Package repository in just a few minutes.</description>
	<pubDate>Tue, 02 Mar 2010 07:31:12 +0000</pubDate>
	<author>martinjlogan@erlware.org (Martin J. Logan)</author>
</item>
<item>
	<title>Damien Katz: BBC and CouchDB</title>
	<guid>tag:damienkatz.net,2010://1.555</guid>
	<link>http://damienkatz.net/2010/03/bbc_and_couchdb.html</link>
	<description>&lt;blockquote&gt;&lt;div&gt;Vaguely interesting KV/#couchdb stat from the BBC - 3.3 billion requests handled since last summer, running at about 150-170 million per day&lt;/div&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/endafarrell/status/9820160677&quot;&gt;http://twitter.com/endafarrell/status/9820160677&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 01 Mar 2010 22:11:06 +0000</pubDate>
</item>
<item>
	<title>Erlware: Create an Erlang Mochiweb Web Application in Minutes Video</title>
	<guid>tag:blogger.com,1999:blog-4167999740082219489.post-1814526995021948570</guid>
	<link>http://erlware.blogspot.com/2010/02/create-erlang-mochiweb-web-application.html</link>
	<description>This video describes how to create a web application in Erlang/OTP with Mochiweb. This is done very quickly leveraging common OTP standards and the Erlware toolchain.This was made possible by leveraging the work to OTPify Mochiweb done at the last Chicago Erlang User Group code sprint.</description>
	<pubDate>Thu, 25 Feb 2010 08:01:29 +0000</pubDate>
	<author>martinjlogan@erlware.org (Martin J. Logan)</author>
</item>
<item>
	<title>Erlang Announce List: Erlang announce mailing list :: Erlang/OTP now at Github</title>
	<guid>http://www.trapexit.org/forum/viewtopic.php?p=51128#51128</guid>
	<link>http://www.trapexit.org/forum/viewtopic.php?p=51128#51128</link>
	<description>Author: Anonymous&lt;br /&gt;
Subject: Erlang/OTP now at Github&lt;br /&gt;
Posted: Wed Nov 25, 2009 2:14 pm (GMT 0)&lt;br /&gt;
Topic Replies: 0&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;The official git repository for Erlang/OTP can now be found at Github:
&lt;br /&gt;

&lt;br /&gt;
&lt;a href=&quot;http://github.com/erlang/otp&quot; target=&quot;_blank&quot;&gt;http://github.com/erlang/otp&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Build instructions can be found at:
&lt;br /&gt;

&lt;br /&gt;
&lt;a href=&quot;http://wiki.github.com/erlang/otp&quot; target=&quot;_blank&quot;&gt;http://wiki.github.com/erlang/otp&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
We plan to add more wiki pages with additional information in the
&lt;br /&gt;
near future.
&lt;br /&gt;

&lt;br /&gt;
-- 
&lt;br /&gt;
Björn Gustavsson, Erlang/OTP, Ericsson AB
&lt;br /&gt;

&lt;br /&gt;
________________________________________________________________
&lt;br /&gt;
erlang-announce mailing list. See &lt;a href=&quot;http://www.erlang.org/faq.html&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/faq.html&lt;/a&gt;
&lt;br /&gt;
erlang-announce (at) erlang.org
&lt;br /&gt;

&lt;br /&gt;
 Post received from mailinglist
&lt;/span&gt;&lt;br /&gt;</description>
	<pubDate>Wed, 24 Feb 2010 10:55:04 +0000</pubDate>
</item>
<item>
	<title>Erlang Announce List: Erlang announce mailing list :: Erlang/OTP R13B03 has been released</title>
	<guid>http://www.trapexit.org/forum/viewtopic.php?p=51124#51124</guid>
	<link>http://www.trapexit.org/forum/viewtopic.php?p=51124#51124</link>
	<description>Author: Anonymous&lt;br /&gt;
Subject: Erlang/OTP R13B03 has been released&lt;br /&gt;
Posted: Wed Nov 25, 2009 1:56 pm (GMT 0)&lt;br /&gt;
Topic Replies: 0&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;Bug fix release : otp_src_R13B03
&lt;br /&gt;
Build date      : 2009-11-23
&lt;br /&gt;

&lt;br /&gt;
This is R13B03, the third maintenance release for the R13B major release.
&lt;br /&gt;

&lt;br /&gt;
You can find the README file for the release at
&lt;br /&gt;

&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_src_R13B03.readme&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_src_R13B03.readme&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
The source distribution and binary distribution for Windows can be
&lt;br /&gt;
downloaded from
&lt;br /&gt;

&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_src_R13B03.tar.gz&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_src_R13B03.tar.gz&lt;/a&gt;
&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_win32_R13B03.exe&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_win32_R13B03.exe&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
The distribution can also be downloaded using the BitTorrent
&lt;br /&gt;
protocol. Use the following torrent files to download the source
&lt;br /&gt;
distribution and binary distribution for Windows:
&lt;br /&gt;

&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_src_R13B03.tar.gz.torrent&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_src_R13B03.tar.gz.torrent&lt;/a&gt;
&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_win32_R13B03.exe.torrent&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_win32_R13B03.exe.torrent&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Note: To unpack the TAR archive you need a GNU TAR compatible program.
&lt;br /&gt;

&lt;br /&gt;
For installation instructions please read the README file that is part
&lt;br /&gt;
of the distribution.
&lt;br /&gt;

&lt;br /&gt;
The on-line documentation can be found at: &lt;a href=&quot;http://www.erlang.org/doc/&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/doc/&lt;/a&gt;
&lt;br /&gt;
You can also download the complete HTML documentation or the Unix manual files
&lt;br /&gt;

&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_doc_html_R13B03.tar.gz&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_doc_html_R13B03.tar.gz&lt;/a&gt;
&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_doc_man_R13B03.tar.gz&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_doc_man_R13B03.tar.gz&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
We also want to thank those that sent us patches, suggestions and bug
&lt;br /&gt;
reports,
&lt;br /&gt;

&lt;br /&gt;
The OTP Team
&lt;br /&gt;

&lt;br /&gt;
-- 
&lt;br /&gt;
Björn Gustavsson, Erlang/OTP, Ericsson AB
&lt;br /&gt;

&lt;br /&gt;
________________________________________________________________
&lt;br /&gt;
erlang-announce mailing list. See &lt;a href=&quot;http://www.erlang.org/faq.html&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/faq.html&lt;/a&gt;
&lt;br /&gt;
erlang-announce (at) erlang.org
&lt;br /&gt;

&lt;br /&gt;
 Post received from mailinglist
&lt;/span&gt;&lt;br /&gt;</description>
	<pubDate>Wed, 24 Feb 2010 10:55:04 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: About Me</title>
	<guid>tag:damienkatz.net,2009://1.554</guid>
	<link>http://damienkatz.net/2009/12/about_me.html</link>
	<description>&lt;p&gt;&lt;img src=&quot;http://damienkatz.net/MyPicture.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
All about me. Me me me me me.&lt;/p&gt;

&lt;p&gt;Vitals:&lt;br /&gt;
Birth date - October 24, 1973&lt;br /&gt;
Height - 6'1&quot;&lt;br /&gt;
Eyes - brown&lt;br /&gt;
Hair - dark brown&lt;br /&gt;
Complexion - fair and freckly&lt;br /&gt;
Brain - wrinkly&lt;br /&gt;
Spouse - Laura Ann Katz (maiden name Toenjes)&lt;br /&gt;
Kids - Gwendolyn, Roseanna and Zack&lt;br /&gt;
Religion - unapologetically atheist&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;damien4.jpg&quot; src=&quot;http://damienkatz.net/pics/damien4.jpg&quot; width=&quot;640&quot; height=&quot;480&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I live in Piedmont CA.&lt;/p&gt;

&lt;p&gt;I am the creator of &lt;a href=&quot;http://couchdb.org/&quot;&gt;CouchDB&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I am the CEO of &lt;a href=&quot;http://couch.io/&quot;&gt;Couchio&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;CouchDB&quot; src=&quot;http://damienkatz.net/pics/logo.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;My good points:&lt;br /&gt;
I am very devoted, loving and supportive of my wife and daughters. I have a very positive attitude and am energetic. I am smart and a fast learner, especially when it comes to math, science and engineering stuff. I love solving really hard problems. I am a hard worker, and I am very passionate about my work. I am very honest. I like to make lots of jokes, sometimes they are even funny. I take good care of myself and exercise regularly. I am athletic. I read constantly (always non-fiction). I have good eye for aesthetics. I am good with my hands and like to make things. I like to bake. I generally try not to take life too seriously.&lt;/p&gt;

&lt;p&gt;My bad points:&lt;br /&gt;
I am egotistical, judgmental and sometimes have a bad temper (but I'm working on those things). I am vain and self conscious. I don't take very good care of my teeth (but I do floss regularly: once every 4 months, whether I need it or not). I am messy and disorganized. I have a short attention span in meetings and lectures. I take my work too seriously. I am brutally honest (but I'm convinced it's not really a bad point). My self-created list of bad points is oddly short, hmmmm.&lt;/p&gt;

&lt;p&gt;My weird points:&lt;br /&gt;
While I am pretty athletic (strong, fast, can jump, etc), I'm physically uncoordinated and hence suck at nearly every sport (except basketball, I'm decent at that). I am somewhat shy around new people, sometimes it comes off as being as being a snob. I spend waaay too much time in front of the computer, but that's the way I like it. I drink lots of diet soda, lots. I can't whistle. Sometimes my feet smell like hot buttered popcorn. I once was the proprietor of liquidpoop.com -- the internet's largest repository of diarrhea-related poetry. Although I'm vain, my wardrobe mostly consists of stained, freebie t-shirts and a few pairs of jeans.&lt;/p&gt;</description>
	<pubDate>Sat, 20 Feb 2010 04:53:36 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: Chris demos CouchApps</title>
	<guid>tag:damienkatz.net,2010://1.553</guid>
	<link>http://damienkatz.net/2010/02/chris_demos_couchapps.html</link>
	<description>&lt;p&gt;Here is a &lt;a href=&quot;http://blog.couch.io/post/399191405/screencast-demoing-some-new-couchapp-jquery&quot;&gt;Chris Anderson screencast demoing some new CouchApp jQuery plugins&lt;/a&gt;. He's a smooth criminal.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;mt-enclosure mt-enclosure-image&quot;&gt;&lt;a href=&quot;http://blog.couch.io/post/399191405/screencast-demoing-some-new-couchapp-jquery&quot;&gt;&lt;img alt=&quot;Thumbnail image for Screen shot 2010-02-19 at 5.13.38 PM.png&quot; src=&quot;http://damienkatz.net/pics/Screen shot 2010-02-19 at 5.13.38 PM-thumb-400x249.png&quot; width=&quot;400&quot; height=&quot;249&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
	<pubDate>Sat, 20 Feb 2010 01:25:35 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: Migrating Notes/Domino to CouchDB</title>
	<guid>tag:damienkatz.net,2010://1.552</guid>
	<link>http://damienkatz.net/2010/02/migrating_notesdomino_to_couch.html</link>
	<description>&lt;p&gt;I've been talking to some IT shops who are migrating away from Lotus Notes and Domino. More than wanting to use something else, it seems the reasons they are migrating away is that people in management just don't like Lotus Notes.&lt;/p&gt;

&lt;p&gt;The problem these IT shops face is they don't have many good options to migrate to. Sharepoint works for very generic collaborative activities, but not so much for custom business apps that are so pervasive in large Notes installs. That doesn't mean people don't try.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;mt-enclosure mt-enclosure-image&quot;&gt;&lt;a href=&quot;http://2sharepoint.com/lotusnotes-to-sharepoint-migration-visimigrate.html&quot;&gt;&lt;img alt=&quot;visimigrate-enterprise-architecture-thumb.jpg&quot; src=&quot;http://damienkatz.net/pics/visimigrate-enterprise-architecture-thumb.jpg&quot; width=&quot;380&quot; height=&quot;255&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;So these IT shops are interested in migrating to Apache CouchDB for obvious reasons. CouchDB is largely inspired by the Lotus Notes backend. CouchDB has a document database, peer based replication, views, full text indexing add-ons, security, and HTTP client access. It also has a very active and growing open source community.&lt;/p&gt;

&lt;p&gt;So in theory, migrating to CouchDB from Notes/Domino should be easier than migrating to any other technology. But what we don't yet have is many tools, documentation and examples for migrating from Notes to CouchDB.&lt;/p&gt;

&lt;p&gt;Anyone out there have experience with this type of thing for Notes? Anyone interested in helping us develop the tools and documentation for migrating to CouchDB? There is a lot of business opportunity here, and we are looking for partners and VARs to help customers with tools and migrations. If interested, have some ideas or feedback, feel free to email me at damien@couch.io.&lt;/p&gt;</description>
	<pubDate>Fri, 19 Feb 2010 23:17:26 +0000</pubDate>
</item>
<item>
	<title>ProTest news: QuickCheck for testing C programs</title>
	<guid>http://www.protest-project.eu/news.html#114</guid>
	<link>http://www.protest-project.eu/news.html#114</link>
	<description>&lt;div&gt;Quviq developed an extension to QuickCheck that enables easy
testing of C code from the Erlang shell and therewith enable the use of
QuickCheck on C code.&lt;/div&gt;&lt;div&gt;This library is now evaluated on C libraries in the GNU package as well as on some real automotive software.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 16 Feb 2010 00:00:00 +0000</pubDate>
</item>
<item>
	<title>ProTest news: Message Sequences Charts help formulating properties</title>
	<guid>http://www.protest-project.eu/news.html#112</guid>
	<link>http://www.protest-project.eu/news.html#112</link>
	<description>&lt;div&gt;Quviq developed a new library to express relationships between
events that happen in a system. This allows the testers to specify
things like &quot;this message should be delivered if the receiver was
logged in around the time the message was sent&quot;. Message sequence
charts are often used to give examples of possible ways in which
messages may arrive. The newly developed library allows to specify a
number of examples as one general property on message sequences.&lt;/div&gt;&lt;div&gt;The
library was successfully used in a case study at ProcessOne and a paper
describing this case has been submitted for publication.&lt;/div&gt;</description>
	<pubDate>Tue, 16 Feb 2010 00:00:00 +0000</pubDate>
</item>
<item>
	<title>ProTest news: PhD thesis with part on property based testing</title>
	<guid>http://www.protest-project.eu/news.html#113</guid>
	<link>http://www.protest-project.eu/news.html#113</link>
	<description>&lt;div&gt;Laura Castro from the University of A Coruna finished her PhD
thesis, which is to be defended on April 15, 2010. In her thesis she
describes advantages of using functional programming for the
development of software systems. Part of the thesis is devoted to
testing these systems and property based testing plays an important
rôle.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 16 Feb 2010 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: Wanted: Hosting/Infrastructure Engineer</title>
	<guid>tag:damienkatz.net,2010://1.551</guid>
	<link>http://damienkatz.net/2010/02/wanted_hostinginfrastructure_e.html</link>
	<description>&lt;p&gt;We are looking to hire someone with strong hosting or infrastructure experience to help us develop a CouchDB hosting platform.&lt;/p&gt;

&lt;p&gt;Experience with CouchDB is nice but not necessary. We most want someone who is passionate about infrastructure with large scale hosting experience and with open source contributions.&lt;/p&gt;

&lt;p&gt;We offer competitive pay, stock options, great health benefits and 6 weeks vacation, and an opportunity to change the world.&lt;/p&gt;

&lt;p&gt;Email inquiries to damien@couch.io&lt;/p&gt;</description>
	<pubDate>Fri, 12 Feb 2010 00:18:26 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: Thoughts on an Open Source Company</title>
	<guid>tag:damienkatz.net,2010://1.549</guid>
	<link>http://damienkatz.net/2010/02/thoughts_on_an_open_source_com.html</link>
	<description>&lt;p&gt;I wrote this almost a year ago. It's something we want &lt;a href=&quot;http://couch.io&quot;&gt;Couchio&lt;/a&gt; live by, to build a company we all want to be a part of.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;Our companies mission to make the world a better place through open source software.&lt;/p&gt;

&lt;p&gt;People are hired based on contributions to open source. Code, documentation, advocacy, community help, legal help, etc. People who work to make the world better for everyone through open source are the people we hire.&lt;/p&gt;

&lt;p&gt;Every employee has an equity stake in the company. The decision to hire will be partially based on &quot;do we think giving this person this % of the company is worth it to us all&quot; Bad hiring decisions impact us all, so we are all motivated to hire those who will add value.&lt;/p&gt;

&lt;p&gt;How do we make money? By providing hosting and services. Rock solid apps, hosting and service. We give away our software, but we provide services people want and need at a healthy profit.&lt;/p&gt;

&lt;p&gt;If the company is in the shitter, never have layoffs, decrease pay % across the board. If we have to drop pay below levels that can support people, we can't be a company.&lt;/p&gt;

&lt;p&gt;Stress kills. Kills motivation, creativity, and in the long run it literally kills people. Most people want to do good. A few try really hard to do good. We make sure people know once they are hired, they never have to worry about their job. We will try hard to not be a source of stress to our employees.&lt;/p&gt;

&lt;p&gt;Never fire. We constantly emphasize you can't get fired for lack of productivity or being stupid or foolish. You can get fired for ethical reasons. We should strive for openness and honesty in all matters.&lt;/p&gt;

&lt;p&gt;Never ever ever have a hiring binge. We hire based on contributions to open source. Always. When we have the resources, we hire the best contributors. Otherwise we don't hire.&lt;/p&gt;

&lt;p&gt;We don't want people who tend to ask &quot;How can I contribute? What should I do?&quot;. We want people who identify for themselves what needs to be done and how they can contribute, and then do it. Our employees want to contribute to make things better, not for a paycheck, not for validation from a manager or even the community. They do it because they think it will make things better.&lt;/p&gt;

&lt;p&gt;We don't have managers. Everyone who we hire is already a productive contributor on their own. People can take leadership and mentoring roles, but these roles are granted by those being led and mentored. No one ever has control over someone else's time.&lt;/p&gt;

&lt;p&gt;We don't hire for positions like HR, sales, etc. We either outsource, or a person we have already hired for their contributions to open source fills the position.&lt;/p&gt;

&lt;p&gt;We don't encourage or discourage project or code ownership. In the case of disagreements, working code always has a place. We encourage forks internally and externally. There can be no reals rules beyond this guidance. We acknowledge this is messy and imperfect, and will always be source of friction and disagreement.&lt;/p&gt;

&lt;p&gt;How do we ensure people are productive and don't goof off?  We don't.&lt;/p&gt;

&lt;p&gt;We don't measure productivity? Smart people can always appear to be productive while goofing off, making it seem they are working hard when wasting time, causing stress for themselves and often for others who want to be seen to be strong contributors. We don't monitor people's productively. We let people goof off if they want. It's okay to goof off. I'm goofing off right now as write this.&lt;/p&gt;

&lt;p&gt;Then why do our people work?&lt;/p&gt;

&lt;p&gt;Our people are hired based on contributions to open source, their contributions make the world a better place. Our company mission is to do that, and we are filled with people who've already done that. We all want it to succeed and make a profit, so we can make ever greater contributions to the world. People contribute how they see fit: By working on profitable projects, by developing new projects, by doing work that will never make a profit but makes the world better for us all. Sometimes it's by taking some time off to recharge so you can contribute later.&lt;/p&gt;

&lt;p&gt;If the company becomes unprofitable, or sick, it's everyone's responsibility to make it healthy. No one has to ask permission how to make it better, how to make things profitable, they just do it.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;Already this has been put to the test, as we were presented an eminently qualified hire with a very positive energy. The problem was no open source involvement or contributions. I wanted to make an exception but I realized if we really want to give this idea of an open source company shot, we can't compromise already on the 4th hire we make. So I had to say no, which was hard.&lt;/p&gt;

&lt;p&gt;I don't yet know if this will work in the long run, but for now I want us to give it a real shot and see what happens.&lt;/p&gt;</description>
	<pubDate>Wed, 10 Feb 2010 19:20:13 +0000</pubDate>
</item>
<item>
	<title>ejabberd@jabber.ru: ejabberd and exmpp source code are moved from SVN to Git</title>
	<guid>http://www.ejabberd.im/3861 at http://www.ejabberd.im</guid>
	<link>http://www.ejabberd.im/node/3861</link>
	<description>&lt;p&gt;After many months of planning, ejabberd and exmpp have been fully migrated to Git.&lt;/p&gt;
&lt;p&gt;During the last 7 years, ejabberd source code was hosted at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVS at Jabber.Ru
&lt;/li&gt;&lt;li&gt;CVS at JabberStudio.org
&lt;/li&gt;&lt;li&gt;SVN at ProcessOne
&lt;/li&gt;&lt;li&gt;Git preliminarly built with git-svn, at Github
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Starting now, ejabberd source code is natively in Git, and hosted at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://git.process-one.net/ejabberd&quot; title=&quot;https://git.process-one.net/ejabberd&quot;&gt;https://git.process-one.net/ejabberd&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://github.com/processone/ejabberd&quot; title=&quot;http://github.com/processone/ejabberd&quot;&gt;http://github.com/processone/ejabberd&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The minimal instructions to start using it are mentioned in:&lt;br /&gt;
&lt;a href=&quot;http://www.process-one.net/en/ejabberd/downloads&quot; title=&quot;http://www.process-one.net/en/ejabberd/downloads&quot;&gt;http://www.process-one.net/en/ejabberd/downloads&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ejabberd.im/node/3861&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 09 Feb 2010 16:15:00 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: First week in the new office</title>
	<guid>tag:damienkatz.net,2010://1.548</guid>
	<link>http://damienkatz.net/2010/02/first_week_in_the_new_office.html</link>
	<description>&lt;p&gt;Last week was our first week in our new office in Old Downtown Oakland. It's a really neat area with lots of restaurants and bars, and hardly any murders.&lt;/p&gt;

&lt;p&gt;Oh yeah, we've changed our name to Couchio. Our new blog will be here &lt;a href=&quot;http://couch.io&quot;&gt;http://blog.couch.io/&lt;/a&gt; soon.&lt;/p&gt;

&lt;p&gt;Our office:&lt;br /&gt;
&lt;span class=&quot;mt-enclosure mt-enclosure-image&quot;&gt;&lt;a href=&quot;http://damienkatz.net/pics/office%20-%204.jpg&quot;&gt;&lt;img alt=&quot;office - 4.jpg&quot; src=&quot;http://damienkatz.net/pics/office - 4-thumb-400x267.jpg&quot; width=&quot;400&quot; height=&quot;267&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Our office manager Claire:&lt;br /&gt;
&lt;span class=&quot;mt-enclosure mt-enclosure-image&quot;&gt;&lt;a href=&quot;http://damienkatz.net/pics/office%20-%206.jpg&quot;&gt;&lt;img alt=&quot;office - 6.jpg&quot; src=&quot;http://damienkatz.net/pics/office - 6-thumb-400x472.jpg&quot; width=&quot;400&quot; height=&quot;472&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Chris and Mikeal:&lt;br /&gt;
&lt;span class=&quot;mt-enclosure mt-enclosure-image&quot;&gt;&lt;a href=&quot;http://damienkatz.net/pics/office%20-%201.jpg&quot;&gt;&lt;img alt=&quot;office - 1.jpg&quot; src=&quot;http://damienkatz.net/pics/office - 1-thumb-400x267.jpg&quot; width=&quot;400&quot; height=&quot;267&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Claire and Jan:&lt;br /&gt;
&lt;span class=&quot;mt-enclosure mt-enclosure-image&quot;&gt;&lt;a href=&quot;http://damienkatz.net/pics/office%20-%202.jpg&quot;&gt;&lt;img alt=&quot;office - 2.jpg&quot; src=&quot;http://damienkatz.net/pics/office - 2-thumb-400x267.jpg&quot; width=&quot;400&quot; height=&quot;267&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Nitin:&lt;br /&gt;
&lt;span class=&quot;mt-enclosure mt-enclosure-image&quot;&gt;&lt;a href=&quot;http://damienkatz.net/pics/office%20-%208.jpg&quot;&gt;&lt;img alt=&quot;office - 8.jpg&quot; src=&quot;http://damienkatz.net/pics/office - 8-thumb-400x598.jpg&quot; width=&quot;400&quot; height=&quot;598&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Super Awesome Art by &lt;a href=&quot;http://www.juliearmbruster.net/&quot;&gt;Julie Armbruster&lt;/a&gt;:&lt;br /&gt;
&lt;span class=&quot;mt-enclosure mt-enclosure-image&quot;&gt;&lt;a href=&quot;http://damienkatz.net/pics/office%20-%203.jpg&quot;&gt;&lt;img alt=&quot;office - 3.jpg&quot; src=&quot;http://damienkatz.net/pics/office - 3-thumb-400x309.jpg&quot; width=&quot;400&quot; height=&quot;309&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Me:&lt;br /&gt;
&lt;span class=&quot;mt-enclosure mt-enclosure-image&quot;&gt;&lt;a href=&quot;http://damienkatz.net/pics/office%20-%207.jpg&quot;&gt;&lt;img alt=&quot;office - 7.jpg&quot; src=&quot;http://damienkatz.net/pics/office - 7-thumb-400x374.jpg&quot; width=&quot;400&quot; height=&quot;374&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;My Office:&lt;br /&gt;
&lt;span class=&quot;mt-enclosure mt-enclosure-image&quot;&gt;&lt;a href=&quot;http://damienkatz.net/pics/office%20-%205.jpg&quot;&gt;&lt;img alt=&quot;office - 5.jpg&quot; src=&quot;http://damienkatz.net/pics/office - 5-thumb-400x267.jpg&quot; width=&quot;400&quot; height=&quot;267&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;So far we are really disorganized and discombobulated. But I'm are working on it! I even bought Management for Dummies. Things will be running smoothly in no time ;)&lt;/p&gt;

&lt;p&gt;Also we are looking hard for someone to help us offer CouchDB support and hopefully build a whole support organization. Email me damien@couch.io if you are interested or know someone who is.&lt;/p&gt;</description>
	<pubDate>Tue, 09 Feb 2010 00:40:32 +0000</pubDate>
</item>
<item>
	<title>ejabberd@jabber.ru: ejabberd 2.1.2 - Second bugfix release</title>
	<guid>http://www.ejabberd.im/3830 at http://www.ejabberd.im</guid>
	<link>http://www.ejabberd.im/ejabberd-2.1.2</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://www.process-one.net/en/blogs/article/ann_ejabberd_2.1.2_bugfix_release/&quot;&gt;ejabberd 2.1.2&lt;/a&gt; has been released. It contains several bugfixes over last month's maintenance release.&lt;/p&gt;
&lt;p&gt;Brief summary of changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix SASL PLAIN authentication message for RFC4616 compliance
&lt;/li&gt;&lt;li&gt;Fix support for old Erlang/OTP R10 and R11
&lt;/li&gt;&lt;li&gt;If server start fails due to config file problem, display some lines&lt;br /&gt;
and stop node
&lt;/li&gt;&lt;li&gt;PubSub and PEP: several improvements and bugfixes
&lt;/li&gt;&lt;li&gt;WebAdmin: fix offline message displaying
&lt;/li&gt;&lt;li&gt;When server stops with new stop_kindly command: inform users, clients, MUC
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ejabberd.im/ejabberd-2.1.2&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 18 Jan 2010 15:07:06 +0000</pubDate>
</item>
<item>
	<title>Erlang Eclipse IDE: erlide 0.7.3</title>
	<guid>http://sourceforge.net/news/?group_id=58889&amp;id=281393</guid>
	<link>http://sourceforge.net/news/?group_id=58889&amp;id=281393</link>
	<description>A new release of erlide is available, with following (user visible) changes from 0.7.0:&lt;br /&gt;&lt;br /&gt;* 468-split-erlang-code-so-that-compiler-backend-can-use-R11&lt;br /&gt;* 487-configure-report-directory'&lt;br /&gt;* fix #480: import wizard doesn't descend in subdirectories&lt;br /&gt;* 490-External-Files-project-closed' &lt;br /&gt;* 257--type---navigate-from-spec-to-declared-type'&lt;br /&gt;* 476-open-module-dialog--allow-inexact-matches'&lt;br /&gt;* 444 - text selected randomly in editor&lt;br /&gt;* 472-launch--extra-arguments-to-runtime-don-t-get-used&lt;br /&gt;* 469-editor---erlang-reconciler-still-broken'&lt;br /&gt;&lt;br /&gt;* ignore errors when deleting beam files&lt;br /&gt;* erlang templates, with syntax highlighted preview, indentation&lt;br /&gt;* use binary for noparse:initial_text parameter&lt;br /&gt;* Fix timeout in light_scan_string, send bin instead of string&lt;br /&gt;* send to console action, useful when debugging and testing&lt;br /&gt;* fixed -opaque and external type refs&lt;br /&gt;* add option to monitor ide backend&lt;br /&gt;* improve backend launching: send environment; make node status local&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;/Vlad</description>
	<pubDate>Mon, 18 Jan 2010 11:03:14 +0000</pubDate>
	<author>vladdu@users.sourceforge.net (Vlad Dumitrescu)</author>
</item>
<item>
	<title>Damien Katz: Preschools in/near Piedmont?</title>
	<guid>tag:damienkatz.net,2009://1.547</guid>
	<link>http://damienkatz.net/2009/12/preschools_innear_piedmont.html</link>
	<description>&lt;p&gt;Anyone know of a good preschool in/near Piedmont CA accepting applications for January? This is for our 2 year old girl, born Aug 2007.&lt;/p&gt;</description>
	<pubDate>Wed, 16 Dec 2009 21:33:19 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: Relaxed Inc.</title>
	<guid>tag:damienkatz.net,2009://1.546</guid>
	<link>http://damienkatz.net/2009/12/relaxed_inc.html</link>
	<description>&lt;p&gt;So something interesting happened recently.&lt;/p&gt;

&lt;p&gt;I, &lt;a href=&quot;http://jan.prima.de/plok/&quot;&gt;Jan&lt;/a&gt;, and &lt;a href=&quot;http://jchrisa.net/&quot;&gt;Chris&lt;/a&gt; are building a startup around Apache CouchDB and &lt;a href=&quot;http://www.redpoint.com/&quot;&gt;Redpoint Ventures&lt;/a&gt; has invested $2 million. Pretty cool huh?&lt;/p&gt;

&lt;p&gt;What are we going to do with that? Well, we are still figuring that out. For the most part we are going to try to grow a large and healthy CouchDB ecosystem and then build our own business(es) within that. We are working with &lt;a href=&quot;http://twitter.com/satishd&quot;&gt;Satish Dharmaraj&lt;/a&gt; on some basic strategy stuff right now, and we aren't trying to be secretive or &lt;a href=&quot;http://www.techcrunch.com/2009/12/10/stealth-startup-relaxed-raises-2-million-from-redpoint-ventures-for-couchdb-support/&quot;&gt;&quot;stealthy&quot; as TechCrunch said&lt;/a&gt;. It's just very early and I'm also very busy planning a move. Which bring me to my 2nd and 3rd announcements.&lt;/p&gt;

&lt;p&gt;2nd Announcement: Yes, I've left IBM.&lt;/p&gt;

&lt;p&gt;To the projects at IBM using CouchDB, please continue to feel free contact me at anytime. IBM has been very good to me and the CouchDB project and I want IBM and its customers to be successful. That hasn't changed.&lt;/p&gt;

&lt;p&gt;To Anant Jhingran, David Fallside and especially Sam Ruby, thank you for your early support and getting IBM behind CouchDB. We'd never have made it this far without you.&lt;/p&gt;

&lt;p&gt;3rd Announcement: California here we come! I, Laura, and our 5 yo, 2 yo, and 9 mo (for those counting at home, that's 5 people) are moving to Piedmont CA the first week of January. We have everything all settled, other than a million small details that Laura has to deal with.&lt;/p&gt;

&lt;p&gt;We still need some recommendations for a good local family doctor, ophthalmologist and dentist. And does any know where you can get them to convert your car to a lowrider that goes bouncy bouncy down the street?&lt;/p&gt;

&lt;p&gt;Anyway, exciting times ahead. Follow &lt;a href=&quot;http://twitter.com/damienkatz&quot;&gt;me&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/jchris&quot;&gt;Chris&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/janl&quot;&gt;Jan&lt;/a&gt; on twitter as we figure all this stuff out.&lt;/p&gt;</description>
	<pubDate>Tue, 15 Dec 2009 17:51:19 +0000</pubDate>
</item>
<item>
	<title>ProTest news: Call for Papers for ICFP 2010, Baltimore, US on 29 Sep 2010</title>
	<guid>http://www.protest-project.eu/news.html#111</guid>
	<link>http://www.protest-project.eu/news.html#111</link>
	<description>Call for Papers for 15th ACM SIGPLAN Int.Conf. on Functional Programming, &lt;a href=&quot;http://www.icfpconference.org/icfp2010/cfp.html&quot;&gt;ICFP 2010&lt;/a&gt;, Baltimore, US on 29 Sep 2010.

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Submission: 2 April
2010&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Final papers due: 12
July 2010&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;br /&gt;</description>
	<pubDate>Tue, 15 Dec 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>ProTest news: Call for Papers for TAP 2010, Malaga, Spain on 1 Jul 2010</title>
	<guid>http://www.protest-project.eu/news.html#110</guid>
	<link>http://www.protest-project.eu/news.html#110</link>
	<description>Call for Papers for Tests and Proofs conference, &lt;a href=&quot;http://www.st.cs.uni-saarland.de/tap2010/cfp.html&quot;&gt;TAP 2010&lt;/a&gt;, Malaga, Spain on 1 Jul 2010.&lt;br /&gt;

&lt;p&gt;Submission
of Abstract: 29 Jan 2010&lt;/p&gt;

&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Submission
of Paper:&lt;span&gt;&amp;nbsp; &lt;/span&gt;5 Feb 2010&lt;/span&gt;&lt;/p&gt;

&lt;br /&gt;</description>
	<pubDate>Tue, 15 Dec 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Erlang Eclipse IDE: erlide 0.7.0</title>
	<guid>http://sourceforge.net/news/?group_id=58889&amp;id=278373</guid>
	<link>http://sourceforge.net/news/?group_id=58889&amp;id=278373</link>
	<description>We're glad to announce that a new release of erlide is available. &lt;br /&gt;&lt;br /&gt;We managed to fix a big issue with seemingly random crashes of the Erlang backend, traced finally to major memory consumption.&lt;br /&gt;&lt;br /&gt;Other fixed issues:&lt;br /&gt;- delayed startup of backend until really needed&lt;br /&gt;- &lt;a href=&quot;http://www.assembla.com/spaces/erlide/tickets/461-autocompletion-for-macros-records-with-quotes-doesn-t-work&quot;&gt;http://www.assembla.com/spaces/erlide/tickets/461-autocompletion-for-macros-records-with-quotes-doesn-t-work&lt;/a&gt;&lt;br /&gt;- fix NPE if .erlang.cookie is empty&lt;br /&gt;- builder: now twice as fast (parallel) and interruptible&lt;br /&gt;- added &amp;quot;report problems&amp;quot; on help menu&lt;br /&gt;- &lt;a href=&quot;http://www.assembla.com/spaces/erlide/tickets/306-hover-documentation-with-non-edoc-comments-is-ugly&quot;&gt;http://www.assembla.com/spaces/erlide/tickets/306-hover-documentation-with-non-edoc-comments-is-ugly&lt;/a&gt;&lt;br /&gt;- added option to start internal backends with short name&lt;br /&gt;- some console improvements (more to follow, it's not perfect yet!): no more ide console, use run/debug to start; stdout is captured (#221)&lt;br /&gt;- 147 Debugger - interpret and un-interpret modules&lt;br /&gt;- 243 debugger: show the current stack even outside interpreted code&lt;br /&gt;- 355 debugger - terminated processes with stack look like they're running&lt;br /&gt;- 390 scanner and parser - should only update caches on save etc&lt;br /&gt;- 402 overriden 'int' module lacks functionality of the original one&lt;br /&gt;- 426 start backend on a standalone node. Only start+console+codeloading are supported&lt;br /&gt;- 441 add &amp;quot;system info&amp;quot; functionality&lt;br /&gt;- 451 ErlFolder.getModules(IParent) is very slow&lt;br /&gt;- 457 builder: scan for TODO without a full scan</description>
	<pubDate>Tue, 03 Nov 2009 13:48:07 +0000</pubDate>
	<author>vladdu@users.sourceforge.net (Vlad Dumitrescu)</author>
</item>
<item>
	<title>Damien Katz: Koala on the loose!</title>
	<guid>tag:damienkatz.net,2009://1.545</guid>
	<link>http://damienkatz.net/2009/10/koala_on_the_loose.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu 9.10 Karmic Koala&lt;/a&gt; has just been released. This is big news as this version includes Apache CouchDB, used as a replicable database by desktop apps. This means CouchDB will be on over 10 million desktops. Nice :)&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;mt-enclosure mt-enclosure-image&quot;&gt;&lt;a href=&quot;http://damienkatz.net/pics/ubuntu_couchdb.png&quot;&gt;&lt;img alt=&quot;ubuntu_couchdb.png&quot; src=&quot;http://damienkatz.net/pics/ubuntu_couchdb-thumb-400x298.png&quot; width=&quot;400&quot; height=&quot;298&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 29 Oct 2009 20:08:54 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: &quot;CouchDB Implements a Fundamental Algorithm&quot;</title>
	<guid>tag:damienkatz.net,2009://1.544</guid>
	<link>http://damienkatz.net/2009/10/couchdb_implements_a_fundament.html</link>
	<description>&lt;p&gt;Chris Anderson, an Apache CouchDB contributor, writes a great article about the core design of CouchDB:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://jchrisa.net/drl/_design/sofa/_show/post/CouchDB-Implements-a-Fundamental-Algorithm&quot;&gt;CouchDB Implements a Fundamental Algorithm&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 29 Oct 2009 19:17:02 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: Mozilla Raindrop</title>
	<guid>tag:damienkatz.net,2009://1.543</guid>
	<link>http://damienkatz.net/2009/10/mozilla_raindrop.html</link>
	<description>&lt;p&gt;&lt;img alt=&quot;raindrop-header.png&quot; src=&quot;http://damienkatz.net/pics/raindrop-header.png&quot; width=&quot;600&quot; height=&quot;200&quot; class=&quot;mt-image-none&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Mozilla &lt;a href=&quot;http://labs.mozilla.com/raindrop/2009/10/22/introducing-raindrop/&quot;&gt;has announced the Raindrop project today&lt;/a&gt;, a new messaging platform built on top of Apache CouchDB:&lt;/p&gt;

&lt;blockquote&gt;&lt;div&gt;
A central principle behind Raindrop is that messaging should be personal -- we want Raindrop to be people-centric both in how we process messages, and in how we can help give people control over their personal data and experiences.
&lt;/div&gt;&lt;/blockquote&gt;

&lt;p&gt;This is a huge deal for me and for CouchDB. I can't describe how proud I am of this.&lt;/p&gt;</description>
	<pubDate>Fri, 23 Oct 2009 18:58:41 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: &quot;Agile is treating the symptoms, not the disease&quot;</title>
	<guid>tag:damienkatz.net,2009://1.542</guid>
	<link>http://damienkatz.net/2009/10/agile_is_treating_the_symptoms.html</link>
	<description>&lt;blockquote&gt;&lt;div&gt;Where is this decade's Access?
&lt;p&gt;
It may seem like a snarky and trolling question, but think about it for a moment:
for a decade or so, I was brought into project after project that was designed to essentially rebuild/rearchitect the Access database created by one of the department's more tech-savvy employees into something that could scale beyond just the department.
&lt;p&gt; 
(Actually, in about half of them, the goal wasn't even to scale it up, it was just to put it on the web. It was only in the subsequent meetings and discussions that the issues of scale came up, and if my memory is accurate, I was the one who raised those issues, not the customer. I wonder now, looking back at it, if that was pure gold-plating on my part.)
&lt;p&gt;
Others, including many people I care about (Rod Paddock, Markus Eggers, Ken Levy, Cathi Gero, for starters) made a healthy living off of building &quot;line of business&quot; applications in FoxPro, which Microsoft has now officially shut down. For those who did Office applications, Visual Basic for Applications has now been officially deprecated in favor of VSTO (Visual Studio Tools for Office), a set of libraries that are available for use by any .NET application language, and of course classic Visual Basic itself has been &quot;brought into the fold&quot; by making it a fully-fledged object-oriented language complete with XML literals and LINQ query capabilities.
&lt;p&gt;
Which means, if somebody working for a small school district in western Pennsylvania wants to build a simple application for tracking students' attendance (rather than tracking it on paper anymore), what do they do?
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;http://www.javaworld.com/community/node/3530&quot;&gt;http://www.javaworld.com/community/node/3530&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That last question is the one that interests me more than just about anything else you can ask.&lt;/p&gt;</description>
	<pubDate>Tue, 13 Oct 2009 15:59:42 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: Apache CouchDB 0.10.0 Escapes!</title>
	<guid>tag:damienkatz.net,2009://1.541</guid>
	<link>http://damienkatz.net/2009/10/apache_couchdb_0100_escapes.html</link>
	<description>&lt;p&gt;Our first beta!&lt;/p&gt;

&lt;p&gt;Get it here: &lt;a href=&quot;http://couchdb.apache.org/downloads.html&quot;&gt;http://couchdb.apache.org/downloads.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There should be another interesting CouchDB related announcement later today.&lt;/p&gt;</description>
	<pubDate>Tue, 13 Oct 2009 14:10:33 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: Awesome InfoWorld CouchDB Article</title>
	<guid>tag:damienkatz.net,2009://1.540</guid>
	<link>http://damienkatz.net/2009/10/awesome_infoworld_couchdb_article.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://www.infoworld.com/d/data-management/couchdb-emerging-top-choice-offline-web-apps-777&quot;&gt;CouchDB emerging as a top choice for offline Web apps&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 07 Oct 2009 01:56:00 +0000</pubDate>
</item>
<item>
	<title>Damien Katz: Oh yeah, I'm on the Twitter now</title>
	<guid>tag:damienkatz.net,2009://1.539</guid>
	<link>http://damienkatz.net/2009/09/oh_yeah_im_on_the_twitter_now.html</link>
	<description>&lt;p&gt;Follow me here: &lt;a href=&quot;http://twitter.com/damienkatz&quot;&gt;http://twitter.com/damienkatz&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 29 Sep 2009 19:58:42 +0000</pubDate>
</item>
<item>
	<title>Erlware: The Erlware Emacs Mode</title>
	<guid>tag:blogger.com,1999:blog-4167999740082219489.post-1761330740825148390</guid>
	<link>http://erlware.blogspot.com/2009/07/erlware-emacs-mode.html</link>
	<description>If you use Emacs as your Erlang development environment, you might check out erlware-mode, an Emacs mode for Erlang that is derived from the original mode but contains numerous bug fixes and improvements, including:Syntax highlighting and indentation improvementsCleaner codeBetter support for newer versions of EmacsCleaner and more consistent templatesIntegrated support for flymake, an on-the-fly</description>
	<pubDate>Mon, 06 Jul 2009 21:37:44 +0000</pubDate>
	<author>noreply@blogger.com (Dave Peticolas)</author>
</item>
<item>
	<title>ErlyBird: Erlang Plugin Version 1 for NetBeans 6.7 Released</title>
	<guid>http://sourceforge.net/news/?group_id=192439&amp;id=271758</guid>
	<link>http://sourceforge.net/news/?group_id=192439&amp;id=271758</link>
	<description>&amp;lt;p&amp;gt;&lt;br /&gt;I'm pleased to announce Erlang plugin (ErlyBird) version 1 for NetBeans 6.7 is released.&lt;br /&gt;&amp;lt;p&amp;gt;&lt;br /&gt;NetBeans 6.7 RC3 or above is a requirement.&lt;br /&gt;&amp;lt;p&amp;gt;&lt;br /&gt;What's new:&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;It's rewritten in Scala instead of Java&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;More reliable instant rename&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Display extracted document information from source comment when doing auto-completion.&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;&lt;br /&gt;To download, please go to: &lt;a href=&quot;https://sourceforge.net/project/showfiles.php?group_id=192439&amp;package_id=226387&quot;&gt;https://sourceforge.net/project/showfiles.php?group_id=192439&amp;amp;package_id=226387&lt;/a&gt;&lt;br /&gt;&amp;lt;p&amp;gt;&lt;br /&gt;To install:&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Open NetBeans, go to &amp;quot;Tools&amp;quot; -&amp;gt; &amp;quot;Plugins&amp;quot;, click on &amp;quot;Downloaded&amp;quot; tab title, click on &amp;quot;Add Plugins...&amp;quot; button, choose the directory where the Erlang plugin are unzipped, select all listed *.nbm files, following the instructions.&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Make sure your Erlang bin path is under OS environment PATH, you can also check/set your OTP path: From [Tools]-&amp;gt;[Options], click on 'Miscellanous', then expand 'Erlang Installation', fill in the full path of your 'erl.exe' or 'erl' file. For instance: &amp;quot;C:/erl/bin/erl.exe&amp;quot;&lt;br /&gt;&amp;lt;li&amp;gt;When you open/create an Erlang project first time, the OTP libs will be indexed. Take a coffee and wait, the indexing time varies from 10 to 30 minutes depending on your computer.&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;Feedback and bug reports are welcome.&lt;br /&gt;&amp;lt;p&amp;gt;</description>
	<pubDate>Wed, 17 Jun 2009 07:45:26 +0000</pubDate>
	<author>dcaoyuan@users.sourceforge.net (Caoyuan Deng)</author>
</item>
<item>
	<title>RabbitMQ Announcements: [rabbitmq-announce] RabbitMQ 1.6.0 release</title>
	<guid>http://lists.rabbitmq.com/pipermail/rabbitmq-announce/2009-June/000019.html</guid>
	<link>http://lists.rabbitmq.com/pipermail/rabbitmq-announce/2009-June/000019.html</link>
	<pubDate>Wed, 17 Jun 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>RabbitMQ Announcements: [rabbitmq-announce] RabbitMQ in Fedora</title>
	<guid>http://lists.rabbitmq.com/pipermail/rabbitmq-announce/2009-June/000018.html</guid>
	<link>http://lists.rabbitmq.com/pipermail/rabbitmq-announce/2009-June/000018.html</link>
	<pubDate>Wed, 03 Jun 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>ErlyBird: Scala Plugin Version 1 for NetBeans 6.7 Released</title>
	<guid>http://sourceforge.net/news/?group_id=192439&amp;id=270656</guid>
	<link>http://sourceforge.net/news/?group_id=192439&amp;id=270656</link>
	<description>Scala Plugin Version 1 for NetBeans 6.7 Released&lt;br /&gt;&lt;br /&gt;I'm pleased to announce the availability of Scala plugin version 1 for NetBeans 6.7&lt;br /&gt;&lt;br /&gt;What's new:&lt;br /&gt;&lt;br /&gt;    * Use fsc instead of scalac as the project building compiler (If you've set SCALA_HOME, make sure $SCALA_HOME/bin is included in your PATH environment).&lt;br /&gt;    * Fixed setting breakpoint in closure statement.&lt;br /&gt;    * A basic import-fixer (Right click on source, then choose &amp;quot;Fix Imports&amp;quot;).&lt;br /&gt;    * Code assistant for local vars and functions.&lt;br /&gt;    * Run/Debug single file.&lt;br /&gt;&lt;br /&gt;To download, please go to: &lt;a href=&quot;https://sourceforge.net/project/showfiles.php?group_id=192439&amp;package_id=256544&amp;release_id=686747&quot;&gt;https://sourceforge.net/project/showfiles.php?group_id=192439&amp;amp;package_id=256544&amp;amp;release_id=686747&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For more information, please see &lt;a href=&quot;http://wiki.netbeans.org/Scala&quot;&gt;http://wiki.netbeans.org/Scala&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bug reports are welcome.&lt;br /&gt;&lt;br /&gt;It works on NetBeans 6.7 RC1 or above.</description>
	<pubDate>Tue, 02 Jun 2009 06:24:44 +0000</pubDate>
	<author>dcaoyuan@users.sourceforge.net (Caoyuan Deng)</author>
</item>
<item>
	<title>Erlware: Erlware Erlang Software Review: JSON and on and on with Ktuo</title>
	<guid>tag:blogger.com,1999:blog-4167999740082219489.post-8967721812844455487</guid>
	<link>http://erlware.blogspot.com/2009/02/erlware-erlang-software-review-json-and.html</link>
	<description>There is a ton of interesting software created in the Erlang community. Erlware is about making that software more visible. Periodically we will release tutorials, writeups, and reviews of software that has been published to the Erlware repositories for free community use. This is the first such post.From json.orgJSON (JavaScript Object Notation) is a lightweight data-interchange format. It is</description>
	<pubDate>Tue, 17 Mar 2009 20:14:25 +0000</pubDate>
	<author>martinjlogan@erlware.org (Martin J. Logan)</author>
</item>
<item>
	<title>Erlware: Announcing Erlware</title>
	<guid>tag:blogger.com,1999:blog-4167999740082219489.post-5546963107735460860</guid>
	<link>http://erlware.blogspot.com/2007/07/announcing-erlware.html</link>
	<description>Announcing Erlware! A set of OTP applications for building and distributing Erlang projects. Featuring build system, Sinan, and our package management tool, Faxien. We just released our beta so feel free to jump in and help us ferret out issues!is our flagship build system. It is a build system designed expressly for Erlang OTP projects and unsurprisingly enough it is a %100 OTP project itself.</description>
	<pubDate>Wed, 25 Feb 2009 15:14:36 +0000</pubDate>
	<author>martinjlogan@erlware.org (Martin J. Logan)</author>
</item>
<item>
	<title>The Erlane Project: Eudémonologie : Un nouveau blog sur le bonheur</title>
	<guid>tag:blogger.com,1999:blog-7895735736405728812.post-7899377296126624166</guid>
	<link>http://feedproxy.google.com/~r/erlane-project/~3/PrG_dLCkvbc/eudmonologie-un-nouveau-blog-sur-le.html</link>
	<description>Nous ouvrons un nouveau blog intitulé &lt;a href=&quot;http://eudemonologie.blogspot.com/&quot;&gt;Eudémonologie : l'art et la science du bonheur&lt;/a&gt;. Il a pour sujet la psychologie positive, la position des économistes sur le bonheur, ainsi que l'influence du progrès technologique sur le bonheur.&lt;img src=&quot;http://feeds.feedburner.com/~r/erlane-project/~4/PrG_dLCkvbc&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 12 Nov 2008 08:00:19 +0000</pubDate>
	<author>noreply@blogger.com (The Erlane Project Team)</author>
</item>
<item>
	<title>Erlware: Video of Martin and Eric speaking about Erlware at the Erlang eXchange in London</title>
	<guid>tag:blogger.com,1999:blog-4167999740082219489.post-5549165956836214315</guid>
	<link>http://erlware.blogspot.com/2008/07/video-of-martin-and-eric-speaking-about.html</link>
	<description>Martin and Eric recently spoke at the Erlang eXchange in London.  The conference was truly inspiring.  There are some amazing apps being developed in our community right now. Erlware is just about to go 1.0 (should be a couple weeks from now) and this conference was a great way to start the 1.0 launch path. More on Erlware at erlware.org</description>
	<pubDate>Sat, 12 Jul 2008 13:29:24 +0000</pubDate>
	<author>martinjlogan@erlware.org (Martin J. Logan)</author>
</item>
<item>
	<title>The Erlane Project: From Java to Erlang, or How to Structure an Erlang Process</title>
	<guid>tag:blogger.com,1999:blog-7895735736405728812.post-2710585365615613831</guid>
	<link>http://feedproxy.google.com/~r/erlane-project/~3/pRtqD4_dnJQ/from-java-to-erlang-or-how-to-structure.html</link>
	<description>We are Java programmers, and to develop using Erlang/OTP, we need to make at least two paradigm shifts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;From imperative programming to functional programming,&lt;/li&gt;&lt;li&gt;From objects to processes.&lt;/li&gt;&lt;/ul&gt;The first part is not quite easy, altough it is certainly the funnier one. No more &lt;tt&gt;for&lt;/tt&gt; loops, just using recursive (and even tail-recursive) functions; mastering guards and pattern matching instead of &lt;tt&gt;if&lt;/tt&gt;. But even when these changes are understood, we must adapt to data structures: no more array, only lists, tuples and records. This leads to such errors as &lt;a href=&quot;http://ruslanspivak.wordpress.com/2007/08/15/my-erlang-binary-search/&quot;&gt;persistently and repeatedly&lt;/a&gt; implementing a &lt;a href=&quot;http://erl.nfshost.com/wordpress/2007/08/11/binary-search/&quot;&gt;binary search in a list&lt;/a&gt;, even though it is &lt;a href=&quot;http://erlane-project.blogspot.com/2007/08/binary-search-ultimate-test.html&quot;&gt;totally inefficient&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The second part is trickier, but it can become very simple if we can map OO-concepts to OTP.&lt;br /&gt;A &lt;a href=&quot;http://en.wikipedia.org/wiki/Class_%28computer_science%29&quot;&gt;class&lt;/a&gt; is generally defined as a construct that has a state (represented by instance variables) and behaviours (represented by methods). In Erlang, a state can be represented as a record, and methods can be mapped to functions that modifies this record, and have the following form:&lt;br /&gt;&lt;pre&gt;{tag, Reply, NewState} = method(Request, CurrentState).&lt;/pre&gt;where:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;tag&lt;/tt&gt; is an atom, like &lt;tt&gt;ok&lt;/tt&gt;, or &lt;tt&gt;error&lt;/tt&gt;, or for &lt;tt&gt;gen_server&lt;/tt&gt;, &lt;tt&gt;reply&lt;/tt&gt; or &lt;tt&gt;no_reply&lt;/tt&gt;, &lt;/li&gt;&lt;li&gt;&lt;tt&gt;Reply&lt;/tt&gt; is the reply to the &lt;tt&gt;Request&lt;/tt&gt;, &lt;/li&gt;&lt;li&gt;&lt;tt&gt;NewState&lt;/tt&gt; is the state of the process after the method call, &lt;/li&gt;&lt;li&gt;&lt;tt&gt;CurrentState&lt;/tt&gt; is the state of the process before the method call.&lt;/li&gt;&lt;/ul&gt;The most common way to implement a process in Erlang/OTP is to use a &lt;tt&gt;gen_server&lt;/tt&gt; behaviour. An OTP behaviour defines a set of callback functions that a process must implement, the &lt;tt&gt;gen_server&lt;/tt&gt; defines the following set:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;init(Args)&lt;/tt&gt;, which acts as a constructor with arguments, and must return &lt;tt&gt;{ok, InitialState}&lt;/tt&gt;,&lt;/li&gt;&lt;li&gt;&lt;tt&gt;handle_call(Request, From, State)&lt;/tt&gt;, which must dispatch call to a method, and sends back &lt;tt&gt;{reply, Reply, NewState}&lt;/tt&gt;,&lt;/li&gt;&lt;li&gt;&lt;tt&gt;handle_cast(Request, State)&lt;/tt&gt;, which must dispatch call to a method, but in this case the calling process does not wait for a reply, so it must answer &lt;tt&gt;{noreply, NewState}&lt;/tt&gt;,&lt;/li&gt;&lt;li&gt;&lt;tt&gt;terminate(Reason, State)&lt;/tt&gt;, which acts as a destructor, and is called when the process must be ended.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The calling process of a &lt;tt&gt;gen_server&lt;/tt&gt; must call the following functions:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;gen_server:start_link(Module, Args, Options)&lt;/tt&gt; to build a new process, it returns &lt;tt&gt;{ok, Pid}&lt;/tt&gt; where &lt;tt&gt;Pid&lt;/tt&gt; is a reference of the process,&lt;/li&gt;&lt;li&gt;&lt;tt&gt;gen_server:call(Pid, Request)&lt;/tt&gt;, to send a request to the process and waits for a reply,&lt;/li&gt;&lt;li&gt;&lt;tt&gt;gen_server:cast(Pid, Request)&lt;/tt&gt;, to send a request without waiting for a reply.&lt;/li&gt;&lt;/ul&gt;Note that a process built with a &lt;tt&gt;gen_server&lt;/tt&gt; behaviour doest not provide an Application Programming Interface, but a message-based interface (exactly like a network protocol). Anything can be put as a request. So, it is good practice to provide an API in the module that is in charge to provide more friendly function calls and transforms API calls to tagged message passing calls. For instance, for the constructor in the module &lt;tt&gt;eane_tcp&lt;/tt&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;start(ClientHash, ClientPort) -&gt;&lt;br /&gt;   gen_server:start_link(eane_tcp_cs, [ClientHash, ClientPort], []).&lt;br /&gt;&lt;/pre&gt;A &lt;tt&gt;gen_server&lt;/tt&gt; process that provides a way to connect to an eDonkey server, sends an hello to it, and is able to make a search files request, could be built this way:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;-module(eane_tcp_cs).  % The name of the module&lt;br /&gt;&lt;br /&gt;% It implements a gen_server behaviour&lt;br /&gt;-behaviour(gen_server).&lt;br /&gt;&lt;br /&gt;% API Functions exported&lt;br /&gt;-export([start/2, connect/3, hello/1, search_files/2]).&lt;br /&gt;&lt;br /&gt;% gen_server callbacks&lt;br /&gt;-export([init/1, handle_call/3, handle_cast/2, terminate/2]).&lt;br /&gt;&lt;br /&gt;% definition of the internal state&lt;br /&gt;-record(tcp_state, { socket,&lt;br /&gt;                    client_hash,&lt;br /&gt;                    client_id,&lt;br /&gt;                    port }).&lt;br /&gt;&lt;br /&gt;% External API&lt;br /&gt;% (?MODULE is a built-in macro for the name of the current module)&lt;br /&gt;&lt;br /&gt;start(ClientHash, ClientPort) -&gt;&lt;br /&gt;   gen_server:start_link(?MODULE, [ClientHash, ClientPort], []).&lt;br /&gt;&lt;br /&gt;hello(Pid) -&gt;&lt;br /&gt;   gen_server:cast(Pid, {hello}).&lt;br /&gt;&lt;br /&gt;connect(Pid, Host, Port) -&gt;&lt;br /&gt;   gen_server:call(Pid, {connect, [Host, Port]}).&lt;br /&gt;&lt;br /&gt;search_files(Pid, Query) -&gt;&lt;br /&gt;   gen_server:call(Pid, {search, Query}).&lt;br /&gt;&lt;br /&gt;% gen_server behaviour callbacks&lt;br /&gt;&lt;br /&gt;init(Args) -&gt;&lt;br /&gt;   [ClientHash, ClientPort] = Args,&lt;br /&gt;   {ok, #tcp_state {client_hash = ClientHash, port = ClientPort}}.&lt;br /&gt;&lt;br /&gt;handle_call({connect, [Host, Port]}, _From, TcpState) -&gt;&lt;br /&gt;   {ok, NewState} = connect_server(Host, Port, TcpState),&lt;br /&gt;   {reply, ok, NewState};&lt;br /&gt;&lt;br /&gt;handle_call({search, Name}, _From, TcpState) -&gt;&lt;br /&gt;   {ok, Reply, NewState} = send_search(Name, TcpState),&lt;br /&gt;   {reply, Reply, NewState}.&lt;br /&gt;&lt;br /&gt;handle_cast({hello}, TcpState) -&gt;&lt;br /&gt;   {ok, NewState} = send_hello(TcpState),&lt;br /&gt;   {noreply, NewState}.&lt;br /&gt;&lt;br /&gt;terminate(Reason, TcpState) -&gt;&lt;br /&gt;   close_socket(TcpState),&lt;br /&gt;ok.&lt;br /&gt;&lt;br /&gt;% Internal functions:&lt;br /&gt;%   connect_server, send_search, send_hello, close_socket&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note that Erlang/OTP has no direct equivalent of inheritance and polymorphism, although they can be mimicked (for instance, polymorphism can be mimicked by processes having the same interface).&lt;img src=&quot;http://feeds.feedburner.com/~r/erlane-project/~4/pRtqD4_dnJQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 16 Aug 2007 12:46:42 +0000</pubDate>
	<author>noreply@blogger.com (The Erlane Project Team)</author>
</item>
<item>
	<title>The Erlane Project: Binary Search: The Ultimate Test</title>
	<guid>tag:blogger.com,1999:blog-7895735736405728812.post-496434774871509651</guid>
	<link>http://feedproxy.google.com/~r/erlane-project/~3/_UTmogW5IFg/binary-search-ultimate-test.html</link>
	<description>&lt;a href=&quot;http://erl.nfshost.com/wordpress&quot;&gt;Half-baked Ideas&lt;/a&gt; presents a very nice &lt;a href=&quot;http://erl.nfshost.com/wordpress/2007/08/11/binary-search/&quot;&gt;binary search algorithm written in Erlang&lt;/a&gt;. It has been thoroughly tested, and is absolutely correct. Except for one thing: it is far slower than a simple linear search.&lt;br /&gt;&lt;br /&gt;The only reason to use a binary search instead of a simpler linear search is because it is far faster. The number of comparisons of two elements in a binary search is at most log2(n). For a 1,000,000 items list, this means at most 20 comparisons, instead of at most 1,000,000 for a linear search. So, let's try.&lt;br /&gt;&lt;br /&gt;First, let's code the linear search function:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;linear_search(K, L) -&gt;&lt;br /&gt;    linear_search(K, L, 1).&lt;br /&gt;&lt;br /&gt;linear_search(_, [], _) -&gt;&lt;br /&gt;    -1;&lt;br /&gt;linear_search(K, [K | _], N) -&gt;&lt;br /&gt;    N;&lt;br /&gt;linear_search(K, [_ | T], N) -&gt;&lt;br /&gt;    linear_search(K, T, N + 1).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then, measure the performance, using the test functions defined in the binary search algorithm, and &lt;tt&gt;timer:tc/3&lt;/tt&gt;, an OTP function which measures the time of a function call in microseconds:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;perftest(N) -&gt;&lt;br /&gt;    List = rlist(N), %% Generate a list of n items&lt;br /&gt;    Value = lists:max(List) + 1, %% Search for max + 1, to be in the worst case&lt;br /&gt;    { BinarySearchTime, BinarySearchResult } = timer:tc(bs, search, [Value, List]),&lt;br /&gt;    { LinearSearchTime, LinearSearchResult } = timer:tc(bs, linear_search, [Value, List]),&lt;br /&gt;    io:format(&quot;Binary search time: ~w (~w)~n&quot;, [BinarySearchTime, BinarySearchResult]),&lt;br /&gt;    io:format(&quot;Linear search time: ~w (~w)~n&quot;, [LinearSearchTime, LinearSearchResult]).&lt;br /&gt;&lt;/pre&gt;The results are astonishing:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;2&gt; bs:perftest(1000000).&lt;br /&gt;Binary search time: 547000 (-1)&lt;br /&gt;Linear search time: 31999 (-1)&lt;br /&gt;ok&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The binary search should be 50,000 times faster, it is 17 times slower! Why? Time to play with the Erlang profiler &lt;tt&gt;fprof&lt;/tt&gt;.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;profile(N) -&gt;&lt;br /&gt;    List = rlist(N),&lt;br /&gt;    Value = lists:max(List) + 1,&lt;br /&gt;    fprof:apply(bs, search, [Value, List]),&lt;br /&gt;    fprof:profile(),&lt;br /&gt;    fprof:analyse().&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This gives the following result:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;4&gt; bs:profile(1000).&lt;br /&gt;Reading trace data...&lt;br /&gt;.........&lt;br /&gt;End of trace!&lt;br /&gt;Processing data...&lt;br /&gt;Creating output...&lt;br /&gt;%% Analysis results:&lt;br /&gt;{  analysis_options,&lt;br /&gt; [{callers, true},&lt;br /&gt;  {sort, acc},&lt;br /&gt;  {totals, false},&lt;br /&gt;  {details, true}]}.&lt;br /&gt;&lt;br /&gt;%                                               CNT       ACC       OWN        &lt;br /&gt;[{ totals,                                     9279,   33.266,   33.007}].  %%%&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;%                                               CNT       ACC       OWN        &lt;br /&gt;[{ &quot;0.29.0&gt;&quot;,                                 9279,undefined,   33.007}].   %%&lt;br /&gt;&lt;br /&gt;{[{undefined,                                     0,   33.266,    0.002}],     &lt;br /&gt; { {fprof,apply_start_stop,4},                    0,   33.266,    0.002},     %&lt;br /&gt; [{{bs,search,2},                                 1,   33.264,    0.001},      &lt;br /&gt;  {suspend,                                       1,    0.000,    0.000}]}.    &lt;br /&gt;&lt;br /&gt;{[{{fprof,apply_start_stop,4},                    1,   33.264,    0.001}],     &lt;br /&gt; { {bs,search,2},                                 1,   33.264,    0.001},     %&lt;br /&gt; [{{bs,search,4},                                 1,   33.263,    0.002}]}.    &lt;br /&gt;&lt;br /&gt;{[{{bs,search,2},                                 1,   33.263,    0.002},      &lt;br /&gt;  {{bs,search,4},                                10,    0.000,    0.019}],     &lt;br /&gt; { {bs,search,4},                                11,   33.263,    0.021},     %&lt;br /&gt; [{{lists,nth,2},                                10,   33.240,    0.010},      &lt;br /&gt;  {{bs,failure,0},                                1,    0.001,    0.001},      &lt;br /&gt;  {suspend,                                       1,    0.001,    0.000},      &lt;br /&gt;  {{bs,search,4},                                10,    0.000,    0.019}]}.    &lt;br /&gt;&lt;br /&gt;{[{{bs,search,4},                                10,   33.240,    0.010},      &lt;br /&gt;  {{lists,nth,2},                              8996,    0.000,   32.972}],     &lt;br /&gt; { {lists,nth,2},                              9006,   33.240,   32.982},     %&lt;br /&gt; [{suspend,                                     258,    0.258,    0.000},      &lt;br /&gt;  {{lists,nth,2},                              8996,    0.000,   32.972}]}.    &lt;br /&gt;&lt;br /&gt;{[{{lists,nth,2},                               258,    0.258,    0.000},      &lt;br /&gt;  {{bs,search,4},                                 1,    0.001,    0.000},      &lt;br /&gt;  {{fprof,apply_start_stop,4},                    1,    0.000,    0.000}],     &lt;br /&gt; { suspend,                                     260,    0.259,    0.000},     %&lt;br /&gt; [ ]}.&lt;br /&gt;&lt;br /&gt;{[{{bs,search,4},                                 1,    0.001,    0.001}],     &lt;br /&gt; { {bs,failure,0},                                1,    0.001,    0.001},     %&lt;br /&gt; [ ]}.&lt;br /&gt;&lt;br /&gt;{[ ],&lt;br /&gt; { undefined,                                     0,    0.000,    0.000},     %&lt;br /&gt; [{{fprof,apply_start_stop,4},                    0,   33.266,    0.002}]}.    &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Done!&lt;br /&gt;ok&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;tt&gt;search/4&lt;/tt&gt; is called 11 times, as expected, but the most consuming function is &lt;tt&gt;list:nth/2&lt;/tt&gt;. It is called 9,006 times, and is responsible for almost all the time of the search! Why?&lt;br /&gt;&lt;br /&gt;Because finding the nth element of a list is not a constant time function, like finding the nth element in an array. A list cannot be accessed randomly, but only sequentially. The code for &lt;tt&gt;list:nth/2&lt;/tt&gt; shows that clearly:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;nth(1, [H|_]) -&gt; H;&lt;br /&gt;nth(N, [_|T]) when N &gt; 1 -&gt;&lt;br /&gt;    nth(N - 1, T).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Applied to a 1000-item list, the algorithm first search for the 500th item (500 calls to nth), then for the 750th, then for the 875th, etc..., resulting eventually in 9,606 calls to &lt;tt&gt;lists:nth/2&lt;/tt&gt;!&lt;br /&gt;&lt;br /&gt;As Alberto Savoia points it out in the chapter 7 of &lt;a href=&quot;http://www.amazon.com/Beautiful-Code-Leading-Programmers-Practice/dp/0596510047/ref=pd_bbs_sr_1/002-5473367-5440828?ie=UTF8&amp;s=books&amp;qid=1186994119&amp;sr=8-1&quot;&gt;Beautiful Code&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Here's my initial testing strategy (or team of tests):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Start with smoke tests.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add some boundary value tests.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Continue with various thorough and exhaustive types of tests.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;Finally, add some &lt;/span&gt;&lt;span&gt;performance &lt;/span&gt;&lt;span&gt;tests.&lt;/span&gt; &lt;span&gt;(emphasis is mine)&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Testing that a function performs correctly is of course necessary, but when performance is part of the specification (as it is the case for the binary search), then performance must also be tested carefully.&lt;br /&gt;&lt;br /&gt;This is also a funny case where a traditional imperative programming technique does not work as expected in a functional context.&lt;img src=&quot;http://feeds.feedburner.com/~r/erlane-project/~4/_UTmogW5IFg&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 13 Aug 2007 12:08:44 +0000</pubDate>
	<author>noreply@blogger.com (The Erlane Project Team)</author>
</item>
<item>
	<title>The Erlane Project: The Erlane Project</title>
	<guid>tag:blogger.com,1999:blog-7895735736405728812.post-708236376727231309</guid>
	<link>http://feedproxy.google.com/~r/erlane-project/~3/vWue_QKuSf4/erlane-project.html</link>
	<description>The Erlane Project is aimed at creating an Erlang/OTP client for the eDonkey/eMule protocol. The name is a portmanteau for &lt;span&gt;Erlang&lt;/span&gt; and &lt;span&gt;âne&lt;/span&gt;, which is the French word for donkey.&lt;br /&gt;We are developers, and as every developer, we like learning new languages and techniques, so we decided to have a look at Erlang. The best way to learn a new language is to build something with it. As Erlang is very network-oriented, we thought it would be a good exercise to implement a peer-to-peer protocol client.&lt;br /&gt;This blog is the story of this project, it will contain posts about Erlang, the Open Telecom Platform, the eDonkey protocol, and also maybe about the Mac.&lt;img src=&quot;http://feeds.feedburner.com/~r/erlane-project/~4/vWue_QKuSf4&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sun, 12 Aug 2007 11:48:50 +0000</pubDate>
	<author>noreply@blogger.com (The Erlane Project Team)</author>
</item>
<item>
	<title>The Erlane Project: Designing an Erlang Application</title>
	<guid>tag:blogger.com,1999:blog-7895735736405728812.post-4248989835166429616</guid>
	<link>http://feedproxy.google.com/~r/erlane-project/~3/SUTf9a6j4Vk/designing-erlang-application.html</link>
	<description>The Erlane client should be able to implement a subpart of eDonkey protocol, as defined in this &lt;a href=&quot;http://www.cs.huji.ac.il/labs/danss/presentations/emule.pdf&quot;&gt;introduction to the eDonkey/eMule protocol&lt;/a&gt;. The first problem to solve is how to design an Erlang application and how to use effectively the new notions (at least, new for me!) introduced by the support of concurrency, like processes and behaviours. The documentation which comes with Erlang contains a document about &lt;a href=&quot;http://www.erlang.org/doc/design_principles/part_frame.html&quot;&gt;OTP Design Principles&lt;/a&gt; and how to structure an application in terms of processes, modules and even directories.&lt;br /&gt;&lt;br /&gt;I tried to make the exercise to apply these principles to the case of Erlane, and it gives the following big picture in terms of processes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Basic worker processes will handle the connections towards the servers and the other peers. These processes implements a gen_server behaviour, and are in modules erlane_tcp_cs, erlane_udp_cs, erlane_tcp_p2p, erlane_udp_p2p.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A set of processes are responsible for maintaining different lists, such as the list of servers, the list of peers (with ID, client hash, credits, rating, etc), the list of files (MD4 hash, name, size, location, etc). These are gen_server processes relying on ets for data storage. They are named erlane_peers_data, erlane_servers_data, erlane_files_data. Maybe other data processes will be necessary later, for the different queues,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A supervisor for all the different processes which maintain data, name erlane_data_sup,&lt;/li&gt;&lt;li&gt;A supervisor for the client/server communications erlane_tcp_cs and erlane_udp_cs,&lt;/li&gt;&lt;li&gt;A supervisor for the peer/peer communications,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A gen_server worker process for user interface named erlane_ui,&lt;/li&gt;&lt;li&gt;A supervisor for the whole set of processes (i.e. other supervisors and UI),&lt;br /&gt;&lt;/li&gt;&lt;li&gt;An application process for launching the whole set of supervisor, named erlane_app,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A set of modules for low-level functions (such as erlane_codec for basic packet coding/decoding).&lt;/li&gt;&lt;/ul&gt;This architecture will certainly evolve, but it is a good start. I begin with the TCP client/server communication, this means the erlane_tcp_cs process, the erlane_servers_data, the corresponding supervisors, a first version of the erlane_ui and erlane_app, and basic packet coding/decoding.&lt;img src=&quot;http://feeds.feedburner.com/~r/erlane-project/~4/SUTf9a6j4Vk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 10 Aug 2007 12:32:18 +0000</pubDate>
	<author>noreply@blogger.com (The Erlane Project Team)</author>
</item>
<item>
	<title>Erlware: Why use a standard builsystem? (Well structured OTP applications)</title>
	<guid>tag:blogger.com,1999:blog-4167999740082219489.post-2152596836902283929</guid>
	<link>http://erlware.blogspot.com/2007/03/why-use-standard-builsystem-well.html</link>
	<description>Why use a standard build system?   Over here at Erlware we have been using Erlang for quite some time now.  I personally was introduced to Erlang in 1999, I think the first version of ERTS that I ran was R6.  My first project was layed out according to my best guess at a good directory structure. The project contained a home grown supervisor of sorts, which if I recall correctly was about 1000+</description>
	<pubDate>Sat, 19 May 2007 09:43:52 +0000</pubDate>
	<author>martinjlogan@erlware.org (Martin J. Logan)</author>
</item>

</channel>
</rss>
