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

The Big Bang Theory

El otro día, descubrí The Big Bang Theory. Es una serie en un tono similar a IT Crowd (de la que no sé si he llegado a comentar algo en blog). Los protagonistas son dos físicos teóricos que conviven en el mismo apartamento. La serie se centra básicamente en el conjunto de estupideces y tonterías que aparecen en un piso con esos habitantes y con la vecina que vive al otro lado del pasillo.

Puede que el humor este en un nivel un poco fuera de lo común, pero de momento, la parte de la primera temporada que he visto, esta bastante bien. Para dar una idea del contenido, dejo unas quotes y unos pantallazos.

Sobre la teoría de cuerdas…
Leonard: At least I didn’t have to invent 26 dimensions to get the math to work
Sheldon: I didn’t invent them, They are there.
Leonard: Yeah? In what universe?
Sheldon: In all of them, that’s the point!

Pantallazos varios

Para más info, esta la página oficial y un canal en youtube.

Tags: ,

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.

PHD Student Life

Puff, demasiado tiempo sin poder escribir ningún post. Pero la verdad es que no he tenido tiempo en absoluto para poder organizarme adecuadamente. Trabajos del Master que entregar, peleas con JNI-C++ y trabajos pendientes por hacer.

Mientras me intento poner al día, dejo una par de viñetas de un nuevo comic que he añadido a la lista de feeds PHD Comics. El comic en sí, es un poco dilbert, pero con una muestra directa de muchas situaciones que un becario de doctorado, Phd student, estudiante con PFC en proceso y muchas más tipologías de personas se encuentran en su día a día🙂

Tags: , ,

Experiencia AppleCare

Finalmente, parece que todo vuelve a la normalidad en lo que a mi entorno de trabajo se refiere🙂 Ya tengo el iMac de nuevo funcionando y he pensado que sería bueno comentar la experiencia con AppleCare aquí en Madrid. He encontrado bastantes post de este tipo referido a ciudades de Estados Unidos y similar, pero muy pocos hablando de Madrid.

Lo primero que hay que decir, es que Apple no tiene ninguna AppleStore en Madrid, por lo que el sitio habitual donde habría que hacer efectiva la garantía no existe. El funcionamiento en España es básicamente recurrir a ciertas tiendas que estan certificadas por Apple y son capaces de dar el servicio AppleCare.

En concreto, yo he llevado el iMac a Benotac que esta situada muy cerca del Gregorio Marañon. Tengo que decir, que el estoy bastante contento con el servicio y la atención al cliente recibida. Son estos casos cuando se comprueba que la persona con la que hablas conoce el mundo en el que se mueve o no. El proceso fue básicamente, llevar el iMac; le conté al técnico lo que había probado y lo que pensaba que era (al final acerté) y me sorprendió que a parte de poder llevar una conversación de entendimiento, también apuntase en la propia "orden de trabajo" (o como lo llamen), los pasos que yo había realizado.

Una vez que se mira qué le pasa al ordenador y que la garantía es válida, el siguiente paso por su parte es pedir las piezas que tienen que ser cambiadas. La cuestión es que Apple no permite tener stock en las tiendas (supongo que filosofía Just-in-time de reducción de stocks), por lo que este es uno de los pasos donde se pierde más tiempo. Decir, que en mi caso, el problema fué la muerte del disco duro. Supongo que es uno de esos ruidos que una vez que lo oyes lo reconoces donde sea. Otro detalle que me ha sorprendido gratamente es que el disco duro nuevo que me han puesto tiene más capacidad que el anterior, por lo que he ganado unos cuantos GB con la reparación.

Y por finalizar, cosas aprendidas / recomendaciones, etc:

  • Cuidado con las fiestas (en mi caso la de reyes) que suelen alterar el funcionamiento habitual de las tiendas.
  • Cuidado con hacer pedidos a Apple después de un keynote (Mac Book Air que se ha empezado a distribuir esta semana pasada), ya que supongo que también habrá un aumento de movimiento en los almacenes y demás.
  • Y muchos más, pero esos para otro día…

Espero que ya que se va normalizando esto, pueda escribir un poco más en el blog, que debido a varias situaciones en estas semanas, lo he tenido un poco abandonado.

Tags: , , , ,

GTD – Getting Things Done

Hace tiempo que descubrí esto del GTD y la verdad, quería esperar un tiempo antes de escribir nada por aquí.

¿Que es GTD?

GTD (Gettings Things Done) es una idea originaria (en cuanto a lo de ponerle nombre) de David Allen. La idea principal detrás de todo esto es la de conseguir organizarse. Realmente soy de la opinión de que esto del GTD es algo que hay que tomarlo como una metodología. Es decir, una recopilación de métodos que ayudan a estar más organizado. Creo que es importante ver en este punto, que la idea de organizarse está muy ligada con la idea de la productividad. Se podría decir a modo dilbert, que lo que se pretende es trabajar menos y producir más.

¿Cómo se hace?

Hay que tener en cuenta que si bien fue David Allen quién le puso nombre a esto de aumentar la productivadad mediante la organización, en realidad hoy en día el término GTD es mucho más amplio. Como decía antes, yo lo veo como una metodología para un problema y como suele ocurrir en el mundo de las metodologías, no hay ninguna 100% cierta🙂

