Erlang/OTP News feeds
This page hosts the latest entries from newsfeeds from software projects in our database. If you know know of any feeds that would fit here, please add them on this page.
March 15, 2010
Damien Katz
O'Reilly's CouchDB: The Definitive Guide for $9.99 Today Only!
Use this discount code: DDCDB
by Damien Katz at March 15, 2010 07:00 PM
March 11, 2010
Damien Katz
Win a Nexus One from Couchio
Port CouchDB to an Android app and get our phone! Details.
by Damien Katz at March 11, 2010 01:58 AM
March 08, 2010
ejabberd@jabber.ru
ejabberd 2.1.3 - Third bugfix release
ejabberd 2.1.3 has been released. It contains many bugfixes and some improvements.
This is a short list of changes:
- New ejabberd_c2s option: max_fsm_queue
- ejabberdctl: Support concurrent connections with bound connection names
- Cross-domain HTTP-Bind support (EJAB-1168)
- Hibernate http-bind process after handling a request
by badlop at March 08, 2010 04:28 PM
March 06, 2010
Damien Katz
CouchDB Case Study: Assay Depot
Apache CouchDB Case Study: Assay Depot
...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.
CouchDB has changed the way I think about developing web applications
by Damien Katz at March 06, 2010 11:40 PM
March 03, 2010
Erlware
Erlware on R13B04
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.
by Martin J. Logan (martinjlogan@erlware.org) at March 03, 2010 06:15 PM
March 02, 2010
Erlware
How to create and Erlware repository with Portius
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.
by Martin J. Logan (martinjlogan@erlware.org) at March 02, 2010 07:31 AM
March 01, 2010
Damien Katz
BBC and CouchDB
Vaguely interesting KV/#couchdb stat from the BBC - 3.3 billion requests handled since last summer, running at about 150-170 million per day
http://twitter.com/endafarrell/status/9820160677
by Damien Katz at March 01, 2010 10:11 PM
February 25, 2010
Erlware
Create an Erlang Mochiweb Web Application in Minutes Video
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.
by Martin J. Logan (martinjlogan@erlware.org) at February 25, 2010 08:01 AM
February 24, 2010
Erlang Announce List
Erlang announce mailing list :: Erlang/OTP now at Github
Author: Anonymous
Subject: Erlang/OTP now at Github
Posted: Wed Nov 25, 2009 2:14 pm (GMT 0)
Topic Replies: 0
The official git repository for Erlang/OTP can now be found at Github:
http://github.com/erlang/otp
Build instructions can be found at:
http://wiki.github.com/erlang/otp
We plan to add more wiki pages with additional information in the
near future.
--
Björn Gustavsson, Erlang/OTP, Ericsson AB
________________________________________________________________
erlang-announce mailing list. See http://www.erlang.org/faq.html
erlang-announce (at) erlang.org
Post received from mailinglist
Erlang announce mailing list :: Erlang/OTP R13B03 has been released
Author: Anonymous
Subject: Erlang/OTP R13B03 has been released
Posted: Wed Nov 25, 2009 1:56 pm (GMT 0)
Topic Replies: 0
Bug fix release : otp_src_R13B03
Build date : 2009-11-23
This is R13B03, the third maintenance release for the R13B major release.
You can find the README file for the release at
http://www.erlang.org/download/otp_src_R13B03.readme
The source distribution and binary distribution for Windows can be
downloaded from
http://www.erlang.org/download/otp_src_R13B03.tar.gz
http://www.erlang.org/download/otp_win32_R13B03.exe
The distribution can also be downloaded using the BitTorrent
protocol. Use the following torrent files to download the source
distribution and binary distribution for Windows:
http://www.erlang.org/download/otp_src_R13B03.tar.gz.torrent
http://www.erlang.org/download/otp_win32_R13B03.exe.torrent
Note: To unpack the TAR archive you need a GNU TAR compatible program.
For installation instructions please read the README file that is part
of the distribution.
The on-line documentation can be found at: http://www.erlang.org/doc/
You can also download the complete HTML documentation or the Unix manual files
http://www.erlang.org/download/otp_doc_html_R13B03.tar.gz
http://www.erlang.org/download/otp_doc_man_R13B03.tar.gz
We also want to thank those that sent us patches, suggestions and bug
reports,
The OTP Team
--
Björn Gustavsson, Erlang/OTP, Ericsson AB
________________________________________________________________
erlang-announce mailing list. See http://www.erlang.org/faq.html
erlang-announce (at) erlang.org
Post received from mailinglist
February 20, 2010
Damien Katz
About Me

