Archivo de la categoría Java/Programación

Be void* my friend

Viernes, 17 de Noviembre de 2006

Mola, mola, mola!!

be-water-bruce-lee.jpg Don’t get set into one form, adapt it and build your own, and let it grow, be like void*. Empty your mind, be formless, shapeless - like void*. If you put an int into a void*, it becomes the int. You put float into a void* it becomes the float. You put in a char it becomes the char. Now, void* can flow or it can overflow.

Be void*, my friend.

Por si acaso no sabes de qué va, puedes consultar lo que significa void* en la Wikipedia. (Vía Halon disparado, post original en El blog de Lluis Franco)

Escribir una traza con printStackTrace();

Domingo, 15 de Octubre de 2006

A veces podemos querer tener la traza de una Exception para pintarla en nuestro JSP de error con un formato bonito o enviarla por correo. El método siguiente nos devuelve un String con el resultado del printStackTrace() de un objeto Throwable (el padre de Exception y Error):

public String getStackTrace(Throwable e) {
        StringWriter stringWriter = new StringWriter();
        e.printStackTrace(new PrintWriter(stringWriter));
        return stringWriter.toString();
}

Colecciones en línea

Lunes, 2 de Octubre de 2006

Si en tu codigo tienes cosas como ésta:

public class Constants {
    public static final Set cosas = new HashSet();

    static {
          cosas.add("foo");
          cosas.add("bar");
    }
}

Puede que sea mucho más comodo hacerlo así:

public interface Constants {
    public static final Set cosas =
         new HashSet(Arrays.asList(new String[] {"foo","bar","tal"} ));

    public static final List cosas =
         new HashSet(Arrays.asList(new String[] {"foo","bar","tal"} ));
}
public class implements Constants {
    //...
}

Mejor, ¿no? Para los Map no hay manera, hay que hacerlo a mano…

Libros de Java (2)

Lunes, 28 de Agosto de 2006

ACTUALIZACIÓN
¡No funciona ningún enlace! Podéis ver un índice con todos los libros (supuestamente) colgados aquí: Oreilly Books, sin embargo, parecen haber eliminado todo el contenido del servidor. ¡Lo siento! (Gracias Madquark)

Directamente copio y pego de Certificaciones Java:

O’Reilly posee algunos de los mejores libros para aprender sobre nuevas tecnologías, entre otras sobre java. Desde este enlace encontrarás un increible recopilatorio de 180 libros que incluyen varias tecnologías pero sobre todo enlaces a algunos de sus mejores libros sobre Java.

Lenguajes de programación esotéricos (II)

Miércoles, 19 de Julio de 2006

Vía Menéame, encuentro algunos lenguajes de programación esotéricos muy interesantes en DM’s Esoteric Programming Languages.

Uno de ellos, el que ha motivado la noticia, es Piet cuya principal característica es que el codigo fuente aparece codificado en un gráfico con pixeles de colores. El principio de diseño de Piet, segun su autor es:

Program code will be in the form of abstract art.

De ahí que el propio lenguaje se llame como el famoso autor de arte abstracto Piet Mondrian.

Aquí ponemos, para vuestro deleite, el código de algunos programas peculiares:


Hello World

Una versión de las muchas que hay que pinta “Hello World!”

Torres de Hanoi

Este por ejemplo resuelve el legendario problema de Las Torres de Hanoi, aunque nadie sabe como funciona.

Piet!

Y para rematar, este programa solo imprime “Piet” indefinidamente, pero el merito esta en que el código fuente realmente se parece a una obra de Piet Mondrian.

Más esotérico, imposible. Aqui tenéis más ejemplos de programas codificados con Piet.

Python: 4 lineas para resolver un Sudoku

Viernes, 14 de Julio de 2006

Documento original, visto vía Menéame

def r(a):i=a.find('0');~i or exit(a);[m
in[(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3)or a[j]for
j in range(81)]or r(a[:i]+m+a[i+1:])for m in'%d'%5**18]
from sys import*;r(argv[1])

Solo 178 bytes. ?Genial no?

10 cosas que un programador Java debería saber

Miércoles, 28 de Junio de 2006

He encontrado un artículo muy interesante que trata sobre los 10 errores más comunes (o 10 cosas que deberías saber) cuando desarrollas bajo Windows, pero tu aplicación va a correr sobre Linux/Unix. El artículo original está aquí en Javalobby. Como está en ingles pero me parece muy útil, he decido hacer un resumen un poco libre y en castellano sobre los puntos que trata.
En este post van los 5 primeras, mañana o pasado publicaré los 5 siguientes:

10 cosas que un programador Java debería saber

