miércoles, 25 de noviembre de 2009

El Vectorcito Rojo y la Matriz Feroz

Érase una vez un vectorcito que vivía con su familia generadora en su
casita, V. Era un vectorcito muy joven, pues apenas acababa de cumplir un
módulo. Tenía el sobrenombre de Vectorcito Rojo por ser una ferviente
admiradora de Lindeloff, famoso comunista de la época.

Cierto día, su mamá la llamó:

-"¡Eh, Vectorcito Rojo, ven aquí!. Quiero que lleves estas coordenadas a la
casa W de tu abuelita, pues la pobre está muy sola desde que se ha
restringido a un espacio de dimensión 1, pero ten cuidado cuando vayas por
el bosque Hom(V,W), pues hace tiempo que acecha una matriz muy, muy feroz."

-"Sí, mamá.", dijo Vectorcito Rojo.

Entonces su mamá cogió un 2-cubo abierto de "papé arbá", puso las
coordenadas y estiró y retorció (pero sin romper ni pegar) el 2-cubo hasta
convertirlo en una esfera menos un punto. Después se la dió a Vectorcito.

-"¡Ah!, y sobre todo no te entretengas cogiendo grafos por el camino, ya
sabes que hay que cuidar el entorno."

-"No te preocupes, mamá.", y dicho esto, se orientó hacia la casa de su
abuelita.

Vectorcito Rojo se movía alegremente a través del bosque Hom(V,W), pues
pensaba que la matriz debía de rondar muy lejos, por lo menos en el quinto
isomorfismo, cuando de repente, algo saltó detrás de una función y se plantó
delante de Vectorcito Rojo. Vectorcito le reconoció: era la matriz de la que
la había hablado su mamá. Parecía muy, muy fuerte (coloquialmente hablando,
la matriz estaba cuadrada) y la miraba con maldad.

-"¿Donde vas, Vectorcito Rojo?."

-"Voy a llevarle estas coordenadas a mi abuelita.", dijo ella muerta de
miedo.

-"¿Me dejas probar alguna? Hace tiempo que no como nada desde que me echaron
de GL(n,k) por degenerado."

-"No," dijo Vectorcito, "son para, y solo para, mi abuelita."

-"Hagamos una cosa." dijo la matriz, "Te echo una carrera hasta la casa de
tu abuelita, y si llego antes que tú tendrás que darme al menos una."

Vectorcito Rojo vaciló: su familia vivía en un espacio de clase media (más
concretamente C¹) y además de dimensión finita, así que no podía ir por ahí
tirando una coordenada como si estuviera en un espacio proyectivo.

-"No," dijo Vectorcito Rojo, "tengo como norma no entretenerme y coger
siempre el camino más corto" (esta norma, de uso tan extendido, es tambien
conocida como norma euclídea).

-"Te doy ventaja: contaré hasta omega antes de empezar a correr.", dijo la
matriz.

Vectorcito Rojo pareció cambiar de opinión: la matriz parecía sincera, al
menos en casi todo. Vectorcito Rojo asintió, y empezó a correr.

Pero he aquí que la matriz, al ser degenerada, era muy tramposa, y como tal
contó hasta omega, pero usando el axioma de elección, con lo que tardó muy
poco. Entonces empezó a correr a través del bosque adquiriendo una velocidad
extraordinaria (no en vano era una matriz 4x4) y llegando a casa de la
abuelita un tiempo t antes que Vectorcito Rojo.

Una vez que llegó la matriz a casa de la abuelita, llamó a la puerta, que
estaba cerrada. La verdad es que la abuelita era una persona muy discreta
pues toda su casa siempre estaba cerrada (y abierta a quien la abuelita
quisiera).

-"¿Quién es?.", preguntó la abuelita.

-"Soy yo abuelita, tu querida nietecita."

-"No conozco tu voz, querida."

-"Es que estoy mal de la garganta, por culpa del gradiente de la mañana."

