Archive for the ‘Programación’ Category

Depurando código

   Demasiado tiempo sin poder escribir en el blog. La verdad, no creía que este tipo de cosas fuese a ocurrir, pero supongo que es habitual: trabajar y estudiar dejan poco tiempo para contar cosas 🙂

   Dicho esto, vuelvo a la temática sobre la que quería escribir. Llevo unas semanas dentro de un proyecto donde básicamente hay una parte en Java y otra parte en C/C++. La pregunta es ¿qué formas hay de depurar esto? Siendo C y Java dos lenguajes tan distintos, la forma de abordar un error en un lenguaje o en otro es bastante distinta. En mi caso particular, en C casi todo se suele resumir a algún problema de gestión de memoria. En la parte de Java, al ser un lenguaje donde tengo más experiencia, a parte de los errores típicos de cualquier programa, me estoy centrando más en escribir digamos código robusto. La cuestión no es que funcione, sino que funcione adecuadamente. Es curioso, pero en esta línea, he encontrado hace unas semanas errores en código Java de cosas que habría asegurado que estaban correctamente implementadas.

Así por tanto, para próximos capítulos

  • Depuración de código en C/C++

  • Depuración de código en Java

Curiosidades – Warning: no new line at end of file

Quizá la gran mayoría de personas que hayan programado alguna vez en C/C++ hayan encontrado este curioso warning. ¿Por qué hace falta un salto de línea al final de un fichero?

Aunque parezca un warning inofensivo realmente tiene sentido. Si miramos el standard de C, en el punto 5.1.1.2 encontramos entre otras cosas.

A source file that is not empty shall end in a new-line character, which shall not be immediately preceded by a backslash character before anysuch splicing takes place.

La explicación de porqué hay que poner un salto de línea al final de un fichero se basa en el funcionamiento del compilador. Suponiendo un caso habitual de programa en C/C++, hacen falta dos ficheros para compilar el programa. Un fichero .h con las firmas de los métodos, las definición de las clases, etc. Y un fichero .c/.cc/.cpp con el código correspondiente. Cuando el compilador se pone a procesar el fichero .c, entre otras cosas sustituye todos los #include por el contenido del correspondiente .h. A modo de ejemplo, podemos pensar en dos ficheros:

Fichero example.h

#define EXAMPLE 1<sin salto de línea>

Fichero example.c

#include "example.h"
int y; ...

Si ahora pensamos en lo que verá el compilador

#define EXAMPLE 1int y; ...

Lo que sí que es claramente un error.

Disponible Java 6 en Leopard

Parece que al final las conclusiones de los post anteriores sobre la disponibilidad de Java 6 para Leopard estaban bien orientadas. Hoy se ha liberado la versión 6 de Java para Leopard. Para instalarla simplemente hay que ir al Apple Developer Connection y descargar la actualización. Se requiere un registro para acceder a las versiones para desarrolladores, pero éste es gratuito.

Por cierto, recomendable también  instalar el paquete correspondiente al javadoc del API, para luego poder tener la ayuda disponible en eclipse.

Referencias:

Java 6 en Leopard – Leyendo entre líneas

Desde hace unos días esta disponible para descargar "Java for Mac OS X 10.4, Release 6". Básicamente es una actualización de Java 5 para Tiger con la que se pasa a la versión del jsdk 1.5.0_13. Hasta aquí, nada de interés sobre Java 6 para Leopard. Lo curioso viene cuando miramos la documentación de la actualización.

You can install this release and the Java SE 6 Release 1 Developer Preview on your machine, even though both these developer previews install into some of the same locations. If you require Java SE 6 Release 1 Developer Preview it must be installed prior to installing this release. The Java SE 6 Developer Preview will not install after installing this release. Additionally, when you install Java for Mac OS X 10.4, Release 6, it disables the switchable command line feature of the Java SE 6 Developer Previews.

Lo bueno es que se habla de la existencia de Java SE 6, aunque de momento sólo aparentemente disponible para desarrolladores que pertenezcan al Apple Developer Connection, es bueno saber que algo se va moviendo, aunque sea a ritmo lento. Esperemos que no haya que esperar mucho para poder ver Java 6 en Leopard.

Referencias:

Tags: ,

JAIDA – Estadísticas con Java

Pensando sobre todo en la realización de proyectos personales, prácticas de asignaturas o simplemente para ver cómo esta funcionando un programa que hemos desarrollado, una de las cosas más útiles es calcular las estadísticas e intentar visualizarlas para ver el comportamiento deseado. El problema principal muchas veces es cómo evitar hacer el típico copy & paste a una hoja de cálculo e intentar ahí hacer los gráficos, señalando además lo de intentar porque hay muchos gráficos estadísticos que no hacen las hojas de cálculo comunes.

Partiendo de esta problemática, encontré hace poco tiempo JAIDA (Java implementation of the Abstract Interfaces for Data Analysis). JAIDA en modo resumido es un paquete que nos permite generar gráficos estadísticos mediante código en Java. La verdad es que lo he estado probando estos últimos días y los resultados son bastante buenos.

El código es bastante fácil y hay multitud de ejemplos en la página de referencia. A modo de ejemplo, el siguiente código crea dos histogramas y muestra por pantalla la suma, resta, multiplicación y división de los dos histogramas.

