Tatai from the trenches

Otro de mis pequeños proyectos

Página 9 de 26

Viaje a China. La casa por el tejado

La verdad es que me gustarí­a haber realizado este post (y los restantes del mismo tema que tienen que llegar) de forma directa, pero bueno ahora llega la explicación.

A todo esto, del 4 al 19 de julio pude disfrutar de unas calurosas (demasiado calurosas) vacaciones en China en compañia de buenos amigos. Al igual que como hice al viajar a Dinamarca, me llevé el portátil para, además de conectarme un poco para hablar y escribir a casa, poder ir relatando poco a poco el viaje para recordar el mayor número de detalles posibles.

Pero la realidad ha sido bastante distinta. Tras más de una semana ya por Pamplona empiezo a escribir sobre todas las experiencias (que me acuerde) del viaje, que tendré que ir intercalando con otros posts que vayan naciendo. Como se comenta en muchos sitios la censura en China es evidente y la sufre cualquier persona que pasa por aquel paí­s. Pude comprobar como se encuentran censurados de forma permanente todo tipos de redes sociales y sites de opinión como twitter.com, blogger.com, blogspot.com, wordpress.com, livejournal.com, youtube.com… y otras tantas que seguro que lo están y que no llegué a probar. Hasta webs como flickr.com sufren censura.

Según me comentaron, una de las prácticas habituales es, si tienes suerte, tener acceso la primera vez que te conectas, pero después o bien no consigues entrar de nuevo (como fue mi experiencia con twitter.com) o bien te dejan entrar dí­as después, como me pasó con mi blog, tatai.es, al que pude entrar semana y media más tarde, apenas unos dí­as antes de volvernos.

Ahora el trabajo que queda es más duro: acordarse de las cosas y escribirlo todo. Al menos sí­ que pude acceder al correo y también a colgar algunas fotos en Picasa.

No voy a entrar a valorar (mucho) esta censura, pero tengo claro que el derecho a la información y a la libre expresión es algo que no se puede negar y este tipo de medidas no hacen más que enturbiar cualquier buena acción que se intente desde aquel paí­s con respecto a los derechos humanos. Es una pena que en algunos sitios no tengan derecho a la libre libertad de expresión e información y en otros, ya que se tiene, se digan tantas tonterias y se haga tanta demagogia y haya tanta hipocresí­a, pero en fin, no existe la panacea.

Me hubiese gustado empezar de otra forma el viaje, que realmente estuvo genial, pero las cosas hay que contarlas como realmente fueron y esto fue uno de los temas que más me impactaron cuando llegué allí­, junto con la cultura, pero de eso hablaremos más adelante 🙂

Hagamos repaso

Y como hemos llegado a la mitad del año, creo que viene bien repasar los objetivos/promesas para este 2009.

Para empezar: un post cada 3 dí­as. Eso hace que a estas alturas de año deberí­a de tener 61. Bueno, según el último recuento, desde el 1 de enero tengo 53 posts, con lo que digamos que el objetivo está cumplido al 43%, no está nada mal. Empezamos bien, jeje, aunque habrá que esforzarse un poco más la segunda parte del año.

Seguimos… leer al menos 4 libros. Aquí­ la cosa se lí­a un poco. Leí­do completamente, de principio a fin únicamente he leí­do uno (la mayor parte en las esperas de la ida y la vuelta del viaje a Dinamarca, jeje), aunque el segundo va en camino. Cuando digo que la cosa se lí­a es porque tengo empezados 3 libros más que de momento he dejado apartados. Pero bueno, para ser estrictos (recordemos… producto finalizado!) el objetivo está al 25%, a este habrá que meterle un poco más de caña de ahora en adelante.

Y seguimos con llevar las clases y prácticas al dí­a. Bien, esto ya es algo que podemos hablar en pasado puesto que las clases las tengo en el segundo cuatrimestre. Tengo que decir que las clases las llevé al dí­a y las corrección de prácticas también hasta que llegó abril y por diversos aspectos de trabajo apenas me quedó tiempo libre. Digamos que empezó bien y, aunque acabó bien, hubiese sido más deseable que acabara de otra forma. Me voy a dar un 75% a este objetivo (no se va a mover en el resto del año).

Por último, hacer más deporte. Bien, esto lo estoy consiguiendo. Para empezar, futbiko todas las semanas ha ayudado bastante y luego, cada vez que me ha sido posible, al menos ir otra vez a hacer algo más. Estoy contento con esta parte, y el objetivo está al 50%, a ver si conseguimos mantenerlo.

Pues nada… yo creo que con un pelí­n de esfuerzo, podemos conseguir el 100% de los tres objetivos que todaví­a están abiertos… a por ellos!

Migrar fácilmente el selector dolar a document.id (mootools 1.2.3)

Voy a contar un par de sencillos comandos que os ayudarán si queréis migrar todos vuestros selectores dolar ($) a la nueva forma definida en mootools 1.2.3: document.id.