-"No te creo, dime, ¿qué te regalé cuando cumpliste 1/2 módulo?."

-"Un juego de polígonos constructibles con regla y compás."

-"Es cierto que eres mi nietecita, entra querida mía."

Y nada más entrar, la malvada matriz engulló a la abuelita, sin darle tiempo
a decir ni pi, entonces se disfrazó como ella, se metió en la cama, y
esperó.

Y nosotros nos preguntamos: ¿cómo sabía la matriz el regalo de la abuelita?.
Pues resulta que la malvada matriz vió un día a la abuelita comprar este
regalo en Gauss`r`us, la tienda de juguetes maximal de X, de ahí que conozca
el regalo, pero eso es otra historia.

Al cabo de un rato llegó Vectorcito Rojo. Se retrasó un poco por culpa de
las obras de parametrización de la nueva carretera.

Llamó a la puerta.

-"¿Se puede abuelita?."

-"Entra hija, y cierra la puerta que entra mucho flujo.", respondió la
malvada matriz.

-"Abuelita, abuelita, qué filas más grandes tienes."

-"Son para reducirme mejor.", dijo la matriz.

-"Abuelita, abuelita, y qué ceros más grande tienes. "

-"Son para rodar mejor.", dijo la matriz.

-"Abuelita, abuelita, y qué unos más grandes tienes."

-"¡¡Son para comerte mejor!!." gritó la matriz.

Y dicho esto la matriz se abalanzó sobre Vectorcito y se la comió.

Una vez en el interior de la matriz, Vectorcito se encontró con su abuelita.

-"¡Socorro, socorro, quiero salir de aquí!."

-"No podemos, hija" dijo la abuelita, "la matriz está cerrada
hermíticamente."

La matriz salió de casa de la abuelita. Estaba traspuesta por el festín que
se había dado y se disponía a dormir cuando apareció Jordan, el leñador, que
había presenciado todo aquello. Jordan cogió su hacha, y armado de valor y
autovalor se acercó y...¡zas! de un solo tajo diagonalizó la matriz
expulsando a la abuelita y a Vectorcito entre los restos de su polinomio
característico (el cual por cierto había quedado intacto por la acción de
Jordan).

Entonces Jordan cogió los restos de la matriz y las guardó en una caja 2x2 y
dos cajas 1x1, las ató con una n-cadena y las mandó a un cuerpo
algebraicamente cerrado, donde no podría salir por muchos polinomios que
tomara.

Una vez hecho esto, Vectorcito Rojo le dió las gracias al leñador Jordan y
al cabo de un tiempo se casaron, y fueron felices, y redujeron matrices.

Y colorín, corolario colorado,
este cuento se ha terminado.

domingo, 30 de agosto de 2009

Instalar php 5.3 en Windows Vista como Administrador

1 - Descargar el fichero del instalador (extensión .msi)
(Previamente a instalar de esta forma el PHP hay que instalar el servidor web, por ejemplo el apache).

2 - Como Vista no permite ejecutar "como Administrador" los ficheros .msi, crear un fichero .bat con la siguiente línea, y ejecutarlo para arrancar el instalador:

msiexec /i {ruta de la carpeta con el fichero .msi}\php-5.3.0-Win32-VC6-x86.msi

Por ejemplo, si tengo el fichero instalador en el directorio: d:\php, en el fichero .bat pondré:

msiexec /i d:\php\php-5.3.0-Win32-VC6-x86.msi


3 - Seguir las instrucciones del instalador de PHP para finalizar correctamente la instalación. Entre otras cosas preguntará por la carpeta con los ficheros de configuración del servidor web, por eso era importante instalarlo antes.

(Si no se ejecuta como Administrador, al final del proceso de instalación aparece un error diciendo que un script no puede ser ejecutado y por tanto la instalación no puede finalizar correctamente).

lunes, 6 de julio de 2009

Escapar apóstrofe en los mensajes de los resource de Spring Framework

