Desarrollador Independiente

Es lo que soy a partir de hoy, tras un último día de trabajo un poco raro he dejado ya Net2u y aprovecho esta semana para cerrar algún tema pendiente, para empezar la semana que viene completamente centrado.

Es algo que desde que empecé a estudiar esto de la informática siempre me ha rondado por la cabeza, y ya con bastante experiencia, muchas ganas y mi punto de inconsciencia, creo que ya ha llegado el momento de lanzarse a intentarlo ahora como autónomo y, si todo va bien, porqué no crear una empresa en el futuro.

¿Tendrá algo que ver el ya conocido como el virus de jaiku?, sin duda, eso se parece cada vez más a la mafia de PayPal XD.

Por ahora empiezo bien, el verano ya lo voy a tener ocupado completamente. Tendré que dedicarle tiempo al Summer of Code que empezó oficialmente ayer, a un proyecto que está en el horno y... bueno esto que lo hagan público otros ;). Aparte tengo por ahí un par de pet-projects pendientes que por el momento van a tener que esperar.

A nivel de tecnología, hoy por hoy puedo desarrollar proyectos en PHP y Java.
Por el momento PHP lo tengo pensado sólo para proyectos pequeños que necesiten un hosting económico, aunque quizás acabe ojeando algún framework por si acaso y tienen todos los números CodeIgniter o Zend, por su sencillez probablemente sería el primero.
En Java los frameworks que conozco bastante bien son Struts(para mantenimientos/ampliaciones), JSF(MyFaces) y Grails, es probable que tal y como me vaya descargando estudie Spring MVC.
Otro de los frameworks que tengo que estudiar es Ruby on Rails, este sí que será en breve, hace un tiempo que hice mis primeras pruebas con este framework, me pareció interesante, y he de decir también que el soporte de NetBeans a Ruby y RoR me pareció bastante bueno.

Por otro lado, tras el verano, tengo pensado empezar a mover en serio jLibrary y a dar soporte para integraciones con otras aplicaciones o para desarrollar aplicaciones usándolo como base.

Muchos planes y sólo una persona, sólo sé una cosa, que no me voy a aburrir :).

Codificación de carácteres y Java

Hace unos días estuve peleándome(otra vez) con la codificación de carácteres en Java, se puede convertir en algo divertido el no saber exáctamente con qué codificaciones trabajas en cada momento cuando tienes varios orígenes de datos y recursos.

La cuestión es que al estar utilizando Grails que por defecto en la parte web utilizará UTF-8 para generar el html(se puede modificar, pero mejor usar UTF-8 para la internacionalización de carácteres), había que tratar de poner todas las codificaciones de carácteres en común (bases de datos, ficheros de texto, ficheros javascript...).

Primero, tenemos que asegurarnos de que nuestro IDE/editor guarde nuestros ficheros con formato UTF-8, igual que nuestra base de datos guarde el contenido con esta codificación, en MySQL:
CREATE DATABASE mydatabase CHARACTER SET utf8;
CREATE TABLE mytable (
...
) ENGINE=InnoDB CHARSET=utf8;

En PostgreSQL:
CREATE DATABASE mydatabase WITH ENCODING 'UTF8';
...

Por otro lado nos encontramos que Java utiliza nativamente UTF-16 (ver el api de la clase Charset) "The native character encoding of the Java programming language is UTF-16", por lo que Groovy y Grails heredan esta codificación de carácteres.

Para seguir la uniformidad, la lectura/escritura de ficheros desde java la debemos hacer en UTF-8, la lectura la podemos hacer por medio de un InputStreamReader pasándole un FileInputStream y para la escritura por medio de un OutputStreamWriter con un FileOutputStream, y diciéndoles a ambos contructores con qué codificación, en nuestro caso UTF-8:
InputStreamReader isr = new InputStreamReader(myFileInputStream, "UTF-8")
...
OutputStreamWriter osw = new OutputStreamWriter(myFileOutputStream, "UTF-8")

Por último, y para rizar el rizo, nos encontramos que los ficheros Properties(y ResourceBundles) se cargan con codificación ISO-8859-1, por lo que en este caso nuestro editor debe escribir con esta codificación, y para leerlo programáticamente podemos hacer la transformación de la codificación a nivel de byte, esto sería:
Corregido por los comentarios de GreenEyed
ResourceBundle bundle = ResourceBundle.getBundle("com.danilat.foo")
String valueIso = bundle.getString(key)
String value = new String (valueIso.getBytes(), "ISO-8859-1");

Y en caso de que necesitemos forzar la conversión a UTF-8 de una cadena:
String valueUtf8= new String(string.getBytes("UTF-8"));

Por último, no debemos olvidarnos de añadir el tag meta content-type con el charset UTF-8 en el html, para que los navegadores sepan con qué codificación estamos mostrando nuestro contenido:
[meta http-equiv="content-type" content="text/html; charset=UTF-8"]

Como bonus, para Grails no es necesario ya que la codificación de carácteres es configurable en el Config.groovy, pero si quisieramos devolver contenido UTF-8 desde un Servlet o con un framework donde no fuera posible configurarlo, simplemente debemos acceder al objeto response y modificar la codificación de la respuesta :
response.setCharacterEncoding("UTF-8");

Si alguien quiere más explicaciones sobre codificaciones de carácteres y en particular sobre unicode, hay un artículo que para mi es de referencia de Joel Spolsky sobre Unicode, en inglés. También es interesante un post de Joaquín Cuenca en Programa con Google sobre el tema.

Por cierto, mucho cuidado con el Byte Order Mark (BOM) en ficheros UTF-8, que nos llevará a situaciones extrañas ya que Java lo reconoce como un espacio en blanco al principio de un fichero.

Entrevista en el Periódico de Aragón

Hoy se ha publicado una pequeña entrevista en el periódico de aragón que me hizo Daniel Torres Burriel, para la columna semanal que escribe sobre blogueros aragoneses.

entrevista en el peridocio de aragon

La verdad es que me costó mucho dar una explicación sobre qué es Grails y qué voy a hacer en el Summer of Code para un periódico, para que quien lo leyera al menos se hiciera una mínima idea (no se si lo he conseguido).

Por otro lado, parece que al final me han descubierto el porqué de que este blog se llame arragonán ;), quien quiera saber más en la wikipedia hay bastante información sobre el dialecto ribagorzano.

PD: Sí, lo sé, esto es autobombo :)

Fuckowski, memorias de un ingeniero

Hacía tiempo que conocía Fuckowski, memorias de un ingeniero y que tenía pendiente leer este libro, y como en las últimas semanas me lo han recomendado varias veces, he aprovechado este puente de mayo para leerlo. No puedo dejar de recomendarlo(se puede leer online desde el enlace), sobre todo a gente que trabaje en este sector, me tuvo enganchado desde la primera a la última línea y hasta altas horas de la madrugada.

Para quien no lo conozca, el libro es una novela autobiográfica en clave de humor de un ingeniero informático. El libro cuenta multitud de situaciones que pueden parecer surrealistas, pero que son bastante comunes dentro del sector TIC(aunque seguramente puedan serlo también en otros secotres), con un toque de humor simplemente genial.

Un complemento perfecto a la tira cómica de Dilbert y a la película Trabajo Basura.