[cwn] Attn: Development Editor, Latest Caml Weekly News

Alan Schmitt alan.schmitt at polytechnique.org
Tue Dec 26 01:52:15 PST 2006


Hello,

Here is the latest Caml Weekly News, for the week of December 19 to  
26, 2006.

1) Ocsigen 0.5.1 (Web server in OCaml)
2) Memcheck: runtime type checking
3) Functional Reactive GUI for O'Caml
4) Scripting in ocaml
5) libsndfile-ocaml alpha
6) Job Announcement

========================================================================
1) Ocsigen 0.5.1 (Web server in OCaml)
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
f36fda9ec8f2c7c8/0cfe196817836864#0cfe196817836864>
------------------------------------------------------------------------
** Vincent Balat announced:

The Ocsigen Web server is now available for download in version 0.5.1.

See <http://www.ocsigen.org> for details, downloading and documentation.

Ocsigen is a Web server, with a programming framework providing a new  
way to
create dynamic Web sites using Objective Caml. Its goal is to offer an
alternative to Apache/PHP, based on cutting-edge technologies coming  
from
research in programming languages.

It allows to program in a concise and modular way, using OCaml's type  
system
in a thoroughgoing way in order to produce valid xhtml. The server  
handles
sessions, URLs, and page parameters automatically. Pages are  
generated by
OCaml functions (services) and you can dynamically create new services
dedicated to a user of the Web site (continuation based Web  
programming).

The Web server is now full featured to handle static and dynamic  
pages. It
supports HTTP, HTTPS, pipelining of requests, multipart forms,  
virtual hosts,
etc. It is implemented using cooperative threads, making it very  
lightweight
and providing a very convenient and safe style of programming (no  
need for
mutexes).

Ocsigen is now fully usable and (hopefully) stable. Some features  
will be
added before version 1 (in a few months). Next version (0.6.0) will  
allow the
creation of extensions for the Web server (like Apache modules).

A debian package is available (unstable branch). Contribution would be
appreciated for a Godi package.
			
========================================================================
2) Memcheck: runtime type checking
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
bcbd2d62f4d679f0/5489989efd89bb0b#5489989efd89bb0b>
------------------------------------------------------------------------
** Hendrik Tews announced:

it is my pleasure to announce

            Memcheck, a module for runtime type checking in Ocaml

Memcheck is very similar to SafeUnmarshal[1] but without a few of
SafeUnmarshal's limitations. In particular, with Memcheck it only
takes seconds to check a few megabytes instead of hours as with
SafeUnmarshal.

For download / more info go to <http://www.cs.ru.nl/~tews/memcheck/>

License: GPL

Bye,

Hendrik Tews

[1] <http://www.pps.jussieu.fr/~henry/marshal/>
			
========================================================================
3) Functional Reactive GUI for O'Caml
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
f309ba15395d3413/a8b026437a326a52#a8b026437a326a52>
------------------------------------------------------------------------
** Chris King said:

(Cross-posted from Lambda the Ultimate at the advice of Yaron Minsky...)
Hi all,

I've been working for the past few months on a functional reactive GUI
system for O'Caml called "O'Caml Reactive Toolkit", "functional
reactive" meaning that functional expressions can be built whose
values change over time in response to user input without relying on
imperative constructs (much like dataflow or visual programming
languages).  For those familiar with extant FR systems, the core FR
logic is based heavily on Haskell's Yampa, while the FR API is modeled
after PLT Scheme's FrTime, so there is not much new there. The novelty
is in the GUI API, which, although layered on lablgtk2, constructs a
GUI via functions rather than objects and exposes no mutable state:
response to user input is modeled using functional reactive
constructs.  As an example, here is a toy temperature conversion
program:

open Fr
open FrGui

let float_view f = text_view (lift (string_of_float @f))

