(5) Free Merluza

No sabía cuántas cosas tenía pendientes en mi servidor hasta que me he puesto a mirarlo por dentro.

Resulta que con la última actualización de ebox a zentyal, los repositorios de los proyectos dejaron de funcionar, entre otras cosas porque no actualicé la configuración del LDAP. Hoy he estado un buen rato actualizando los tracs y reconfigurando la autenticación.

La configuración de los repositorios subversion la hago a través de apache. Poco ha cambiado desde que escribí Cómo configurar apache para autenticar con el LDAP de Zentyal, sólo he tenido que actualizar la contraseña y los nombres de dominio.

Sin embargo, me ha sido imposible volver a configurar los tracs para que autentiquen correctamente. O yo no conseguía configurar los plugins que existen, o no funcionaban para la última versión de trac.

La solución ha sido sencilla (aunque no muy elegante). Utilizando el AccountManagerPlugin, hay una opción para autenticar mediante una ruta HTTP (HttpAuthStore). Lo que hace el servidor es llamar a una ruta http con el usuario y contraseña que da el usuario. Si la solicitud se lleva a cabo con éxito, el usuario está autenticado.

Perfecto! Como se configurar apache fácilmente para autenticar, puedo usar lo mismo para autenticar los tracs :D.

Wordpress Themes

Lo otro que he hecho hoy es un paso previo a la remodelación del css de esta web. Consiste en liberar todos los temas de wordpress que he hecho hasta la fecha. Utilizar un repositorio subversion me facilitará el actualizarlos, y ya de paso publico el código para quien quiera curiosear.

En fin… mañana más 😀

(3) sed valentín

Corazón

Hoy ha sido esa fiesta que consiste en demostrar tu amor abriendo la billetera. He aprovechado, y le he comprado a kimito unos cuchillos de cocina que nos hacían falta… ¡Soy todo un romántico!

Aparte de comprar el regalo, me he dedicado a limpiar el servidor donde tengo alojado mi blog y otras cosillas. En parte lo necesitaba para comenzar con un proyecto nuevo, y en parte forzado por @eckelon, que me ha pedido asilo cibernético.

Y es que los graciosos de 1and1 le borraron un servidor por falta de pago… aunque sí que había pagado. Así, de golpe, ni desactivar por si acaso, ni nada. Rollo Flickr pero a lo bestia. Así que estoy haciendo un poco de hueco para que pronto pueda volver al mundo bloguero.

Una de las cosas que llevaba tiempo queriendo hacer ha sido actualizar mi script de actualización de las DNS. Veréis, uso Zentyal para gestionar las DNS de mi dominio (y estoy bastante contento), peeeeero, tiene una pequeña limitación, y es que no acepta registros de tipo CNAME.

Así que este tipo de registros, los tengo que cambiar a mano en los archivos de configuración de bind. No es mucho problema, ya que con una línea se pueden añadir:

echo "foobar              CNAME   foobar.foo.com." >> /etc/bind/db.example.org

El problema estaba en que luego, tenía que editar a mano la línea del número de serie para que los servidores del mundo supieran que había cambiado mis dns. La línea es así:

                        2011021417      ;serial number

Hoy he tenido tiempo para poder automatizarlo, usando grep y sed. Ha quedado algo así (se aceptan mejoras :P) :


sernum=`cat $file_name | grep -o '[0-9]\{10\}\w*.;serial number' | grep -o '[0-9]\{10\}'`
sernum=$(($sernum+1))
cat $file_name | sed "/;serial number/s/\([0-9]\)\{10\}/$sernum/" > /tmp.db
cat /tmp.db > $file_name

Acertijo Java (Solución)

A principios de mes proponía un Acertijo Java.

¿Qué sale por pantalla al ejecutar la clase FooBar?

import static java.lang.System.*;
public class FooBar {
  public FooBar() {
    out.print(" Instance ");
  }
  static {
    out.print(" Static ");
  }
  public static void main (String args) {
    out.print(" Main ");
    new FooBar();
  }
}

Simplificando, lo que ocurre es lo siguiente:

  1. Se carga la clase FooBar en memoria
  2. Se ejecutan los bloques estáticos: static{}
  3. out.print(» Static «); está en un bloque estático
  4. Una vez cargada la clase, ya se pueden ejecutar métodos estáticos como main
  5. out.print(» Main «); está dentro del método main
  6. Se crea una instancia de la clase FooBar en el método main
  7. Para ello se ejecuta el constructor
  8. out.print(» Instance «); está en el constructor

Siguiendo este razonamiento, la opción correcta sería la c: «Static Main Instance».

La opción c parece correcta, pero no se llega a ejecutar el método main. Recordemos la firma que tiene que tener el método main para ser la entrada de un programa java:

  public static void main (String[] args) {}

Ha de ser esa o equivalente. ¿Ves la diferencia? El parámetro args tiene que ser un array [] de String, ya que representa los argumentos introducidos por línea de comandos. En la clase FooBar el parámetro args es simplemente un String.

