Daily Archive for Lunes, julio 13th, 2009

Aprendiendo un nuevo lenguaje con ayuda del Proyecto Euler

lobo_tuerto

¿Cuál es la mejor manera de aprender un nuevo lenguaje de programación?

La mejor idea que he leído al respecto la ví en este artículo.

El autor sugiere resolver problemas sencillos, que poco a poco te ayuden a ir entendiendo (y a poner en práctica) las características del nuevo lenguaje. Podrías por ejemplo, entrarle a resolver los problemas que aparecen en el Proyecto Euler.

El Proyecto Euler es un conjunto de desafíos matemáticos y de programación que requieren algo más que conocimientos matemáticos para resolverse. Aunque las matemáticas pueden ayudarte a encontrar un método elegante y eficiente, el uso de una computadora y algunas habilidades de programación son requeridos para resolver la mayoría de los problemas.

La motivación para iniciar el Proyecto Euler, es el proveer una plataforma para que las mentes inquisitivas puedan entrar a áreas desconocidas y aprender nuevos conceptos en un contexto divertido y recreativo.

El ver las soluciones escritas por otras personas en el lenguaje que estamos tratando de aprender, puede ser de gran ayuda. Así podemos darnos cuenta de si no estamos escribiendo código estilo Java, en Ruby.

Recursos

Project Euler
Learning Scala With Project Euler
Practice Your Code-Fu: Programming Contests and Puzzles Online

Artículos relacionados:

Ext JS 3.0 ya está aquí

extjs

Fue liberada hace unos días la versión 3.0 de este framework para desarrollo de aplicaciones web.

Entre sus monerías incluye:

  • Soporte para peticiones directas, CRUD y REST
  • Nuevos ejemplos y componentes (incluye un componente para gráficas)
  • Más de 1,000 mejoras y correcciones – administración de memoria mejorada para IE6 (¡guácala!)
  • API documentada y CSS refactorizado
  • Compatibilidad con versiones anteriores

Aquí puedes ver una lista más detallada sobre lo nuevo.
O revisar algunas de las cosas que puedes hacer con él.

Artículos relacionados:

Ruby 1.9 — invalid multibyte char (US-ASCII)

ruby.jpg

Ahora que instalé Ruby 1.9, me puse a hacer algunas pruebas. En una de esas, utilicé caracteres con acento en mis cadenas y al correr el programa, ¡bam! que me sale esto:

invalid multibyte char (US-ASCII)

Y yo con mi cara de WTF?!
Al cabo de un rato de investigar, entendí por qué sucedía esto.

El problema

Ruby 1.9 trae ya soporte para múltiples codificaciones de caracteres (character encodings). Pero —siempre hay un pero— hay que indicarle cúal es el que va a utilizar.

Esta forma de trabajar se creó para resolver el problema en el que yo escribo mi código en UTF-8, y un japonés escribe su código en Shift JIS. Ruby debería soportar eso, de hecho, la versión 1.9 lo hace. Vamos a complicar las cosas un poco más: imagina que pongo el código que escribí en UTF-8 en una gema y luego el programador japonés la utiliza en su código escrito en Shift JIS. ¿Cómo podemos hacer que trabajen ambos sin problemas?

La estrategia de Ruby 1.8 de usar una variable global para especificar la codificación no sobreviviría a una prueba como esa, era momento de un cambio de estrategia. La respuesta de Ruby 1.9 a este problema es la codificación (encoding) del código fuente.

Todo código fuente en Ruby tiene cierta codificación. Cuando creas una cadena en tu código, automáticamente le es asignada esa codificación. Esa sencilla regla resuelve adecuadamente los problemas que he descrito. Mientras la codificación de mi código fuente sea UTF-8 y la del programador japonés sea Shift JIS, mis cadenas de texto trabajarán como es debido y las de él también. Obviamente si compartimos datos, tendremos que establecer algunas reglas acerca de los formatos que compartiremos usando documentación o código que pueda adaptarse a las diferentes codificaciones, pero eso es algo que se debió estar haciendo ya de cualquier manera.

La razón por la que aparece el error mencionado arriba es que la codificación por defecto es US-ASCII.

No se por qué usaron US-ASCII en lugar de UTF-8 ¿será por rendimiento?

La solución