let _ =
     let temp_box, temp = spin_box 20. in
     let fahrenheit = lift ((@temp -. 32.) *. 1.8)
     and celsuis = lift (@temp /. 1.8 +. 32.) in
     let main_window = window
         ~title: "Temperature converter"
         (hbox [
             hbox [label "Convert "; temp_box; label " to:"];
             vbox [
                 hbox [label "degrees Fahrenheit: "; float_view  
fahrenheit];
                 hbox [label "degrees Celsius: "; float_view  
celsius]]]) in
     run_dialog (main_window, main_window#close)

The temperature entered by the user is instantly converted to both
degrees Fahrenheit and degrees Celsius.  The "lift" construct is a
camlp4 syntax extension which provides a way to create functional
reactive expressions: inside it, "@val" refers to a value which
changes with time (a "behavior").

Though O'Caml RT is far from complete I made a prerelease because I
want to solicit feedback from others who are interested in functional
reactive programming and in creating a portable GUI API for O'Caml. I
made a web page[1] providing links to the source code, documentation
(on both functional reactive programming and FrGui), and (coming soon)
examples. It's known to compile both to bytecode and native code on
Mac OS X and Linux (feedback from Windows users would be greatly
appreciated!), and it should be possible already to write many simple
GUI applications using it.

My questions to you are:

     * Am I duplicating work? I know of functional reactive GUI systems
such as Fudgets, SuperGlue, and Flapjax for other languages but I know
of no such system for O'Caml.
     * What would you want to see in a functional-reactive GUI toolkit?
i.e. what things which are often awkward to express in procedural
langauges do you think should be made easy in O'Caml RT?
     * What are some examples of things which are easy in procedural
languages but you think would be awkward in a functional-reactive
setting?
     * Is the API clear and understandable? e.g. does the above example
make sense, even to those not familiar with functional reactive
programming?

Thanks in advance for your feedback!

[1] <http://users.wpi.edu/~squirrel/ocamlrt/>
			
** Virgile Prevosto answered:

 >     * Am I duplicating work? I know of functional reactive GUI  
systems
 > such as Fudgets, SuperGlue, and Flapjax for other languages but I  
know
 > of no such system for O'Caml.


You might be interested by Reactive ML: <http://rml.inria.fr>
This is a whole language (based on Ocaml), not a library, though.
			
** Gabriel Kerneis asked and Chris King answered:

 > It might have been clearer if I had read a quick tutorial or how-to
 > before. But your question targeted newbies, so let me give you a
 > total newbie's answer : I just can't get it ;-)

You have a very good point :) nothing's intuitive unless it's
familiar, which I admit the syntax (especially lift) is not.  I intend
to post some examples as well as a tutorial in the next few weeks, but
for the time being here is a quick breakdown of the above example
(with a few math fixes :P):
 > open Fr
 > open FrGui

Fr is the library containing funcitons to create functional reactive
expressions; FrGui contains definitions of all the GUI widgets.
 > let float_view f = text_view (lift (string_of_float @f))

This one-liner defines the float_view widget in terms of the text_view
widget.  Ignoring the definition (which should make more sense later),
it's simply a function which creates a widget which displays the
time-varying floating-point value f.
 > let _ =
 >   let temp_box, temp = spin_box 20. in

spin_box is a function which creates a widget (temp_box) which allows
the user to input a floating-point value (in this case, the
temperature we want to convert).  Here 20 is given as its initial
value.  The current value of temp_box is stored in temp.  This value
can change with time and is called a "behavior" (and has the type
float behavior).
 >    let fahrenheit = lift (@temp *. 1.8 +. 32.)

