Archive for category Programación

Recolectando Datos de Internet

La cantidad de datos en Internet es enorme. Pero que los datos existan no significa que podamos obtener un beneficio de ellos inmediatamente. Se necesitan herramientas para obtenerlos y analizarlos. En este relanzamiento del blog de Ingeniería Simple, vamos a revisar algunas técnicas sencillas y útiles para obtener datos de Internet, analizarlos y convertirlos en información y conocimiento que tenga valor para todos.

Crear hoja electrónica en Google Drive

Paso 1: Crear hoja electrónica en Google Drive

Las hojas electrónicas modernas como Microsoft Excel, Google Spreadsheet, o LibreOffice Calc, incluyen ambientes de programación integrados que son especialmente adecuados para esta tarea. Claro, si la cantidad de datos es muy grande entonces puede ser necesario pasarlos a una base de datos especializada, pero para lo que nos proponemos hacer ahora el uso de VBA en Excel o JavaScript en Google Apps o en Calc será suficiente.

Empezaremos recolectando tweets de una cuenta de Twitter y colocándolos en una hoja electrónica de Google. Al final tendremos una hoja electrónica en la que se escribe el usuario de la cuenta de Twitter en la primera celda y con una opción de menú se obtienen los últimos 20 tweets de esa cuenta.

Para recolectar los tweets se necesita leer la página del usuario en Twitter, limpiarla de otros contenidos, y escribirlos de regreso en la hoja electrónica debajo del nombre del usuario. El código que lo hace debe ir dentro de una función que para ser ejecutada debe llamarse al seleccionar una opción de menú.

Así que el primer paso es crear una hoja electrónica en Google Drive ponerle un nombre adecuado y acceder al editor de scripts. La secuencia de imágenes incluida en este artículo muestra cómo hacer esto.

Cambiar nombre a hoja electrónica

Paso 2: Cambiar o poner nombre a hoja electrónica

Ingresar al editor de scripts

Paso 3: Ingresar al editor de scripts

El tipo de script es el de hoja electrónica, solo lo pregunta una vez

Paso 4: El tipo de script es el de hoja electrónica, solo lo pregunta una vez

Cambiar el nombre del proyecto

Paso 5: Cambiar el nombre del proyecto, es importante para saber siempre dónde se codifica

Código que se ejecuta al abrir la hoja electrónica

Paso 6: Revisar el código que se ejecuta al abrir la hoja electrónica y que Google incluye automáticamente

La función onOpen se ejecuta automáticamente cada vez que se abre el documento de hoja electrónica, así que es el lugar ideal para realizar ajustes iniciales como agregar una opción de menú que permita listar los tweets de un usuario.

Es necesario modificar el código de la función onOpen para que la opción de menú luzca mejor e indique de qué se trata esta funcionalidad:

function onOpen() {
 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 var entries = [{
 name : "Read tweets",
 functionName : "readTweets"
 }];
 spreadsheet.addMenu("Tweet Collector", entries);
};

El código de la función readTweets() busca en la celda A1 el nombre del usuario para leer sus tweets y si no lo encuentra entonces lo pregunta directamente, luego llama a la función que recupera los tweets del usuario, de la que recibe un vector con la lista de tweets, que recorre poniéndolos en celdas sucesivas debajo del nombre de usuario en la hoja electrónica, queda así:

function readTweets() {
  var tweetCell = SpreadsheetApp.getActiveSheet().getRange("A1");
  var TwitterUser = tweetCell.getValue();
  if (!TwitterUser) {
    TwitterUser = Browser.inputBox(
      "Twitter User", 
      "Enter the Twitter username to read tweets", 
      Browser.Buttons.OK_CANCEL);
    if (TwitterUser == "cancel")
      TwitterUser = null;
    else
      tweetCell.setValue(TwitterUser);
  }
  if (TwitterUser) {
    var arrTL = readTwitterTL(TwitterUser);
    for (var i = 0; i < arrTL.length; i++)
      tweetCell.offset(i+1, 0).setValue(arrTL[i]);
    tweetCell.activate();
  }
}

Como se ve la función clave es finalmente readTwitterTL que recibe como parámetro el nombre del usuario de Twitter. Esta función, con comentarios en cada paso para ayudar a su interpretación es como sigue:

function readTwitterTL(fromUsr) {
  // Obtener el texto de la página de Twitter del usuario
  var TLText = UrlFetchApp.fetch("https://twitter.com/" + fromUsr).getContentText("UTF-8");
  
  // Acumular todos los tweets en allTweets
  var allTweets = "";
  
  // Cada tweet ocurre dentro de un "p" clase "ProfileTweet-text js-tweet-text u-dir" 
  while (TLText.indexOf("ProfileTweet-text js-tweet-text u-dir") > -1) {
    TLText = TLText.substr(TLText.indexOf("ProfileTweet-text js-tweet-text u-dir")-10);
    // Leer una línea a la vez en oneLine hasta llegar a marca /p
    // acumulando el texto en fullTweet
    var oneLine = "";
    var fullTweet = "";
    do {
      oneLine = TLText.substr(0,TLText.indexOf("\n"));
      TLText = TLText.substr(oneLine.length+1);
      fullTweet += oneLine.replace("\n","");
    } while (oneLine.indexOf("</p>") == -1);
    // Limpiar tweets de código html
    allTweets += fullTweet.replace(/<[^<>]*>/g,"").replace("&nbsp;","") + "\n";
  }
  // Devolver todos los tweets en un vector
  allTweets = allTweets.substr(0,allTweets.length-1);
  return(allTweets.split("\n"));
}