Debes indicar la codificación que usas en cada uno de tus archivos.

Agrega una línea como esta al principio de tus archivos (ambas formas funcionan, pero la primera fue agregada por Emacs de manera automática):

1
# -*- coding: utf-8 -*-
1
# encoding: UTF-8

Recursos

Puedes obtener más información en: Ruby 1.9′s Three Default Encodings

Artículos relacionados:

Evangelion 1.11: You are (not) alone

evangelion-1

Desde que vi Evangelion por primera vez —en Locomotion, si no mal recuerdo— se convirtió en ese momento en una de mis series de anime favoritas.

Claro, fue creada en los 90s, pero el tema que aborda es aún vigente — y sensible para muchas personas, ya saben, estar en guerra con Dios y matar a sus ángeles no es precisamente un tema fácil.

¿Pero, a quién no le gustaría ver Evangelion en todo su esplendor, como si hubiese sido creada apenas ayer?

Parece que no sólo a mi, o a ti. Conozcan el proyecto Rebuild of Evangelion.

La primer película (de las cuatro que componen el Rebuild of Evangelion) se llama Evangelion 1.11: You are (not) alone. Y ya viene la segunda parte, títulada Evangelion: You can (not) advance, la cual introduce a un personaje tan odiado como querido: Asuka Langley.

Si conoces Evangelion, no te la puedes perder. Si no la conoces, es momento de que te des la oportunidad de encontrarte con uno de los íconos de la animación japonesa.
evangelion-2 evangelion-3 evangelion-4
¿Interesado en probar antes de comprar?

Artículos relacionados:

  • No hay artículos relacionados

Metris — Mi clón de Tetris en Ruby y Gosu

metris-1
El proyecto ahora se llama rubytris y lo puedes encontrar en github:
http://github.com/lobo-tuerto/rubytris

¡Por fin terminé una versión presentable de mi clón de Tetris desarrollado en Ruby con ayuda del framework Gosu!

Le puse Me-tris, nombrado así, para no tener problemas con la ley (sí, se que el nombre apesta… jeje). :D

Es altamente configurable, puedes modificar cosas como el ancho y alto del tablero (en bloques), el tamaño de los bloques (en pixeles), el espaciado entre ellos, la velocidad de caída de las piezas (en milisegundos), la velocidad de repetición cuando un jugador deja presionada una tecla (para moverse a los lados, rotar, caer).

También puedes definir nuevas figuras fácilmente e indicar si tienen un pivote (un punto alrededor del cual giran las piezas). Ya no tienes que definir las piezas y cada una de sus rotaciones por separado, las figuras pueden tener un tamaño arbitrario.

El juego está (muy) básicamente completo. Lleva la puntuación del jugador y termina (tee-hee!).
Fue escrito en 3 días, 2 de ellos seguidos y uno más un par de días después.

El código está muy comentado, pero si te surge alguna duda, puedes preguntar con confianza. Tiene también, mucho campo para mejorarse (por ejemplo una pantalla de entrada).

Aquí les dejo unos screenshots que muestran como luce el juego al modificar los parámetros de configuración:
metris-2 metris-3 metris-4 metris-5

Descargar

Aquí tienen la descarga, es un archivo .rb y varios .ogg y .png.
Metris – Mi clon de tetris escrito en Ruby con Gosu (68.7KiB)

A continuación pongo el código en su totalidad.

Les recomiendo primero checar el RubyTutorial, ahí explican las cuestiones básicas de Gosu.

Continue reading ‘Metris — Mi clón de Tetris en Ruby y Gosu’

Artículos relacionados:

Lobos en línea

De pata de lobo

Campo de trigo en una tarde nublada.
Neuenkirchen, Deutschland. [Mayo 2007] Puesta de sol entre matorrales 1/2.
Desierto de Real de Catorce, San Luis Potosí, México. [Diciembre 2007] Horizonte en el desierto 2/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Horizonte en el desierto 3/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Atardecer entre matorrales 1/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Atardecer entre matorrales 2/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007]

Qué estoy haciendo...

Posting tweet...

Powered by Twitter Tools

Mapa de visitas

Mira…

Calendario

julio 2009
L M X J V S D
« jun   ago »
 12345
6789101112
13141516171819
20212223242526
2728293031  

FireStats icon Con la potencia de FireStats