I've created a GIT repository for cduce and few experiments of mine at . I'm using gitweb, that is a neat piece of sw. Easy to install and to manage. I had a minor problem related to the fact I'm using http as transport protocol to clone our git repos. In particular, the error was:

$git clone
Cannot get remote repository information.
Perhaps git-update-server-info needs to be run there?

The easy fix was to do what I was told to do and to run git-update-server-info in the remote repo.

openssl vulnerability

Here I come. Following from the DSA announcement I've regenerated the ssh/openssl keys for

apt-get update
apt-get upgrade
rm /etc/ssh/*
dpkg-reconfigure -plow openssh-server

One the user side:

first ssh to the remote machine and remove the for ~/.ssh/authorized_keys . This will lock you out if you don't remember the passowrd for that machine !

Then, you should remove your ssh keys (from you local machine), and regenerate them with:

ssh-copy-id <host>

New Cduce Release

This is a minor bug-fix release. A new MacOsX binary package is avalaible. See the Download page for download information, or the CHANGES file to know what's new.

Not much to add.

Cduce MacOsX Binary Package

The MacOsX package is ready and available for download here:

The script I used to create this package is a re-mix of the make-macos-package script used in the ocaml distribution. You can have a look at it here.

cduce mailing lists

Today I finished to migrate all cduce mailing list to pps.
Once I got the archive, it was fairly easy to recreate the html pages (with the arch script in the mailman directory) and to subscribe everybody to the new lists. The old sympa server and email address is definitely gone.

I moved all mailing lists from * to * All information are here :

Today I've also configured spamassassin + amavis-new + clamavd on our mail server. Hopefully this will keep our lists clean.

new release (cduce 0.5.1)

It has been a busy month for cduce. We added the windows package, cleaned up the distribution and the svn repository, updated the website and added a couple of minor features to cduce itself.

Today we released a minor update: version 0.5.1
I also spent the day updating the debian package.

We had some minor problem with the web server. From time to time the dom0 reboots leaving the website dead. I'm still working to solve this problem.

cdata section in cduce

I wrote a small patch to manipulate cdata section in cduce as follow:$ledit ./cduce
CDuce version 0.5.0

# cdata_of ;;
- : String -> String =

# type a = Cdata ;;
Characters 6-7:
Capture variable not allowed: Cdata

# type a = String ;;
# let b : a = (cdata_of "ggg>>" );;
val b : a = 'ggg>>'
# print_xml b ;;
- : Latin1 = ">]]>"

# let [ c ] = map [ b ] with c -> c ;;
val c : a = ggg>>
# print_xml c;;
- : Latin1 = ">]]>"

Unit testing for Cduce

I've written a small unit testing suite for cduce using the OUnit library (

Everything is in my dacrs repo waiting for integration:;a=summary

I wrote only a handful of tests. This is the main cduce program:

let t1 (s : Latin1) ( t : OUnit.test )    : OUnit.test = (`TestLabel, s, t)
let t2 (s : Latin1) ( f : `nil -> `nil )  : OUnit.test = (`TestLabel, s, (`TestCase, f))

Automatic Ocaml Types for Cduce

A minor limitation of cduce is that all ocaml types must be declared in cduce. This is cumbersome when trying to use an ocaml library from cduce.

I've created a small patch to cduce to allow to use ocaml types directly in a cduce program.

The patch is available in my personal darcs repository and pending to be integrated in the main tree.

The repository is here:

and the patch;a=commit;h=20070621141511-6a509-90fe027988c1d5f12efe21e9cfd7a826aa5a5527.gz

Dynlink with Cduce

Nothing deep here ...


let toto = ref ( fun () -> 0 )


let run ( r : int ) () = r
let register i = Toto.toto := i

file This is the cduce program that is then dynamically loaded.

let f : ( `nil -> Caml_int ) = 1 ;;
Foo.register f ;;

file Note that we have to dynamically load all the libraries.

let _ =
    Dynlink.init ();
    Dynlink.allow_unsafe_modules true

let () =
        Dynlink.loadfile "/usr/lib/ocaml/3.09.2/stdlib.cma";

Syndicate content