El resultado visto en la hoja electrónica llamando al código desde la opción de menú luce como se muestra en la siguiente imagen:

Lista de tweets generada por el código

Lista de tweets generada por el código para el usuario @IngSimple

Probablemente el procedimiento que se ha mostrado aquí no es el que Twitter mismo aconsejaría para leer las líneas de tiempo pues tiene la enorme desventaja de basarse en una característica del código HTML con el que se devuelven los resultados que puede cambiar de un día a otro y volverlo obsoleto, sin embargo ilustra muy bien dos puntos importantes:

  1. Recolectar datos de Internet a veces requiere algo de ingenio para crear una solución que funciona de momento (hay que “hackear”)
  2. La utilidad de las herramientas de recolección de datos puede ser tan efímera como la de los datos mismos

Lo que subsiste es el principio: los datos están ahí y pueden recolectarse accediendo al código HTML que los presenta. En próximas entregas analizaremos otras formas de acceso a esos mismos datos.

La hoja electrónica desarrollada en este artículo se encuentra en el siguiente enlace:

https://docs.google.com/spreadsheets/d/1l34k75EGt3iEMhNgmSQ5uEe60nu_4gZoAU5fFAzgFp8/edit?usp=sharing

No Comments

Experimentos con Alice 3.0 Beta

Logo de Alice 3.0.3.2.0 Beta

La nueva versión de Alice se encuentra todavía en pruebas beta

Alice 3.0 Beta es la versión de la popular plataforma de programación de animaciones en 3 dimensiones que el equipo de Wanda Dan está preparando y que seguro dentro de poco estará lista para liberarla.

Animación de una cara parlanchina con formas básicas realizada en Alice 3.0

Pero mientras se libera hay que probarla. Y eso es precisamente lo que he estado haciendo en estos días, entre otras razones porque di una conferencia sobre Alice y Scratch en el reciente FLISOLen la ciudad de Guatemala.

Esta versión beta de Alice tiene estas nuevas características, entre otras:

  • Interfaz de usuario completamente rediseñado y que puede cambiarse a diferentes idiomas incluyendo Español.
  • Mayor flexibilidad para ejecutar procedimientos de configuración.
  • Inclusión del bloque “do in thread” para ejecutar bloques de código en su propio hilo de ejecución. Para el usuario no técnico esto podría verse como una versión mejorada del bloque “do together” que de todos modos sigue existiendo.
  • Exportar la animación a película en formato .mov
  • Posibilidad de publicar la animación en YouTube desde el mismo IDE.

Todo esto podría sonar un poco técnico, y de hecho, hay varias mejoras también en el modelo de programación orientado a objetos que Alice utiliza. Pero no se pretende en este momento hacer una revisión técnica detallada sino dar una idea de lo que presenta para animar a los entusiastas a adoptar la nueva versión.

Animación de vehículo todo terreno que explota de vez en cuando realizada en Alice 3.0

Como experimento se desarrollaron 2 proyectos: una cara parlanchina basada en formas geométricas elementales y un vehículo todo terreno que de vez en cuando explota. Ambos están ya publicados en YouTube.

Debo decir que se trató de un experimento agradable al punto de que creo que será difícil retomar la versión 2.2 luego de usar la versión 3.0, más bien parece que vale más la pena migrar los proyectos antiguos hacia la nueva versión ya que no es posible de momento cargarlos directamente en la más reciente.

Es posible prever que la funcionalidad de subir los vídeos de las animaciones directamente a YouTube desde Alice hará más popular la herramienta y seguro veremos una buena cantidad de nuevas animaciones de Alice. Compartir los fuentes de una forma sencilla sigue siendo un problema.

Próximamente estaremos publicando los fuentes de estos proyectos y otros más en Alice 3.0 en nuestra sección de Alice.

6 Comments

Scratch y Alice en Villa de los Niños

Hace algunos meses un buen amigo escribió en un foro virtual pidiendo apoyo para un colegio que funciona en la ciudad de Guatemala. Lo que necesitaban era implementar programas educativos especializados en tecnología ya que disponen de excelentes instalaciones y equipos, lo mismo que maestros muy motivados y capaces, pero buscaban algo innovador.

Bastó cruzar unos cuantos mensajes de correo electrónico para empezar a planificar un proyecto educativo que involucrará los lenguajes de programación Scratch (ver también Scratch en Ingeniería Simple) y Alice (ver también Alice en Ingeniería Simple) unas cuantas visitas más al colegio y el proyecto se puso en marcha primero capacitando a docentes en el uso de Scratch y Alice tanto para programar animaciones como para impartir clases con ellos. Es necesario que los profesores tengan cierta fluidez en el uso de los lenguajes de otra forma su ejercicio docente puede ser menos efectivo.

