Los 10 mandamientos del Programador Java

por 1 comentario »

programming

Aunque el título se refiera al programador Java, estas reglas son aplicables a cualquier tipo de programador. A excepción de la regla número 6, que es específica al lenguaje de programación Java.

1. Comenta el código.

Cuando estamos escribiendo código nuevo, es fácil entender lo que se está haciendo, pero si no tocamos ese código por un periodo de tiempo y tenemos que volver al mismo, ya no es tan obvio. Comentar el código te ayudará a entender más rápidamente la lógica del programa.

2. No compliques las cosas.
Muchas veces queremos solucionar algún problema de la forma más enredada porque está guay. Busca la forma más simple de resolver las cosas. Esto te ayudará a entender el código mejor y a mantenerlo de una manera más eficiente y es menos propenso a errores.

3. Menos es más, no es siempre bueno.
Muchos lenguajes de programación te permiten concatenar funciones y muchas veces queremos hacer varias cosas a la vez en una línea. Esto dificulta la lectura y la lógca del código.

4. Evita el hard coding.
Usa las constantes, de este modo si necesitamos cambiar este valor, sólo tenemos que hacerlo en la constante y no en el resto del código. Si es valor es algo que va a ir cambiando a lo largo de la vida del programa, sería mejor usar ficheros externos de configuración (XML, propiedades, base de datos, etc), de esta forma no tenemos que modificar el código, recompilar y redistribuir la nueva versión.

5. No reinventes .
Aprovéchate de los marcos de trabajo (frameworks) existentes y de los patrones de diseño. Están ampliamente probados.

6. Cuidado con los prints y la concatenación de Strings.
Normalmente tendemos a escribir prints por todo el programa, con la intención de depurar nuestra aplicación. Esto puede afectar seriamente al rendimiento de la aplicación. Usa algún tipo de mecanismo para que esos prints solo se ejecuten cuando estemos en la fase de desarrollo. La concatenación de String puede ser otra de las operaciones que afectan al rendimiento del programa. Si vas a hacer muchas operaciones de concatenación, en Java la clase String es inmutable, por lo tanto cada vez que haces una concatenación estás desreferenciando los Strings que estas concatenando y creando un nuevo String. En Java tienes disponibles 2 clases que aumentan drásticamente el rendimiento para este tipo de operaciones. StringBuffer y StringBuilder. StringBuilder es incluso más rápido que StringBuffer, ya que este no es thread-safe. Por lo tanto si el código de desde el que estas haciendo las concatenaciones no es multihilo usa StringBuilder, si no, usa StringBuffer.

7. Pon atención al interfaz de usuario.
El aspecto del interfaz de usuario, la forma de navegar por el mismo y la comodidad a la hora de usar el mismo, van a depender mucho de la aceptación y el éxito de tu aplicación. Sigue el mismo estilo en toda la aplicación, escoge cuidadosamente el título de las ventanas, etiquetas de texto, etc. Sigue el mismo diseño que otros sistemas ampliamente aceptados. Pon tu interfaz a pruebas con tu mujer, marido, novi@, amig@, etc. Para ver como se mueve por la aplicación, etc.

8. Documentación.
Es lo que personalmente odio más. Escribir documentación es muy pesado y en el momento en el que estamos trabajando en un proyecto todo tiene sentido y fácil de seguir. Pero de nuevo, cuando tenemos que volver al proyecto después de un tiempo ya no nos parecerá tan obvio como pensabamos. Además si el proyecto no era lo suficiente grande como para requerir a más de una persona para trabajar en el mismo, recuerda que el proyecto puede crecer y requerir a uno o más programadores incorporarse al proyecto. O simplemente el proyecto pasa a manos de otra persona. Es una de las tareas más pesadas, pero de las que más que se agradecen a lo largo del tiempo.

9. Unidades de testeo.
Es una muy buena y reomendada práctica que debemos hacer incluso antes de escribir nuestros paquetes, librerías, etc. Y son las unidades de testeo. Esto nos va a ayudar de una forma muy rápida si nuestras funciones funcionan como deben. Nos va ahorrar mucho tiempo en el futuro (cada vez que tengamos que modificar nuestras funciones) y es otra de las tácticas que nos ayudará a reducir el número de errores en nuestro programa.

10. Calidad, no cantidad.
Es mejor entregar un programa con las funciones básicas bien desarrolladas, a entregar un programa lleno de funciones y que cada dos por tres el mismo se cuelgue o no haga lo que se supone que tiene que hacer.

