(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

(2) TODO

Como prometí ayer, hoy ha sido un día de relax.

No he hecho mucho, pero he aprovechado el tiempo para organizar todo lo que quiero hacer:

  • Una lista de tareas
  • Una Aplicación que sea chula y se pueda enseñar
  • Aprender a cocinar algo nuevo
  • Aprender a programar para iOS
  • Hacer deporte
  • Mejorar el estilo de mi blog
  • Relanzar pasa.co
  • Dar una charla sobre algo en lo que soy experto
  • Dibujar algún cómic
  • Subir algún personaje del WOW a level 60 (o más)

A ver si me da tiempo a todo 😉

(1) ColZgz

ColZgz 1

Hoy ha sido mi primer día de retiro espiritual.

La mayor parte del día he cumplido con las tareas habituales del sábado: Compras, Comida familiar, Recados…

Por la tarde hemos acudido al colzgz. Una quedada (o un intento) tuitera zaragozana, que consiste en quedar para realizar algún tipo de actividad casi bohemia. De ahí que el nombre sea casi cool, pero se queda en col. Esta vez la intención era dar una vuelta por la expo y por el parque del agua haciendo fotos, y para después echar unas partidas de Lasertag.

Peeeeeero, como nuestra organización es penosa y lo hemos preparado deprisa y corriendo, hemos estado cuatro gatos… literalmente. Lo que no ha evitado que me lo he pasara en grande :D.

Nos hemos dado una vuelta por el recinto expo, un paseo nocturno altamente recomendable. Lo han dejado muy arreglado, y gran parte de las «atracciones» de la expo siguen en pie. Por ejemplo el bosque sónico o la fuente laberinto. Está todo muy bien iluminado, y esta iluminación da una visión diferente de la zona que si se va de día.

@DexterAlberto me ha traído una dosis de droga pura, una lata de «Dr. Pepper». Es una bebida de cereza, parecida a la cherry coke, a la que me volví adicto en los EE.UU y que es muy difícil de conseguir en España. Toda una sorpresa, mañana caerá ;).

Después de hacer muchas fotos, incluyendo experimentos, como Light Painting, hemos tomado algo en una terraza del parque del agua (escandalizando al personal con nuestra conversación), a cenar, y p’a casa…

En fin, día: :)…

A ver que me espera mañana… domingo… poco haré 😛

()

Tras años de estudios, trabajo y mudanzas; mi montaña de proyectos sin acabar ha crecido y empieza a asustar.

Por eso, hoy empiezo un perido de paréntesis. Voy a dedicarme, por cinco semanas, a hacer todo lo que llevo tiempo queriendo hacer.

Proyectos, viajes, experimentos… lo que de tiempo.

Parte de la experiencia consiste en documentar todo lo que haga. Así que estos días habrá bastante movimiento por el blog.

Tengo muchas ganas de empezar, aunque de momento será mejor que recupere el sueño acumulado.

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.