Archive for the ‘ programación ’ Category

Cambiar el nombre en el Javadoc de NetBeans

Siempre me ha tocado bastante las narices que NetBeans me genere siempre las nuevas clases incluyendo en el javadoc la etiqueta @author con mi nombre de usuario, es bastante molesto tener que irlo cambiando cada vez que generas una nueva clase y al final nunca miraba como se podía cambiar. Hasta hoy, que tengo un día menos perezoso de lo normal y coincidía que empezaba un proyecto nuevo (una práctica para la universidad) he buscado a ver como podía solucionarlo. Resulta ser bastante fácil.

NetBeans tiene una serie de plantillas que utiliza cada vez que generamos un nuevo fichero, en particular la que nos interesa en éste caso es la plantilla que usa cuando creamos una nueva clase java. Para encontrar éste fichero iremos a Tools > Templates bajamos hasta las últimas entradas y desplegamos la que se llama User Configuration Properties que contendrá User.properties que realmente no es más que eso, un fichero properties de java. Lo seleccionamos y pulsamos en la esquina inferior derecha el botón Open in Editor.

Se nos abrirá el fichero en cuestión y en mi caso, NetBeans 6.7.1, me aparecen únicamente comentarios. Si echamos un vistazo veremos que la última línea dice algo así como:

#user = Your Name <your.name at your.org>

La descomentamos quitando el # del principio de la línea y cambiamos el valor por el texto que queremos que aparezca tras la etiqueta @author del javadoc de nuestro código. Ojo! No es necesario ponerlo entre comillas, simplemente poned el texto tal cual.

No estaría demás mirar que más opciones se pueden configurar en éste fichero, igual nos podemos ahorrar trozos de código que metemos en todas las clases (constructores por defecto, constructores copia, sobrecargas del toString, del equals…). Lo que me escama es que no haya ningún diálogo para configurar ésto sin tener que tocar los ficheros aunque vete a saber… viendo lo que acojona la ventana de configuración de netbeans igual si que lo hay 😛

Anuncios

Cómo crear un vídeo de tu SVN con CodeSwarm

Seguro que habéis visto vídeos por ahí donde se ve la evolución del código fuente de un proyecto de una forma visual bastante atractiva. Salen los nombres de los usuarios del SVN que hacen cambios y se ven los ficheros como “bolitas” de colores que se van juntando alrededor del usuario… cómo es un poco dificil de explicar os dejo el vídeo que he generado de la práctica de PL en la que estoy trabajando:


Mola, eh? No es que sea demasiado útil (aunque se puedan sacar ciertos datos “a ojo”) pero queda bonito para ponerlo en el blog del proyecto o en la página de presentación del proyecto. Muy 2.0, como dirían algunos. Siguiendo el link encontraréis las instrucciones para generar vuestros vídeos a partir de cualquier repositorio SVN.

Fuente: Documentación de CodeSwarm

Sigue leyendo

Bases de datos. ¿Borrado o “Borrado”?

Por si lo de borrado y “borrado” no queda muy claro, estoy hablando de borrado físico y borrado lógico. Más específicamente en el campo de las bases (en nuestros discos duros ya depende el tema del sistema de fichero que usemos y como lo tengamos configurado :P)

Llevo un par de días poniéndome al día con los feeds y hoy me ha tocado éste post de dos ideas en el que hablan de éstos dos tipos de borrados al trabajar sobre base de datos. En el artículo se dan argumentaciones de sobra para evitar el borrado físico y optar por el borrado lógico, es decir, ocultar esos datos en vez de eliminarlos definitivamente. El primer contrapunto que se me ocurrió fué lo que dice el primer comentario del post, la LOPD y sus normas sobre qué datos se pueden guardar y cuales no porque, aunque los estés “ocultando” a los usuarios esos datos siguen almacenados ahí y te puedes llevar un marrón. Y más si nos metemos en algún ejemplo tan de moda como las redes sociales donde hay datos muy sensibles.

