Previous week Up Next week

Hello

Here is the latest Caml Weekly News, for the week of 26 July to 02 August, 2005.

Gmane being down at the time of this writing, there are no archive links in this issue.

  1. OCaml NAE release cf-0.7 and iom-0.2
  2. Games
  3. Netclient 0.91
  4. OCamlDuce
  5. OCaml meets lego bricks
  6. CodeWiki.net Announcement

OCaml NAE release cf-0.7 and iom-0.2

James Woodyatt announced:
Today, the OCaml Network Application Environment (NAE) has released maintenance
updates of two of its published libraries.  As its project page on
SourceForge.Net says, OCaml NAE is "a collection of Objective Caml libraries to
support the development of concurrent, single-threaded Internet application
servers."

For downloads and more information, please see:

        http://sf.net/projects/ocnae/

The two libraries updated in this release are the Core Foundation (cf) and the
Reactive I/O Monad (iom).  The cf library was formerly known as the Pagoda Core
Foundation.  The complete CHANGES records for both libraries since their
previous releases follows excerpts of the README files.

===== OCaml NAE Core Foundation (cf) library =====

This distribution is the Objective Caml Network Application Environment (NAE)
Core Foundation library, which is a collection of miscellaneous extensions to
the Objective Caml standard library.

Highlighted features include:

- Functional streams and stream processors (extended).
- Functional bootstrapped skew-binomial heap.
- Functional red-black binary tree (associative array).
- Functional sets based on red-black binary tree.
- Functional real-time catenable deque.
- Functional LL(x) parsing using state-exception monad.
- Functional lazy deterministic finite automaton (DFA).
- Functional lexical analyzer (using lazy DFA and monadic parser).
- Functional substring list manipulation (message buffer chains).
- Gregorian calendar date manipulation.
- Standard time manipulation.
- System time in Temps Atomique Internationale (TAI).
- Unicode transcoding.
- Extended socket interface (supports more options, and UDP w/multicast).
- Universal resource identifier (URI) manipulation.
- I/O event multiplexing (with Unix.select).

Note: see the ISSUES file for a list of open problems in this release.

===== Required Components =====

This library requires the following external components:

- Objective Caml (v3.08.3 or newer)
- Findlib (tested with v1.0.4)

Principal development was on Mac OS X 10.3 and Mac OS X 10.4 w/ XCode 2.1 using
GCC 4.0.  The final version of this library also compiled successfully and
passed all self-tests without warnings on Suse Linux 9.2 for x86-32.  Other
platforms with POSIX-like environments should require only a minimal porting
effort.

One major open issue: the extended socket interface is broken under WIN32.
(The author invites help porting the library to other environments.)


===== OCaml NAE Reactive I/O Monad (iom) library =====

This distribution is the Objective Caml Network Application Environment (NAE)
Reactive I/O Monad library, which implements I/O monad functions designed to
facilitate writing of concurrent, reactive, single-threaded network application
services in a functional style.

Note: see the ISSUES file for a list of open problems in this release.

===== Required Components =====

This library requires the following external components:

- Objective Caml (v3.08.3 or newer)
- Findlib (v1.0.4)
- OCaml NAE Core Foundation (cf-0.7)

Principal development was on Mac OS X 10.3 and Mac OS X 10.4 w/ XCode 2.1 using
GCC 4.0.  The final version of this library also compiled successfully and
passed all self-tests without warnings on Suse Linux 9.2 for x86-32.  Other
platforms with POSIX-like environments should require only a minimal porting
effort.
    
He then added:
Oops.  Only one of those libraries, cf-0.7, is really in a "maintenance" mode.

The truth is the iom-0.2 library is still pretty experimental, and this release
amounted to a major refactoring of the code.  My apologies for the mistake.
    

Games

Deep in this thread, Gerd Stolpmann said (this is only part of the message):
Some times ago I wrote a little demo that could be seen as the beginning
of a 3D game: https://gps.dynxs.de/svn/app-3dflight/trunk/

There isn't very much design in it, and because of its simplicity, it
focuses on the rendering part. The key idea is that the various virtual
objects are represented by O'Caml objects that describe themselves. The
only relationship between objects is that they may collide.

I think the interesting part of this demo is the collision algorithm,
because two objects must somehow interact with each other. Actually, no
object needs to know any other object, but it can compute whether it
collides with a single 3D point (i.e. an abstraction of a second
object). This way, the algorithm can be separated in a "local part",
done by the objects themselves, and a "global part", which is the
overall loop. I don't know whether this idea can be applied to other
types of interactions as well, but from a general point of view it seems
to be the right direction to reduce the properties that objects expose
to other objects.

