lunes, 31 de diciembre de 2012

¿Tengo la mente sucia? (IV)

Hace un par de días nos reunimos Gustavo, Auzzie, Daisy y yo para cenar y felicitarnos las fiestas y tras salir de nuestro restaurante nos encontramos con esta "publicidad" en otro restaurante cercano aunque he de decir que el restaurante es muy conocido por este tipo de mensajes pero aún así me parece bastante curiosa la forma de promocionar el rabo de toro o el cocido con pelotas.

  
Y bueno, viendo el día que es hoy no queremos dejar pasar la oportunidad de desearos un muy feliz año nuevo y que hayamos colaborado para sacaros una sonrisa.

¡¡¡FELIZ 2013!!!

viernes, 28 de diciembre de 2012

Consulta tus cuentas sin restricciones

En estas fechas solemos hacer balance de todo lo acontecido durante el año y nos hacemos propositos para mejorar en el año que va a comenzar y, tal y como está la situación económica, también es buen momento para hacer balance de nuestras cuentas y así poder ver donde se nos ha ido el presupuesto.

En mi caso accedí a la banca electrónica de Cajamar e intenté realizar una consulta de movimientos desde el uno de enero de 2012 hasta hoy pero Cajamar solo permite realizar consultas de seis meses (en bloques de seis meses), imagino que para evitar la saturación de sus sistemas pero en fin, el caso es que no he podido salirme con la mía... ¿o sí?


Al pulsar el botón "Aceptar" de la página de Cajamar me di cuenta que no se hacía ninguna petición al servidor (no se volvía a cargar la página) y por tanto la validación de los datos se debía hacer utilizando javascript así que me puse a mirar el código de la página para ver si me podía saltar dicha validación.


Como se puede apreciar, al pulsar el botón "Aceptar" se llama a la función doSubmit pasandole los parámetros 'ACEPTAR', 2 y false. Si buscamos la función doSubmit la encontramos en el archivo screen_code_v1.js que es incluido en la parte inicial de la página.


Y al abrir este archivo y mirar lo que hace la función doSubmit nos encontramos con una pequeña sorpresa:


A la función se le pasan tres parámetros y el segundo de ellos (llamado a) es el que controla si se debe o no hacer la validación de los campos del formulario. En este caso si el valor de a es igual a 2 se realizará la validación del formulario y si le indicamos cualquier otra cosa no se realizará dicha validación. ¡Esto pinta bien!

¿Podríamos llamar a la función doSubmit con los parámetros 'ACEPTAR', 1 y false? la respuesta es sí pero tenemos que tener en cuenta dos cosas, la primera es que la página de Cajamar se carga en varios frames y que el formulario se encuentra en un frame llamado "contenido" y la segunda es que debemos simular la pulsación del botón ACEPTAR por lo que debemos ejecutar todo el código de dicho botón, es decir:

field_executed(getFieldLayer('ACEPTAR'),getForm('ACEPTAR').REACTION_CODE); doSubmit('ACEPTAR',2,false);

Por lo que nuestro código debería quedar así

contenido.field_executed(contenido.getFieldLayer('ACEPTAR'), contenido.getForm('ACEPTAR').REACTION_CODE); contenido.doSubmit('ACEPTAR',1,false);


Notese que hemos cambiado el 2 por un 1 en la función doSubmit y que hemos añadido el identificador "contenido" antes de llamar a las funciones.

Como queda un poco largo lo podemos guardar en nuestros favoritos (marcadores) creando así un nuevo bookmarklet como los que ya he comentado en alguna ocasión.

Y, finalmente, después de ejecutar este bookmarklet tengo ante mi la consulta de todo el año de mi cuenta.


Si queremos acortar un poco el bookmarklet podemos introducir la fecha que queremos en el formulario y luego pulsar el botón "Aceptar". Esto hará que se muestre el mensaje de error pero también hará que se ejecute la primera parte del código del bookmarklet, es decir field_executed(getFieldLayer('ACEPTAR'), getForm('ACEPTAR').REACTION_CODE) por lo que ya no sería necesario volver a ejecutarla y ahora si podríamos escribir en la barra de direcciones simplemente javascript: contenido.doSubmit('ACEPTAR',1,false) obteniendo el mismo resultado.