Por ello, el código no se ejcutará. Java mostrará un error indicando que en la clase FooBar no existe un método main. Es por ello que la opción correcta era la f: No se ejecutará

En el día a día, un programador no sólo tiene que saber traducir ideas a código. En algunas ocasiones el código no se comporta como queremos y es cuando hay que buscar el detalle.

La agilidad con la que uno detecta pequeños detalles marca la diferencia. Algunos factores que afectan a esta agilidad son, la paciencia, saber escribir código claro, y sobre todo el conocimiento de las herramientas con las que uno trabaja.

Igual que hice en el otro post, animo a cualquiera a ponerse a prueba estudiando la certificación de Programador Java o acudir a uno de los cursos oficiales que imparto, es toda una experiencia.

HowTo: Cambiar el Idioma de Mac Os X

A algún conocido, al llevar su mac a reparar, le han tenido que reinstalar el sistema y al recogerlo se lo ha encontrado en inglés. Que es el idioma por defecto de la instalación.

Menú de Mac OS X en inglés

Siempre se puede llevar otra vez al servicio técnico para que nos lo vuelvan a volver a poner en Español, o si os da pereza, voy a explicar cómo podéis ponerlo en Español siguiendo unos sencillos pasos.

Abrir Preferencias de Idioma

Lo primero va a ser abrir las preferencias del Lenguaje e Idioma. Podemos acceder a las Preferencias del Sistema desde la barra de menú, arriba, pulsando en la manzana. Se despliega un menú en el que elegimos "System Preferences …".

Abrir Preferencias del Sistema

Una vez abiertas las Preferencias del Sistema, pulsamos "Language & Text".

Idioma y texto en Preferencias del Sistema

Elegir el idioma preferido

En la primera pantalla de las preferencias de idioma, tenemos un listado con los idiomas del sistema.

Lenguaje e Idioma

Ordenamos los idiomas poniendo arriba aquellos que queremos que se utilicen. Un programa leerá el primer idioma de la lista, por ejemplo «Español». Si el programa está traducido al Español, saldrá en Español, si no, leerá el segundo. Si el segundo es «Inglés» y la aplicación está traducida al Inglés, pues saldrá en Inglés, y si no, pues leerá el tercero, y si no, el cuarto …

¿Y cómo ordenamos la lista de idiomas para poner el Español primero? Busca el español en la lista, púlsalo y arrástralo hacia arriba.

Ordenar Idiomas

Para que el sistema salga en español, el Español debe ser el primero de la lista.

Español debe quedar por encima del Inglés

Si el español no aparece en la lista, pulsa en "Editar Lista", debajo de la lista. Busca el idioma Español y márcalo. También puedes desmarcar aquellos idiomas que no utilices, pero deja por lo menos el Inglés.

Reiniciar

Los cambios tendrán efecto la próxima vez que se abran las aplicaciones. La manera más sencilla de reiniciarlas es reiniciar el equipo entero.

Si no podemos, o no queremos en este momento, apagar el sistema, podemos cerrar una a una todas las aplicaciones. La única que no podemos cerrar es el Finder, ya que está siempre abierto. Si este es tu caso, sigue los siguientes pasos.

Pulsa la manzana en la barra superior y en el menú que se despliega selecciona "Force Quit …":

Abrir Forzar el cierre

Se muestra una ventana con el listado de las aplicaciones abiertas. Selecciona Finder y pulsa Relaunch.

Reiniciar Finder

Una vez que hayamos reiniciado, las aplicaciones aparecerán en Español:

Menú de Mac OS X en español

Acertijo Java

Volvemos después de la resaca de año nuevo con un acertijo java.

Suponiendo que el contenido del archivo FooBar.java es el siguiente… ¿Qué saldrá por pantalla al ejecutar la clase FooBar?


import static java.lang.System.*;
public class FooBar {
  public FooBar() {
    out.print(" Instance ");
  }
  static {
    out.print(" Static ");
  }
  public static void main (String args) {
    out.print(" Main ");
    new FooBar();
  }
}
  • Main Static Instance
  • Instance Static Main
  • Static Main Instance
  • Main Instance
  • No compilará
  • No se ejecutará

Hagan sus apuestas…

Antes de empezar a preparar la certificación SCJP (Sun Certified Java Programmer) no había caído en la cuenta de cuántas cosas desconocía de programación.

Estés preparando o no la certificación de programador, recomiendo la guía de Kathy Sierra. Además, si quieres que un experto en java (modestia aparte) te asista, puedes invitarme a tomar una cerveza, o apuntarte al curso oficial que impartiré en septiembre: SL-275-SE6 Java Programming Language

¡Date prisa, al tercero que me invite a una cerveza ya no hablaré coherentemente, y el curso tiene las plazas limitadas!

Un Saludo!

Actualizado: Puedes encontrar la solución aquí.