The demo also shows that the speed of the O'Caml code is almost
irrelevant; there is no difference whether you compile it to bytecode or
to native code. The speed of the graphics engine is very relevant.
    

Netclient 0.91

Gerd Stolpmann announced:
I am announcing version 0.91 of the Netclient library. This library
includes a sophisticated HTTP client, a Telnet client, and (new!) an
experimental FTP client.

The HTTP client was more or less rewritten:

- The HTTP messages are no longer restricted to in-memory strings, 
  but can now also be channels. So large up- and downloads are now 
  possible. 

- Connection caching can now be more aggressive (i.e. connections 
  survive pipeline runs).

- The authentication framework has been rewritten. Digest authentication
  complies to RFC 2617. It it now possible to mimick browser
  behaviour.

- The client complies now fully to RFC 2616, the revised HTTP spec.

Of course, the old features have been retained (persistent connections,
pipelining, multiplexing, automatic reconnections, automatic
redirections, ...). There are a few incompatible changes in the API, but
all code I know works with the new version, too.

The FTP client is quite impressive, but not yet complete:

- Most RFC 959 features are implemented, including record files,
  EBCDIC, and block mode. The current version omits file uploads,
  however (only downloads are possible).

- Of course, the client supports multiplexing, so you can run
  several clients concurrently.

- There are issues about exceptions that limit production usage for
  now. Furthermore, the client needs testing against real FTP servers!
  (This is the main reason why it is included in this Netclient
  version.)

Download Netclient here (or update your GODI installation):

http://www.ocaml-programming.de/programming/netclient.html
    

OCamlDuce

Alain Frisch announced:
I'd like to announce a new release of my experimental merger betwen
OCaml and CDuce, now called OCamlDuce.

All the relevant information can be found at:
http://www.cduce.org/ocaml.html

There is even some kind of documentation.

GODI users can very easily transform an existing OCaml installation into
an OCamlDuce one. OCamlDuce is currently based on OCaml 3.08.3
(actually, a recent snapshot of this branch).

The page above has some links to code samples to show how to:

- parse XML files using existing XML parsers (PXP, expat, or xml-light)
  and produce values which can be manipulated by OCamlDuce programs;

- transform DTDs to OCamlDuce type definitions;

- parse XML Schemas and produce valid XHTML summaries (a realistic
example of working with complex XML types and translating from an XML
representation of complex data to a native OCaml one).

Feedback will be very appreciated!
    

OCaml meets lego bricks

Damien announced:
Can the rather formal and academic world of OCaml meet the rather artistic
and fairy world of lego toys? I think yes and i wrote Peeroml to prove it.
As far as i know it's a premiÚre, functionnal technologies have never been
used in a Lego-CAD context.

The Peeroml package allows one to construct lego parts inventories or
deconstruct them from a lego set catalog.

Download here: http://perso.wanadoo.fr/alphablock/downloads/Peeroml.zip

Here are to some links to popular Lego-CAD tools:

LDRAW:
http://www.ldraw.org/modules.php?op=modload&name=News&file=article&sid=90

MLCAD:
http://www.lm-software.com/mlcad/

LDVIEW:
http://ldview.sourceforge.net/Downloads.html

PEERON inventories:
http://www.peeron.com/

Considerations,

- damien

my lego page: http://perso.wanadoo.fr/alphablock/
    

CodeWiki.net Announcement

Jonathan Bryant announced:
I'd like to announce a new site called http://CodeWiki.net .  It's intended to
be a gathering point for information programming languages, theory,
research, and paradigms, as well as software engineering.  It will also
be a place for people learning a first or a new language to go for
quality, community supported tutorials.

Right now it is basically a blank slate, with a few empty stubs in the
programming languages section.  I would greatly appreciate it if
everyone would take a look at the site an please contribute.  I know
that there are a lot of languages missing from the Programming Languages
section, so please at least make a stub for any you can think of!  If
anyone would like me to unlock any of the main pages for them, just let
me know!
    

Using folding to read the cwn in vim 6+

Here is a quick trick to help you read this CWN if you are viewing it using vim (version 6 or greater).

:set foldmethod=expr
:set foldexpr=getline(v:lnum)=~'^=\\{78}$'?'<1':1
zM

If you know of a better way, please let me know.


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