Estaba buscando actividades, para asignarles como “Bono” a los estudiantes de algorítmica y programación, y recordé blockly, que permite programar usando elementos visuales (como armar un rompecabezas). Blockly permite generar código en los lenguajes Javascript, Dart, Python o XML. La filosofía del lenguaje de Blocky lo hace perfecto para nuevos programadores.

Mi solución al laberinto (Demo de blockly)
Una solución para el Laberinto

El editor de Blocky es libre (bajo licencia Apache) e implementado en Javascript, lo que permite incluirlo fácilmente en cualquier proyecto web, sin requerimientos especiales en el lado de servidor. Después de hacer checkout y copiarlo al servidor, podemos usar el playground que se encuentra en los test.

Por defecto tiene un conjunto de “bloques” bastante completo, que incluye: Estructuras de control, manipulación de texto, manejo de variables, listas, expresiones aritméticas, expresiones lógicas, definición y llamada a procedimientos. Si necesitamos algo que no está definido, el lenguaje se puede extender fácilmente. Por ejemplo, si quiero que puedan mostrar un mensaje al usuario (Lo que en JavaScript sería un alert…) puedo definir el bloque diciendo en qué categoría se mostrará, que valores tendrá como entrada, si retorna o no un valor, entre otras cosas. Una vez el bloque está definido es necesario implementar los generadores para los lenguajes que queremos soportar (para las funciones incluidas, Blockly incluye generadores para JavaScript, Dart y Python).

if (!Blockly.Language) {
  Blockly.Language = {};
}
Blockly.JavaScript = Blockly.Generator.get('JavaScript');
Blockly.Dart = Blockly.Generator.get('Dart');
Blockly.Python = Blockly.Generator.get('Python');

Blockly.Language.alert = {
  // Bloque para mostrar un mensaje al usuario (alert)
  category: 'Commands',
  helpUrl: 'http://www.christian-ariza.net/techstuff/Blockly#alert',
  init: function() {
    this.setColour(290);
    this.appendTitle('alert');
    this.setPreviousStatement(true);
    this.appendInput('Mensaje', Blockly.INPUT_VALUE, 'MSG');
    this.setNextStatement(true);
    this.setTooltip('Muestra un mensaje (modal) al usuario');
  }
};

Blockly.JavaScript.alert= function (){
  var mensaje=Blockly.JavaScript.valueToCode(this, 'MSG',
      Blockly.JavaScript.ORDER_NONE) || '\'\'';
  console.log(mensaje);
  var code="alert ("+mensaje+");\n";
  return code;
}
Blockly.Dart.alert= function (){
  var mensaje=Blockly.Dart.valueToCode(this, 'MSG',
      Blockly.Dart.ORDER_NONE) || '\'\'';
  console.log(mensaje);
  var code="window.alert ("+mensaje+");\n";
  return code;
}
Blockly.Python.alert= function (){
  var mensaje=Blockly.Python.valueToCode(this, 'MSG',
      Blockly.Python.ORDER_NONE) || '\'\'';
  console.log(mensaje);
  var code="print("+mensaje+")\n";
  return code;
}

Definiendo estos elementos ya podemos usar el nuevo bloque:

Ejemplo usando el nuevo bloque "alert"
Ejemplo usando el nuevo bloque “alert”

El código generado sería:

JavaScript

var x;
var item;
function procedure(x) {
  item = x;
  alert ('Hola');
  alert (item);
}

procedure('Parametro X');

Dart

Para que funcione el alert en Dart, haría falta importar una librería que maneje DOM, ej #import(“dart:dom”), ese import no fue generado (No encontré como especificarlo…)

var x;
var item;
void procedure(x) {
  item = x;
  window.alert ('Hola');
  window.alert (item);
}

main() {
  procedure('Parametro X');
}

Python

x = None
item = None
def procedure(x):
  global item
  item = x
  print('Hola')
  print(item)