Como parte de uno de los mensajes quería meter una serie de etiquetas HTML que además tuvieran código javascript asociado. Los apóstrofes a secas, se resuelven mal, cortando el resto del mensaje, otras combinaciones dejaban los apóstrofes pero impedían la sustitución de los parámetros encerrados. Finalmente salí con la siguiente solución:


\'' algo {0} '\' --> tras resolverse el mensaje --> ' algo valor_param_0 '


Error.Code Mi mensaje de error para el objeto "{0}" <div class=""><img src="img/t2.gif" id="{1}_triangle"/> <a onclick="javascript:void toggleDisplay(''{1}_triggerId'', ''{1}_triangle'', ''Mostrar algo'', ''Ocultar algo'', ''{1}_divContainer'')" style="cursor: pointer; text-decoration: underline;" target="_blank" id="{1}_triggerId">Mostrar algo</a></div><div id="{1}_divContainer" style="display: none;" class="propertyRow">{2}</div>


Con esto se consigue tanto escapar los apóstrofes, como sustituir todos los parámetros correctamente.

Como argumentos este mensaje espera esto:

- (0) Una cadena con el nombre del objeto al que va destinado el mensaje.
- (1) El índice que quiero asignar a ese mensaje para que sus bloques que se van a mostrar y ocultar sean independientes de los de los demás mensajes.
- (2) El mensaje que aparecerá en el bloque que se oculta y muestra

Una vez resuelto el mensaje, dará lugar al siguiente código HTML cuando se imprima el mensaje de error por el jsp correspondiente:

(Para los argumentos: (0) fishka, (1) 33, (2) Mensaje oculto )

Mi mensaje de error para el objeto "fishka" <div class=""><img src="img/t2.gif" id="33_triangle"/> <a onclick="javascript:void toggleDisplay(''33_triggerId'', ''33_triangle'', ''Mostrar algo'', ''Ocultar algo'', ''33_divContainer'')" style="cursor: pointer; text-decoration: underline;" target="_blank" id="33_triggerId">Mostrar algo</a></div><div id="33_divContainer" style="display: none;" class="propertyRow">Mensaje oculto</div>

sábado, 16 de mayo de 2009

Play rumba

Mezcla de conocimientos de programación, cacharreo con un poco de hardware y sentido del ritmo, y voilá, una orquesta automatizada, pero con un sonido alegre y vivo. ¡Sin azúcar, pero sabrosón! ;).


sábado, 17 de enero de 2009

Truco CSS - fijar ancho mínimo del elemento body

No es ninguna noticia que en CSS, incluso en navegadores que cumplen la mayoría de los estándares, no funcione todo como nos esperamos y haya que recurrir a trucos, que además la mayoría de las veces parecen de lo más irracionales.

Vía un artículo de script&style me entero de un hack útil que no conocía: fijar el ancho mínimo del elemento body. Hice la prueba únicamente en FF3 (firefox 3) y funciona.

Problema:

Si tenemos una imagen de fondo de, supongamos, ~2000 px, centrada dentro del elemento body, al redimensionar estrechando la ventana del navegador, el elemento body tambien se estrechará redimensionando su imagen de fondo, con lo que es posible que por debajo de un ancho determinado se desencaje el diseño. Nos gustaría fijar un ancho mínimo, por debajo del cual el elemento body no siga estrechándose. Si probamos a asignar únicamente la regla min-width al elemento body, ésta parece no aplicarse.
// sin el hack, la imagen seguirá redimensionándose por debajo de ese ancho
body{min-width:958px;}


Si no se utiliza la regla color en el elemento html, la imagen de fondo se redimensiona, desencajando el diseño.

El hack:

Para que la regla min-width surta efecto, es necesario añadir (no me preguntéis porque, pero funciona) una regla color, asignando el valor a, por ejemplo, blanco, al elemento html.
html{color: #000;} // sin esto el min-width del body no funciona
body{min-width:958px;}


Si se utiliza, la regla min-width del elemento body hace efecto, fijando el ancho mínimo por debajo del cual la imagen de fondo deja de redimensionarse.

sábado, 3 de enero de 2009

Ajaxify: Ajaxifica los sitios web estáticos al instante

Ajaxify es un plug-in de jQuery que convierte todos los enlaces de un página web en peticiones Ajax.

Así, con tan sólo añadir una línea (la propia invocación al método que asociará los eventos onclick a todos los tags <a> que sean de la clase 'ajaxify' y la propia declaración de la clase 'ajaxify' en cada tag de enlace <a> que queramos ajaxificar), es posible ajaxificar (hacer algo más dinámica) la página estática.



Soporta :

* Historial & marcadores
* Cargas parciales desde el output
* Cuatro eventos diferentes
* Formularios
* Animaciones

Sitio Web
Demo

¿Como detectar navegadores móviles con PHP?

En el sitio web DetectMobileBrowsers.mobi nos dan un función e información para poder detectar navegadores móviles. Con lo que se podrá detectar:

* iPhone
* Opera Mini
* Android
* Blackberry



Tiene un generador online de la función que te guíara paso a paso para que crees una función personalizada acorde a cómo quieres tratar cada navegador.

El código es gratuito para sitio web sin lucro.

Sitio Web
Descarga

Potente creador/editor de menús CSS: CSS QuickMenu

CSS QuickMenu es una potente aplicación web para crear menús CSS.



Una vez seleccionado el tipo de menú y pulsando sobre el botón "customize menu", se tiene acceso al editor.

El editor permite:

* Añadir/actualizar menús y submenús
* Actualizar colores, fuentes, bordes,...
* Elegir las animaciones
* Elegir las formas y contornos CSS
* Decidir si el menñu será accesible vía teclado, si será vertical/horizontal y mucho más...

También permite que le añadas tus propios estilos CSS y comprobar los resultados instantáneamente.

Después de haber creado el menu, para obtener los códigos HTML y CSS hay que dar al botón de "save" (Desde el menú superior File -> Save ó pulsando sobre el botón que tiene el icono de un disquete azul, el primero a la izquierda).

Conversión de px (pixeles) a em y viceversa

En la web "PXtoEM.com" se puede visualizar y calcular cómodamente la conversión de unidades dadas en px (píxeles) a em (unidad de longitud relativa a la altura de la fuente del elemento), y viceversa. Ambas unidades tienen un uso extendido en las definiciones de hojas de estilo ( particularmente en css).



Otro conversor de pixeles a em.
(En el momento de redactar este post, éste último conversor seguía teniendo algunos fallos para Opera y Safari).

Open Source Monitoring App.: Pandora FMS

Pandora FMS es una aplicación open source (de código abierto) que puede ser utilizada para tareas de monitorización de "cualquier" cosa online como:

* comprobación de que el sitio web está accesible o ha caído
* si el contenido de un sitio web ha cambiado
* espacio en disco o carga de la CPU del servidor remoto (vía SNMP o TCP/IP)
* y muchas más...



Pandora FMS puede ejecutarse en cualquier sistema operativo, gracias a módulos específicos para cada plataforma, recibiendo y enviando información al servidor.

Se pueden obtener informes en tiempo real para cada proceso monitor y configurar que se envien a por correo electrónico a las direcciones que establezcamos.

Pueden tambien enviar notificaciones de eventos vía e-mail, SMS o Jabber (MSN, GTalk,...) a los usuarios deseados.

P.S. Cabe mencionar que Pandora FMS no es un simple script que se instala. Esta formada por varios ficheros shellscript (clientes en UNIX/Linux), una aplicación web en PHP (consola), un poco de código C++ (clientes en Windows), un poco de código PERL5 (servidor) y otro poco de estructuras y datos en SQL (base de datos).

Página web oficial
Descarga
Demo