• en

OCaml Planet

The OCaml Planet aggregates various blogs from the OCaml community. If you would like to be added, read the Planet syndication HOWTO.

923 blog posts are available. You can read the 30 more recent ones below or view older ones.

Gamut Redivivus: OCaml App in iOS Simulator — Psellos, Apr 29, 2015

April 29, 2015

I recently revitalized an OCaml app from a few years ago, one that runs in the iOS simulator. Instructions for downloading, building, and running the app are here:

Gamut: Explore Colors in iOS Simulator

You can download the sources directly here:

Gamut 2.0.3, OCaml app for iOS Simulator 8.2 (32 KB)

Although the app doesn’t do anything particularly impressive, I still find it mesmerizing and fun. But mostly it just shows how to get an OCaml app running in the…

Read more...

Full Time: Software Developer (Functional Programming) at Jane Street in New York, NY; London, UK; Hong Kong — GitHub Jobs, Apr 28, 2015

Software Developer (Functional Programming)

Jane Street is a proprietary quantitative trading firm, focusing primarily on trading equities and equity derivatives. We use innovative technology, a scientific approach, and a deep understanding of markets to stay successful in our highly competitive field. We operate around the clock and around the globe, employing over 380 people in offices in New York, London and Hong Kong.

The markets in which we trade change rapidly, but our intellectual appro…

Read more...

CueKeeper: Gitting Things Done in the browser — Thomas Leonard, Apr 28, 2015

Git repositories store data with history, supporting replication, merging and revocation. The Irmin library lets applications use Git-style storage for their data. To try it out, I’ve written a GTD-based action tracker that runs entirely client-side in the browser.