Generalmente se parte de la idea original de GTD que se basa en los siguientes puntos:

  1. Recopilar tareas: Este punto consiste básicamente en hacer un core dump de lo que tenemos en la cabeza a algún soporte de nuestra elección. La idea es que el cerebro vale para mucho más que para ser una agenda.
  2. Procesar las tareas: Una vez se ha efectuado el proceso de descubrir qué cosas hay que hacer, el siguiente proceso es ver qué impacto tienen. Una tarea puede significar tener que hacer otras antes, o puede ser parte de un proyecto, o puede no ser realizable, o puede ser delegable, etc. El objetivo de esta fase es definir claramente qué hay que hacer.
  3. Organizar el tiempo: Una vez que sabemos qué tenemos que hacer, este punto trata de asignar recursos a las tareas. Típicamente es una cuestión de planificación de cuando vamos a llevar a cabo las tareas.
  4. Evaluación periódica: El objetivo de este punto es el de evaluar realmente qué hemos hecho (en términos de tareas finalizadas). Realmente no hay que morirse por haber planificado algo y no haber sido capaz de realizarlo por cualquier motivo; simplemente hay que ver qué ha pasado y seguir adelante.
  5. Hacer: Quizá uno de los puntos más costosos. No sirve de nada pensar, planificar, etc si luego no hacemos lo que hemos dicho.

Como se puede ver, los puntos son bastante genéricos, por lo que realmente existen multitud de adaptaciones de como se traducen esos puntos en el mundo personal de cada uno. A partir de aquí, dependiendo de la metodología concreta, cada punto se efectua de una manera u otra.

¿Cómo se implementa?

La respuesta básica es simplemente hacerlo, es decir, detrás de esto no hay magia ninguna (aunque a veces se venda esto), la efectividad del método reside en lo que cada uno quiera implementar o no. Puesto que lo que hace falta es un soporte en este punto hay que elegir qué tipo de soporte queremos utilizar. Algunas formas de implementación ya sea en papel o mediante algún programa de ordenador son:

  • GTD: El libro original de David Allen, por si alguien quiere leerse la metodología completa.
  • iGTD: Programa bastante potente basado en la metodología original. Ofrece una muy buena integración con otras aplicaciones y en mi opinión uno de los mejores. Disponible únicamente para Mac
  • ThinkingRock: Programa también basado en la idea original. Esta escrito en Java por lo que es multiplataforma. A destacar su forma de mostrar las opciones que facilita el seguimiento de la metodología (se muestra un árbol de posibles cosas que hacer).
  • Tracks: Es una aplicación web escrita en ruby on rails. La aplicación web se mantiene de forma local por lo que requiere la instalación de servidor web, para poder utilizar la aplicación.
  • D*I*Y* Planner: Siguiendo la idea tradicional de una agenda física, lo que se nos ofrece en esta web es una serie de plantillas ya predefinidas que permiten crearnos nuestra propia agenda personalizada. También se ofrecen plantillas para que cada uno se pueda diseñar su hoja personalizada. Se ofrecen en casi todos los formatos posibles: A4, folio, A5, tarjetas, etc.
  • GTD Tiddly Wiki: Quizá uno de los soportes más curiosos. Se trata de un wiki completo implementado en un único archivo mediante toneladas de JavaScript. Es bastante práctico y tiene toda la flexibilidad de un wiki habitual. Ocupa muy poco < 1MB y se puede llevar en cualquier soporte.
  • Internet🙂 Lo mejor en muchos casos es buscar en general qué soporte es mejor para cada persona. Habrá personas que prefieran métodos electrónicos y otras físicos, pero eso ya es trabajo de cada uno.

Un momento, ¿esto no era GTD? ¿dónde esta @work, @home, etc?

Sí, este post trata de GTD, pero como ya he dicho antes, tampoco creo que sea necesario "adoctrinar" en alguna de las distintas metodologías. @work, @home, etc. existen en la metodología propuesta por David Allen, pero no en otras y realmente creo que una de las cosas más importantes que he aprendido durante los intentos de implementación de GTD es que lo mejor es que cada uno busque lo que más se adapte a su situación. Una vez que se tiene algún tipo de organización, los detalles concretos no creo que sean importantes.

Referencias a.k.a algunas web famosas que tratan temas de GTD

Tags:

WTF-Explorer y FTP

El otro día me encontraba probando un navegador con un motor tipo microsoft para ver el funcionamiento de su sistema de descargas. La prueba era básicamente descargar un archivo desde HTTP y FTP y ver qué tal funcionaba el invento. Comencé con FTP, puse la dirección, pulso enter y …

Peazo WTF, resulta que ahora conectarse por FTP requiere Chino simplificado!!! Obviamente en ese momento terminó la prueba con resultado no satisfactorio🙂 Por si alguien imagina algún escenario donde este mensaje tenga sentido, he de decir que el servidor FTP era conocido y tanto los nombres de los directorios como los de los archivos eran UTF-8 como mucho.