La solución que proponen es basarse en estados, es decir, los datos no sólo pueden “estar o no estar” en la base de datos, sino que pueden estar en distintos estados (toma agujero de gusano redundancia), por ejemplo: activo, inactivo, obsoleto, borrado, etc… Supongo que ésto palía en gran medida el problema de las inconsistencias en una base de datos (donde puede darse el caso de que tengamos que “borrar” ciertos datos, pero tengamos que conservar otros que “dependen” de esos datos).

Una de las soluciones que me encontré en una aplicación en la que estaba trabajando era el uso de fechas. Al principio me extrañó tener tantos campos de fechas en cada tabla, pero hablando con quien diseñó la base de datos me explicó que esos campos de fechas indicaban el “tiempo de vida” de esa información. Así no sólo sabíamos “cuando” una información “existía” o no sino que además teníamos la información adicional de saber durante cuánto tiempo y cuándo existió esa información (un poco hetéreo pero si lo aplicas, por ejemplo, a productos en venta, empleados, etc… empieza a coger sentido).

Me gustaría que aportáseis información adicional a ésto, ¿conocéis otras soluciones aplicables? ¿sabéis cuáles se usan más?

Novedades del JDK 7

Hoy, revisando noticias atrasadas, he visto la de Dos Ideas, sobre “Lo Nuevo en el compilador del JDK 7” y, aunque sea una noticia que incluya “java” y “compilador” en una misma frase (xDDDD) las explica muuuuy bien.

Entre las que más me han gustado a mi hay de todo, funcionalidades nuevas y también cosillas que simplifican bastante la forma de trabajar con cosas que ya existían.

Voy a resaltar las que me han parecido más interesantes:

  • Switch sobre String
  • Gestión Automática de Recursos
  • Mejoras en los números (literales numéricos)
  • Soporte para Collections

Sigue leyendo

Argumentos variables en Java

Nota rápida. A ésto no le di gran importancia nada más verlo, pero si tienes en cuenta las llamadas a las funciones ves donde está la ventaja 😉

Un método:

    public static void jeje(String[] strs) {
        for (String s:strs) {
            System.out.println(s);
        }
    }

y otro método:

    public static void jojo(String… strs) {
        for (String s:strs) {
            System.out.println(s);
        }
    }

Prácticamente igual y, seamos sinceros, no supone ninguna diferencia escribir uno en vez del otro. De hecho, para Java es el mismo método. ¿entonces? ¿para qué voy a escribirlo de otra manera?

Como siempre se trata de comodidad, veamos ahora como llamar a éstos dos métodos. El primero:

jeje(new String[]{“a”,”b”,”c”,”d”});

mientras que para llamar al segundo nos basta con ésto:

jojo(“a”,”b”,”c”,”d”);

Mucho más legible y menos engorroso. Además, si quieremos trabajar con índices, en ambos casos, el parámetro strs es un array. Tanto en una declaración como en otra podemos hacer un strs.lenght() o strs[i].

Tampoco os preocupéis por la eficiencia porque, no lo he mirado del todo, pero estoy casi seguro de que el analizador léxico transformará ese String… y la llamada en operaciones sobre arrays directamente, es sólo potencial de cara al desarrollador.

Fuente: LuAuF

Twitter en Java

Como ya dije el otro en el post en el que probábamos Twitter desde python, hoy cuento como hacer lo mismo desde Java.

La librería que vamos a utilizar para acceder a los servicios de twitter es Twitter4J, aunque hay alguna otras por ahí que también promete buenos resultados (como java-twitter). Aquí os dejo el link de descarga del zip con los jars y la página con los ejemplos en los que me he basado para probarlo.

Nuestro primer ejemplo consistirá en actualizar nuestro estado en twitter (he cambiado el orden, no por nada, sino por seguir el orden de los ejemplos originales), viene a ser algo como ésto:

import twitter4j.Twitter;
import twitter4j.TwitterException;
[…]