import hep.aida.*;
import java.util.Random;

public class HistogramArithmetic
{
public static void main(String[] argv)
{
IAnalysisFactory af = IAnalysisFactory.create();
IHistogramFactory hf = af.createHistogramFactory(af.createTreeFactory().create());

IHistogram1D h1 = hf.createHistogram1D("test 1d",50,-3,6);
IHistogram1D h2 = hf.createHistogram1D("test 2d",50,-3,6);

Random r = new Random();
for (int i=0; i<10000; i++)
{
h1.fill(r.nextGaussian());
h2.fill(3+r.nextGaussian());
}
IHistogram1D plus = hf.add("h1+h2",h1,h2);
IHistogram1D minus = hf.subtract("h1-h2",h1,h2);
IHistogram1D mul = hf.multiply("h1*h2",h1,h2);
IHistogram1D div = hf.divide("h1 over h2",h1,h2);

IPlotter plotter = af.createPlotterFactory().create("Plot");
plotter.createRegions(2,2,0);
plotter.region(0).plot(plus);
plotter.region(1).plot(minus);
plotter.region(2).plot(mul);
plotter.region(3).plot(div);
plotter.show();
}
}

El resultado es la siguiente pantalla:

Además de histogramas, hay muchos más tipos de gráficos, como nubes de puntos, diagramas de correlación, etc.

En cuanto a su uso, simplemente descargar los jars del ftp o mediante subversion. Añadir los jars al proyecto en eclipse o en el classpath del proyecto si no utilizamos eclipse y listo para usar.

Referencias:

Tags: , , ,

Java 6 en Leopard = WTF

La verdad, creo que ahora sí que siento algo de cabreo en el mismo nivel que en mis tiempos en Windows. Todo comienza al intentar instalar la versión 6 del JDK de Java. En Tiger (versión anterior del SO), el proceso era básicamente ir al Apple Developer Connection y bajarse JavaSE6Release1.pkg para instalarlo.

El problema es que ahora no existe tal paquete en el Apple Developer Connection, los últimos paquetes disponibles para su descarga hacen referencia a actualizaciones de J2SE 5.0, por lo que ahora mismo no es posible localizar un instalador de Java 6.

Creo que esto es altamente inaceptable, y espero que se solucione pronto. En un principio me he puesto en contacto con Apple Developer Connection, con Apple Support y con Sun y estoy a la espera de noticias, por lo que iré actualizando el post a medida que conozca nuevas cosas.

PS: No creo que nunca más sea un early-adopter de nuevas versiones, al final es mejor esperar una semana o dos y ver qué efectos tienen la novedades 😦

Actualización: ¿Quién es el culpable?

He estado viendo cosillas por Internet y al final, creo que hay algo que no esta claro, la víctima en este caso es el usuario o mejor dicho desarrollador que se ve sin su entorno deseado, pero ¿quién es el culpable? Por un lado, se podría decir que Apple por no dar la opción de instalar Java 6, pero por otro lado, Apple se encarga de sus productos como cualquier fabricante. ¿No sería Sun? La verdad es que en este punto no se a quién determinar como culpable. Tampoco me parece lógico que Sun se olvide de Mac en su página de descargas (no he encontrado ninguna referencia a MacOsX tanto Tiger como Leopard). ¿Opiniones?

Actualización: Información de Apple

Parece que con el perfil actual que tengo dentro del Apple Developer Connection, no es posible acceder a los denominados Software Seed Keys, qué básicamente vienen a ser una forma de tener acceso a versiones pre-release de distintos software. Así por tanto, espero que en un futuro próximo sea posible a la descarga de Java 6 con el perfil normal. Tampoco sé realmente si existe un pre-release de Java 6, es simplemente una suposición, ya que todo el tema del ADC esta bajo aceptación de licencias de confidencialidad y por tanto la información esta bastante limitada. En fin, al menos he recibido respuesta de Apple, que a mi parecer no es poco.

Variables Foo y Bar

Es habitual encontrar como nombres de variables sobre todo en tutoriales y demás los famosos foo y bar, pero de verdad alguien se ha preguntado alguna vez ¿de donde viene ese nombre?

Pues la respuesta es cuando menos curiosa. Básicamente parece que el nombre de las variables foo y bar viene de un expresión de la Segunda Guerra Mundial y proviene de la expresión FUBAR (Fucked Up Beyond All Recognition / Repair / Reason / Redemption).

Lo bonito es la de veces que se emplean estos nombres incluso en publicaciones de cierto prestigio. En fin, una curiosidad más del mundo informático, donde las bromas pueden estar implícitas en cualquier expresión.

Además por si fuera poco, he encontrado un grandioso RFC 3092 que se encarga de definir ambos términos y tiene un listado de su uso en los distintos RFC que existen.

Esto me recuerda al también famoso RFC 1149, que define como enviar paquetes IP utilizando palomas como medio de transporte 🙂

Actualización:

Siguiendo con los RFC, acabo de encontrar la actualización del RFC de IP sobre palomas. Es el RFC 2549 e introduce el concepto de QoS (Quality of Service).

Nueva Categoría: Programación

Nueva categoría que incorporo al blog para tratar temas que esten relacionados con la programación ya sea sobre lenguajes de programación, herramientas, entornos de desarrollo o cuestiones relacionadas.