25 enero 2006

Aprende a hacer un RPG en C++... en video

Este tutorial enseña a programar un RPG en C++ en modo texto. Lo curioso es que no es el típico tutorial con texto e imágenes, sino un video. Este formato es más popular en los tutoriales de software complejo (como 3D Studio o Photoshop), pero es el primero que veo en programación. Curioso.

18 enero 2006

Tarjetas / Guías de referencia rápida

En esta web teneis disponible todo un listado de tarjetas y guías de referencia rápidas, comprimidas en unas pocas hojas, tamaño tarjeta y formato PDF. Muy útiles para tener siempre a mano. Hay de los lenguajes de programación y otras tecnologías más importantes: C, Java, HTML, Perl, PHP,... y algunas aplicaciones como Vi o MySQL. Muy práctico

Nuestras amigas, las Expresiones Regulares (II) : Perl

Una de las partes más potentes de Perl son su manejo de las expresiones regulares. De una forma potente y sencilla nos permite validar y extraer información de cadenas de texto, a costa de sacrificar un poco de legibilidad.

Si queremos comprobar si una cadena cumple con una determinada Expresión Regular no tenemos más que fijarnos en este código:

#!/usr/bin/perl
if ($variable =~ m/\d/i) {
    printf("La cadena '$variable' contiene un dígito\n");
}


Las expresiones regulares en Perl van entre /. La acción que queremos realizar sobre la RegExp va al principio y las opciones al final. La acción m es match (es la acción por defecto, no es necesario ponerla) y retorna verdadero si se produce un aparición de la expresión regular. La opción i nos sirve para indicar que la búsqueda se realiza 'case insensitive', sin importar si es mayúscula o minúscula. Este comando de Perl es un poco confuso al principio (parece una asignación, pero no lo es), pero es uno de los más prácticos.

Otra acción que podemos realiar con las expresiones regulares es la substitución (s):

#!/usr/bin/perl
$variable =~ s/\d/0/; # Reemplaza todos los digitos de $variable por 0
                                        # y lo asigna a la misma variable


Bien, ya sabemos como validar y transformar una cadena utilizando las Expresiones Regulares, pero ¿cómo extraer la información? Para ello se utilizan los parentésis durante una acción de match y posteriormente podemos acceder con $1,$2,... por cada parentesis que hayamos colocado:

#!/usr/bin/perl
$fecha = "10-01-2006";
$fecha =~ /\d\d-(\d\d)-(\d+)/;
printf("El mes es $1 y el año $2\n");


Realmente sencillo, ¿no? Si ahora queremos obtener todos los encuentros en una cadena, utilizamos la opción g para que la operación se realiza en la totalidad de la cadena, no se detenga en el primer encuentro. Por ejemplo, si queremos todos los números de una cadena:

#!/usr/bin/perl
$string ="aabb1aa2aaa3";
while($string =~ /(\d)/g) {
    printf ("Encontrado $1\n"); # Encontrará 1, 2 y 3
}


Estas son las operaciones más básicas que se pueden realizar con cadenas, pero son la base para realizar cualquier otra más compleja. Como podéis ver con operaciones muy sencillas (aunque algo crípticas, todo hay que decirlo) podemos manipular como queramos el contenido de una cadena. En el próximo post sobre RegExp explicaré como funcionan en Java.

Links
Nuestras amigas, las Expresiones Regulares(I)
Regular-Expressions.info
Regular Expressions By Example
Regular Expressions in Perl

15 enero 2006

Programación en Ensamblador para ZX Spectrum

Para todos aquellos que empezamos programando con un Spectrum, todavía recordamos con añoranza aquella época... Aquí teneis un completo tutorial de como programar para Spectrum, usando lenguaje ensamblador mediante un ensamblador cruzado, un par de utilidades y por supuesto un emulador. Es realmente sencillo hacerlo siguiendo los pasos como se explican, y todas las herramientas son muy fáciles de entender.

En mi epóca de trastear con el Specturm nunca pasé del Basic; en realidad, mi primer programa en ensamblador para la máquina de Sinclair lo hice ustando estas herramientas.

11 enero 2006

Apple Keynote 2006: La gran decepción

Mucha gente (yo incluido), esperaba que para esta Keynote se presentaran los primeros modelos de Apple con procesador Intel. Además, según se decía en la anterior, primero se cambiarían los modelos más basicos (iBook, Mac Mini). Sin embargo la realidad es que han presentado modelos con procesador Intel si, pero de gama media-alta. Por un lado tenemos los nuevos iMac, a partir de casi 1400€ y por otro la nueva gama de MacBook (que mal suena ¿no?) a partir de 2000€ más o menos. Eso sí, prometen más de dos veces el rendimiento de sus equivalentes PPC.

Una gran decepción para quienes esperabamos poder comprar nuestro primer Mac 'barato', ya sea Mac Mini o iBook...

Para datos más concretos sobre la Keynote, podéis visitar Rita the Singer's true story.

09 enero 2006

Imminente salida de Flash Lite 2