All about me. Me me me me me.
Vitals:
Birth date - October 24, 1973
Height - 6'1"
Eyes - brown
Hair - dark brown
Complexion - fair and freckly
Brain - wrinkly
Spouse - Laura Ann Katz (maiden name Toenjes)
Kids - Gwendolyn, Roseanna and Zack
Religion - unapologetically atheist

I live in Piedmont CA.
I am the creator of CouchDB.
I am the CEO of Couchio.

My good points:
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.
My bad points:
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.
My weird points:
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.
by Damien Katz at February 20, 2010 04:53 AM
Chris demos CouchApps
Here is a Chris Anderson screencast demoing some new CouchApp jQuery plugins. He's a smooth criminal.
by Damien Katz at February 20, 2010 01:25 AM
February 19, 2010
Damien Katz
Migrating Notes/Domino to CouchDB
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.
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.
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.
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.
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.
by Damien Katz at February 19, 2010 11:17 PM
February 16, 2010
ProTest news
QuickCheck for testing C programs
by ProTest-Project Web at February 16, 2010 12:00 AM
Message Sequences Charts help formulating properties
by ProTest-Project Web at February 16, 2010 12:00 AM
PhD thesis with part on property based testing
by ProTest-Project Web at February 16, 2010 12:00 AM
February 12, 2010
Damien Katz
Wanted: Hosting/Infrastructure Engineer
We are looking to hire someone with strong hosting or infrastructure experience to help us develop a CouchDB hosting platform.
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.
We offer competitive pay, stock options, great health benefits and 6 weeks vacation, and an opportunity to change the world.
Email inquiries to damien@couch.io
by Damien Katz at February 12, 2010 12:18 AM
February 10, 2010
Damien Katz
Thoughts on an Open Source Company
I wrote this almost a year ago. It's something we want Couchio live by, to build a company we all want to be a part of.
--
Our companies mission to make the world a better place through open source software.
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.
Every employee has an equity stake in the company. The decision to hire will be partially based on "do we think giving this person this % of the company is worth it to us all" Bad hiring decisions impact us all, so we are all motivated to hire those who will add value.
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.
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.
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.
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.
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.
We don't want people who tend to ask "How can I contribute? What should I do?". 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.
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.
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.
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.
How do we ensure people are productive and don't goof off? We don't.
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.
Then why do our people work?
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.
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.
--
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.
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.
by Damien Katz at February 10, 2010 07:20 PM
February 09, 2010
ejabberd@jabber.ru
ejabberd and exmpp source code are moved from SVN to Git
After many months of planning, ejabberd and exmpp have been fully migrated to Git.
During the last 7 years, ejabberd source code was hosted at:
- CVS at Jabber.Ru
- CVS at JabberStudio.org
- SVN at ProcessOne
- Git preliminarly built with git-svn, at Github
Starting now, ejabberd source code is natively in Git, and hosted at:
The minimal instructions to start using it are mentioned in:
http://www.process-one.net/en/ejabberd/downloads
by badlop at February 09, 2010 04:15 PM
Damien Katz
First week in the new office
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.
Oh yeah, we've changed our name to Couchio. Our new blog will be here http://blog.couch.io/ soon.
Super Awesome Art by Julie Armbruster:
![]()
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 ;)
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.
by Damien Katz at February 09, 2010 12:40 AM
January 18, 2010
ejabberd@jabber.ru
ejabberd 2.1.2 - Second bugfix release
ejabberd 2.1.2 has been released. It contains several bugfixes over last month's maintenance release.
Brief summary of changes:
- Fix SASL PLAIN authentication message for RFC4616 compliance
- Fix support for old Erlang/OTP R10 and R11
- If server start fails due to config file problem, display some lines
and stop node - PubSub and PEP: several improvements and bugfixes
- WebAdmin: fix offline message displaying
- When server stops with new stop_kindly command: inform users, clients, MUC
by badlop at January 18, 2010 03:07 PM
Erlang Eclipse IDE
erlide 0.7.3
A new release of erlide is available, with following (user visible) changes from 0.7.0:
* 468-split-erlang-code-so-that-compiler-backend-can-use-R11
* 487-configure-report-directory'
* fix #480: import wizard doesn't descend in subdirectories
* 490-External-Files-project-closed'
* 257--type---navigate-from-spec-to-declared-type'
* 476-open-module-dialog--allow-inexact-matches'
* 444 - text selected randomly in editor
* 472-launch--extra-arguments-to-runtime-don-t-get-used
* 469-editor---erlang-reconciler-still-broken'
* ignore errors when deleting beam files
* erlang templates, with syntax highlighted preview, indentation
* use binary for noparse:initial_text parameter
* Fix timeout in light_scan_string, send bin instead of string
* send to console action, useful when debugging and testing
* fixed -opaque and external type refs
* add option to monitor ide backend
* improve backend launching: send environment; make node status local
Enjoy!
/Vlad
by vladdu@users.sourceforge.net (Vlad Dumitrescu) at January 18, 2010 11:03 AM
December 16, 2009
Damien Katz
Preschools in/near Piedmont?
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.
by Damien Katz at December 16, 2009 09:33 PM
December 15, 2009
Damien Katz
Relaxed Inc.
So something interesting happened recently.
I, Jan, and Chris are building a startup around Apache CouchDB and Redpoint Ventures has invested $2 million. Pretty cool huh?
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 Satish Dharmaraj on some basic strategy stuff right now, and we aren't trying to be secretive or "stealthy" as TechCrunch said. It's just very early and I'm also very busy planning a move. Which bring me to my 2nd and 3rd announcements.
2nd Announcement: Yes, I've left IBM.
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.
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.
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.
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?
Anyway, exciting times ahead. Follow me, Chris and Jan on twitter as we figure all this stuff out.
by Damien Katz at December 15, 2009 05:51 PM
ProTest news
Call for Papers for ICFP 2010, Baltimore, US on 29 Sep 2010
Call for Papers for 15th ACM SIGPLAN Int.Conf. on Functional Programming, ICFP 2010, Baltimore, US on 29 Sep 2010.
Submission: 2 April 2010
Final papers due: 12 July 2010
by ProTest-Project Web at December 15, 2009 12:00 AM
Call for Papers for TAP 2010, Malaga, Spain on 1 Jul 2010
Call for Papers for Tests and Proofs conference, TAP 2010, Malaga, Spain on 1 Jul 2010.
Submission of Abstract: 29 Jan 2010
Submission of Paper: 5 Feb 2010
by ProTest-Project Web at December 15, 2009 12:00 AM
November 03, 2009
Erlang Eclipse IDE
erlide 0.7.0
We're glad to announce that a new release of erlide is available.
We managed to fix a big issue with seemingly random crashes of the Erlang backend, traced finally to major memory consumption.
Other fixed issues:
- delayed startup of backend until really needed
- http://www.assembla.com/spaces/erlide/tickets/461-autocompletion-for-macros-records-with-quotes-doesn-t-work
- fix NPE if .erlang.cookie is empty
- builder: now twice as fast (parallel) and interruptible
- added "report problems" on help menu
- http://www.assembla.com/spaces/erlide/tickets/306-hover-documentation-with-non-edoc-comments-is-ugly
- added option to start internal backends with short name
- some console improvements (more to follow, it's not perfect yet!): no more ide console, use run/debug to start; stdout is captured (#221)
- 147 Debugger - interpret and un-interpret modules
- 243 debugger: show the current stack even outside interpreted code
- 355 debugger - terminated processes with stack look like they're running
- 390 scanner and parser - should only update caches on save etc
- 402 overriden 'int' module lacks functionality of the original one
- 426 start backend on a standalone node. Only start+console+codeloading are supported
- 441 add "system info" functionality
- 451 ErlFolder.getModules(IParent) is very slow
- 457 builder: scan for TODO without a full scan
by vladdu@users.sourceforge.net (Vlad Dumitrescu) at November 03, 2009 01:48 PM
October 29, 2009
Damien Katz
Koala on the loose!
Ubuntu 9.10 Karmic Koala 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 :)
by Damien Katz at October 29, 2009 08:08 PM
"CouchDB Implements a Fundamental Algorithm"
Chris Anderson, an Apache CouchDB contributor, writes a great article about the core design of CouchDB:
CouchDB Implements a Fundamental Algorithm
by Damien Katz at October 29, 2009 07:17 PM
October 23, 2009
Damien Katz
Mozilla Raindrop

