Latest Articles

On Internet and TV

Paul Graham has a very popular blog about his activity of venture capitalist, and sometimes about his beloved Lisp.

The last article, however, focuses attention on the battle between Internet and TV. The opinion of Graham is that TV has lost the battle, and this is my very same opinion, since at least a couple of years.

If you, like me, you hate TV and the stupidity of most TV shows, read the post of Graham, it contains a lucid analisys of the current situation and some very penetrating considerations about the near future.

Information technology disgrace

The world of information technology is made by men and, like any other activity in which human beings are involved in, mistakes happens. Sometimes huge mistakes. And huge mistakes turn out into disgraces. One of these disgraces has a name: PHP.

Here is the story: some days ago wordpress.org released the latest version and I decided to upgrade. No db changes, everything seems ok. But, wait a moment… the sidebar is broken! To be honest, the page itself seems to be broken. I did nothing strange. Ok, let’s rationalize this: ssh on the server, cd to the wordpress directory and issue:

$ php index.php
Segmentation fault

What the frack?!? I had no time to investigate more, and I decided to install the most recent working backup (I use GIT to track everything, including db backups) and forgot it for some days. Tonight I decided to solve the problem. I installed everything on my PC and, by hacking the DB, I was able to remove all the sidebar widgets, among which I suspected the guilty should be. Than, from Wordpress admin I added exactly the same widgets, in the very same order and with the same configuration.

Result? No more segfault.

Now, how can a so popular application be so fragile? Are Wordpress guys stupid, or what? No, this time the problem is with the technology. One word suffices: PHP.

Yes, I know, I perfectly know I shouldn’t focus myself on this or that technology, I now Facebook is made with PHP, I know everything, but… as an engineer I simply can’t ignore how poor this language is!

Hey, if I considered the language choice unimportant I should work in the marketing :-)

End of this rant: I started my own blog, I’ll write it in a real programming languages, Objective Caml, I’ll never be rich but at least I’ll never ever spend 3 hours of my life debugging a PHP buggy blog.

Secondo dan

Esame di secondo dan

Non ho mai tempo di scrivere qualcosa su questo blog, è davvero una vergogna, ma, tutto sommato, se non si ha molto da dire forse è meglio tacere. L’ultima volta che ho scritto qualcosa è stato il 3 Settembre scorso per dire che, dopo un anno di inattività totale, ero tornato in palestra per riprendere il corso di Karate. Concludevo dicendo che l’obbiettivo per quest’anno sarebbe stato conseguire il secondo dan, vale a dire il secondo grado della cintura nera.

Ebbene, torno a scrivere dopo mesi per dire che ce l’ho fatta! L’altro ieri (25 Gennaio) ho sostenuto con successo l’esame per il grado di secondo dan. Nella foto mi vedete mentre, durante la prova di kumite, tento un mawashi geri, un calcio circolare: la postura è un po’ scomposta ma ero davvero stanco e febbricitante per giunta. Il calcio doveva essere abbastanza prevedibile, visto che l’altro esaminando l’ha schivato senza troppi problemi, ma non è questo il punto. Il punto è che sono felice!

A breve pubblicherò su Flickr la galleria delle fotografie dell’esame ma nel frattempo voglio ringraziare gli altri quattro esaminandi della mia palestra (Claudio, Massimiliano, Nicolas e Daniele) con i quali mi sono allenato per un mese di intenso sudore.

Ed infine ringrazio ed abbraccio il mio maestro, Mauro Crescenzio, per gli allenamenti supplementari di sabato e domenica che sono costati a noi fatica e a lui… tanta pazienza.

Si riparte...

Karate Do

Due di Settembre, riprendono le lezioni di Karate. Come tutti gli anni, verrebbe da dire, ma in realtà per me è passato più di un anno da quando ho indossato l’ultima volta il karategi perché lo scorso anno ho saltato l’intero corso per impegni di lavoro. Quest’anno ho deciso che niente mi avrebbe distolto dal riprendere lo studio di una disciplina che tiene in forma ed apre la mente, allena la potenza e l’equilibrio ed impone concentrazione.

È stato un piacere rivedere i vecchi amici, che mi avevano giustamente dato per disperso, e ritrovare il maestro, felice di rivedermi.