Twitter twitter = new Twitter(“nuestro_username“,”nuestro_password“);
twitter.updateStatus(“Twitting from Java…”);

Tan sencillo como en el ejemplo de python, una línea más si contamos el incluir la excepción necesaria. Aquí paso de la excepción porque sólo es un ejemplo 😉

Vamos con el siguiente caso, mostrar el estado de las personas que estamos siguiendo en twitter:

import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.User;
import java.util.List;
[…]

Twitter twitter = new Twitter(“nuestro_username”,”nuestro_password”);
        List<User> friends = twitter.getFriends();
        for (User f:friends) {
            System.out.println(f.getScreenName() + “: ” + f.getStatusText());
        }

Como vemos es también muy sencillo, igualito al ejemplo del otro día en python. Hay una sóla cosa que no me gusta demasiado porque puede liar… ¿por qué el objeto se llama “User” y el método “getFriends”? vamos, canta un poco cuando el método “getFriends” devuelve un objeto de tipo “User”, sería mucho más lógico que devolviese un objeto de tipo “Friend”. Pero bueno, sería sólo un cambio de nombre de la clase, aunque sería un poco más claro. Eso suponiendo que yo esté haciendo las cosas bien…

Quedan más ejemplos, en el link que os dejado arriba cubren también el envío/”recepción” de mensajes directos, la búsqueda de tweets, paginación, autenticación mediante OAuth (como se hace Taske con RememberTheMilk), … pero todo eso se escapa de lo que quería mostrar.

Me esperaba que éstos ejemplos ocuparan bastante más en java que lo que ocuparon en twitter (y que sería bastante más lento) pero la verdad es que las dos APIs son clavaditas, un puntazo! 😀

Posiblemente me anime a hacer algo que permita utilizar twitter para llevar los logs de aplicaciones (sobretodo ahora, que si vuelvo en verano, la aplicación que estaba haciendo en el curro pasa a pre-producción en un par de delegaciones :D), algo muy básico, pero que permita controlar los posibles errores sin tener que coger el teléfono cada dos por tres 😛

Twitter en Python

De vez en cuando hago algún que otro escarceo con python, sobre todo ultimamente, para salir un poco de la monotonía de trabajar con java a diario (ojo, que no digo que no me guste java, me encanta, y ahora mismo es el lenguaje en el que hago casi cualquier cosa “grande”), pero me llaman mucho la atención los lenguajes de scripting y éstos días de exámenes estoy mirando algo en los momentos de descanso como ahora.

Lo que más me ha llamado siempre la atención de python es la sencillez con la que se hacen las cosas, en éste caso voy a dos pequeños ejemplos sobre twitter.

El primero, saca un listado de la gente a la que seguimos en twitter y su último estado:

import twitter
# conectamos:
twit = twitter.Api(‘nombreUsuario’,’passwordUsuario’)
# pedimos la lista de amigos:
friends = twit.GetFriends()
# recorremos la lista de amigos mostrando…
for f in friends:
    # el nombre:
    print f.GetName()
    # el estado:
    print f.GetStatus().GetText()

y listo, creo que con los comentarios se entiende perfectamente 😉

El otro ejemplo, va a cambiar nuestro estado:

import twitter
# conectamos:
twit = twitter.Api(‘nombreUsuario’,’passwordUsuario’)
# actualizamos nuestro estado:
twit.PostUpdate(‘twtting from python!’)

y listo otra vez 😉

Éste lenguaje cada vez me sorprende más, tanto por la sencillez con la que se hacen las cosas, como por la potencia que tiene 😀

Además, se me ocurre que a twitter se le puede dar una gran utilidad como herramienta para hacer un seguimiento de aplicaciones, al menos, en el curro, me vendría de perlas 😀 (tomo nota mental)

PD: Si no lo tenéis instalado os dirá que no encuentra la librería de twitter para python. En ubuntu basta con instalar el paquete python-twitter.