Because temp is not a float but a float behavior, we must use a
special construct to access it.  lift (expr) allows us to access
values contained in behaviors and to create new ones.  Inside of expr
(which is otherwise a normal O'Caml expression), we can use the form
@expr to reference a behavior (think of this like dereferencing a
pointer in C). Here, fahrenheit is a behavior which is always equal to
the value of (temp *. 1.8 +. 32.).  Whenever temp changes, so does
fahrenheit.
 >    and celsuis = lift ((@temp -. 32.) /. 1.8) in

Here, we similarly define celsius as a float behavior which is
dependent on the current value of temp.
 >    let main_window = window
 >        ~title: "Temperature converter"
 >        (hbox [
 >            hbox [label "Convert "; temp_box; label " to:"];
 >            vbox [
 >                hbox [label "degrees Fahrenheit: "; float_view  
fahrenheit];
 >                hbox [label "degrees Celsius: "; float_view  
celsius]]]) in

Here we define the main window.  hbox, vbox, and label are all
functions which create widgets.  hbox and vbox pack lists of widgets
horizontally and vertically, and label creates a text label.  temp_box
is the widget instance we defined above, which allows the user to
enter the value of temp.  We also create two instances of the
float_view widget, to display the values of fahrenheit and celsius.
 >    run_dialog (main_window, main_window#close)

This incantation displays main_window and enters the GUI's main loop
until the window's close button is clicked.
The end result is a window with a spin box into which the user can
input a temperature.  That temperature is instantly converted into
both Fahrenheit and Celsius and displayed in two other text boxes (the
float_views) in the window.

Hopefully this description helped more than it confused... if it did
more of the latter then I'll try to post a proper tutorial on the
O'Caml RT website as soon as possible, since one is in order anyway.
Thanks for you input :)
			
** Louis Mandel said:

A source distribution of ReactiveML will be available soon.
You may also have a look to Lucid Synchrone which is closer
to the functional reactive programming model.

<http://www.lri.fr/~pouzet/lucid-synchrone>
			
========================================================================
4) Scripting in ocaml
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
9b69f9b75315fb5a/1db058919f1ffdd6#1db058919f1ffdd6>
------------------------------------------------------------------------
** A huge thread spanning scripting, strict typing, and runtime  
information
was started when Denis Bueno asked (most of the messages may be read
at the archive link):

I've been writing bash scripts to perform various build- and
development-related tasks, and I don't enjoy it. I won't bore you with
detailed reasons why. The upshot is that I'd like to script in OCaml.
I have considered writing a few camlp4 extensions to make it easier to
write scripts:

   1) create a syntax which grabs environment variables:

     e.g. $FOO would grab the value of the environment variable FOO

   2) some sort of more convenient process interaction, e.g., for  
piping.

(1) seems pretty straightforward, though I haven't found the time to
implement it yet. (2) is not as clear to me, but I'll think about it
and probably look at scsh.

I googled a bit but couldn't find anything related to this. Has
anything done, or started doing, anything like this? 		
			
** Till Varoquaux suggested:

You might want to have a look at cash:
<http://pauillac.inria.fr/cash/>
It aims at being an ocaml equivalent of scsh. I don't know if it is
still maintained.
chamo (one of cameleon's [<http://pauillac.inria.fr/cash/>] component)
is also ocaml scriptable. They included an enhanced toplevel. You
could reuse part of there work .
			
========================================================================
5) libsndfile-ocaml alpha
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
16aae44626678a45/6e85a5f737ba7ad8#6e85a5f737ba7ad8>
------------------------------------------------------------------------
** Erik de Castro Lopo announced:

I'd like to announce the first pre-alpha release of libsndfile-ocaml
which is available here:

     <http://www.mega-nerd.com/tmp/libsndfile-ocaml.tgz>

The ocamldoc generated docs are here:

     <http://www.mega-nerd.com/libsndfile/Ocaml/Sndfile.html>

At this stage, basic reading from and writing to a file works.
Once I have received some feedback on what I have so far, I
intend to complete wrapping of the rest of the libsndfile API
on an as-needed basis.

Feedback please :-).
			
========================================================================
6) Job Announcement
Archive: <http://groups.google.com/group/fa.caml/browse_frm/thread/ 
a6e97afdc4eb1b61/2ebaf414491560b8#2ebaf414491560b8>
------------------------------------------------------------------------
** Yaron Minsky announced:

