En un proyecto que estoy desarrollando con Erlang necesito realizar unas comprobaciones periódicamente. El proyecto está basado en Erlang/OTP y para realizar dichas comprobaciones he añadido un gen server que, entre otras cosas, ejecuta un 'timer' periódicamente. En este post voy detallar el proceso que he seguido para añadir un 'timer' periódico a un gen server.
El proceso es muy simple, se envía un mensaje periodicamente al gen server con un mensaje concreto, y en la recepción de dicho mensaje realizamos la tareas necesarias, en este ejemplo mostramos un texto por pantalla.
Para realizar las llamadas periódicas al timer vamos a usar la función timer:send_interval/2.
send_interval(Time, Message) -> {ok, TRef} | {error, Reason}
Esta función se envía a sí misma el mensaje 'Message' repetidamente con un intervalo indicado en milisegundos (Time). Es decir, cada 'Time' milisegundos ejecuta 'Pid ! Message', donde el 'Pid' es el del proceso que lo ejecuta (Pid = self()).
Para leer el mensaje recibido en el gen_server utilizo el módulo handle_info/2.
A continuación se puede ver el código completo del gen server con un 'timer' periódico cada segundo.
Mostrando entradas con la etiqueta Erlang. Mostrar todas las entradas
Mostrando entradas con la etiqueta Erlang. Mostrar todas las entradas
viernes, 20 de enero de 2012
[Erlang] - Añadir un timer a un gen_server
martes, 20 de diciembre de 2011
[erlang] - Comparaciones en Erlang
Para realizar comparaciones en Erlang hay diferentes operadores. La principal diferencia es si se tiene en cuenta el tipo en dicha comparación.
Los operadores que no contemplan el tipo son:
== -> Comprueba si son iguales los valores que hay a cada lado del operador.
/= -> Comprueba si son distintos los valores que hay a cada lado del operador.
Los que si contemplan el tipo son:
=:= -> Comprueba si son iguales los valores que hay a cada lado del operador.
=/= -> Comprueba si son distintos los valores que hay a cada lado del operador.
Veamos un ejemplo, Vamos a comparar 1 (tipo entero) con 1.0 (tipo float).
Los operadores que no contemplan el tipo son:
== -> Comprueba si son iguales los valores que hay a cada lado del operador.
/= -> Comprueba si son distintos los valores que hay a cada lado del operador.
Los que si contemplan el tipo son:
=:= -> Comprueba si son iguales los valores que hay a cada lado del operador.
=/= -> Comprueba si son distintos los valores que hay a cada lado del operador.
Veamos un ejemplo, Vamos a comparar 1 (tipo entero) con 1.0 (tipo float).
1> 1 == 1.0.
true
2> 1 =:= 1.0.
false
3> 1 /= 1.0.
false
4> 1 =/= 1.0.
true
martes, 21 de junio de 2011
[Notas Erlang] Unbounding Variables
Erlang es un lenguaje de asignación única por lo que una variable no puede cambiar su valor. Cuando se asigna un valor a una variable, este valor es difinitivo.
Se puede eliminar la relación entre una variable y su valor, a esto se le llama unbounding. No se debe usar esta función cuando se está programando, yo sólo lo uso cuando estoy haciendo pruebas con la consola y no quiero tener un gran número de variables que representen lo mismo.
Para realizar el unbounding se usa la funcion f().
f() realiza el unbounding de todas la variables; pero si se le pasa una variable como parámetro, sólamente hará el unbounding sobre esa variable.
Se puede eliminar la relación entre una variable y su valor, a esto se le llama unbounding. No se debe usar esta función cuando se está programando, yo sólo lo uso cuando estoy haciendo pruebas con la consola y no quiero tener un gran número de variables que representen lo mismo.
Para realizar el unbounding se usa la funcion f().
f() realiza el unbounding de todas la variables; pero si se le pasa una variable como parámetro, sólamente hará el unbounding sobre esa variable.
1> A = 1.
1
2> B = 2.
2
3> A.
1
4> f(A).
ok
5> A.
* 1: variable 'A' is unbound
6> B.
2
7> f().
ok
8> B.
* 1: variable 'B' is unbound
Empezando con Erlang
Para un nuevo producto que estamos desarrollando en Openshine, vamos a necesitar desarrollar un servidor. Hemos estado viendo que tecnologías nos podrían servir y al final nos hemos decantado por Erlang. Por lo que ahora estoy aprendiendo a programar con este lenguaje.
Erlang es un lenguaje funcional, es bastante diferente a lo que he visto hasta ahora. Lo que más choca al principio es la asignación única de variables. Variables que no pueden variar.
A continuación pongo unas cuantas fuentes que me están siendo de utilidad para profundizar en el tema:
http://www.erlang.org/doc/getting_started/users_guide.html
http://learnyousomeerlang.com/content
y principalmente el libro "Programming Erlang" de Pragmatic. Yo tengo la versión impresa pero he podido comprobar que está por la red en descarga directa.
En delicious voy almacenando todos los enlaces que encuentro y considero interesantes:
http://www.delicious.com/pvieytes/erlang
No voy a crear una serie completa de posts sobre Erlang y ni mucho menos un tutorial, por la red los hay muy buenos, pero lo que si tengo intención de hacer es ir publicando pequeñas "notas" con trucos o funcionalidades, básicamente a modo de recordatorio.
Erlang es un lenguaje funcional, es bastante diferente a lo que he visto hasta ahora. Lo que más choca al principio es la asignación única de variables. Variables que no pueden variar.
A continuación pongo unas cuantas fuentes que me están siendo de utilidad para profundizar en el tema:
http://www.erlang.org/doc/getting_started/users_guide.html
http://learnyousomeerlang.com/content
y principalmente el libro "Programming Erlang" de Pragmatic. Yo tengo la versión impresa pero he podido comprobar que está por la red en descarga directa.
En delicious voy almacenando todos los enlaces que encuentro y considero interesantes:
http://www.delicious.com/pvieytes/erlang
No voy a crear una serie completa de posts sobre Erlang y ni mucho menos un tutorial, por la red los hay muy buenos, pero lo que si tengo intención de hacer es ir publicando pequeñas "notas" con trucos o funcionalidades, básicamente a modo de recordatorio.
Suscribirse a:
Entradas (Atom)