CueKeeper uses Irmin to handle history and merges, with state saved in the browser using the new IndexedDB standard (requires a recent browser; Firefox 37, Chromium 41 and IE 11.0.9600 all work, but Safari apparently has problems i…

Read more...

Weekly News — OCaml Weekly News, Apr 28, 2015

  1. Suggested way to determine platform specific capabilities in build system?
  2. systemd/journal bindings
  3. New software written in OCaml
  4. gen_js_api: generating Javascript bindings from OCaml interfaces
  5. js_of_ocaml with node
  6. Other OCaml News

Generating Javascript bindings from OCaml interfaces — LexiFi, Apr 27, 2015

LexiFi is currently experimenting with the js_of_ocaml compiler in order to create some browser-side applications in OCaml. In this context, we have started a new project called gen_js_api which aims at simplifying the creation of bindings to Javascript libraries. The approach is quite different from js_of_ocaml's native FFI (which relies on language extensions).

read more

Coq 8.5 beta 2 is out! — Coq, Apr 22, 2015

The second beta release of Coq 8.5 is available for testing. The 8.5 version brings several major features to Coq:
  • asynchronous edition of documents under CoqIDE to keep working on a proof while Coq checks the other proofs in the background (by Enrico Tassi);
  • universe polymorphism making it possible to reuse the same definitions at various universe levels (by Matthieu Sozeau);
  • primitive projections improving space and time efficiency of records, and adding eta-conversion for records (by…
Read more...

Recover the good old C-x C-b (list-buffers) behaviour around Emacs 24.4 and later — Caml Spotting (Jun Furuse), Apr 22, 2015

Something has been changed around Emacs 24.4:  my favorite C-x C-b (list-buffers) no longer works as before.  It displays the buffer menu in a random window.  Which windows is chosen is almost undeterministic and no way to predict.  Sometimes the current window is selected. :-(

This change is awful to me who built a special neuro circuit for Emacs.  I often did:
  • C-x C-b to display the buffer list in another window than the current
  • then immediately C-x o to move the cursor f…
Read more...

Weekly News — OCaml Weekly News, Apr 21, 2015

  1. Suggested way to determine platform specific capabilities in build system?
  2. OCaml-openmaple
  3. Timeout
  4. Other OCaml News

Senior/Principal Software Development Engineer at Lookingglass Cyber Solutions (Full-time) — Functional Jobs (FunctionalJobs.com), Apr 16, 2015

Are you an experienced software engineer in security, networking, cloud and big data? Are you interested in cyber security or improving the security of the Internet? Do you push yourself to be creative and innovative and expect the same of others?

At Lookingglass, we are driven and passionate about what we do. We believe that teams deliver great products not individuals. We inspire each other and our customers every day with technology that improves the security of the Internet and of our custo…

Read more...

Mid/Senior Software Development Engineer at Lookingglass Cyber Solutions (Full-time) — Functional Jobs (FunctionalJobs.com), Apr 16, 2015

Lookingglass is the world leader in cyber threat intelligence management. We collect and process all source intelligence, connecting organizations to valuable information through its cyber threat intelligence monitoring and management platform.

Our solutions allow customers to continuously monitor threats far and near, such as the presence of botnets, hosts associated with cybercriminal networks, unexpected route changes and the loss of network resiliency.

We are seeking qualified Software De…

Read more...

Weekly News — OCaml Weekly News, Apr 14, 2015

  1. Reduce Inequality and Program in OCaml!
  2. Core Suite 112.24
  3. Other OCaml News

Yes, ocp-memprof (s)can(f) ! — OCamlPro (Çagdas Bozman), Apr 13, 2015

A few months ago, a memory leak in the Scanf.fscanf function of OCaml's standard library has been reported on the OCaml mailing list. The following "minimal" example reproduces this misbehavior:

(* in file scanf_leak.ml *)
for i = 0 to 100_000 do
   let ic = open_in "some_file.txt" in
   Scanf.fscanf ic "%s" (fun _s -> ());
   close_in ic
done;;
        
read_line ();;

Let us see how to identify the origin of the leak and fix it with our OCaml memory prof…

Read more...

Building a lower-latency GC — Jane Street (Yaron Minsky), Apr 10, 2015

We've been doing a bunch of work recently on improving the responsiveness of OCaml's garbage collector. I thought it would be worth discussing these developments publicly to see if there was any useful feedback to be had on the ideas that we're investigating.

The basic problem is a well-known one: GCs can introduce unpredictable pauses into your application, and depending on how your GC is configured, these pauses can be quite long. Unpredictable latencies are a problem in a wide variety of appl…

Read more...

Coq 8.4pl6 is out — Coq, Apr 09, 2015

Version 8.4pl6 of Coq fixes several bugs of version 8.4pl5. More information to be found in the CHANGES file.

Faster OCaml to C calls — Jane Street (Vladimir Brankov), Apr 09, 2015

The official OCaml documentation "Interfacing C with OCaml" doesn't document some interesting performance features.

C functions with no OCaml allocation

A C call can allocate OCaml data and pass it back to OCaml, for example using caml_copy_string(s). Between the C call allocating OCaml data and passing it back, it has to make sure that OCaml's Garbage Collector doesn't collect it, as the Garbage Collector can be triggered during the C call. There's an intricate mechanism which assures that, par…

Read more...

Weekly News — OCaml Weekly News, Apr 07, 2015

  1. GADTs and Menhir
  2. OCamp - Reactive programming in the shell
  3. Mathematical Expression Library
  4. Other OCaml News

Let's Play Network Address Translation: The Home Game — Mindy Preston, Apr 06, 2015

When last we spoke, I left you with a teaser about writing your own NAT implementation. iptables (and friends nftables and pf, to be a little less partisan and outdated) provide the interfaces to the kernel modules that implement NAT in many widely-used routers. If we wanted to implement our own in a traditional OS, we’d have to either take a big dive into kernel programming or find a way to manipulate packets at the Ethernet layer in userspace.

But if all we need to do is NAT traffic, why not …

Read more...

Ideal finger 001 — Daniel Bünzli (log), Apr 05, 2015

Towards Heroku for Unikernels: Part 2 - Self Scaling Systems — Amir Chaudhry, Apr 03, 2015

In the previous post I described the continuous end-to-end system that we’ve set up for some of the MirageOS projects — automatically going from a git push all the way to live deployment, with everything under version-control.

Everything I described previously already exists and you can set up the workflow for yourself, the same way many others have done with the Travis CI scripts for testing/build. However, there are a range of exciting possibilities to consider if we’re willing to ext…

Read more...

Another PhD position in Ljubljana — Andrej Bauer, Apr 03, 2015

It is my pleasure to announce a second PhD position in Ljubljana! A position is available for a PhD student at the University of Ljubljana in the general research area of modelling and reasoning about computational effects. The precise topic is somewhat flexible, and will be decided in discussion with the student. The PhD will … Continue reading Another PhD position in Ljubljana

Reviewing the second year of OCaml Labs in 2014 — Anil Madhavapeddy, Apr 02, 2015

The OCaml Labs initiative within the Cambridge Computer Laboratory is now just over two years old, and it is time for an update about our activities since the last update at the end of 2013 and 2012.

The theme of our group was not to be pure research, but rather a hybrid group that takes on some of the load of day-to-day OCaml maintenance from INRIA, as well as help grow the wider community and meet our own research agendas around topics such as unikernels. To this end, all of our projects ha…

Read more...

Pearl No.3 - Saddleback Search — Xinuo Chen, Mar 31, 2015

Happy Easter

Our easter egg happens to be Pearl 3.

A function $ f $ can have the following properties:

  1. $ f $ takes two arguments: $ x $ and $ y $
  2. Both $ x $ and $ y $ are natural numbers, i.e., non-negative integers
  3. $ f $ also returns natural numbers
  4. $ f $ is strictly increasing in each argument. This means if $ x $ increases or descreases, the according result of $ f $ will also increase or descrease. The same applies on $ y $.

Now we are given such a function …

Read more...

Towards Heroku for Unikernels: Part 1 - Automated deployment — Amir Chaudhry, Mar 31, 2015

In my Jekyll to Unikernel post, I described an automated workflow that would take your static website, turn it into a MirageOS unikernel, and then store that unikernel in a git repo for later deployment. Although it was written from the perspective of a static website, the process was applicable to any MirageOS project. This post covers how things have progressed since then and the kind of automated, end-to-end deployments that we can achieve with unikernels.

If you’re already familiar wi…

Read more...

Weekly News — OCaml Weekly News, Mar 31, 2015

  1. Is there a 64 bits Native MinGW port?
  2. Other OCaml News

Why GADTs matter for performance — Jane Street (Yaron Minsky), Mar 30, 2015

When GADTs (Generalized Algebraic Data Types) landed in OCaml, I wasn't particularly happy about it. I assumed that it was the kind of nonsense you get when you let compiler writers design your programming language.

Which is to say that the standard GADT examples all seem to be about the kinds of things that compiler writers do, like embed domain-specific languages or build typed abstract-syntax trees. But it didn't seem particularly relevant for the kind of systems programming that I think abou…

Read more...

Announcing Lambdoc 1.0-beta3 — Dario Teixeira, Mar 30, 2015

I'm happy to announce the release of version 1.0-beta3 of Lambdoc, a library providing support for semantically rich documents in web applications. Lambdoc was designed with Ocsigen/Eliom integration in mind, though you may of course use it with other frameworks (it does not actually depend on the Ocsigen server or Eliom). In fact, you may find it useful outside the web application domain altogether.

An overview of Lambdoc's features may be found in the post I wrote announcing the first beta…

Read more...

Full-stack Software Engineer (updated) at Capital Match (Full-time) — Functional Jobs (FunctionalJobs.com), Mar 29, 2015

Overview

Capital Match (www.capital-match.com) is a Singapore-based peer-to-peer lending platform. We are backed by a number of VCs and banking industry leaders. We have started our operations at the beginning of 2015 and are steadily growing. Our online platform is already operational and we are now embarking on the next stage of tech development to be able to service large institutional investors. Our product enables SMEs to secure loans from professional investors. We are hiring a well-round…

Read more...

Opam Switch to Multicore OCaml — KC Sivaramakrishnan, Mar 25, 2015

OPAM has a great compiler switch feature that lets you simultaneously host several OCaml installations, each with its own compiler version and a set of installed packages. I wanted to use the power of opam switch for working with the experimental multicore OCaml compiler. The key advantage of doing this is that it lets you easily install packages from the OPAM repository, while sandboxing it from other OCaml installations on your system. The post will show how to create OPAM compiler switch for …

Read more...

A unikernel experiment: A VM for every URL — Magnus Skjegstad, Mar 25, 2015

I recently wrote a DNS server that can boot unikernels on demand called Jitsu. The following diagram shows a simplified version of how Jitsu works. The client sends a DNS query to a DNS server (Jitsu). The DNS server starts a unikernel and sends a DNS response back to the client while the unikernel is booting. When the client receives the DNS response it opens a TCP connection to the unikernel, which now has completed booting and is ready to respond to the TCP connection.

The unikernels are bui…

Read more...

Weekly News — OCaml Weekly News, Mar 24, 2015

  1. GADT existential asked
  2. TLS-0.4.0 and X.509-0.3.0
  3. Adding support for OCaml in PythonTeX
  4. Mtime 0.8.0
  5. OPAM 1.2.1
  6. Other OCaml News

View older blog posts.