Esta artículo no es una traducción del original. He usado el original como base, añadiendo mis propios puntos de vista basados en mi experiencia personal.

Post to Twitter

Entradas relacionadas:

Programación enero 31st 2009

Preparando super data centers para el boom del cloud computing

por Sin comentarios »

datacenters

Microsoft, Google y otros gigantes de la informática están preparando data centers gigantescos para hacer frente al inminente boom del cloud computing.

Alrededor del río Columbia al noroeste de los Estados Unidos, es donde Google, Microsoft, Amazon y Yahoo (y alguna otra) están construyendo enormes almacenes para albergar la tecnología más avanzada en computación. Unos +10.000 servidores se instalarán en estas modernas instalaciones donde una de las premisas principales es conseguir la energía eléctrica de la forma más barata, si es posible sin coste alguno. Otro factor es el agua, ya que toda la refrigeración de estos ordenadores se hará mediante circuitos líquidos.

Estamos a punto de dar un nuevo salto en la evolución de Internet, lo que sabemos si será adelante o atrás ;) , ya que existen muchas críticas al cloud computing.

Por lo menos el poder computacional de estas instalación es realmente espectacular, ya que este es sólo el comienzo ¿qué ocurrirá cuando haya un millón de servidores? …

Puedes ver un excelente y completo artículo en:

IEEE Spectrum

 

Post to Twitter

Entradas relacionadas:

Ciencia, Hardware, Supercomputación enero 31st 2009

Tutorial de “incron”

por Sin comentarios »

linux_tux

Incron es un demonio (de los buenos :-) ) que monitoriza los eventos que ocurren en el sistema de fichero. Incron esta basado en Inotify.
Con Incron, entre otras muchas cosas, puedes crear un sistemas de backups, control de versiones, estadísticas del uso de ciertos ficheros, notificar a otro demonio sobre el cambio en su fichero de configuración, etc.

Instalación:
La instalación es muy sencilla, en mi caso, uso Ubuntu 8.10.
Desde la línea de comandos: sudo aptitude install icron
Una vez que se ha instalado, automáticamente arranca el demonio.

Incron funciona a base de tablas de reglas. Las sintaxis básica de estas reglas es la siguiente:
<directorio/fichero> <evento> <comando>
La separación entre cada elemento debe ser de uno o mas espacios.
<dirección/fichero> – es el directorio o fichero que queremos que Incron monitorice.
<evento> – es el evento que queremos que Incron monitorice. Se pueden definir mas de un evento en la misma regla, separándolos por comas.
<comando> – es el comando que queremos que Incron ejecute.

Antes de poder usar incrontab, tenemos que darle permisos al usuario con el que queramos crear nuestras reglas. Incron dispone, al que cron, de dos ficheros llamados /etc/incron.allow y /etc/incron.deny. Para darle permisos a un usuario, sólo tenemos que editar el /etc/incron.allow añadirlo ahí. Incluso el usuario root debe de ser añadido a dicho fichero si queremos ejecutar dicho comando como root. Otra forma, que yo personalmente no recomendaría, sería borrar el /etc/incron.allow. De esta forma todos los usuarios tendrían permiso.

incrontab.
incrontab es comando que nos va a permitir manipular nuestras reglas.

incrontab -l : nos muestra las reglas que tenemos definidas.
incrontab -t : nos muestra la lista de eventos soportados.

IN_ACCESS: Un fichero es accedido
IN_MODIFY: Un fichero es modificado.
IN_ATTRIB: Cambio en los Metadatos (permisos, atributos, fecha, etc.)
IN_CLOSE_WRITE: Fichero que se abrió en modo escritura ha sido cerrado.
IN_CLOSE_NOWRITE: Fichero que se no abrió en modo escritura ha sido cerrado.
IN_OPEN: Se ha abierto un fichero.
IN_MOVED_FROM: Fichero ha sido movido fuera del directorio que estamos monitorizando.
IN_MOVED_TO: Fichero se ha movido al directorio que estamos monitorizando.
IN_CREATE: Creación de un nuevo fichero o directorio en el directorio que estamos monitorizando.
IN_DELETE: Un fichero o directorio ha sido borrado en el directorio monitorizado.
IN_DELETE_SELF: El fichero o directorio que estaba siendo monitorizado ha sido borrado.
IN_CLOSE: Incluye los eventos IN_CLOSE_WRITE y IN_CLOSE_NOWRITE.
IN_MOVE: Incluye los eventos IN_MOVED_FROM y IN_MOVED_TO
IN_ALL_EVENTS: Monitoriza todos los eventos.
IN_DONT_FOLLOW: No desreferencia el path si es un enlace simbólico.
IN_ONLYDIR: Sólo monitoriza el path si es un directorio
IN_MOVE_SELF: Cuando el fichero o directorio es movido.
IN_ONESHOT: Monitoriza el path para un sólo evento.

