Previous week Up Next week

Hello

Here is the latest Caml Weekly News, for the week of February 01 to 08, 2011.

  1. Plasma MapReduce, PlasmaFS, version 0.3
  2. Example iPhone apps in OCaml
  3. LDA or SVM
  4. Marionnet 0.90.6
  5. ODNS 0.2: DNS library for Objective Caml
  6. Bolt 1.1 release
  7. Other Caml News

Plasma MapReduce, PlasmaFS, version 0.3

Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00000.html

Gerd Stolpmann announced:
I've just released Plasma-0.3. Plasma consists of two parts (for now),
namely Plasma MapReduce, a map/reduce compute framework, and PlasmaFS,
the underlying distributed filesystem.

Major changes in version 0.3 :

      * Optimized blocklist representation (extent-based)
      * Improved block allocator to minimize disk seeks
      * Allocating datanode access tickets in advance
      * Sophisticated RAM management
      * The command-line utility "plasma" supports wildcards

Of course, there are also numerous bug fixes and performance
improvements.

Plasma MapReduce is a distributed implementation of the map/reduce
algorithm scheme. In a sentence, map/reduce performs a parallel List.map
on an input file, sorts and splits the output by some criterion into
partitions, and runs a List.fold_left on each partition. Only that it
does not do that sequentially, but in a distributed way, and chunk by
chunk. Because of this Plasma MapReduce can process very large files,
and if run on enough computers, this also will work in reasonable time.
Of course, map and reduce are Ocaml functions here.

This all works on top of a distributed filesystem, PlasmaFS. This is a
user-space filesystem that is primarily accessed over RPC (but it is
also mountable as NFS volume). Actually, most of the effort went here.
PlasmaFS focuses on reliability and speed for big blocksizes. To get
this, it implements ACID transactions, replicates data and metadata with
two-phase commit, uses a shared memory data channel if possible, and
monitors itself. Unlike other filesystems for map/reduce, PlasmaFS
implements the complete set of usual file operations, including random
reads and writes. It can also be used as unspecialized global
filesystem.

Both pieces of software are bundled together in one download. The
project page with further links is

http://projects.camlcity.org/projects/plasma.html

There is now also a homepage at

http://plasma.camlcity.org

This is an early alpha release (0.3). A lot of things work already, and
you can already run distributed map/reduce jobs. However, it is in no
way complete.

Plasma is installable via GODI for Ocaml 3.12.

For discussions on specifics of Plasma there is a separate mailing list:

https://godirepo.camlcity.org/mailman/listinfo/plasma-list
      

Example iPhone apps in OCaml

Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00004.html

Jeffrey Scofield announced:
For anyone interested in writing iPhone apps in OCaml, I've
written up two examples.  You can get the sources and build
instructions here:

   http://psellos.com/ocaml/example-app-portland.html
   http://psellos.com/ocaml/example-app-slide24.html

The first is very simple, just to test the basic compiling,
linking and packaging.  When you run it, it shows you which side
of your iPhone is facing up.

The second implements the 5 x 5 sliding tile puzzle.  If you're
pressed for time it will solve the puzzle for you using the A*
heuristic search algorithm, then animate the solution.

Hopefully they'll be useful to some fellow OCaml/iPhone coders.
I'm very happy to receive comments, questions, and corrections.
      

LDA or SVM

Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00006.html

Joel Reymont asked and Daniel Bünzli replied:
> Has anyone implemented Latent Dirichlet Allocation (LDA), Pachinko Allocation 
> [1] or Support Vector Machine (SVM) in OCaml?
> 
>         Thanks, Joel
> 
> [1] http://en.wikipedia.org/wiki/Pachinko_allocation

There's this :

http://www.umiacs.umd.edu/~hal/SVMsequel/index.html

and regarding machine learning Markus Mottl has gpr :

http://www.ocaml.info/home/ocaml_sources.html#toc15
      

Marionnet 0.90.6

Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00012.html

Luca Saiu announced:
After an intense development period, today we are happy to officially
announce Marionnet 0.90.6, the first public release in the stable
0.90.x series.

Marionnet is a virtual network laboratory: it allows users to define,
configure and run complex computer networks without any need for
physical setup.  Only a single, possibly even non-networked GNU/Linux
host machine is required to simulate a whole Ethernet network complete
with computers, routers, hubs, switches, cables, and more.  Support is
also provided for integrating the virtual network with the physical
host network.

Highlights from this new release series include internationalization
support, improved interface, the new 'gateway' component to connect to
the host network, VLAN support, better security, greatly simplified
installation and configuration, improved performance, and many bug
fixes.

Marionnet has been developed as an e-learning project with the
contribution of the Paris 13 University and the University Institute
for Technology of Villetaneuse.
Marionnet is already being employed with success for teaching networks
and system administration by the higher education institutions above
plus others all around the world.  The friendly, internationalized Gtk
interface makes Marionnet suitable to inexperienced students, but the
application is also useful for network administrators testing complex
deployments.

We are proud of the international scope of our effort, so nicely
symbolized by the contribution of translations we have already
received from users; we hope that this work will become even more
global in the future.

The Marionnet engine is a heavily concurrent OCaml application using
CamlP4 and C bindings, written in an experimental style slowly
converging to functional reactive programming in OCaml.