La primera forma es ejecutar un comando desde la lí­nea de comandos. Todo lo que necesitas es tener instalado perl en tu sistema. Este es el comando (cambia fichero.js por el nombre de tu fichero javascript):

perl -i -pe 's/([^\$])\$\(/$1document.id(/g;' fichero.js

Quizás prefieras usar -i.old en vez de -i que hará una copia de tu fichero original fichero.js a fichero.js.old. De esta forma, mantienes una copia de tu fichero original.

Por supuesto este comando se puede usar con otros como find de modo que puedas migrar más de un fichero a la vez:

for i in $( find /path/a/tu/directorio/js -iname '*.js' ); do perl -i -pe 's/([^\$])\$\(/$1document.id(/g;' $i; done

Finalmente, para todos aquellos que como yo usen y prefieran vim, voy a mostrar como se hace el cambio con vim. Asegúrate que estas en el modo-comando (presiona varias veces la tecla ) y escribe:

:%s/\([^\$]\)\$(/\=submatch(1) . "document.id("/g

Y eso es todo! Disfruta de tu nuevo código que cumple con la especificación de compatibilidad entre frameworks javascript.

Easy migrating dolar selector to document.id (mootools 1.2.3)

I would like to show you a pair of easy command that will help you if you want to change all your dolar selectors ($) to the new defined document.id in mootools 1.2.3.

The first way can be executed from command line. All you need is having perl on your system. This is the command (change your_file.js to the filename that fits your needs):

perl -i -pe 's/([^\$])\$\(/$1document.id(/g;' your_file.js

Perhaps you will prefer to use -i.old instead -i that will copy your original file your_file.js to your_file.js.old. In this way, you get a backup of your original file.

Of course, this command can be used with others like find so you can migrate more files at once:

for i in $( find /path/to/your/js/files -iname '*.js' ); do perl -i -pe 's/([^\$])\$\(/$1document.id(/g;' $i; done

Finally, for those vim lovers like me, I would like to show you how to make this change inside vim. In command-mode (press a pair of times) write:

:%s/\([^\$]\)\$(/\=submatch(1) . "document.id("/g

And that’s all! Enjoy your new brand cross-framework compliant code.

Teclas rápidas usando mootools

Hace unos dí­as me plantee la posibilidad de añadir teclas rápidas al funcionamiento de la aplicación. Las teclas rápidas o también llamadas atajos de teclado (o «keyboard shortcuts» en inglés) nos permite realizar acciones pulsando una tecla o una combinación de teclas. Por ejemplo, habremos usado muchas veces Ctrl + g (o la variante inglés Ctrl + s) para grabar un documento, Ctrl + r para recargar la pantalla de nuestro navegador o, por ejemplo, todas las teclas rápidas de GMail. Lo que voy a explicar brevemente en este post es como conseguir algo parecido a lo que usa GMail.

El funcionamiento es realmente sencillo, este serí­a el código:

document.addEvent('keyup', function(e) {
 var bg = e.target.get('tag');
 if(bg == 'html' || bg == 'body') {
 if(e.key == 'a') {
 accion1();
 }
 else if(e.key == 's') {
 accion2();
 }
 }
});

Lo único que le falta a este código son las funciones accion1() y accion2() que son las que se ejecutarán cuando pulsemos las teclas a y s respectivamente.

Este código añade un evento ‘keyup’, es decir, cuando se detecta que se ha pulsado una tecla y estamos levantando el dedo de la tecla. Este evento indaga a ver qué tecla se ha pulsado y en caso de ser una de las de la lista, ejecutará la función correspondiente.

La comprobación de que el objetivo de nuestra pulsación (e.target) sea ‘html’ o ‘body’ sirve para que no se haga esta comprobación cuando estamos en un elemento como un input, un textarea, etc. Es decir, tenemos que tener el foco en el documento. En la mayorí­a de los navegadores funcionarí­a simplemente con indicar ‘html’, pero, como siempre, Internet Explorer tiene que dar la nota y necesita que comprobemos sobre ‘body’.

Por último añadir que podemos obtener más información del evento:

e.code: el código de la tecla pulsada
e.control: true si la tecla Ctrl está pulsada
e.shift: true si la tecla Shift está pulsada
e.alt: true si la tecla Alt está pulsada

Y no sólo esto, también podemos trabajar con la rueda del ratón o el botón derecho del ratón

El resultado es realmente espectacular si tienes que trabajar con una aplicación en la que las teclas rápidas te hacen la vida más sencilla 🙂

Buenas Prácticas en Boletines Oficiales online

Como ya he comentado alguna otra vez, no suelo usar mi blog para comentar temas de mi trabajo en Biko2, pero creo que de vez en cuando vale la pena romper esta regla… y espero que la pueda romper más veces para temas como este, jeje.

La noticia es que acabamos de publicar un informe con las Buenas Prácticas en Boletines Oficiales online con una reflexión sobre la situación actual y el camino que se recorrerá próximamente en este particular del mundo online.

Es muy interesante dar a conocer todas estas iniciativas que se dan, sobre todo si parte desde nuestra Comunidad Foral.

No es la primera vez que desde Biko, se realiza un informe de estas caracterí­sticas. Cabe destacar que hace algo más de un año, en Abril del 2008, presentamos el Informe de Usabilidad de los portales de las Comunidades Autónomas que marcó un antes y un después en muchas administraciones de nuestro paí­s.

Desde aquí­, felicitar a todo el equipo por el trabajo realizado.

Cambio de diseño

Tras un tiempo con el anterior theme fluido de Arcsin, he decidido dar un pequeño cambio de imagen a este otro theme de Michael Tyson, manteniedo 3 columnas, pero ahora la principal de ancho fijo.

Se admiten comentarios, aunque ya de primeras os advierto que los colores no son lo mí­o, jeje.

Nueva versión de jscalendar

Llevo muchos años usando jscalendar porque la verdad es que siempre he obtenido buenos resultados y no me ha dado guerra, adaptándose siempre a las necesidades que tení­a. Pero acabo de encontrarme con hace apenas un mes se ha publicado la versión 2.0 (tras 4 años de no realizar actualizaciones de la versión 1.0).

Esta nueva versión no es gratuita si quieres el código fuente. Es decir, que puedes descargarte jscalendar 2.0 para trabajar con él sin problemas, aunque ha sido minimizado y ofuscado con YUI Compressor. La licencia para un site cuesta la nada despreciable cantidad de 80 dólares americanos, 300 para 5 sitios y 800 para un número ilimitado de instalaciones o para instalarlo dentro de una aplicación.

Esta nueva versión tiene un montón de nuevas caracterí­sticas:

  • Selección simple o múltiple de fechas, así­ como un rango
  • Modo pop-up
  • Limitación temporal
  • Animaciones para el cambio de mes y año
  • Animación del desplegable
  • Funciona como un control web, con lo que se puede seleccionar y trabajar con él desde el teclado
  • La rueda del ratón cambia de mes y de año
  • Los ficheros de idioma siguen estando en ficheros individuales
  • Muy personalizable ví­a CSS. De serie trae 5 themes
  • API y algunas utilidades (sólo para usuarios que compren la licencia)
  • Código javascript muy reducido en tamaño (30kB o 10kB comprimido) que no depende de librerí­as de terceros

Tiene muy buena pinta, aunque me da que de momento seguiré la versión 1.0 que se ajusta perfectamente a mis necesidades.

Abrir varios ficheros a la vez con vim

Cuando queremos abrir varios ficheros a la vez desde la consola, la forma más habitual es la de escribir el comando vim y después añadir cada uno de los ficheros separados por al menos un espacio. De esta forma, mediante los comandos :next y :previous (recordar pulsar antes de introducir comandos) podemos pasar de un fichero a otro.

Esto está bien cuando no te importa tenerlas en ventanas distintas, ¿pero y si queremos tenerlos todos a la vista a la vez? Bien, una de las formas es decirle a vim que no abra cada una en una ventana distinta, sino mediante horizontal splits, es decir, que si tenemos dos ficheros abiertos, cada uno ocupa la mitad de la pantalla (en horizontal).

Para conseguir esto, lo único que tenemos que hacer es escribir en la consola vim -o y luego todos y cada uno de los ficheros separados al menos por un espacio. Es decir, lo haremos con la opción -o (letra o minúscula). Tal que así­:
vim -o fichero1.txt fichero2.txt fichero3.txt
Bien, todo tiene un lí­mite. Vim abrirá tantos ficheros como le indiqueis… pero es evidente que si abrí­s muchos a la vez, no tendremos espacio para verlos.
Ideal para usar con algunos scripts 🙂

vim con la opción -o

vim con la opción -o

Lectura de datos binarios en perl

Hace un par de dí­as me encontré en la situación de leer datos de un fichero en formato binario. Este tipo de ficheros, al contrario que uno de texto, la separación no viene dada mediante saltos de lí­nea (prácticamente todos los lenguajes de programación tiene funciones para leer lí­nea a lí­nea), sino que o bien se tiene una cabecera donde se indica el tamaño y formato de la información o, como es mi caso, tení­a que leer en bloques de 32 caracteres (16 palabras de dos caracteres, es decir, 16 palabras de 16 bits).

Para hacer esto con Perl, es tan sencillo como iniciar el método binario en el fichero mediante binmode.

El programa es similar a este (en $filein tenemos el nombre del fichero):
open INF, $filein
or die "\nNo se puede abrir $filein para leer: $!\n";
# Activamos el modo binario para el fichero
binmode INF
# Leemos 32 bytes y los metemos en $buffer
while (read INF, $buffer, 32) {
# Aquí­ trabajamos con los datos, en mi caso, 32 bytes
}
close INF
or die "No se ha podido cerrar $fiein: $!\n";

Realmente sencillo (y rápido).

« Entradas anteriores Entradas siguientes »