Here is the latest Caml Weekly News, for the week of February 01 to 08, 2011.
Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00000.htmlGerd 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
Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00004.htmlJeffrey 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.
Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00006.htmlJoel Reymont asked and Daniel Bünzli replied:
> Has anyone implemented Latent Dirichlet Allocation (LDA), Pachinko Allocation >  or Support Vector Machine (SVM) in OCaml? > > Thanks, Joel > >  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
Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00012.htmlLuca 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.
Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00015.htmlJehan 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.
Archive: https://sympa-roc.inria.fr/wws/arc/caml-list/2011-02/msg00033.htmlXavier 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
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
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.