incrontab -e : nos permite editar las reglas.
incrontab -r : borra la tabla de reglas por completo. OJO, ¡NO PIDE CONFIRMACION!
incrontab -d : recarga la tabla de reglas. Cuando modifiquemos nuestra tabla de reglas, para que se haga efectivo, tenemos que ejecutar este comando.

incrontab -u : ejecuta incrontab como otro usuario. La intención de esta opción es el poder modificar la tabla de reglas de los usuarios del sistema que no suelen tener shell, como apache, postfix, etc. Sólo aquellos usuarios con privilegios de root pueden hacer uso de esta opción.

incrontab -f : nos permite indicarle un fichero de configuración. Por defecto usa /etc/incron.conf. En este fichero entre otras cosas personalzar el editor de texto usado cuando ejecutamos incrontab -e. También podemos cambiar la localización de los ficheros incron.allow, incron.deny, los directorios donde se almacenan las tablas de reglas, etc. Para más información: man incron.conf.

Caracteres especiales
Estos caracteres los podemos usar como parámetros al comando que se ejecuta cuando se dispare un evento. Por ejemplo si estamos monitorizando la creación de ficheros en /tmp, con $# podemos saber el nombre del fichero que ha sido creado.

$$    símbolo del dolar.
$@   path del fichero o directorio.
$#   Nombre del fichero o directorio, sin el path.
$%   nombre del evento que se disparó
$&   número del evento que se disparó

Veamos algunos ejemplos:

Ejecuta incrontab -e añade la siguiente línea:
/tmp IN_ALL_EVENTS echo “$@/$# $%”
Ahora recargamos la nuestra tabla de reglasÑ
incrontab -d
A continuación creamos un fichero en /tmp
touch /tmp/pp
El comando echo manda la salida al log del sistema, por lo tanto hacemos:
tail /var/log/syslog

Jan 30 16:27:02 laptop incrond[4136]: table for user tuxotron created, loading
Jan 30 16:27:22 laptop incrond[4136]: table for user tuxotron changed, reloading
Jan 30 16:27:30 laptop incrond[4136]: (tuxotron) CMD (echo “/tmp/pp IN_CREATE”)
Jan 30 16:27:30 laptop incrond[4136]: (tuxotron) CMD (echo “/tmp/pp IN_OPEN”)
Jan 30 16:27:30 laptop incrond[4136]: (tuxotron) CMD (echo “/tmp/pp IN_ATTRIB”)
Jan 30 16:27:30 laptop incrond[4136]: (tuxotron) CMD (echo “/tmp/pp IN_CLOSE_WRITE”)

Este ejemplo monitoriza todos los eventos en el directorio /tmp y ejecuta el comando echo con el path completo (incluido el nombre del fichero) y el nombre del evento que se disparó.

Otros ejemplos:
/usr/bin IN_ACCESS,IN_NO_LOOP abcd $#
En este caso monitorizamos los accesos de lectura en /usr/bin. Le pasamos como argumento al comando abcd el nombre del fichero al cual se ha accedido y además se deshabilita la monitorización del evento en cuestion hasta que abcd termine su ejecución.

/home IN_CREATE /usr/local/bin/abcd $#
Con esta regla monitorizamos la creción de ficheros o directorios en el /home. Básicamente, esto es, cada vez que se cree un nuevo usuario en el sistema.

/etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart
Ahora queremos que cada vez que se modifique el ficheros de configuración de apache, se reinicie el servidor de apache y así hacer efectivo los cambios.

Como podéis ver las opciones son infinitas.
Ya para acabar, comentar que existen  2 tipos de tablas de reglas. Las de usuario y las del sistema.
Las tablas de reglas de usuarios, son creadas como su nombre indica por los propios usuarios y son almacenadas por defecto en /var/spool/incron. La tabla de reglas del sistema con creadas normalmente por el usuario root y ejecutan alguna tarea del sistema. Estas tablas se almacenan en /etc/incron.d. Estos directorios, pueden ser modificados en el dichero /etc/incron.conf.

Pues esto es todo, espero que se entienda lo escrito y que compartáis vuestras ideas de uso de incron.

Referencias:

