Articles Labelled with Information technology
Brevissimo post per segnalarvi la nascita di un nuovo fantastico blog, cui tengo molto visto che racconterà storie interessanti (si spera) che riguardano una piccola realtà italiana, lo Studio Associato 4Sigma.
Il fatto che incidentalmente io sia uno dei soci dello studio non vi tragga in inganno: il mio giudizio sul nuovo blog è del tutto disinteressato ;-)
Di cosa tratterà? A dire la verità non lo so ancora, per adesso direi che parleremo di tutto quello che possiamo ritenere interessante su due fronti, almeno: la gestione ed i problemi che affronta una piccola realtà che vuole fare della qualità (in Italia!) la propria bandiera e qualche argomento più prettamente tecnico, ispirato dalle quotidiane battaglie con la tecnologia informatica.
Non disdegneremo anche qualche aneddoto divertente nel rapporto di amore/odio con i clienti e, soprattutto, le critiche ai cosiddetti professionisti dell'ambiente. Che spesso si rivelano degli autentici truffatori.
In this post I want to help OCaml newcomers to install Batteries. The task is trivial under Linux, while it's a bit tricky under Windows, because OCaml still lacks a self-contained Windows installer.
My assumption is that the reader is a coder, so I will not explain everything… Let's start with the easy part: Linux.
The installation of OCaml + Batteries under a Debian/Ubuntu system couldn't be easier, thanks the the hard work of the Debian OCaml Task Force. So open a terminal and type:
$ sudo aptitude install ocaml-batteries-included
That's all for Debian/Ubuntu. I don't know how Fedora works, but I think it's easy to install Batteries using YUM, something like:
$ yum install ocaml-batteries-included
If a RPM package for Batteries wasn't available, you could still install OCaml, Camomile (the Unicode library), and compile Batteries from sources, as described below for the Windows OS.
As said, this OS still lacks a self contained installer which is in progress, at least for installing OCaml. Since many OCaml versions are available for Windows, with different pros and cons, I had to decide which one to use, and I decided to follow the simplest path to reach the goal of installing all the stuff we need. The Cygwin port is by far the simplest way.
- Download Cygwin setup and double click the executable. In Windows Vista/7 (I made my test on a Windows 7 64bit box) you will be required to allow the program to be run a couple of times, as usual ;-) …
- when the list of available packages appears, select: each and every package containing "caml" (see the screenshot below), and also make, m4, libncurses-devel, git, wget and rlwrap;
- open the Cygwin shell;
- download the Findlib library, version 1.2.6:
$ wget https://download.camlcity.org/download/findlib-1.2.6.tar.gz
- unpack, compile and install Findlib:
$ tar -xpzf findlib-1.2.6.tar.gz $ cd findlib-1.2.6/ $ ./configure $ make $ make install
- download, unpack, compile and install Camomile 0.8.1:
$ wget https://prdownloads.sourceforge.net/camomile/camomile-0.8.1.tar.bz2 $ tar -xpjf camomile-0.8.1.tar.bz2 $ cd camomile-0.8.1/ $ ./configure $ make $ make install
- the last step is to download compile and install Batteries itself. I wasn't able to compile the latest stable release (1.2.2), for an obscure preprocessor error, but using the latest GIT branch everything went smoothly. So here are the steps:
$ git clone git://github.com/ocaml-batteries-team/batteries-included.git $ cd batteries-included/ $ make camomile82 $ make all doc $ make install install-doc
Testing the installation
Before starting to play with the library and the toplevel (the OCaml REPL is called toplevel) let's put into action a couple of helpers.
- The OCaml toplevel doesn't support readline. To get this feature back we add an alias to .bashrc. This works in both Linux and Windows:
alias ocaml='rlwrap -H /home/paolo/.ocaml_history -D 2 -i -s 10000 ocaml'restart the terminal or load another bash;
- we need to load Batteries in the toplevel. This is not strictly necessary, but it helps a lot and the Batteries ASCII logo is wonderful :-). All we need is to create a file named .ocamlinit in the home directory. Open your favorite editor and put this phrases in ~/.ocamlinit:
let interactive = !Sys.interactive;; Sys.interactive := false;; (*Pretend to be in non-interactive mode*) #use "topfind";; Sys.interactive := interactive;; (*Return to regular interactive mode*) Toploop.use_silently Format.err_formatter (Filename.concat (Findlib.package_directory "batteries") "battop.ml");;
If everything went well you can now type ocaml and something like this should appear:
$ ocaml Objective Caml version 3.11.2 _________________________ [| + | | Batteries - | |_____|_|_________________| _________________________ | - Type '#help;;' | | + |] |___________________|_|___| Loading syntax extensions... Camlp4 Parsing version 3.11.2
This (rather boring) post has been devoted to the installation details of Batteries under Windows, where it presents some difficulties for newbies. Next time we will start on exploring the library with simple examples to exploit its strength.
OCaml is known to be a powerful functional programming language, but one of its presumed weakness is a relatively poor standard library.
By accident, I'm one of the few people on the planet considering this very clean and virtually bug free library a feature and not a bug, but this is only an opinion.
The standard library contains everything you need to build applications and other libraries, but it's essential, forget something like the Python standard library and things like “sending an email in one line of code”. Instead, think of the C standard library (plus some important data structures missing in the libc).
More than two years ago the OCaml community decided to start the development of a library containing all the conveniences that are missing in the standard library. The project is OCaml Batteries Included and I'd like to introduce the reader with a series of posts, aimed to cast a light on various aspects of the library, without pretending to be an exhaustive tutorial.
The posts will be targeted at novice OCaml programmers because I think that an experienced OCaml hacker already uses "Batteries" or, in any case, he understand the library API and doesn't need help from this blog.
Before starting with the (boring) installation details, I want to give you a taste of Batteries, to show how a simple task could be written in a more natural way using Batteries modules, in comparison with a vanilla implementation. Let's take this simple task: we want to read a file by lines and print on the terminal only those lines containing a particular substring.
let () = let in_channel = open_in "/usr/local/widgets/data" in try while true do let line = input_line in_channel in try ignore (Str.search_forward (Str.regexp_string "blue") line 0); print_endline line with Not_found -> () done with End_of_file -> close_in in_channel
Now let's rephrase using Batteries:
Enum.iter (fun l -> if BatString.exists l "blue" then print_endline l) (open_in "/usr/local/widgets/data" |> BatIO.lines_of)
The result is the same, but the code is much cleaner and far more idiomatic for a functional language.
Next time we will see how to install OCaml and Batteries, under Linux of course, but hopefully even under Windows.
Playing with the Google Buzz API I accidentally deleted all of my posts.
Do you remember the old article from Paul Graham about the comparison between Python and Java? It's entitled “Beating the averages” and despite the fact that it was written in 2003, it's still relevant.
Why? Try this, and you will be enlightened.
Thanks to Birdack for this link!
(Local copy here for posterity.)