Existe abundante material ya preparado para enseñar Scratch, de hecho el MIT ha puesto en línea un sitio completo dedicado a apoyar a los docentes y que contiene también recursos en Español. Otras iniciativas en Español incluyen:

En el caso de Alice los recursos no son tan abundante con una excepción sobresaliente: el sitio y material desarrollados por el Grupo de Modelado y Realidad Virtual – GMRV – de la Universidad Rey Juan Carlos de España. El GMRV se dio a la tarea de construir una versión en español de Alice a la que han nombrado Rebeca y que está disponible para descarga tanto en ambientes Windows como MacOS.

Armados con todo este cúmulo de materiales como referencia y la perspectiva de empezar clases en el siguiente ciclo lectivo, estamos planificando la forma en que se utilizará Scratch y Alice para enseñar animación por computadora – y no estrictamente programación de computadoras – a chicos de entre 14 y 17 años. Las sesiones con los docentes han sido muy enriquecederas.

El colegio es Villa de los Niños, está ubicado en la zona 6 de la ciudad de Guatemala y forma parte de una red de instituciones educativas a cargo de la congregación religiosa Hermanas de María. Aunque no cuenta con una página Web como tal es posible encontrar algunas refencias noticiosas, de información general y blogs.

Se trata de un proyecto que nos llena de entusiasmo y del que esperamos poderlos mantener informados.

Presione la banderita verde para ver la animación desde el principio.

Una animación hecha con Scratch.
Debe tener un navegador que soporte Java.

No Comments

Una historia de tres juegos: programación en lenguajes para niños (IV de IV)

Primer intento en SmallBasic. Se puede jugar controlando el movimiento del corredor con las flechitas del teclado. La versión local funcionaba bien, al subirla note ciertos fallos

Small Basic es un lenguaje de reciente invención. En este caso me refiero a la versión de Microsoft, ya que no hay que confundirlo con otro Small Basic que existe y que está disponible en Sourceforge.

La gente de Microsoft está haciendo un excelente trabajo en el desarrollo de este producto, con una buena idea en mente: devolver la diversión a la programación (Microsoft Small Basic puts the “fun” back into computer programming), pero hay que reconocer que todavía tiene camino por recorrer.

Small Basic no provee al programador con ninguna librería de imágenes prediseñadas, aunque es muy fácil cargar una imagen almacenada localmente o desde cualquier sitio de Internet con el objeto ImageList y luego mostrarla con el objeto Shapes. Se hace así:

CoPNG = ImageList.LoadImage("http://ingenieriasimple.com/smallbasic/Corredor01.png")
CoSh = Shapes.AddImage(CoPNG)

La primera instrucción carga la imagen y devuelve su nombre, que queda almacenado en la variable CoPNG, la segunda agrega la imagen cargada a la lista local de imágenes, la muestra en pantalla y devuelve un identificador de la imagen que queda almacenado en la variable CoSh.

De los tres lenguajes estudiados Small Basic es probablemente el menos intuitivo, las dos “fáciles” instrucciones recién listadas son un ejemplo. Pero una vez uno se ha familiarizado con los objetos disponibles, la verdadera diversión empieza, aunque no son pocos objetos, ImageList y Shapes son solo un par de una larga lista que incluye: Array, Clock, Controls, Desktop, Dictionary, File, Flickr, GraphicsWindow, File, Math, Mouse, Network, Program, Sound, Stack, Text, TextWindow, Timer y Turtle, además de los que el usuario decida agregar instalando complementos y para llegar a conocerlos hay que revisar la documentación que es muy buena.

Segundo intento en SmallBasic. Se corrigió la distancia a la que el corredor debe estar de los terrones para empezar a subir.

Además Small Basic provee al programador de “Intellisense” que es un sistema que en cuanto se empieza a escribir un comando, provee de ayuda inteligente, como complemento de la instrucción y sus parámetros, descripción del comando, ejemplos, etc. Sin eso la programación aquí sería más que complicada.

Siguiendo con el desarrollo del juego, procedí a preparar todas las imágenes que necesitaría para el programa. De un proyecto anterior tenía un archivo GIF animado de un corredor. El GIF almacena una imagen por cada etapa del movimiento, así que solo tuve que separar cada imagen para cargarla en el programa y luego mostrarlas y ocultarlas secuencialmente para dar la impresión de movimiento. El corredor jugaría el papel de la bolita de Rapid Roll, así que le programé movimiento permanente a la izquierda y derecha, controlado por las flechas del teclado y movimiento hacia abajo. Se dice fácil pero ¡vaya que no lo fue!

Cuando intenté poner en línea la primera versión descubrí que las imágenes GIF no funcionan y tuve que cambiarlas a formato PNG. La gente del foro de Small Basic me ayudó para ello y tengo que reconocer que están prestos a ayudar, lo cual es muy bueno. A ellos también les sirvió pues se enteraron que las imágenes GIF no funcionan y supongo que en alguna versión posterior lo arreglarán.

Small Basic provee un sistema de ayuda en línea llamado Intellisense

Small Basic provee un sistema de ayuda en línea llamado Intellisense con el que se facilita la programación