http://inotify.aiken.cz/?section=inotify-cxx&page=doc&lang=en
http://www.debian-administration.org/articles/581
http://www.howtoforge.com/triggering-commands-on-file-or-directory-changes-with-incron
http://www.linux.com/feature/144666

Post to Twitter

Entradas relacionadas:

Linux, Seguridad enero 30th 2009

Precuela de “La Cosa”

por 3 comentarios »

la_cosa

Esta iniciativa nos gusta más, en vez de cargarte una obra maestra como “La Cosa” de John Carpenter, puedes hacer una precuela que a lo mejor hasta nos gusta y puede que encaje perfectamente en la historia original. En caso contrario puedes obviarlas, como por ejemplo hago yo con las precuelas de “La Guerra de las Galaxias“, que no existen en mi universo.

Esta vez la película nos situará en los hechos acaecidos anteriormente a los relatados en “La Cosa“, en un campamento noruego y cómo descubren al alienígena.

Otra buena noticia es que el productor ejecutivo de BattleStar Galactica  (una de las mejores series de Ciencia Ficción de todos los tiempos ¿verdad amigo Freeman? ;) ), Ron Moore, ha escrito el guión.

Esperaremos impacientes.

Visto en:

The Fire Wire

Post to Twitter

Entradas relacionadas:

Cine, Sci-Fi y Fantasía enero 30th 2009

PowerShell, introducción y recursos

por 2 comentarios »

powershell_icon

Windows

Si eres administrador de sistemas Windows, tarde o temprano tendrás que empezar a manejar el PowerShell si quieres automatizar algunas operaciones avanzadas del sistema para obtener un mejor control de todos tus servidores y ordenadores clientes, así como de los usuarios.

Para poder ejecutar los scripts necesitamos la plataforma .NET Framework que puedes descargar desde aquí  (x86) y por supuesto, el PowerShell para XP que puedes descargarlo en este enlace (para otras versiones prueba en la web de Microsoft).

Vamos a ver un ejemplo.

Primero copia el código de abajo en la superpoderosa herramienta llamada “NotePad;) y luego guárdala con el nombre que quieras pero con la extensión *.ps1, PowerShell sólo reconoce esta extensión para ejecutar cualquier programa script:

New-Object System.io.DriveInfo “C:” | Format-List *
$drive = New-Object System.io.DriveInfo “C:”
$drive.DriveFormat
$drive.VolumeLabel

Este código que devuelve toda la información de la unidad seleccionada (en este caso C: ):

powershellunidad

Luego para ejecutarla, abre PowerShell y ve a la carpeta donde has almacenado el fichero con el código y ejecuta:

C:\ .\nombre

Para ejecutar un script en PowerShell tienes que poner delante .\ para indicar el directorio actual o toda la ruta completa:

C:\ C:\nombre

NOTA: las similitudes con el shell de Linux son EVIDENTES, es más, prueba algún comando Linux y  a lo mejor te sorprende …

Este código lo he sacado de la fantástica Web (inglés):

PowerShell.com

donde puedes encontrar prácticamente cualquier script, un ebook y cantidad de información sobre esta potente herramienta.

Otra web con una buena introducción en español:

WindowsITMagazine

Post to Twitter

Entradas relacionadas:

La Spirit se comporta de forma extraña

por Sin comentarios »

spirityopportunity.jpg

La sonda envía una señal de “check” o control, pero no ha respondido a algunos de los últimos chequéos que tendría que haber realizado.

Algo le pasa a la Spirit, quizás sean sus años o quizás sean los rayos cósmicos, pero desde luego los cinco años que llevan ya en Marte tenían que pasar factura.

El último fin de semana la sonda indicó que había recibido la información para moverse pero no lo hizo. Luego se movió y no informó. Una de las razones puede ser la autonomía que tiene la sonda de decidir cuando moverse o cuando no, siempre que ella misma evalúe la situación y decida en consecuencia.  

La sonda ya se estaba comportando de forma un poco extraña en los últimos días como nos cuentan en SondasEspaciales.

Pero no os alarméis queridos amigos, ahora mismo parece que todo funciona correctamente. Esta semana se dedicarán exclusivamente a chequeos internos de todo el sistema.

A lo mejor las sondas se han cansado de dar vueltas por Marte y ahora quieren emular a Huey y Dewey de la película “Naves Misteriosas“, y se dediquen a cuidar Marte … ;)

Más información:

JPL

Post to Twitter

Entradas relacionadas:

Ciencia, Robótica enero 30th 2009