10 Uso especial de puertos
En unix, solo el usuario root puede abrir puertos por debajo de 1024. En Windows cualquiera puede hacerlo. Si tu aplicación usa un puerto por debajo de 1024 piensa que en Unix solo funcionará si el proceso corre como root.

9 No hay bloqueo mágico de ficheros
Windows protege automáticamente contra escritura los ficheros abiertos, pero en Unix no: tu puedes estar leyendo un fichero y otra aplicación/hilo puede borrarlo.
El siguiente código falla en Windows (protegiendo el fichero), pero en Unix no falla y el fichero es eliminado.

// Se abre el fichero
InputStream is = new FileInputStream("foo.txt");

// Se borra el fichero: en Windows falla, en Unix no
(new File("foo.txt")).delete();

// Intentamos leer el fichero
// En Windows nunca llegamos hasta aquí, pero en Unix
// el contenido del mismo ya ha sido borrado
int ch;
while( (ch = is.read()) > 0 )
    System.out.println( "char: " + (char)ch );
is.close();

8 A veces no hay interfaz
En Unix no siempre hay interfaz, ya sea gráfica o de consola. Y a veces no hay ni consola, puede ser que la máquina sea un servidor que no tenga pantalla, ni teclado, ni ratón, ni nada. Tu aplicación puede ser un simple proceso lanzado en background por un cron por ejemplo. Si la salida estándar no está redirigida a un fichero (para hacerlo, utiliza el método setOut de la clase System), puede que tus System.out.print() se pierdan para siempre.
Utiliza siempre un sistema de logs que escriban a fichero tus trazas.

Otra cosa: aunque no uses AWT directamente (por ejemplo, en una aplicación J2EE) puede ser que utilices sin querer la interfaz gráfica del sistema al manipular imágenes con el Api AWT del JDK (por ejemplo, al cambiar el tamaño de imágenes). Si tu Unix/Linux no tiene unas X, fallará. La solución a esto consiste en utiliza el parámetro -Djava.awt.headless=true en el arranque de tu máquina virtual.
Más información: JDK 1.4.2 AWT Changes, Mindprod glossary: Headless