Decidí dibujar unos terrones triangulares para que jugaran el papel de las barras ascendentes de Rapid Roll. Luego les programé el movimiento permanente hacia arriba empezando desde una posición aleatoria en la parte baja de la pantalla, y luego moviéndose hacia arriba y al llegar al borde superior repiten.

Después agregué la programación para que el corredor se pare sobre los terrones y suba con ellos.

Parte de la dificultad de todo esto es que Small Basic no maneja simultaneidad, es decir no tiene instrucciones para ejecutar dos procesos simultáneamente, como Alice o Scratch. Lo más cercano es utilizar el evento Tick del Timer. Se le indica al Timer que emita un Tick cada 160 milisegundos (ese fue el número que mejor me funcionó) y se coloca todo el código que maneja el movimiento de todos los elementos en el manejador del evento. Nuevamente, se dice fácil pero…

El juego funcionó bien localmente pero al ponerlo en línea me encontré que se maneja con Silverlight (el producto de Microsoft que compite con Flash de Adobe) y tiene algunas idiosincrasias que me obligaron a modificar el código fuente local.

De los tres lenguajes usados encontré que Small Basic puede ser el más complicado, de hecho el juego quedó menos terminado en este lenguaje que en los otros dos. En todo caso, el experimento fue todo un éxito, aprendí, me divertí, saqué conclusiones  y me quedaron ganas de seguir, así que ¡a programar!

7 Comments

Una historia de tres juegos: programación en lenguajes para niños (III de IV)

T-Rex que sabe caminar, es decir, se le programó un método Walk

De proyectos anteriores en Alice – que se llaman “worlds” o mundos en la jerga propia del lenguaje – tenía un dinosaurio T-Rex al que le había enseñado a caminar, es decir, le había programado el método “Walk” y como había quedado muy bien decidí que esta versión del juego estaría ambientada en el tiempo de los dinosaurios. El T-Rex sería ahora “la bolita” de Rapid Roll, nuevamente estaría en perpetuo movimiento hacia la izquierda o derecha, controlado por las flechas del teclado y cayendo.

Alice difiere de Scratch en que implementa de una forma más avanzada la programación orientada a objetos lo cual permite mayor interrelación entre objetos, un objeto puede tener subobjetos (las patas y brazos del T-Rex son subobjetos por ejemplo) y desde un método en un objeto se pueden llamar métodos de otros objetos, consultar sus propiedades o llamar a sus funciones, hay un objeto principal al que jerárquicamente pertenecen todos los demás que es el llamado World, entre otras cosas.

Primer intento del juego. Aquí el T-Rex solo cae a menos de que esté encima de un cuadro que sube.

Para hacer que el T-Rex responda a las flechas del teclado hay que programarle un método y luego asignarlo al inicio del evento “While ← is pressed” y lo mismo para “While → is pressed”. De hecho el método es el mismo solo se le pasa un parámetro para indicar hacia dónde debe voltear.

En Alice no se pueden dibujar nuevos objetos así que usé el objeto más parecido a una barra que encontré y este fue una especie de plancha cuadrada. El T-Rex va cayendo y su única opción es buscar pararse en cada una de las planchas conforme estas suben. Como dije antes, los juegos no quedaron tan parecidos al modelo.

Como me había gustado el papel que juegan los tiburones en la versión de Scratch, decidí implementarlo también aquí solo que usé tres mosasaurios (saurios marinos verdaderamente temibles) que salen del mar hacia arriba buscando comerse al pobre T-Rex. El primero está presente desde el principio y el resto se van agregando conforme avanza el juego.

También agregué una gran perilla giratoria a modo de temporizador, que se ve en el fondo del paisaje más o menos donde se vería el sol al final de la tarde. Le toma 30 segundos dar una vuelta y cada vez que la da el juego avanza un nivel. Alice tiene una propiedad verdaderamente útil para esto de avanzar de nivel: el “speedMultiplier” del mundo, basta con incrementarlo en 1 y se aumenta la velocidad de ejecución.

Puede llegar a ser bastante difícil jugar este juego en los niveles más altos y con los tres mosasaurios presentes.

Segundo intento del juego. Aquí ya aparecen los mosasaurios que acosan al T-Rex

Por último, cuando un mosasaurio logra pescar al T-Rex se abalanza ferozmente sobre su cuello y se revuelven juntos en un final de mucha acción y con la cámara acercándose cada vez más. Esto mismo no se habría podido hacer en Scratch o habría costado mucho más.

Intenté colocar en línea esta versión del juego pero Alice no es muy amigable para ello. Si tienen la suficiente paciencia para configurar su computadora para correr animaciones en Java de 3 dimensiones (hay que bajar varios componentes) pueden verlo en la sección de Alice de Ingeniería Simple. También puse el fuente en línea y un video en YouTube para que puedan examinarlo mejor.

Entonces le tocó el turno a Small Basic. Les contaré cómo me fue con este lenguaje relativamente nuevo en el siguiente post.

No Comments

Una historia de tres juegos: programación en lenguajes para niños (II de IV)

Los programas en Scratch se forman con instrucciones que se acoplan unas a otras

