ya! library for go routines in JavaScript (Next, ES6)

ya! is a go-routine implementation in ES6 using generators and promises, inspired by task.js

A month ago I discovered Go language, a kind of modern C designed by Robert Griesemer, Rob Pike, and Ken Thompson inside Google and after passing the online tutorial I ended fascinated by go-routines and channeled communications.

In Go language a go-routine is any function launched by using the go keyword.  Unlike co-routines, a go-routine has no explicit control over its execution and it is a runtime scheduler who is in charge of pausing and resuming routines. A go-routine is a green thread ruled by the go runtime.

In Go, communications between go-routines are made explicit by using channels (the communication model is based on Communicating Sequential Processes). A channel can receive or send data. When a go-routine is sending data to a channel but nobody is waiting for that data in the same channel, the go-routine blocks until someone consumes the data. The same happens when getting data and there is no data available.

Generators in JavaScript in addition to a simple scheduler enable this kind of collaboration and ya! is a library to emulate Go go-routines related features such as go-routines themselves, channels (buffered and unbuffered) and special Go statements like select (range is coming!).

You can find the library in bower under the name of ya.js and read the docs or see the annotated source on GitHub.

As an extra, here you have the go version of the dinning philosopher problem and the JS version using ya!

Seguir leyendo «ya! library for go routines in JavaScript (Next, ES6)»

Introducing AutoBlog

One of the first things I want to do always I publish some new project on GitHub is to provide a development diary / (b)log with the latest updates or feature additions but I have not found the proper tool yet. I’ve been told about Jekyll but it requires more effort than I’m willing to do (although it require very low effort). I want something quick and easy: with the minimum server or client support. Something to do with a simple text editor.

So I created AutoBlog. And I have all the documentation, setup, and feature list in an AutoBlog supported static site you can check for inspiration and example. Of course, this is only a beta and more features are coming but you know, step by step.

Seguir leyendo «Introducing AutoBlog»

μTask

Bea's kanban in English
Bea’s kanban in English

Os presento μTask, una pequeña aplicación para gestionar tareas usando un panel kanban en fase alpha. Últimamente me ronda mucho por la cabeza las aplicaciones con modelos representables en texto plano. Como todo.txt, por ejemplo.

μTask es un pequeño parser de una notación de mi invención para gestionar tareas, pensada para interacturar con los comandos estándar cortar y pegar.

Tenéis un ejemplo de una tarea aquí mismo:

To do:
  Task 153: LMDL fixes

Y una escueta lista de características:

  • Tareas con identificador, descripción y detalles
  • Dos espacios para definir tareas: uno para reflejar el estado del kanban y otro para clasificar y detallar las tareas
  • Clasificaciones por temas y colores
  • Expresa el progreso de una tarea y su fecha límite

Podéis encontrar más información así como un lugar donde dejar vuestros comentarios en la página del proyecto:

http://unoyunodiez.com/proyectos/mtask/

El tutorial en GitHub:

https://github.com/lodr/mtask/#%CE%BCtask

ask.js

Bueno, hace tiempo que no hay actividad por el blog pero vuelvo para anunciar un nuevo proyecto que acabo de hacer entrar en fase alpha a la espera de que los usuarios me den algo de feedback.

Su nombre es ask.js y se trata de un módulo JavaScript que permite hacer búsquedas en un array de objetos utilizando la sintaxis de consultas de MongoDB.

No sé si conoceis un poco MongoDB pero se trata de una base de datos NoSQL orientada a documentos, documentos BSON, de hecho. BSON es una implementación binaria de JSON. Realizar búsquedas en Mongo se hace mediante una suerte de «objetos parciales» del tipo { name: 'Anne', 'address.city': 'Madrid', ...} aunque también admite restricciones complejas por campo como en { manufacturer: { $in: ['Ford', 'Munstang', 'Land Rover'] }, year: { $gte: 1990, $lt: 2000} }.

Una vez añadidos ask.js, puedes hacer ask.mongify() sobre un array para extender el mismo con un nuevo método find() que acepta, hasta el momento, las siguientes características de las búsquedas de MongoDB:

  • Restricciones por valor: { field: value }
  • Expresiones JS en cláusulas $where
  • Subobjetos, elementos parciales: { 'field.subfield': value } y $elemMatch
  • Comprobación de existencia $exists
  • Restricciones por expresión regular: { field: /value/i } y $regex
  • Operadores de comparación <, <=, >= y >
  • Operadores lógicos $or, $and y $nor
  • Módulo $mod
  • Comprobación de tipo $type
  • Operadores de inclusión $in, $nin y $all
  • Metaoperador $not
  • Comprobación de tamaño $size
  • Comprobación de desigualdad $ne