Si todo esto os parece demasiado complejo también podéis utilizar la extensión Tamper Data de Firefox y modificar los datos del formulario justo antes de ser enviados obteniendo el mismo resultado.

Espero que os sea de utilidad y que el balance del año (y de vuestras cuentas) haya sido positivo.

sábado, 22 de diciembre de 2012

¡¡¡Feliz Navidad!!!

La felicidad es hacer lo que se desea
y desear lo que se hace.

No sueñes tu vida, vive tus sueños. 


¡Feliz Navidad!
(Gustavo y fossie)

un poco de música navideña...


martes, 18 de diciembre de 2012

SMS mJoy v1.07

Os dejo una nueva versión de SMS mJoy ya que un usuario me ha comentado que el formato de los teléfonos moviles alemanes pueden ser del tipo +4915712345678 pero SMS mJoy lo rechazaba así que tras realizar algunas pruebas y validar que la web de mJoy si permite el envio a dichos números he modificado la aplicación aunque no conozco a nadie en Alemania así que no he podido verificar que lleguen los mensajes correctamente.

Como sabéis, en la web de mJoy, se menciona que se pueden enviar mensajes a cualquier parte del mundo  ¿vosotros habéis tenido exito con mJoy o con SMS mJoy enviando SMS a otros países? ¿cuales?


Notas para la actualización / instalación:
Si ya disponéis de una versión de SMS mJoy solo tenéis que descomprimir el fichero zip sobre la versión que tengáis (se respetará vuestra agenda y configuración). Si es la primera vez que descargáis SMS mJoy podéis descomprimirlo en cualquier carpeta de vuestro ordenador.

Cualquier consulta o sugerencia siempre es bienvenida.

mJoy!

Actualización:
SMS mJoy v0.06 disponible (Android)

Descargar SMSmJoy
Descargar Código Fuente (VB.NET2005)

domingo, 9 de diciembre de 2012

Intercambiar teclas del teclado

Hace unos dias Daisy derramó un poco de agua sobre el teclado de su portatil y pese a que lo secó lo más rápido que pudo las teclas mayusculas izquierda y mayusculas derecha dejaron de funcionar aunque, por fortuna, el resto del teclado si respondia correctamente.

Cuando este tipo de cosas suceden lo mejor es tratar de secar el teclado rápidamente, incluso abrirlo y limpiarlo por dentro pero, aún así, es posible que algún circuito se haya dañado y a no ser que seamos unos manitas en electrónica la solución será pasar por caja y adquirir un nuevo teclado pero siendo un portatil tenía pinta de ser algo caro así que tocaba ingeniarselas de alguna otra forma.

Una opción válida para salir del paso es utilizar el telcado en pantalla que suele llevar el sistema operativo (Win7 en este caso) pero no me parece una opción muy interesante a largo plazo ya que es algo incomodo de utilizar así que pense que algo más práctico seria darle la funcionalidad de las mayusculas a otra tecla del teclado y recordé unas prácticas que se solian hacer en los primeros cursos de programación que consistian en modificar la interrupción del teclado a bajo nivel precisamente con esta finalidad aunque eso de volver a ponerme a programar en ensamblador no me llamaba mucho la atención así que me puse a buscar y vi que ya hay varios programas que permiten el mapeo de teclas, es decir, intercambiar teclas para este tipo de casos como por ejemplo MSKLC (Microsoft Keyboard Layout Creator) o SharpKeys.

Programa SharpKeys

Este último me gustó bastante porque es muy completo, es de código abierto y se ha desarrollado en Visual C#.NET lo cual me animó a profundizar un poco más en el tema y aprender como se realiza el mapeo de teclas en Windows.

Básicamente cada tecla del teclado tiene asignado un número (un código de 2 bytes) y cada vez que se pulsa una tecla este código se le envía al sistema operativo para que sepa que tecla se ha pulsado y actue en consecuencia así que lo único que hay que hacer es decirle a Windows que cada vez que pulse la tecla X entienda que se ha pulsado la tecla Y.