Los programas en Scratch se forman con instrucciones que se acoplan unas a otras

Empecé programando en Scratch de MIT. Hay que recordar que en el MIT es donde trabaja Seymour Papert, el creador del lenguaje Logo y por ello de alguna forma Scratch se parece mucho a Logo, se puede decir que cada imagen en Scratch es como una tortuga de las de Logo y de hecho se comporta como tal.

Scratch viene con una extensa galería de imágenes listas para usar y además se pueden dibujar otras en una herramienta de dibujo incorporada. También es posible usar cualquier imagen de la computadora o bajada de Internet.

Empecé haciendo que el gato (que es la imagen que aparece al crear un nuevo proyecto) se colocara en el centro de la parte superior de la pantalla y de ahí se moviera permanentemente hacia la derecha o izquierda – controlado por las flechas del teclado – y hacia abajo, es decir nunca se está quieto. El gato sería “la bolita” de Rapid Roll pero sin opción a detenerse.

Luego agregué una barra horizontal de color azul y la programé para que se colocara en la parte de abajo en una posición aleatoria sobre el eje x y de ahí se moviera hacia arriba a una velocidad constante.

Aquí es donde las características de Scratch se empiezan a hacer evidentes. Cada imagen, que se llama “sprite” en inglés y “objeto” en español, tiene su propio espacio de programación totalmente independiente de los demás, la única opción de comunicación es enviar mensajes a todos con la instrucción “enviar a todos” (“broadcast” en la versión en inglés) con lo que se puede preparar un script en los otros objetos para que se ejecute cuando se recibe un mensaje particular.

Primera versión del juego

Primera versión del juego

Scratch provee al programador con instrucciones especiales que son “sensores” que sirven para evaluar condiciones como si una imagen está tocando cierto color, cual es la distancia hacia otro objeto, si está tocando un borde, etc. Usando estas instrucciones coloqué una condición al movimiento hacia abajo del gato, de tal forma que cuando estaba tocando azul (es decir tocando una de las barras que suben) en vez de caer sube a una velocidad ligeramente mayor a la de las barras. Con esto logré el efecto deseado de que el gato cae permanentemente a menos que esté sobre una barra azul.

Luego fue tan sencillo como copiar la barra azul cuatro veces y obtuve otras cuatro barras que se comportaban de la misma forma. Esta fue la primera versión que coloqué en línea.

Segunda versión

Segunda versión

Todavía no era un “juego” porque no había forma de “perder”. Entonces se me ocurrió agregar un mar que se bambolea en la parte de abajo, y cuando el gato llega al mar “se ahoga”, el gato debe evitar caer al mar porque al fin y al cabo a los gatos no les gusta el agua. Esta fue la segunda versión.

Pero aun faltaba un elemento más, algo que le diera emoción. Un tiburón saliendo del mar y subiendo con las fauces abiertas para tragarse al gato parecía buena idea, pero dos era todavía mejor. Uno de ellos aparece al principio del juego y el segundo se agrega 30 segundos después. Los tiburones se mueven un poco más rápido que las barras de forma resultan amenazantes para el gato. Agregué un efecto rápido de movimiento de los tiburones cuando “se comen” al gato, resultó divertido. Esta fue la tercera versión.

Versión final

Versión final

Al final me sentí muy satisfecho con el resultado. Pude haberle agregado un montón de cosas más, como un marcador, niveles, ¡más tiburones! Pero me conformé con subir las distintas versiones previas del juego al sitio de Scratch de donde quienquiera que desee agregarles funcionalidad puede bajarlas y trabajarlas, lo cual por cierto es algo grandioso de Scratch, uno pone sus proyectos en línea muy fácilmente y recibe comentarios de otros usuarios. Es una auténtica red social.

Además el experimento continuaba con Alice, tenía que hacer el mismo juego – o similar – con Alice. De eso les cuento en el próximo post.

3 Comments

Una historia de tres juegos: programación en lenguajes para niños (I de IV)

La Osborne I, CP/M, 1981

En una computadora como esta (Osborne, CP/M, 1981) aprendí a programar

Programar juegos de computadora puede sonar divertido pero para nada es trivial. Un buen juego es un excelente ejemplo de ingeniería simple: fácil de usar, divertido, entretenido pero con mucho esfuerzo y trabajo bien pensado como soporte.

La primera vez que intenté programar un juego fue cuando estaba en el bachillerato y aprendimos el lenguaje Basic para la Osborne, una de las primeras PC “portátiles”. Se trataba del famoso “tic-tac-toe” también llamado “equis y ceros”. Recuerdo que vi la película “Juegos de Guerra” (buenísima, un auténtico clásico de computadoras) y me impresionó porque se supone que usan el juego de Equis y Os para enseñarle a la computadora que no hay forma de ganar siempre, y por eso intenté programar ese juego. Ni qué decir que no funcionó, pero me hizo pasar muchas horas en el laboratorio del colegio.

La computadora jugando Tic Tac Toe en la película War Games

La computadora jugando Tic Tac Toe en la película War Games