Además, es mi primer proyecto siguiendo TDD utilizando Jasmine como framework de testing. Algún día os hablaré de Jasmine y de cuánto me gusta su API.

Seguir leyendo «ask.js»

Un año en Telefónica I+D

Pues así de sencillo: un año en Telefónica I+D. Y cumpliendo los 6 años trabajando.

Y ha sido un año bastante intenso, vaya. Comencé programando en Python y he acabado con JavaScript. Pero no me quejo. Al contrario, estoy muy contento con mi proyecto actual: OWD y B2G (sí, sí, con Mozilla y Telefónica I+D. Ya le dedicaré un post sólo a él, lo prometo).

Durante este año he tratado infructiosamente de sacarme un máster (ojo, que aun queda septiembre, x) y me he independizado (dos veces que no es poco). He conocido a gente muy interesante en charlas y eventos y he tenido la oportunidad de trabajar en tareas realmente desafiantes que han mejorado mis conocimientos y expandido mis horizontes.   Me ha ido bien. De hecho, visto cómo está el país, me ha ido de p*t* madre. Pero mal de muchos, consuelo de bobos y más cuando uno de esos muchos también soy yo.

Política aparte. ¡Qué duro es cambiar! Un comentario de una compañera me indujo a la siguiente reflexión. Ella dijo que le daba pereza cambiar de proyecto porque había que demostrar lo que vales de nuevo. Ahora que me he cambiado puedo perfilar que realmente, te tienes que demostrar que vales. He pasado unos días muy intranquilo, porque el proyecto actual es inmenso, las reuniones son en inglés, recibo 30 correos diarios y casi me ahorco más de una vez con Git. Y encima me sentía un lastre para los compañeros que me proporcionaban ayuda preguntando todo el rato y discutiendo lo que no veía del todo claro o lo sobre lo que no estaba del todo de acuerdo

Pero después de superar la tarea entre manos, que ha sido dura y no en una semana especialmente tranquila, me doy cuenta de que sigo valiendo y eso me alegra y renueva mis energías. Luego insisto, estoy muy contento con el curro.

En fin, me permito felicitarme y desearme a mi mismo un mejor nuevo año. Para terminar, decir que además este proyecto está lleno de viajes chulos o al menos, oportunidades. Ahora tendremos una semana desarrollando con la gente de Mozilla codo con codo y para Agosto quizá un viaje a Brasil.

Nuevo diseño y más proyectos

Bueno, pues como se ve a simple vista, he estado entretenido cambiando un poco la apariencia de la página porque la anterior me parecía algo pequeña y recargada. También he creado un logo que espero poder tener pronto en forma de tarjeta de presentación para enseñarlo.

Además, he añadido nuevos proyectos a mi haber que podréis encontrar tanto en la página dedicada a tal efecto como en mi perfil en github.com.

Espero que los cambios sean de vuestro agrado y lo que espero aún más es volver a las andadas con artículos técnicos de interés.

¡Hasta pronto!

z-scheme

Llevo un tiempo desaparecido, lo sé. Pero no ha sido en balde. Me ha dado por aprender Perl (sigo en ello) y he comenzado con un proyecto cuyo desarrollo me gustaría compartir.

La idea lleva rondándome la cabeza durante un tiempo y consiste en desarrollar un esquema de programación en C con el que parezca que manejas objetos clásicos de la POO pero manteniendo la legibilidad de los programas imperativos (ver paradigmas de programación para más información).

Implementarlo pasa por definir un pequeño lenguaje propio que sería consumido por un traductor programado en Perl y encargado de traducirlo a C puro. Mi intención es mantener el código C lo más práctico y fácil de seguir posible. No pretendo reemplazar GObject ni competir con Vala o Genie que son intérpretes de lenguajes  como C# y Python a GObject, respectivamente.

Con práctico me refiero a que el programador debería poder continuar con el desarrollo del programa en su forma C, siguiendo el esquema planteado mientras que con fácil de seguir quiero decir que la depuración no debería resultar compleja puesto que el esquema a de resultar intuitivo.

¿Por qué este nombre? Bueno, Z ya estaba pillado (sí, también es un lenguaje de programación) pero me gusta por su relación en español con la letra C. Así pues le añado la palabra scheme para remarcar el hecho de que no es un lenguaje, sino un esquema de programación.

Y hasta aquí la presentación. En breve, más.