Parece que por fin Macromedia va a liberar el software necesario y el nuevo SDK para Flash Lite 2, con lo que se podran comenzar a realizar aplicaciones multimedia en este formato. De todas formas, no se espera que los primeros terminales que soporten este formato lleguen antes de fin de año.

De: Slashphone

Web sobre retro-informatica : 1000bit.net

Esta web italiana (pero con muchísimo contenido en inglés) contiene todo tipo de información sobre los primeros pasos de la microinformatica. Podemos encontrar desde folletos y antiguos anuncios hasta revistas, manuales y articulos completos, sobre todo de los '80. Tiene un archivo enorme de este tipo de información escaneada en formato jpg, pdf o HTML.

02 enero 2006

Sobre Perl

El orígen de Perl (el autor lo quiso llamar Pearl, pero ese nombre ya existia) es el de un lenguaje orientado a tratar textos, pero ha ido evolucionando a lo largo de los años hacia un lenguaje de proposito general con usos tan variados como control de sistema, desarrollo de webs, interfaces gráficas, plug-ins y mucho más.

Desde sus orígenes Perl tiende a ser más práctico que elegante; por lo que permite crear apliaciones muy potentes en poco tiempo, pero con una alta probabilidad de que sea dificl de leer o destructurada. Sintácticamente, Perl es una mezcla de C con los lenguajes de shell de UNIX. La mayoría de estructuras son similares a C, pero en general más flexibles y las variables son de tipo dinámico, realizando una conversión automática siempre que es posible. También abundan las variables implicitas (variables que por defecto almacenan ciertos valores). También presenta rasgos de otros lenguajes, como listas similares a LISP.

La forma más natural de encontrar Perl es como lenguaje interpretado. El interprete, por lo general creado en C, suele ser bastante eficiente. La gestión de memoria es realizada totalmente por este interprete, que reserva y libera el espacio según es necesario. Otra característica importante es la gran cantidad de librerías de terceros que estan disponibles para Perl. A parte del interprete, existen multiples implementacione de Perl como lenguaje empotrado para otros lenguajes como C y Java.

Todo programa en Perl comienza con una linea de comentario (marcada en Perl con '#') indicando donde esta el interpete. Esta linea no es necesaria cuando se usa sobre Windows, pero por portabilidad, casi todos los scripts la incluyen.

#!/usr/bin/perl

Por otro lado, la popular llamada de C printf está disponible:

printf("¡Hola mundo!");

No es necesario declarar variables implicitamente, pero si queremos o necesitamos hacerlo:

my $una_variable_esalar;
my ($una_variable, $dos_variables);
my @variable_tipo_array;
my %variable_tipo_array_asociativo;

Como veis, las variables llevan un símbolo como primer caracter que indica su tipo. Las variables escalares pueden ser entaras, floats o cadenas, realizandose autoconversión entre ellas. Para declarar más de una variable en un my, debemos hacerlo como lista (o más bien array). Las comparaciones entre cadenas deben usar unos comparadores propios (eq, ne, ...):

if ($variable eq "cadena") { printf("Son iguales"); }

Todo condicional, escrito de esta manera, debe llevar "{" y "}", independientemente que solo haya una insrtucción. Veamos ahora las variables implicitas con un bucle:

my @mi_array = ("casa","coche","farola");
my $valor = $mi_array[0]; # acceso como escalar
foreach (@mi_array) {
    printf("\n $_");
}

La variable implicita $_ contiene el elemento actual cuando tratamos arrays en un bucle. Para escribir una variable por pantalla, se puede escribir directamente en una cadena, realizando el cambio por el valor automáticamente. También hay que tener en cuanta que debemos cambiar el símbolo usado por los arrays ('@') cuando los vamos a utlizar como escalar ('$').

Un array asociativo se utiliza de esta manera:

my %mi_array_asocc = ("clave 1" => "valor 1", "clave 2" => "valor 2");
my @lista_de_claves = keys %mi_array_asocc;
my @lista_de_valores = values %mi_array_asocc;

printf ("Claves \n");
foreach (@lista_de_claves) {
    printf("$_\n");
}

printf ("Valores \n");
foreach (@lista_de_valores) {
    printf("$_\n");
}


Una muestra de la potencia de Perl, para leer un archivo por lineas solo tenemos que:

my $file = "fichero.txt";
my @lineas;
print (" Leyendo archivo $file...\n");
if (!open (FILE, $file)) {printf("No se puede abrir $file\n"); exit(1); }
@lineas = ;
close FILE;
foreach (@lineas) {
    printf("$_\n");
}

Bueno, esto solo es la sintaxis más básica de Perl. Existen aun mas estructuras de control, acceso archivos, redes, ... y un sistema de subrutinas bastante potente. Y por supuesto inacabables librerías externas. Además he dejado intencionadamente fuera una parte importantísima de Perl, las expresiones regulares, que trataré en un post aparte.

En definitiva, Perl es un potente lenguaje de programación, que en ciertas tareas, permite crear una aplicación de manera rápida y eficiente, la cual nos llevaría mucho más tiempo con cualquier otro lenguaje (Java, C++,...). Con un poco de práctica, se aprende a utilizar todo su potencial y a evitar los problemas de ilegibilidad.

Links