Marionnet works on GNU/Linux x86 and x86_64 machines, and relies on

User-Mode Linux by Jeff Dike and Virtual Distributed Ethernet by Renzo
Davoli.

Marionnet is free software, released under the GNU GPL: you are
welcome to share and change it under certain conditions.  See the
license text for details.

You can download Marionnet from our website http://www.marionnet.org.
      

ODNS 0.2: DNS library for Objective Caml

Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00015.html

Jehan Pagès announced:
I just wanted to announce the first official release of ODNS (version
0.2), a GPLv2 library written in Objective Caml, entirely natively
(this is not a binding to a C library, or anything. Actually there is
no dependency at all in the library as only the Standard lib is used)
whose goal is to query DNS servers in programs.

It is detailed, documented and available for download here:
http://odns.tuxfamily.org/

Full API is here: http://odns.tuxfamily.org/doc/dns/html/

For history note: I could not find any of such library evolved enough
(that does not
mean there is not, I just did not find it), but I found some beginning
of such in an old 2002 email, and the previous authors accepted to
release me the piece of code in GPLv2, so I worked from this version
(which I labeled 0.1 but this original version should really not be
used) and I thank them as it was a good base.

It probably won't evolve much in features now as long as I don't need them
(I "may" need DNSSEC in some time in the future, so there is a
possibility I implement that when necessary, but not now. Also I
accept any good patch of course and I can discuss with and help people
who want to write these patches) but I will
keep it up to date for any possible bug fix as I developed this for
another bigger project where I needed in particular SRV record
support. This is just to say that this will remain maintained so you
can use it safely. And don't hesitate to drop any bug report.

The current features are pretty much the usual features of all
resolvers, with a use as easy as (for instance with SRV):

let q = Dns.query in
q#add_query ~qtype:"SRV" ~qname="_xmpp-client._tcp.xmpp.org";
q#action;
(* Do something with q#answers which are all the resource records in
answer section, q#authorities are records in Authority section and
q#additionals for Additional section! *)

Of course with a bunch of more powerful configuration methods if
defaults don't suit you (change the timeout, retry number, use
specific name servers instead of the one your system is set with,
etc.).

But especially I also added some extremely useful helper functions.
Indeed raw use of a
resolver is nice because this is generic (so you can just do any kind
of query), but there is usually a lot more processing to do after
(reordering answers, removing some, making new queries as a result of
the answers of a previous one, and so on. Semantic use of record's
fields in other words). For instance:

Dns_helper.srv_lookup ~query:"_xmpp-client._tcp.xmpp.org"
-> directly returns a list of IPs to be tried (already in the right
order) for the Jabber service of xmpp.org. All processing has already
been done (if you know SRV records, you know there are many stuffs to
do afterwards, and several queries to run as well, while all you want
in the end is a list of IPs).
So a lot of processing in a single function.
      
rixed asked and Gerd Stolpmann replied:
> Is the resolution synchronous or not ?
> From your exemple it looks like it is.

For asynchronous resolutions look at Netdns -
http://oss.wink.com/netdns/. It is not yet complete, but it can at least
be used as stub resolver, and for keeping a local cache of DNS
results.
      

Bolt 1.1 release

Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00033.html

Xavier Clerc announced:
This post announces the 1.1 release of the Bolt project, whose goal is to 
provide
a comprehensive yet flexible logging framework for the Objective Caml 
language.

Home page: http://bolt.x9c.fr

Main changes since 1.0:
  - update for Objective Caml 3.12.0
  - new build system (ocamlbuild-based)
  - reorganization of 'src' directory
  - code refactoring
  - enhanced manual
  - new 'hostname', 'process' and 'origin' properties added to events
  - enhanced support for name of 'file' output
  - support for Growl output (visual notifications for Mac OS X)
  - preliminary support for Paje layout (trace format for parallel programs)
  - bug #51: unportable use of 'which'
  - bug #52: thread-compatibility module does not compile
  - bug #53: printf-like messages support at most 2 arguments
  - bug #54: META file does not contain all dependencies
  - bug #55: preprocessor de-parenthesizes first argument
  - bug #56: tests fail if 'ocamljava' is not present
      

Other Caml News

From the ocamlcore planet blog:
Thanks to Alp Mestan, we now include in the Caml Weekly News the links to the
recent posts from the ocamlcore planet blog at http://planet.ocamlcore.org/.

Bolt: 1.1:
  https://forge.ocamlcore.org/forum/forum.php?forum_id=768

Finding Duplicate Files, on Batteries:
  http://alaska-kamtchatka.blogspot.com/2011/02/finding-duplicate-files-on-batteries.html

Batteries 1.3.0 released:
  https://forge.ocamlcore.org/forum/forum.php?forum_id=767

Tip: Using libguestfs from Perl:
  http://rwmj.wordpress.com/2011/02/03/tip-using-libguestfs-from-perl/

OCaml 3.12 and ocamlfind ocamldoc:
  http://alaska-kamtchatka.blogspot.com/2011/02/ocaml-312-and-ocamlfind-ocamldoc.html

Old cwn

If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a look at the archive or the RSS feed of the archives.

If you also wish to receive it every week by mail, you may subscribe online.


Alan Schmitt