Eternity II – Hasta 2 millones de razones para resolverlo

Un post sobre un puzzle, pero no un puzzle de los que habitualmente reciben este nombre; en este caso, el resultado final no es un paisaje, o una fotografía… son hasta 2 millones de dólares. Eternity II es un puzzle que consta de 256 piezas. La finalidad del juego, como en todos los puzzles, es conseguir poner las 256 piezas en el tablero siguiendo las reglas del puzzle.

Cada pieza es un cuadrado dividido en 4 cuadrantes diagonales y cada cuadrante corresponde con un cuarto de una figura predeterminada. Así que lo que hay que hacer es conseguir formar figuras, no encajar una pieza con otra.

Lo más curioso de este juego es el posible premio. Las bases del concurso dicen que hay hasta el 31 de diciembre del 2008 para enviar la solución y la primera persona que responda correctamente recibirá 2 millones de dólares ( supongo que habrá que descontar impuestos🙂 )

Hay que decir, que esta es la segunda versión de Eternity, ya que anteriormente ya se realizó otro concurso con la versión 1 de eternity obteniéndose un ganador (1 millón de libras).

La cuestión es ¿dos millones por hacer un puzzle? Como ya he dicho el puzzle, es de lógica, por lo que la complejidad del mismo no se asemeja a lo que podría ser la complejidad de hacer un puzzle "de fotografía". Si hacemos cuentas tenemos:

  • 256 piezas, de las cuales 1 ya esta correctamente posicionada
  • 60 piezas que van en el borde del puzzle
  • 4 piezas dentro de las anteriores que estan en las esquinas del puzzle

Con lo que tenemos que el espacio a explorar son 4(255-60)*60! = 2.09832695 × 10199, suponiendo que no me haya confundido… (algo tremendamente posible)

Obviamente es un espacio bastante grande, pero bueno; en un principio he comenzado con una aproximación "humana" más que nada, por ver cómo funciona el puzzle y ver qué tipo de heurísticas se podrían aplicar.

Eso sí, no descarto el abordar el problema de forma computacional, porque aunque parezca un problema bastante complejo, creo que hay algunas heurísticas o metodologías que podrían reducir ampliamente el espacio de búsqueda efectivo.

En fin, veremos si hay suerte🙂

Actualizo: olvidaba las referencias

Referencias:

Crear un Jar incluyendo librerías enlazadas

No es la primera vez que me encontraba en esta situación ¿cómo meter todos los .jar referenciados de un proyecto en un único .jar? Puede que no sea la mejor solución siempre, pero para programas pequeños que igual necesitan de un par de API en .jar, creo que al menos puede ser útil en ciertos casos (eso sí, ni idea de si afecta al rendimiento…)

El como hacerlo se basa en utilizar un plug-in de Eclipse llamado FatJar. Así por tanto, lo primero es instalarlo en eclipse. Siguiendo las instrucciones del creador, se puede o bien descargar el .zip e instalar a partir de ahí o utilizar la URL del Update Manager.

Una vez actualizado eclipse, ya tenemos dos formas posibles de exportar con estas condiciones, o bien a través del menú contextual que sale al seleccionar el proyecto, donde aparece la opción "Build Fat Jar"

O también se puede utilizar el diálogo de exportar, donde aparece la opción "Fat Jar Exporter"

Lo demás es simplemente seguir el asistente, poner que incluya las librerías referenciadas y tenemos un .jar completo🙂

iMac muerto, en busca de AppleCare

Buff, uno de los post que nunca querría haber tenido que escribir, pero así son las cosas. El día 31 algo extraño empezó a pasar en el iMac, respuestas muy lentas a las acciones y al final una parada total. Reinicio y más problemas: no se encuentra el sistema de ficheros, no se puede montar el disco, problemas en la estructura del sistema de archivos, etc.

Al final, después de pelearme un buen rato, conseguí dar formato al disco a través de uno de los dvd (no recuerdo si el de Tiger o el de Leopard). Me puse a instalarlo y aunque la instalación fue más lenta de lo normal, terminó satisfactoriamente instalándose Leopard.

Me puse a instalar algunos programas y bueno, ha aguantado en esa situación un par de días, hasta hoy😦 Básicamente, he ido a arrancar el sistema y se ha quedado intentando arrancar, mis sospechas indicaban que era problema del disco duro y finalmente he oido ese ruido tan característico de fallo del disco duro. A la vista de esto, he pasado de seguir viendo si yo podía arreglarlo; ya que hay una garantía y parece un defecto hardware, me he dispuesto a ver cómo se hacía efectiva la garantía en España.

España dentro del mundo Apple es un país raro en cuanto a que no hay un Apple Store físico, por lo que hay que buscar servicios oficiales de Apple. La única diferencia es que la tienda tiene otra titularidad, pero los técnicos se suponen con certificación oficial, por lo que no debería existir ningún tipo de problema en hacer que la garantía cubra los gastos de reparación.

Y hasta aquí puedo contar, creo que me quedaré sin ordenador unos 10-15 días aproximadamente, por lo que ya iré actualizando el post. Esperemos que el servicio post-venta funcione adecuadamente…