Como en el teclado de Daisy lo que no funciona son las mayusculas lo que vamos a hacer es sustituir la tecla CONTROL DERECHA (que si funciona correctamente) por el código de las mayusculas. Mirando en el código de SharpKeys podemos ver la lista de los códigos asignados a cada tecla pero a nosotros solo nos interesan las mayusculas (00 2A) y la tecla CONTROL DERECHA (E0 1D)



Así que ahora lo único que hace falta es saber donde poner estos códigos para que Windows sepa lo que tiene que hacer y nuevamente recurrimos al código de SharpKeys donde podemos ver lo siguiente.


Básicamente lo que hace es introducir un valor en el registro de Windows (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout) con los mapeos que se hayan definido en SharpKeys aunque nosotros solo vamos a usar uno.

Según se entiende en el código de SharpKeys, se define un array de bytes con una estructura fija 8 bytes a cero luego otros 4 bytes que representan el número de mapeos a realizar, luego 4 bytes que representan el mapeo propiamente dicho y despues otros 4 bytes a cero. Como curiosidad hay que indicar que el mapeo los códigos se deben poner invertidos, es decir, si nuestra tecla es 00 2A en la estructura se debe escribir 2A 00 quedando algo así:


Con todo lo que ya sabemos no es difícil crear un archivo para incluir esa información en el registro de Windows y hacer efectivo el mapeo que hemos definido. Solo debemos guardarlo con extensión .reg, hacer doble click sobre él y confirmar que deseamos realizar las modificaciones en el registro. Para que los cambios surtan efecto se debe reiniciar el sistema (o volver a abrir la sesión)


Por si queréis realizar otros mapeos diferentes os dejo la lista completa de códigos que aparecen en SharpKeys.



Quisiera agradecer desde aquí a Randy Rants por el buen trabajo que ha hecho con SharpKeys y por compartir el código para que todos podamos aprender y, aunque os invito a utilizar su aplicación, yo prefiero hacer las cosas a mano.

miércoles, 5 de diciembre de 2012

Covers y guitarras

Siempre me ha encantado la música, podría decir que casi de todo tipo, desde clásica, hasta hard-core (bueno esto sería más bien ruido) pasando por Jazz, Rock, Pop, Heavy... 

Ahora, por el fluir de la vida, no me es posible disftutar de tanta como en tiempos de adolescencia y posteriores escuchaba. Eran otros tiempos, el cassette dominaba nuestras vidas y las dobles-pletinas eran nuestras mejores amigas. Los locutores de radio mataban el inicio o el final de las canciones para que no pudiéramos grabarlas completamente en nuestra cinta TDK D90 quema-cabezales si eran de hierro o mejorcillas si eran de cromo. Estas cosas cotidianas dieron a luz, por ejemplo, la canción de Gigatrón - Grábame el de Slayer parodiando a Bon Jovi...

Bueno, que me voy... realmente este post no es para todo esto. Ya me estoy haciendo el viejo que va contando batallitas jejeje. Mi padre toca la guitarra, siempre me ha gustado escucharle. Tuvo un grupo musical cuando contaba veinte años que cantaban canciones de la época en castellano y esas mismas me las cantaba a mi en casa cuando yo era pequeño. De ahí que yo aprendiera a tocar algún punteo de los que él sabía como un rock and roll típico, la Bamba o el bajo de Stand by me

Lo último que he visto en internet son las llamadas "covers" y lo que dan de sí. Guitarra en estado puro. En fin, algún día aprenderé, de verdad :)

Mientras tanto os dejo con un par de videos. El primero es de la BSO de Piratas del Caribe, es la famosa canción He's a pirate que suena a menudo en televisión.




La siguiente canción, es un video en el que se puede ver hasta donde puede llegar el Canon de Pachelbel.
Me encanta lo que ha hecho el taiwanés Jerry C con ella (sí, lo sé, soy un macarrón de cuidado). Ha creado escuela y todo. Miles de seguidores han hecho su propia versión, de la versión de Jerry en Youtube!