Desde entonces no había vuelto siquiera a intentar programar un juego hasta que empecé a usar los lenguajes para niños Alice, Scratch y más recientemente Small Basic. Como parte de una pequeña investigación sobre esos lenguajes decidí que era una buena idea intentar hacer el mismo juego en los tres ambientes y resultó divertido y revelador.

El juego que elegí como modelo se llama “Rapid Roll” que juego en mi celular de vez en cuando y es sobre una bolita que va cayendo y uno debe hacer que aterrice sobre barras que suben de forma que no llegue nunca al suelo. El juego se va haciendo más rápido y se complica pero es bastante entretenido.

Claro que mis versiones no quedaron iguales y ni siquiera se parecen tanto al “Rapid Roll” original, pero algo que aprendí de esto es que uno disfruta mucho jugando los juegos que uno mismo programa, así que también fue un experimento divertido.

De la investigación puedo comentarles que los tres lenguajes usan paradigmas de programación ligeramente distintos. Alice es muy cercano a lo que conocemos como “orientado a objetos”, Scratch es un lenguaje procedural donde cada figura se programa independientemente y Small Basic utiliza objetos pero solo como un mecanismo para acceder a ciertos recursos: la pantalla gráfica es un objeto, lo mismo que la de texto, el sistema de archivos y no puede tener más de un objeto de la misma clase.

Alice y Scratch implementan muy bien los mecanismos de ejecución simultánea mientras que en Small Basic lo natural es que todo vaya a un solo hilo de proceso. Y todavía hay más, pero mejor paso a contarles cómo me fue y qué pude lograr, pero eso será en el siguiente post.

9 Comments

Reactos, el sucesor de Windows

 

El escritorio de ReactOS

El escritorio de ReactOS

Por Juan Manuel
Editado por Leonel

ReactOS (React Operating System) es un proyecto de código abierto para crear un sistema operativo compatible con aplicaciones y controladores de Windows en general. Esto significa que se podrá instalar en una computadora común y corriente y podrá correr todos los programas que le sirven a un usuario de Windows.

Parte de su código está basado en el proyecto Wine, que es un esfuerzo similar para implementar todo el API de Windows (Application Programming Interface, el conjunto de funciones que hacen correr los programas de Windows) en ambientes Linux, de forma que Wine también se beneficia de los avances de ReactOS.

La historia

La utilidad de los sistemas operativos de Microsoft es indiscutible. Sin embargo, el tema de las licencias – o la falta de ellas – siempre significó una dificultad más o menos importante. Las alternativas existentes nunca fueron totalmente compatibles y ni siquiera estaban ampliamente disponibles.

Por ello desde el principio siempre flotó en el aire la idea de un sistema operativo 100% compatible y 100% libre. Muchas personas sabían que esto era posible.

En 1996 un grupo de programadores comenzaron un proyecto llamado Freewin95 el cual consistía en implementar un clon de Windows 95 pero completamente libre, sin embargo éste atravesó por una serie de problemas cuando solo se había implementado la capa compatible con MS-DOS. Para 1997 el proyecto no había lanzado ninguna versión así que los miembros del proyecto coordinados por Jason Filby lo reiniciaron completamente y cambiaron el núcleo del sistema compatible con MS-DOS y de ahí en adelante lo basaron en uno compatible con Windows NT ya con el nombre actual (ReactOS).

El cambio de MS-DOS a Windows NT fue una buena idea ya que este último fue el primer sistema de Microsoft que no corría sobre DOS, de la misma forma en que las versiones más recientes – XP, Vista, etc. – tampoco necesitan más de DOS.

¿Clon de Windows?

Definitivamente que no. ReactOS es un sistema operativo compatible con Windows. Una importante diferencia es que no se trata de un sistema cerrado sino abierto (open source) en el que cualquier persona tiene acceso a revisar los fuentes en caso de errores o funcionamiento inadecuado, lo cual no sucede con su contraparte comercial de código cerrado.

También es importante tomar en cuenta que no se necesita ninguna licencia para instalar y ejecutar ReactOS.

Situación actual

Después de 10 años trabajando en el desarrollo del producto, ReactOS se encuentra actualmente en su fase de pruebas alfa, es decir, en pruebas que se realizan por usuarios en ambientes controlados por los desarrolladores. Las razones son varias, pero vamos a comentar dos como principales. Primera: el código del modelo que se está intentando copiar (Windows) es cerrado, de forma que no hay manera de revisar cómo ha sido implementado, el alcance de sus funciones y el comportamiento exacto de cada porción de código. Es como intentar emular una caja negra, el comportamiento debe ser igual pero la única forma de conseguirlo es probando qué resultados se obtienen para el mayor rango posible de entradas. Segunda: trabajar en un sistema operativo es una tarea increiblemente compleja y los programadores que la realizan ofrecen su tiempo de forma voluntaria sin ningún cargo, lo cual no significa que no estén comprometidos con el proyecto, pero no necesariamente es tu tarea prioritaria.

La primer versión de ReactOS vio la luz el 25 de enero de 2004 y la más reciente (0.3.11) el 16 de diciembre de 2009, se espera que pronto se llegue a la versión 0.5 ya considerada como beta, es decir, liberada para pruebas fuera de los ambientes controlados por los desarrolladores.

¿Desea probarlo?