Questi gli aspetti positivi. Ora, brevemente, quelli tragicomici: dopo un anno di inattività il primo allenamento (blando a dire la verità) mi ha massacrato! Tachicardia, muscoli intorpiditi e doloranti, più che il karateka cui dovrei assomigliare sembro il ritratto di Fantozzi dopo l’estenuante Coppa Cobram. Ora, siccome l’obbiettivo per quest’anno è arrivare all’esame di 2° dan, non c’è che da rimboccarsi le maniche e darci dentro.

Os!

Draw something on the screen... and interact with it!

Summary of the previous episodes: 10 days ago Richard Jones complained about the difficulties to achieve simple tasks (drawing a function graph on the screen) on modern computers with modern programming languages; the day after Erik de Castro Lopo replied with a post in which he used GTK and Cairo (better: the OCaml bindings) to achieve the result to draw a simple function on the screen. Yesterday Matias Giovannini added some pepper to this argument using SDL to draw the Newton fractal.

So, what can be added to all this? With a perfect graphic toy you can draw on a window with simple commands, of course, but you also want to interact with the objects you drew. So I elaborated Erik example to add some keyboard and mouse interaction with the graphics on the screen.

Downloading and compiling

First of all, download the source code or, if you want the latest version, clone my GIT repository:

$ git clone https://www.ex-nunc.org/projects/pdonadeo/cairo_toy.git cairo_toy.git

To compile the program you need:

  • OCaml (I have version 3.10.2, but probably 3.10.0 or 3.10.1 are ok);
  • Lablgtk2, the OCaml binding to GTK2;
  • the OCaml binding to libcairo.

All these packages are available in any recent Linux distribution; on Debian/Ubuntu:

$ aptitude install ocaml liblablgtk2-ocaml-dev libcairo-ocaml-dev

To compile instruct this command inside the program directory:

$ ocamlbuild demo_toy.native

The code

The program is very simple and is essentially derived from Erik's code: the core is the functor Toy_maker.Make which accepts, as input, a module with the following signature INTERACTOR:

module type INTERACTOR =
sig
  type state
  val init_state : state
  val win_title : string
  val init_width : int
  val init_height : int
  val cmd_line_handler : state -> string array -> state
  val keyboard_callback : state -> GdkEvent.Key.t -> state * bool
  val pointer_buttons_callback : state -> GdkEvent.Button.t -> state * bool
  val pointer_motion_callback : state -> GdkEvent.Motion.t -> state * bool
  val pointer_scroll_callback : state -> GdkEvent.Scroll.t -> state * bool
  val repaint : state -> Cairo.t -> int -> int -> state * bool
end

In this module the user must provide a type state, which contains the application state, some initialization values, a command line handler (in case you need) and 4 event handlers for the following events:

  • keyboard;
  • mouse motion;
  • mouse buttons;
  • mouse wheel event (scroll events in GTK).

The user also provides a repaint function, which takes care of repainting the Cairo context.

As a demo I wrote a simple My_interactor module implementing the following simple features:

  • left click on the gray background creates a new circle;
  • left click inside an existing circle moves it around;
  • right click inside a circle deletes it;
  • the mouse wheel zooms (in and out);
  • middle click is used to pan;

Here is the result.

Yes, it's somewhat dull, but it does its job. Have fun!

Ascoltare Radio Monte Carlo… con Linux

Mi piace ascoltare la radio, specialmente quando programmo. Siccome siedo davanti ad un PC e siamo nel 2008, pretendo di ascoltare la mia stazione preferita, Radio Monte Carlo, usando il mio sistema operativo, cioè Linux (Debian “Sid”, per la precisione).

Purtroppo navigando sul sito della radio faccio fatica ad interagire con il player integrato e poi, visto che uso il browser per provare il software che scrivo, trovo scomodo avere una finestra impegnata ad ascoltare musica.

Così, smanettando un po’, ho trovato la URL da cui proviene lo stream, ascoltabile con MPlayer con il semplice comando:

$ mplayer rtsp://151.1.245.2/broadcast/2

con buona pace della terribile pagina web sul sito.

Buon ascolto…

Holiday!

Next week I’ll be away on holiday, finally! It’s only one week, but better than nothing. I’ll be back on line Monday the 14th of July.

Ciao!

Copyright © 2004–2019 by .
Creative Commons License Content on this site is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.5 Italy License.

RSS Feed. Valid XHTML 1.1. This blog is written in Objective Caml. Design based on the work of Rodrigo Galindez.