I'm pleased to announce that Jane Street Capital is yet again looking
to hire some top-notch functional programmers.  Of particular note is
that Jane Street Europe Ltd. now has an office in London, and we are
particularly interested in hiring someone for that office with strong
systems administration skills in addition to experience with
functional programming languages.
You can find out more about Jane Street here:

    <http://www.janestcapital.com/tech.html>

I should also warn people that I will have spotty email access for the
next couple of weeks, so it will take me some extra time to get back
to people.

Here's the full job announcement.

-------------------------------------------------

Jane Street Capital is a proprietary trading firm that operates around
the clock and around the world. We bring a deep understanding of
trading, a scientific approach, and innovative technology to bear on
the problem of trading profitably on the world's highly-competitive
financial markets. We run a small, nimble operation where technology
and trading are tightly integrated.

At Jane Street, there is room to get deeply involved in a number of
areas at the same time. We are actively looking for people interested
in software development, system administration, and quantitative
research--potentially all on the same day.

We have offices in the New York, London and Tokyo.  Most of our hiring
is for the New York office, but we are looking for applicants in our
foreign offices as well.  In some circumstances we have hired foreign
applicants for the US office through the H1-B and the F1 visa
programs. In such cases, we support and fund the visa application
process.

We are looking for talented candidates across the range.  We are also
particularly interested in finding someone with skills and interest in
systems administration for Jane Street Europe Ltd.'s London office.

The ideal candidate has:

     * A commitment to the practical. One of the big attractions of our
       work is the opportunity to apply serious ideas to real-world
       problems.
     * Experience with functional programming languages (OCaml, SML,
       Scheme, Haskell, Lisp, F#, Erlang, etc) is important. Applicants
       should also have experience with UNIX and a deep understanding
       of computers and technology.
     * A strong mathematical background. This is a must for candidates
       interested in research, and includes a good understanding of
       probability and statistics, calculus, algorithms, etc. We draw
       on ideas from everywhere we can, so we value interest and
       experience in a range of scientific fields.
     * Good second-order knowledge. In trading, understanding the
       boundary between what you do and don't know is as (or more)
       important than how much you know.

The environment at Jane Street is open, informal, intellectual, and
fun. You can wear a t-shirt and jeans to the office, the kitchen is
stocked, and discussions are always lively. We encourage a focus on
learning, both through formal seminars and classes, as well as through
day-to-day conversations with colleagues.  Other perks include
competitive salaries, rapid advancement for people who do well,
excellent benefits, free lunch, and a gym on-site.

We are currently looking for full-time positions as well as summer
interns (internship positions are only avaliable in the US office, and
for people who already have the right to work in the USa). If you are
interested, send an application to Yaron Minsky
(yminsky at janestcapital.com) including a resume, cover letter, and
optionally some sample code you've written.

If you'd like to know a little bit more about how we came to use OCaml
as our primary development language, take a look at these slides from
a talk we gave at CUFP 2006:

    <http://www.galois.com/cufp/slides/2006/YaronMinsky.pdf>
			
========================================================================
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
(alan.schmitt at polytechnique.org) and I'll mail it to you, or go take  
a look at
the archive (<http://alan.petitepomme.net/cwn/>) or the RSS feed of the
archives (<http://alan.petitepomme.net/cwn/cwn.rss>). If you also wish
to receive it every week by mail, you may subscribe online at
<http://lists.idyll.org/listinfo/caml-news-weekly/> .

========================================================================

-- 
Alan Schmitt <http://alan.petitepomme.net/>

The hacker: someone who figured things out and made something cool  
happen.
  .O.
  ..O
  OOO


-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 186 bytes
Desc: This is a digitally signed message part
Url : http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20061226/17b14f20/attachment.pgp 


More information about the caml-news-weekly mailing list