Estudiantes, investigadores, centros educativos, laboratorios, etc., que deseen probar ReactOS pueden obtenerlo en su dirección oficial: http://www.reactos.org/ que contiene una sección de descarga. Se recomienda utilizar algún paquete de virtualización – como VirtualBox -, instalar una máquina virtual y trabajar en ella, de forma que cualquier fallo afecte lo menos posible.

Se puede seguir las instrucciones que se proveen aquí:

http://reactos.wordpress.com/2008/11/12/instalar-reactos-037-en-virtualbox-sobre-windowsxp/

http://reactos.wordpress.com/2008/11/15/instalar-reactos-037-en-virtualbox-sobre-windowsxp-ii/

Puede que el título de “sucesor de Windows” suene un poco ambicioso para ReactOS, pero en el fondo, y pensándolo un poco más allá de lo obvio, hay que reconocer que el modelo de software libre y abierto sobre el que se construye ReactOS bien puede ser el verdadero sucesor del modelo comercial detrás de Windows.

9 Comments

¿Qué son y para qué sirven las aplicaciones portables?

Por Juan Manuel

3 Instancias de IE de diferente versión corriendo al mismo tiempo

3 Instancias de IE de diferente versión corriendo al mismo tiempo gracias a que están disponibles como aplicaciones portables


Por aplicación portable o portátil en informática definimos a aquel programa o conjunto de programas que pueden ejecutarse en una computadora sin necesidad de realizar instalación alguna de sus componentes en el sistema de directorios del sistema operativo instalado.

Típicamente al instalar alguna aplicación por ejemplo Microsoft Office, debemos realizar una serie de pasos para tener el conjunto de programas que lo componen funcionando, como son:

1.- Tener a la mano el paquete o asistente de instalación del sistema de programas que componen Microsoft Office.

2.- Iniciar el instalador, ingresar la clave de instalación, seleccionar los programas que queremos instalar y ingresar la ruta donde queremos instalar el paquete de programas.

3.- Esperar a que el asistente copie todos los archivos necesarios al disco duro de la computadora y registre los programas en las entradas de menús del sistema, asocie los programas con determinados tipos de archivos, etc., para que sean completamente funcionales.

Durante el proceso de copiado de los archivos al disco de la máquina el asistente los acomodará en diferentes partes del mismo, por ejemplo archivos de programa, system32, etc., resultando muy complicado determinar cuales archivos han sido copiados a tal o cual localización pues generalmente estos antes de ser copiados se encuentran en archivos comprimidos y tal vez encriptados si se trata de una aplicación de tipo comercial. Además resulta difícil exportar esa aplicación ya instalada a otra computadora pues no se conoce con precisión que archivos en el disco duro la componen ni donde se encuentran ubicados, peor aún podría haber dependencias al registro de Microsoft Windows que si no se encuentran presentes al momento de mover todo el conjunto de programas a un nuevo destino no funcionarían correctamente.

Entonces para que una aplicación pueda ser designada “portable” debe evitar que todo el conjunto de programas/archivos que la componen sean distribuidos en el conjunto de directorios del sistema operativo en curso y de ser posible no requerir la existencia de determinados registros en las bases de datos del mismo y tampoco depender de la existencia de ciertos programas, archivos u otra información previamente instalada en la computadora destino para poder funcionar correctamente.

Lamentablemente esto no siempre se cumple pues muchos de los programas denominados “portables” están programados en Java o VB.Net los cuales requieren que se encuentre previamente instalada la máquina virtual que los hace funcionar, pero minimizando este problema nos encontramos con verdaderos programas que son capaces de funcionar en cualquier computadora (por ahora solo probado con Microsoft Windows instalado) únicamente copiando a una carpeta en el disco duro los archivos que componen la aplicación, pero realmente no es necesario pues la mayoría de ellos puede funcionar desde una memoria o pendrive usb, lo cual los hace útiles para casos necesarios como por ejemplo rescate del sistema o ejecutar sistemas operativos alternos al actual sin tener que instalar absolutamente nada en el disco duro de la computadora.

Ahora veamos el proceso de instalación de la versión portable de OpenOffice a nuestro sistema operativo en curso, aclarando que la aplicación OpenOffice requiere un proceso de instalación similar a la de Microsoft Office pero con algunos ajustes es posible generar una versión que no requiere de instalación en el disco duro, pudiendo ejecutarse sin problemas desde un pendrive.

1.- Tener a la mano el paquete o asistente de instalación del sistema de programas que componen OpenOffice.

2.- Iniciar el instalador, ingresar la ruta donde queremos instalar el paquete de programas y esperar a que el asistente copie todos los archivos necesarios al disco duro de la computadora, con la ventaja que una vez copiados todos ellos podemos simplemente copiar la carpeta donde fueron instalados a otra ubicación (carpeta, o incluso otra computadora) y nuestra aplicación con todos los programas que la componen es funcional al 100%, es decir no se requiere hacer uso del asistente de instalación de nuevo.

Por supuesto no todo podría ser ventajas en las aplicaciones portables, estas tienen ventajas y desventajas que se resumen en esta lista:

Ventajas: Desventajas:
1.- Poder migrar fácilmente la instalación de una aplicación portable a otra computadora manteniendo la configuración previa. 1.- Algunos programas requieren Java o .Net Framework instalado previamente para funcionar.
2.- Si es necesario formatear y reinstalar el sistema operativo no es necesario reinstalar nuevamente los programas, basta con copiarlos nuevamente al disco duro de la computadora para tenerlos funcionando tal cual estaban antes del formateo. 2.- La mayor parte de ellos no son auto actualizables, teniendo que esperar a que se libere la siguiente versión portable y teniendo que bajar el asistente nuevamente para reemplazar la instalación anterior.
3.- No utilizan el registro de Microsoft Windows.  
4.- Poder utilizar al mismo tiempo varias versiones del mismo programa sin conflictos por la instalación (véase la imagen de éste post, la cual muestra a los navegadores IE 5.5, 6 y 7 ejecutándose al mismo tiempo sin conflictos debido a la instalación).  

¿Son legales?

Si, pero dependen de la versión del programa original, si el programa es freeware no hay ningún problema en crear una versión portable, podemos decir lo mismo de programas con licencias libres como GPL, BSD, etc., pues la misma licencia permite la distribución gratuita como comercial de los mismos. Sin embargo, existen diversos programas que en la red se distribuyen como “portables” teniendo como sinónimo “gratis”, cuando en realidad son de carácter comercial y se le han hecho modificaciones para ejecutarlos sin necesidad de instalación y clave de activación, por lo cual si los usamos estamos incurriendo en el delito de piratería; por lo que es recomendable mirar previamente la licencia del programa original antes de buscar su versión portátil.

¿Dónde conseguirlos?

En la red abundan los sitios de descargas de programas portables sin costo alguno, una buena opción son los siguientes enlaces:

http://portableapps.com/apps
http://appsportables.blogspot.com/
http://www.pendriveapps.com/

¿Cómo crear aplicaciones portables?

Existen en la red varios programas para transformar cualquier aplicación común (instalable) en portable, pues estos analizan el programa y miran todas las dependencias y automáticamente hacen los cambios necesarios para crear un ejecutable que pueda ser exportado sin problemas a otra computadora, a través de éste link http://www.taringa.net/posts/ebooks-tutoriales/1990237/Crear-Programa-Portable-%28Portatil%29.html podemos darnos una idea del uso de un software llamado Thinstall que nos será de ayuda para crear nuestras propias versiones portables.

En resumen:

Las aplicaciones portables son aquellas que no requieren de una instalación en disco duro para funcionar, lo cual las hace candidatas a llevar a todas partes en un pendrive usb y trabajar con ellas con las configuraciones que se hagan a las mismas. También presentan la enorme ventaja de que al no requerir instalación pueden servir para reinstalar con rapidez los programas de uso común en la computadora cuando se reinstala el sistema operativo. Sin embargo no todas las aplicaciones portables existentes en la red son 100% legales pues muchas de ellas en realidad son comerciales y al crear una versión portátil se está violando los derechos de la misma con lo cual nos podemos hacer acreedores a sanciones administrativas. Valen la pena utilizarlas.

Fuentes de consulta para más información

Aplicación portátil

http://es.wikipedia.org/wiki/Aplicaci%C3%B3n_port%C3%A1til

Crear programa portátil

http://www.taringa.net/posts/ebooks-tutoriales/1990237/Crear-Programa-Portable-%28Portatil%29.html

¿Programas portables?

http://es.answers.yahoo.com/question/index?qid=20090315075526AALroU7

Ventajas o beneficios de los programas portables

http://darkub.wordpress.com/2008/05/08/ventajas-o-beneficios-de-los-programas-portables/

8 Comments

Programación de animaciones con Alice 2.2

Alice 2.2 fue puesto a disposición el 10 de Junio de 2009

Alice 2.2 fue puesto a disposición el 10 de Junio de 2009

Llevo varios años utilizando el ambiente de programación Alice 2.0 que sirve para desarrollar animaciones en 3 dimensiones y me gusta bastante. Considero que es una herramienta ideal para enseñar a programar a jóvenes de secundaria y bachillerato. De hecho le tengo dedicada una página dentro de Ingeniería Simple.

Hace unos días me enteré de que ya han puesto a disposición de todos (porque desde el principio se ha tratado de un software gratuito) la versión 2.2 que incluye algunas mejoras respecto a la 2.0, por ejemplo trae una opción que permite guardar el video de la animación en formato MOV.

Lo que me sorprendió es que precisamente fue puesta en línea precisamente el 10 de junio de 2009, ¡el día de mi cumpleaños! Por supuesto no creo que haya sido a propósito. Seguramente la gente de Carnegie Mellon ni siquiera me conoce, mucho menos podría saber que ese día fue mi cumpleaños, pero como uno tiende a darle significado a este tipo de cosas (¡es una señal! Je je je) pues decidí probar esta nueva versión lo más pronto posible.

He aquí el video de una animación muy sencilla que puede hacerse en poco tiempo con Alice:

He subido el código fuente de esta animación (3.6 MB) a la página de Alice en Ingeniería Simple, por si alguien lo quiere revisar.

42 Comments