procedure('Hola mundo')

Si quieren seguir experimentando con Blockly pueden usar el “ambiente” que usaré en el curso, es básicamente el demo de generador de código, con el bloque alert que acabo de crear. La idea es ir agregándole nuevos bloques según sea necesario para alguna actividad en particular.

Si el experimento de los bonos es un éxito, el siguiente paso será que construyan una aplicación para Android usando el App Inventor,  puede ser para el último nivel del curso :P.

Hace ya un tiempo desde el último post y, para hacer a este un poco diferente, por primera vez los recomendados serán —únicamente— libros.

  • Empezaré por el que tengo más fresco en la memoria, lo terminé hace un par de días: La soledad de los números primos, de Paolo Giordano. Cuando escuché por primera vez el nombre del libro sentí curiosidad, pero cuando supe que el autor era un físico me convencí de que tenía que leerlo :P. Es un libro para solitarios, relata la vida y los encuentros de dos soledades que, como los números primos gemelos, están muy cerca pero no llegan a tocarse.  Es muy fácil identificarse con los personajes y sus circunstancias, detalladamente descritas.
  • El segundo recomendado es uno de mis favoritos: 1984 de George Orwell. Describe una sociedad reprimida, alienada, donde el sentido de la privacidad no existe. El gran hermano lo ve todo, lo sabe todo. No se puede evitar comparar esta realidad distópica con la nuestra. Una de las cosas que me parecieron más interesantes es la neolengua, y el control de la masa a partir del lenguaje.
  • José Saramago se ha convertido en uno de mis autores favoritos. Como recomendados, en esta ocasión, les dejo dos libros que se complementan, de hecho el segundo es la continuación del primero: Ensayo sobre la ceguera y Ensayo sobre la lucidez. Me gusta más el primero, pero los dos dejan ver rasgos de la sociedad usando como pretexto situaciones extremas que las resaltan.
  • Saliendo un poco de las novelas: El ladrón de cerebros, un libro de divulgación científica de Pere Estupinyà. Está escrito de una manera amena, no tiene un orden enciclopédico y los avances son contados a través de historias —y teniendo que “incluso una mala historia es preferida sobre grandes estadísticas” (Thomas E. Kida) — que hacen la lectura bastante entretenida. Los temas son variados, desde genética hasta cosmología, pasando por psicología, neurociencia, cambio climático, entre otros.

Para no perder la costumbre, les dejo algo de música para acompañar a los recomendados, Maldita Dulzura de Vetusta Morla:

Por el momento termina, por mi parte, la primera entrega de libros recomendados en el blog, me encantaría recibir recomendaciones en los comentarios. 🙂

Después de un tiempo, más largo de lo que quisiera, vuelven los recomendados de la semana:

Montt en dosis diarias

  • Existen múltiples servicios, como Dropbox, que permiten la sincronización entre diferentes equipos/plataformas y la nube. Cubby es un nuevo servicio de este tipo con algunas características interesantes, como el poder sincronizar directamente desde los dispositivos sin ocupar espacio de la cuota de almacenamiento online y poder sincronizar cualquier carpeta (sin moverla a una ubicación específica). (vía microsiervos)
  • ¿Necesitas un CMS?¿Eres el único autor o hay un grupo pequeño de autores con publicación centralizada?¿el desempeño es el factor más importante?. Si la respuesta a estas preguntas es sí, entonces Pelican es lo que necesitas. En SIGT tenemos una explicación más a fondo de su funcionamiento, ventajas y desventajas. (one size doesn’t fit all)
  • En tecnología el no adaptarse puede ser muy costoso. Esta es una lección que está aprendiendo RIM de la forma más difícil, Antonio Ortiz –en error500 y en Xataka– y Manu Mateos –en Genbeta– analizan la situación y el posible futuro de RIM con la reestructuración que se avecina.
  • ¿Cansado de memorizar múltiples contraseñas? Puede que eso pronto se convierta en cosa del pasado gracias a la autenticación cognoscitiva.

