When I had to learn Haskell, some years ago, the task was frustrating for some time. I had the impression of not being able to put all the pieces together, of missing the big picture. Of course, I had to learn the syntax of the language, lazy evaluation, currying and partial application of functions, monads, do notation, arrows, etc. All of thos...
Lisp is loved and hated because of its syntax, but the fact is that the homogenous treatement of data and code in the language has allowed Lisp to evolve and incorporate into the language those features considered necessary by their users without modifications in the core language. Clojure, as any other incarnation of Lisp, has inherited this ...
I've just pushed to my github repository (http://github.com/antoniogarrote/egearmand-server/tree/master) the version 0.0.5 of egearmand, an erlang implementation of the gearman (http://gearman.org/index.php) server. Gearman (http://en.wikipedia.org/wiki/Gearman) is a project initiated by Danga (the creators of memcache), specifying a very simp...
Installing the erlang client for rabbitmq can be a little tricky, specially if you are new to erlang development and you have tried to follow the instructions at http://hopper.squarespace.com/blog/2008/1/12/introducing-the-erlang-amqp-client.html. Requirements: erlang OTP, python, mercurial. This is how I set up the beast under OS X, hope it c...
Rails 2.3 has finally included support for Rack. The Rack project (http://rack.rubyforge.org/) consists of an abstraction layer on top of the webserver that provides a common set of services for developers while hiding the complexity of the web server software whatever it should be (mongrel, glassfish, thin, etc). The support for Rack is a majo...
A la hora de afrontar cualquier problema lo suficientemente complicado, uno de los principales problemas a los que nos enfrentamos es el de conseguir pensar con suficiente claridad acerca del mismo. Esto implica caracterizarlo de forma adecuada, eliminando todos los elementos superfluos o subproblemas no esenciales, lo que supone casi siempre, s...
Por esas cosas que tiene la vida me tengo que leer Visualizing Data de Ben Fry, uno de los popes del idem, o de la analítica visual, o de como como quiera que llamen a eso de intentar meter datos de 15 dimensiones en 400x400 pixels. El caso es que el amigo Ben, se pasa el segundo capítulo de su libro hablando de un lenguaje de manipulación de...
Acabo de subir a Github clj-haml, un apaño para tener algo parecido a Haml (http://haml.hamptoncatlin.com/) para clojure. Haml: %div#things %span#rice Chicken Fried %p.beans{ :food => 'true' } The magical fruit %h1.class.otherclass#id La La La clj-haml: (h= :div#things (h= :span#rice "Chick...
En las últimas semanas, mi pequeña biblioteca clojure para grizzly ha ido creciendo y ya puede aceptar cualquier petición web y renderizar una respuesta. Desde el punto de vista de cliente, el proceso es ahora mismo este: Enrutamos una petición a una función que procesará la petición: (route! (url-pattern GET "greetings" :name) ...
Clojure es un lenguaje de programación pensado por y para la concurrencia. Las características funcionales del lenguaje, como la inmutabilidad de sus estructuras de datos, contribuyen a que mantener varios hilos de ejecución sea sencillo, cada uno...
Más cosas que voy implementando en mi biblioteca OWL para Clojure. En otro post, mostré como se podía definir la TBox, con un procedimiento similar al de usar migraciones para definir el esquema de una base de datos relacional. Ahora vamos most...
Hoy en día la norma para desarrollar la capa de persistencia de una aplicación web consiste en desarrollar un esquema para algún sistema de base de datos relacional en el que almacenar los datos. Esto supone básicamente darle golpes a tus objetos...
El código y los tests los podéis encontrar en mi repositorio de Github. Usando Sesame como repositorio semántico. Describimos un grafo RDF: (def *graph* (build-graph [(build-uri-node "http://test.com/whatever" [(build-relat...
Una parte básica de cualquier framework web es el router. El componente que se encarga de aceptar una petición desde el servidor web para una determinada URL y método HTTP y decide que código de la aplicación debe ejecutarse para satisfacer dicha ...
¿cómo pasar un rato aburrido? Implementemos un soporte para usar mónadas en clojure. Así, aunque no programemos en Haskell tendremos el respeto de cualquier tío con dos doctorados. Primero, las definiciones de nuevo: ¿qué es una mónada? ...
Clojure (http://clojure.org) es el lenguaje con el que paso más tiempo últimamente. Es un Lisp-1, funcional (todo es inmutable), ejecutándose sobre la JVM con lo que supone poder acceder a la ingente cantidad de bibliotecas disponibles para Java,...
Ruby tiene, desde mi punto de vista, muchas cosas buenas y tan sólo algunas malas. Casi todas las buenas tienen su origen en los lenguajes de programación que más influyeron a Matz cuando diseño Ruby: Lisp y Smalltalk, al igual que las malas (*cou...
Ya ha pasado el primer día de la Conferencia Rails 2008, y aunque todavía queda la segunda jornada, ya se pueden empezar a sacar las primeras conclusiones. Es fácil apreciar algunas diferencias con ediciones anteriores. En primer lugar, creo que e...