7 En unix no hay registro
Unix no tiene un lugar central donde almacenar toda la configuración del sistema. En su lugar, utiliza ficheros en texto plano repartidos en diversos directorios (/etc/* la mayoría).
Si usas el registro de Windows para localizar información del sistema, intenta averiguar su equivalente en Unix. Piensa que incluso será más comodo leer un texto plano que tener que acceder al registro.

6 Barras invertidas

En Windows, el separador de directorios es “\” (backslash), por ejemplo: C:\Archivos de Programa\Mola
Pero en Unix el backslash es el carácter de escape, así que el separador de directorios es “/” (slash), por ejemplo: /etc/passwd.

Lo bueno es que Windows admite los dos separadores, mientras que Unix no, por lo que tiene fácil solución: usar siempre “/” (slash)

Si has utilizado en tu código y ficheros de configuración el separador de carpetas “\”, puedes cambiarlo tranquilamente por “/” para que funcionen en Unix y seguirán funcionando también en Windows.
Si por alguna razón necesitas saber en tiempo de ejecución que separador utilizar, siempre puedes utilizar la constante java.io.File.separatorChar

IMPORTANTE: el artículo original tiene una errata y dice que la constante a utilizar es java.io.File.pathSeparatorChar, confundir estas dos constantes también es un gran error muy común: pathSeparatorChar es el separador para los elementos del CLASSPATH y no para los directorio. Valdrá “:” para Unix y “;” en Windows, que no es lo mismo que separatorChar.

Más libros de Java gratis

Lunes, 26 de Junio de 2006

Vía Javahispano, tenemos una página con bastantes libros gratuitos interesantes. Ya tenéis algo que leer este veranito!

Lenguajes de programación esotéricos

Miércoles, 21 de Junio de 2006

La Wikipedia contiene una entrada en castellano para los Lenguajes de programación esotéricos.
El propósito de estos lenguajes es resultar más curiosos que útiles. Quizá como resultado de algún proyecto de universidad, un estudio sobre lenguajes, quien sabe.
Algunos contienen muy pocas instrucciones, pero las codifican con palabras claves graciosas y muy parecidas entre sí, dando lugar a un lenguaje totalmente ilegible.

Uno de ellos es Oook!, un lenguaje cuya lectura de su código fuente recuerda al idioma de los monos. Solo tiene tres palabras claves que combinadas de dos en dos, dan lugar a 8 instrucciones en total.
El lenguaje final es tan estrambótico como éste, un programa que simplemente pinta “Hola Mundo”:

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook? Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook? Ook!
Ook? Ook. Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook?
Ook? Ook! Ook? Ook. Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook? Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook? Ook! Ook? Ook.
Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook?
Ook? Ook! Ook? Ook. Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.

Otro, por ejemplo, INTERCAL nace como una parodia siniestra de FORTRAN y COBOL cuyo único objetivo es ser extremadamente difícil de programar y de entender.
Contiene instrucciones redundantes y con nombres irónicos como “READ OUT”, “IGNORE”, “FORGET” o “PLEASE”, codifica los operadores binarios y unarios (and, or, not, xor) con otros símbolos extraños que no se encuentran directamente en el teclado, obligando al programador a hacer algún truco para teclearlos.
Por ejemplo, la manera más sencilla de almacenar en una variable de 32-bit el valor 65536 se convierte en esta pequeña pesadilla:

DO :1 <- #0?#256

Las entradas y salidas están muy limitadas: las entradas de los dígitos tienen que ser deletreadas y las salidas de los números se hacen en formato romano. Un horror.

Un simple “Hello World” en C como éste:

#include <stdio.h>
int main(void) {
    printf("Hello, world!n");
    return 0;
}

Se convierte en esta deliciosa pieza de código en C-INTERCAL como ésta:

        DO ,1 <- #13
        PLEASE DO ,1 SUB #1 <- #234
        DO ,1 SUB #2 <- #112
        DO ,1 SUB #3 <- #112
        DO ,1 SUB #4 <- #0
        DO ,1 SUB #5 <- #64
        DO ,1 SUB #6 <- #194
        DO ,1 SUB #7 <- #48
        PLEASE DO ,1 SUB #8 <- #22
        DO ,1 SUB #9 <- #248
        DO ,1 SUB #10 <- #168
        DO ,1 SUB #11 <- #24
        DO ,1 SUB #12 <- #16
        DO ,1 SUB #13 <- #214
        PLEASE READ OUT ,1
        PLEASE GIVE UP

Por supuesto, tiene la instrucción COMEFROM, que a modo de chiste, es lo contrario que la antigua y obsoleta (por romper la estructura del código) instrucción GOTO: Recordemos que GOTO sirve para provocar un salto en la línea de ejecución de nuestro programa a una línea concreta en nuestro código. CAMEFROM sirve para lo contrario, indicamos que se debe seguir la ejecución a partir de la línea actual donde esta la sentencia COMEFROM cuando se ejecute la línea indicada.
Justo al reves. Por ejemplo, esto:

10 PRINT "Hello!";
20 GOTO 10

Se convierte con CAMEFROM en:

10 COMEFROM 30
20 PRINT "Hello!"
30 REM

De esta manera, sabemos cuando se efectúa el salto al leer el destino, no el origen de la línea que lo provoca. Vamos, una auténtica pesadilla de la programación que sobrepasa el absurdo y solo sirve para rendir culto a su complejidad. Más información en la Página oficial de Intercal. No apta para cardíacos, ya te avisan en la propia home: “Abandon All Sanity, Ye Who Enter Here”.

Por cierto, esto me recuerda a otra entrada de la Wikipedia también interesantísima que hace poco mi amigo kotrina me envió por correo.
Es una lista de programas que escriben “Hello World” en más de 250 lenguajes, sistemas, plataformas y programas diferentes. Desde Java o C, pasando por XSLT hasta calculadoras programables. O incluso escribir esta frase desde POV-Ray, una aplicación para renderizar gráficos realistas a partir de scripts.
Curioso e interesante, aunque no vienen ni Ook ni INTERCAL, ?será que no son dignos de considerarse lenguajes de programación? ?Qué intolerancia a las minorias! :-)

Vía (aunque ya había oido hablar de Ook hace bastante tiempo, no había visto la entrada en la Wikipedia hasta que lo ví en Meneame): Meneame)

30 Cheat Sheets

Jueves, 4 de Mayo de 2006

El blog de Pete Freitag ha recopilado más de 30 cheat sheets (o chuletas) para distintos lenguajes, entornos, sistemas, etc.
Muy recomendable, ideal para imprimir y pegar al lado del monitor.
(Via meneame)

Web Development Cheat Sheets

Databases / SQL Cheat Sheets

Language Cheat Sheets

Version Control Cheat Sheets

Other

Commercially Printed CheatSheets

Updates:

  • Perl - thanks Dom.
  • Regex - thanks bjhanifin
  • Perl - thanks Derek
  • Subversion - nice reference card, thanks Andreas
  • Debian - thanks again Andreas
  • UML - Andreas again, thanks
  • PostgreSQL - thanks for the suggestion frank.