Para terminar los recomendados de la semana los dejo con un par de cortos de Bird Box Studio:

Ice cream:

Sketchy Guard:

Nota: Este post existe, como borrador, desde enero 30 del 2011. ¿Cómo debería continuar?

Fría y oscura, llena de soledades. No es sólo la descripción de la ciudad en la que vive, es también como se siente después de lo que ha pasado.

Todo comenzó con una decisión que, como muchas otras, llevaba consigo más consecuencias de las esperadas. Un jueves soleado reflejaba su estado de animo, el clima de la ciudad, en los momentos importantes de su vida, parecía conectarse con su alma. Un primero de febrero. Era la última semana de vacaciones y en realidad deseaba que no se acabaran, no porque no quisiera volver a la universidad sino porque tenía la seguridad que este día encontraría algo que necesitaba aunque no sabía bien que era y quisiera disfrutarlo por más tiempo.

La mañana pasó lentamente, esperaba con ansias que llegara la noche. Limpió y organizó la casa para dedicar el resto del tiempo a prepararse, no solía ser vanidosa pero se sentía emocionada por su compañía. No sabía mucho de él y en realidad nunca lo supo, pero el halo de misterio que lo envolvía le atraía en demasía.

La cita era en un sitio neutral, un pequeño restaurante en el centro de la ciudad, llegó un poco temprano y tomó una mesa al lado de la ventana. Él llegó puntual, algo desconcertado por la invitación, solía leer muy bien a las personas y era algo que no esperaba de ella, se acercó lentamente a la mesa. Hablaron durante un par de horas de temas irrelevantes, la verdadera conversación fue sin palabras.

Tan solo han pasado algunos  meses desde esa noche, y ahora lo que siente es completamente opuesto a lo que sintió al salir del restaurante.

“De vez en cuando es bueno
ser consciente
de que hoy
de que ahora
estamos fabricando
las nostalgias
que descongelarán
algún futuro”
–Conjugaciones, 8(previsión), Mario Benedetti

El balance del 2011 es, en general, positivo:

  • Grado de la maestría. Un hito importante que encierra muchas cosas aprendidas, experiencias, el trabajo en una tesis en un tema que me apasiona, compañeros y amigos conocidos en el proceso.
  • Compartir, al menos un poco, con personas admirables. Charlas tan interesantes como constructivas.
  • Trabajar en proyectos fascinantes. Entre otros: Mi tesis 🙂 —MagosCloud–, el proyecto de calidad de experiencia para un operador celular, el proyecto de Juego Gerencial (aunque mi participación sea muy pequeña en ese gigante) y varios proyectos Web. 
Quedan algunas “lecciones aprendidas”, cosas que quiero mejorar en este nuevo año: 
  • Pasar más tiempo con los amigos. Este va ligado con el tercer elemento de la lista, me gustaría tener más tiempo para dedicarle a quienes son importantes para mí y conocer mejor algunas personas que están empezando a serlo. 
  • Mejorar la forma de presentar en público. Manejar los nervios, principalmente. El valor de los trabajos muchas veces es medido por la calidad de la presentación, un buen trabajo puede no verse reflejado en la evaluación si la presentación no tiene un buen nivel. He aprendido varias cosas para mejorar… pero sería bueno ponerlas en práctica con más frecuencia. 
  • Aprender a manejar mejor el tiempo. En algunas semanas de inspiración el tiempo alcanza para todo. El potencial está, con algo de disciplina espero poder convertir cada vez más semanas en “semanas de inspiración”.
Sólo queda esperar qué nos depara este 2012, por el momento se ve lleno de retos y oportunidades.