Mozilla has announced the Raindrop project today, a new messaging platform built on top of Apache CouchDB:
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.
This is a huge deal for me and for CouchDB. I can't describe how proud I am of this.
by Damien Katz at October 23, 2009 06:58 PM
October 13, 2009
Damien Katz
"Agile is treating the symptoms, not the disease"
Where is this decade's Access?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.
(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.)
Others, including many people I care about (Rod Paddock, Markus Eggers, Ken Levy, Cathi Gero, for starters) made a healthy living off of building "line of business" 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 "brought into the fold" by making it a fully-fledged object-oriented language complete with XML literals and LINQ query capabilities.
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?
http://www.javaworld.com/community/node/3530
That last question is the one that interests me more than just about anything else you can ask.
by Damien Katz at October 13, 2009 03:59 PM
Apache CouchDB 0.10.0 Escapes!
Our first beta!
Get it here: http://couchdb.apache.org/downloads.html
There should be another interesting CouchDB related announcement later today.
by Damien Katz at October 13, 2009 02:10 PM
October 07, 2009
Damien Katz
Awesome InfoWorld CouchDB Article
CouchDB emerging as a top choice for offline Web apps
by Damien Katz at October 07, 2009 01:56 AM
September 29, 2009
Damien Katz
Oh yeah, I'm on the Twitter now
Follow me here: http://twitter.com/damienkatz
by Damien Katz at September 29, 2009 07:58 PM
July 06, 2009
Erlware
The Erlware Emacs Mode
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
by Dave Peticolas (noreply@blogger.com) at July 06, 2009 09:37 PM
June 17, 2009
ErlyBird
Erlang Plugin Version 1 for NetBeans 6.7 Released
<p>
I'm pleased to announce Erlang plugin (ErlyBird) version 1 for NetBeans 6.7 is released.
<p>
NetBeans 6.7 RC3 or above is a requirement.
<p>
What's new:
<ul>
<li>It's rewritten in Scala instead of Java</li>
<li>More reliable instant rename</li>
<li>Display extracted document information from source comment when doing auto-completion.</li>
</ul>
<p>
To download, please go to: https://sourceforge.net/project/showfiles.php?group_id=192439&package_id=226387
<p>
To install:
<ul>
<li>Open NetBeans, go to "Tools" -> "Plugins", click on "Downloaded" tab title, click on "Add Plugins..." button, choose the directory where the Erlang plugin are unzipped, select all listed *.nbm files, following the instructions.</li>
<li>Make sure your Erlang bin path is under OS environment PATH, you can also check/set your OTP path: From [Tools]->[Options], click on 'Miscellanous', then expand 'Erlang Installation', fill in the full path of your 'erl.exe' or 'erl' file. For instance: "C:/erl/bin/erl.exe"
<li>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.</li>
</ul>
Feedback and bug reports are welcome.
<p>
by dcaoyuan@users.sourceforge.net (Caoyuan Deng) at June 17, 2009 07:45 AM
RabbitMQ Announcements
[rabbitmq-announce] RabbitMQ 1.6.0 release
by Matthias Radestock at June 17, 2009 12:00 AM
June 03, 2009
RabbitMQ Announcements
[rabbitmq-announce] RabbitMQ in Fedora
by Matthias Radestock at June 03, 2009 12:00 AM
June 02, 2009
ErlyBird
Scala Plugin Version 1 for NetBeans 6.7 Released
Scala Plugin Version 1 for NetBeans 6.7 Released
I'm pleased to announce the availability of Scala plugin version 1 for NetBeans 6.7
What's new:
* 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).
* Fixed setting breakpoint in closure statement.
* A basic import-fixer (Right click on source, then choose "Fix Imports").
* Code assistant for local vars and functions.
* Run/Debug single file.
To download, please go to: https://sourceforge.net/project/showfiles.php?group_id=192439&package_id=256544&release_id=686747
For more information, please see http://wiki.netbeans.org/Scala
Bug reports are welcome.
It works on NetBeans 6.7 RC1 or above.
by dcaoyuan@users.sourceforge.net (Caoyuan Deng) at June 02, 2009 06:24 AM
March 17, 2009
Erlware
Erlware Erlang Software Review: JSON and on and on with Ktuo
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
by Martin J. Logan (martinjlogan@erlware.org) at March 17, 2009 08:14 PM
February 25, 2009
Erlware
Announcing Erlware
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.
by Martin J. Logan (martinjlogan@erlware.org) at February 25, 2009 03:14 PM
November 12, 2008
The Erlane Project
Eudémonologie : Un nouveau blog sur le bonheur
Nous ouvrons un nouveau blog intitulé Eudémonologie : l'art et la science du bonheur. 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.
by The Erlane Project Team (noreply@blogger.com) at November 12, 2008 08:00 AM
July 12, 2008
Erlware
Video of Martin and Eric speaking about Erlware at the Erlang eXchange in London
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
by Martin J. Logan (martinjlogan@erlware.org) at July 12, 2008 01:29 PM
August 16, 2007
The Erlane Project
From Java to Erlang, or How to Structure an Erlang Process
We are Java programmers, and to develop using Erlang/OTP, we need to make at least two paradigm shifts:
- From imperative programming to functional programming,
- From objects to processes.
The second part is trickier, but it can become very simple if we can map OO-concepts to OTP.
A class 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:
{tag, Reply, NewState} = method(Request, CurrentState).where:- tag is an atom, like ok, or error, or for gen_server, reply or no_reply,
- Reply is the reply to the Request,
- NewState is the state of the process after the method call,
- CurrentState is the state of the process before the method call.
- init(Args), which acts as a constructor with arguments, and must return {ok, InitialState},
- handle_call(Request, From, State), which must dispatch call to a method, and sends back {reply, Reply, NewState},
- handle_cast(Request, State), which must dispatch call to a method, but in this case the calling process does not wait for a reply, so it must answer {noreply, NewState},
- terminate(Reason, State), which acts as a destructor, and is called when the process must be ended.
The calling process of a gen_server must call the following functions:
- gen_server:start_link(Module, Args, Options) to build a new process, it returns {ok, Pid} where Pid is a reference of the process,
- gen_server:call(Pid, Request), to send a request to the process and waits for a reply,
- gen_server:cast(Pid, Request), to send a request without waiting for a reply.
A gen_server 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:
start(ClientHash, ClientPort) ->
gen_server:start_link(eane_tcp_cs, [ClientHash, ClientPort], []).
-module(eane_tcp_cs). % The name of the module
% It implements a gen_server behaviour
-behaviour(gen_server).
% API Functions exported
-export([start/2, connect/3, hello/1, search_files/2]).
% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, terminate/2]).
% definition of the internal state
-record(tcp_state, { socket,
client_hash,
client_id,
port }).
% External API
% (?MODULE is a built-in macro for the name of the current module)
start(ClientHash, ClientPort) ->
gen_server:start_link(?MODULE, [ClientHash, ClientPort], []).
hello(Pid) ->
gen_server:cast(Pid, {hello}).
connect(Pid, Host, Port) ->
gen_server:call(Pid, {connect, [Host, Port]}).
search_files(Pid, Query) ->
gen_server:call(Pid, {search, Query}).
% gen_server behaviour callbacks
init(Args) ->
[ClientHash, ClientPort] = Args,
{ok, #tcp_state {client_hash = ClientHash, port = ClientPort}}.
handle_call({connect, [Host, Port]}, _From, TcpState) ->
{ok, NewState} = connect_server(Host, Port, TcpState),
{reply, ok, NewState};
handle_call({search, Name}, _From, TcpState) ->
{ok, Reply, NewState} = send_search(Name, TcpState),
{reply, Reply, NewState}.
handle_cast({hello}, TcpState) ->
{ok, NewState} = send_hello(TcpState),
{noreply, NewState}.
terminate(Reason, TcpState) ->
close_socket(TcpState),
ok.
% Internal functions:
% connect_server, send_search, send_hello, close_socket
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).
by The Erlane Project Team (noreply@blogger.com) at August 16, 2007 12:46 PM
August 13, 2007
The Erlane Project
Binary Search: The Ultimate Test
Half-baked Ideas presents a very nice binary search algorithm written in Erlang. It has been thoroughly tested, and is absolutely correct. Except for one thing: it is far slower than a simple linear search.
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.
First, let's code the linear search function:
linear_search(K, L) ->
linear_search(K, L, 1).
linear_search(_, [], _) ->
-1;
linear_search(K, [K | _], N) ->
N;
linear_search(K, [_ | T], N) ->
linear_search(K, T, N + 1).
Then, measure the performance, using the test functions defined in the binary search algorithm, and timer:tc/3, an OTP function which measures the time of a function call in microseconds:
The results are astonishing:
perftest(N) ->
List = rlist(N), %% Generate a list of n items
Value = lists:max(List) + 1, %% Search for max + 1, to be in the worst case
{ BinarySearchTime, BinarySearchResult } = timer:tc(bs, search, [Value, List]),
{ LinearSearchTime, LinearSearchResult } = timer:tc(bs, linear_search, [Value, List]),
io:format("Binary search time: ~w (~w)~n", [BinarySearchTime, BinarySearchResult]),
io:format("Linear search time: ~w (~w)~n", [LinearSearchTime, LinearSearchResult]).
2> bs:perftest(1000000).
Binary search time: 547000 (-1)
Linear search time: 31999 (-1)
ok
The binary search should be 50,000 times faster, it is 17 times slower! Why? Time to play with the Erlang profiler fprof.
profile(N) ->
List = rlist(N),
Value = lists:max(List) + 1,
fprof:apply(bs, search, [Value, List]),
fprof:profile(),
fprof:analyse().
This gives the following result:
4> bs:profile(1000).
Reading trace data...
.........
End of trace!
Processing data...
Creating output...
%% Analysis results:
{ analysis_options,
[{callers, true},
{sort, acc},
{totals, false},
{details, true}]}.
% CNT ACC OWN
[{ totals, 9279, 33.266, 33.007}]. %%%
% CNT ACC OWN
[{ "0.29.0>", 9279,undefined, 33.007}]. %%
{[{undefined, 0, 33.266, 0.002}],
{ {fprof,apply_start_stop,4}, 0, 33.266, 0.002}, %
[{{bs,search,2}, 1, 33.264, 0.001},
{suspend, 1, 0.000, 0.000}]}.
{[{{fprof,apply_start_stop,4}, 1, 33.264, 0.001}],
{ {bs,search,2}, 1, 33.264, 0.001}, %
[{{bs,search,4}, 1, 33.263, 0.002}]}.
{[{{bs,search,2}, 1, 33.263, 0.002},
{{bs,search,4}, 10, 0.000, 0.019}],
{ {bs,search,4}, 11, 33.263, 0.021}, %
[{{lists,nth,2}, 10, 33.240, 0.010},
{{bs,failure,0}, 1, 0.001, 0.001},
{suspend, 1, 0.001, 0.000},
{{bs,search,4}, 10, 0.000, 0.019}]}.
{[{{bs,search,4}, 10, 33.240, 0.010},
{{lists,nth,2}, 8996, 0.000, 32.972}],
{ {lists,nth,2}, 9006, 33.240, 32.982}, %
[{suspend, 258, 0.258, 0.000},
{{lists,nth,2}, 8996, 0.000, 32.972}]}.
{[{{lists,nth,2}, 258, 0.258, 0.000},
{{bs,search,4}, 1, 0.001, 0.000},
{{fprof,apply_start_stop,4}, 1, 0.000, 0.000}],
{ suspend, 260, 0.259, 0.000}, %
[ ]}.
{[{{bs,search,4}, 1, 0.001, 0.001}],
{ {bs,failure,0}, 1, 0.001, 0.001}, %
[ ]}.
{[ ],
{ undefined, 0, 0.000, 0.000}, %
[{{fprof,apply_start_stop,4}, 0, 33.266, 0.002}]}.
Done!
ok
search/4 is called 11 times, as expected, but the most consuming function is list:nth/2. It is called 9,006 times, and is responsible for almost all the time of the search! Why?
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 list:nth/2 shows that clearly:
nth(1, [H|_]) -> H;
nth(N, [_|T]) when N > 1 ->
nth(N - 1, T).
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 lists:nth/2!
As Alberto Savoia points it out in the chapter 7 of Beautiful Code:
Here's my initial testing strategy (or team of tests):
- Start with smoke tests.
- Add some boundary value tests.
- Continue with various thorough and exhaustive types of tests.
- Finally, add some performance tests. (emphasis is mine)
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.
This is also a funny case where a traditional imperative programming technique does not work as expected in a functional context.
by The Erlane Project Team (noreply@blogger.com) at August 13, 2007 12:08 PM
August 12, 2007
The Erlane Project
The Erlane Project
The Erlane Project is aimed at creating an Erlang/OTP client for the eDonkey/eMule protocol. The name is a portmanteau for Erlang and âne, which is the French word for donkey.
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.
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.
by The Erlane Project Team (noreply@blogger.com) at August 12, 2007 11:48 AM
August 10, 2007
The Erlane Project
Designing an Erlang Application
The Erlane client should be able to implement a subpart of eDonkey protocol, as defined in this introduction to the eDonkey/eMule protocol. 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 OTP Design Principles and how to structure an application in terms of processes, modules and even directories.
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:
- 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.
- 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,
- A supervisor for all the different processes which maintain data, name erlane_data_sup,
- A supervisor for the client/server communications erlane_tcp_cs and erlane_udp_cs,
- A supervisor for the peer/peer communications,
- A gen_server worker process for user interface named erlane_ui,
- A supervisor for the whole set of processes (i.e. other supervisors and UI),
- An application process for launching the whole set of supervisor, named erlane_app,
- A set of modules for low-level functions (such as erlane_codec for basic packet coding/decoding).
by The Erlane Project Team (noreply@blogger.com) at August 10, 2007 12:32 PM
May 19, 2007
Erlware
Why use a standard builsystem? (Well structured OTP applications)
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+
by Martin J. Logan (martinjlogan@erlware.org) at May 19, 2007 09:43 AM


Digg It
Del.icio.us
Reddit
Facebook
Stumble Upon
Technorati
Click here to order from amazon.com