Los recomendados de esta semana (¿quincena?… :p), cargados de reflexiones, servicios y algo de música. 

  • La discusión acerca de la calidad de la educación que se ha iniciado a raíz de la carta de renuncia de un profesor de comunicación, ha sido una de las más interesantes últimamente en la blogósfera colombiana. De entre la multitud de reacciones me gustaría rescatar el artículo de Paola Rubio Ferrer,  “El medio es el aprendizaje“, que aprovecha el hecho para llevar la discusión un poco más allá.
  • La misma mente que ideó los amados CAPTCHA, y reCAPTCHA, nos presenta ahora DuoLingo, una propuesta interesante para aprender idiomas mientras se ayuda a traducir parte de la información disponible en Internet.  
  • No estoy seguro que sea el corto más corto del mundo, pero si no lo es, seguro está cerca: Vampire Bash.
  • ¿Alguna vez te has preguntado cuanto sabe Facebook sobre ti? Este artículo sirve tal vez para hacerse una idea.
  • ¿Cómo es la casa de tus sueños? Con Mima puede que esté más cerca de lo que imaginas. Y si la casa puede ser prefabricada, ¿por qué no la oficina?
  • En el mundo de los negocios la ley es adaptarse o morir. Esto es algo que aprenderán los negocios tradicionales tarde o temprano, ya empiezan a convertirse en escaparates involuntarios de las nuevas alternativas.
  • Algunos comportamientos tradicionalmente se han catalogado como humanos, que nos diferencian de los demás animales. En Veo Verde nos muestran cómo las ratas pueden ser aún más compasivas y empáticas que muchos seres humanos.
  • Ya llega navidad, ¿compraste los regalos para los más pequeños de la casa?, en compradicción dan algunas sugerencias por menos de 24 euros, incluso hay uno que me gustaría para mí. xD
  • Para terminar, una canción que he escuchado una y otra vez en los últimos días—es un poco triste—, de Mélanie Pain, Ignore-moi:

Después de un tiempo sin recomendados vuelven recargados :), y por primera vez separados por categorías :P…

Desarrollo Web

Permanent link to this comic: http://xkcd.com/979/
Wisdom of the Ancients
  • Muchas veces es evidente que un diseño fue hecho por un desarrollador, en especial cuando no lleva mucho tiempo trabajando en la Web. La presentación Design for developers viene a darnos algunas pausas útiles, en especial en cuanto a usabilidad (la palabra es criticada por algunas personas y prefieren el uso de “facilidad de uso” aunque para mí encierra un significado más amplio).
  • Muchas veces necesitamos desarrollar rápidamente aplicaciones web. Bootstrap, de Twitter, es un framework para front-end que nos permite tener rápidamente formularios, tablas, botones, estructura, entre otras cosas usando un pequeño css de sólo 47KB (que se convierten a 6KB si se usa compresión con gzip).
  • Más que en desarrollo debería ir en infraestructura, pero para no crear otra categoría… 😛 Enrique Dans habla sobre por qué demasiado mantenimiento en los datacenters es malo.

Internet

Música

Varios

— Todo lo que no cabe en otra categoría, pero vale la pena revisar 😛

Esto es todo por esta entrega, quedan varios enlaces en el tintero que vendrán en la próxima, que espero no sea tan lejos. 

Los recomendados de la semana llegan mezclando algo de reflexión, comics, social media, entre otras cosas:

  • ¿Por qué marchan los estudiantes?, en contravía, expone los  argumentos de los estudiantes, frente a los del gobierno, sobre la ley 30. Entre otros recursos, la vicerrectoría de sede Bogotá de la universidad Nacional de Colombia ha puesto a disposición del público una recopilación de documentos sobre la reforma para su discusión. 
  • El poyecto “Rooftop” busca rediseñar los trajes de los superheroes de toda la vida. Reciben permanentemente contribuciones, que únicamente deben cumplir sus guidelines.
Project : Rooftop – P:R Redesign : Michelle Sciuto’s Harley Quinns!
Con esto terminan los recomendados de la semana, para cerrar los dejo con el último vídeo de Simon’s Cat  😆