Monday, October 06, 2008

Why I no longer hate networking, as much as before

Creo, que los algoritmos de deodificación, me agradan bastante. ¿Ya conocían el de Viterbi?
Está bastante interesante como funciona, usa likelihood probabilities, en Aprendizaje o Machine Learning, se usa mucho para diversos métodos de aprendizaje.
No conocía en lo personal yo el de Markov, y de hecho Viterbi se basa en este método para su funcionamiento ,Belive it or no, es bastante straight foward.
Je, veamos sí es tan cierto,intentaré explicarlo:

Viterbi: Es un algoritmo de decodificación, desarrollado a finales de 1960 por Andrew Viterbi. Los decodificadores Viterbi, han sido la manera más efectiva de decodificar comunciaciones de voz inalámbricas en transmisiones satelitales y de celular. Viterbi saca ya sea 0 o 1, dependiendo de lo que estima, que es el bit de entrada.El algoritmo de Viterbi, brinda una manera eficiente de encontrar la secuencia de caracetres con mayor probablidad a posteriori, (MAP)

Para ilustrar como funciona el algorimto de Viterbi, daré un pequeño ejemplo:
Assúmase, que se tiene un alfabeto de 4 letras, A={T,A,C,O}, y que se tiene un Optical Character Readers , un lector de caracteres, el cual intentará leer palabras que sean válidas del inglés. Supónase, que la cadena observada por la maquina OCR es: Z= -CAT-, donde el "-" denota espacios en blanco. Los vectores característicos z1, z2, and z3 son obtenidos cuando el extractor de característica detecta a C,A,T. (GATO en español, y es una palabra válida del idioma inglés.)
La información disponible obtained y relevante que el algoritmo Viterbi utliza para tomar una decisión, se expresa en término de la gráfica direccionada, que se muestra a continuación. Todos los nodos, excpetos los que están en blanco "-", poseen una probablidad ascosciada a ellos.

Denker



Vemos, de la figura , que cualquier camino , de un nodo principio, hasta un nodo final, represneta una secuencia de letras, mas no necesariamente una palabra válida. Se trata de hallar la sequencia de letras que maximizen el producto de probabilidades en su camino. Esto se puede lograr, al porcesar los nodos verticales, paso por paso de izqueirda a derecha. De este modo, si se agregan los logaritmos de las orillas, y las probabildiades de nodo, del camino, obtenemos:

gGAT(z1,Z2,Z3)=logp(z1|C)+logp(z2|A)+ logp(Z3|T)+log[P(C|-)P(A|C)P(T|A)P(-|T)]


Con este modelo, las letras del idioma inglés se visualizan como salidas, de un proceso de M estados de Markov, donde M es el número de caracteres distinguibles, si se trata de letras, el número será de 26, ya que el alfabeto del idioma inglés, pose 26 letras. En cada etapa de la secuencia (palabra), las 26 más probables secuencias se procesarán, la secuencia más probable que terminé en A, la secuencia más probable que termine en B, etc. En la etapa final, la secuencia más probable es seleccionada.
Denker



Saturday, September 27, 2008

Stay home saturday...

Sometimes I just can't be bothered with the Bingo or going down the local strip joint and just want a quiet night in and sometimes I don't get a choice.

I sometimes have to make up an excuse to friends if I want to stay in as they would not accept the truth. They think I'm sad if I forsake the chance of fun and frolics (and maybe prizes) or having some jigglies thrust in my face for a night in at Casa Ham&Onion.

Do you agree with my friends and think it is sad to stay in on a Saturday night? Or do you think it is fine enjoy one's own company and the telly with a plate of chips and some neopolitan icecream?

I don't tell them about the Babyliss Foot Spa I have.

Saturday, September 20, 2008

Cantando con Radio Felicidad...

My 64 bit Kubuntu, finally has the freaking flash plug in!!
This webpage is really good :
https://help.ubuntu.com/community/AMD64/FirefoxAndPlugins?action=show&redirect=Firefox2AMD64Flash9Java

It explains everything soooo clearly! step by step, for dummies like mua.
To celebrate, let's sing an old fashion love song:





Wednesday, September 17, 2008

Battery Mattery...

Pilas: Se puede leer el nivel de las pilas, con el reporte 0x20. Se recibe este reporte, cuando se conecta algo estern al Wiimte. O se peude solicitar, al enviar un reporte 0x15, con el payload puesto en cualqueir valor , aunque el bit 1 debe estar encendido. (a1) 20 00 00 02 00 00 C0
el 0xC0, al final indica el nivel de pila. Depende mucho, de la marca, ya que algunas pueden rgistrar valores de 0xC8, al estar totalmente cargadas.
Es importante notar, que se puede obtener este mensaj sin solicitud, cuando esto suceda, se tendrá que enviar un reporte 0x12 con el numero de reporte deseado, para poder recibir información nueva y de otro tipo.

Memoria que tiene abordo el wiimote

Memoria Flash: En un Wiimote que está en blanco, es decir uno que se haya comprado por separado del Wii, y que nunca se haya conectado a el. La memoria, estará estructurada de la siguiente manera:
Direcciones 0x0000 a la 0x003F:


A1 AA 8B 99 AE 9E 78 30 A7 74 D3 1 AA 8B 99 AE
9E 78 30 A7 74 D3 82 82 82 15 9C 9C 9E 38 40 3E
82 82 82 15 9C 9C 9E 38 40 3E 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Estas son basicamente dos secuencias, cada una repetida dos veces:
A1 AA 8B 99 AE 9E 78 30 A7 74 D3
A1 AA 8B 99 AE 9E 78 30 A7 74 D3
82 82 82 15 9C 9C 9E 38 40 3E
82 82 82 15 9C 9C 9E 38 40 3E
Los tres bytes empezando en 0x16 y 0x20 (Los tres primeros bytes de la tercera y cuarta linea ) guardan la los offsets de los zeros calibrados del accelerometro.
Se cree que el 9C 9C 9E guardan la fuerza de gravedad que hay en esos ejes.
Direcciones 0x0040 a 0x0FC9: Todos estan en ceros en un Wiimote recien comprado Direcciones 0x0FCA a 0x12B9: Es el bloque 1 Mii Data , esta todo en ceros en un Wiimote recien comprado.
Direcciones 0x12BA a 0x15A9: Mii Data bloque 2 , esta todo en ceros en un Wiimote recien comprado.
Direcciones 0x15AA a 0x15FF: esta todo en ceros en un Wiimote recien comprado.
Direcciones 0x1600 a 0xFFFF: No existen, se regresa un error, si uno trata de leer de ellas. Aunque no se obtendrá el error, si uno empeiza a leer antes o en la dirección límite 0x15FF. En ese caso, Sólo se obtendrán ceros , para los bytes invalidos

Para la memoria Flash, la dirección está hecha de sólo 2 bytes. Entonces, la dirección 0x010000 se trata de la misma manera que la dirección 0x0000. Esto se cumple hasta la dirección 0xFF0000. Ese Byte (0x00FF0000) siempre se ignora, a menos que el byte mas significativo (0xFF000000) tenga un 2 (0x04) puesto





Con respecto a la memoria EEPROM, que posee también el dispositivo, parece ser, que la porción leible por el Bluetooth, empieza en la dirección 0x0070.

Leer y Escribir: Se pueden leer datos con el siguiente comando: (52) 17 FF FF FF FF SS SS

HID my ass...

Interfaz HID
El estándar HID, permite que los dispositivos se puedan describir a si mismos, utilizando un bloque descriptor de HID. Este bloque incluye una enumeración de reportes que el dispositivo entiende.Un reporte, puede ser visto como un puerto de una red, que está asigando con algún servicio en particular. La única diferencia, es que los reportes son unidireccionales, y el descriptor HID lista para cada puerto la dirección, ya sea de salida o de entrada, también dice cual sera el tamaño payload para cada uno de los puertos. Como todos los dispositivos HID, el Wiimote reporta su bloque descriptor HID, cuando se le pide información usando el protocolo SDP. Su descriptor, se ve de la siguiente forma:



Salidas





















Salidas:
ID del Reporte Tamaño
Payload
Función
0x11 1 Player LEDs, Rumble
0x12 2 Tipo de reporte/ID
0x13 1 Habilita el sensor infrarojo
0x14 1 Habilita bocina
0x15 1 Controla el estátus
0x16 21 Escribe datos
0x17 6 Lee datos
0x18 21 Le da datos a la bocina
0x19 1 Pone a la bocina en silencio
0x1a 1 Habilita el sensor infrarojo 2

Entradas






























Entradas:
Reporte ID Tamaño
Payload
Función
0x20 6 Puerto de expansión
0x21 21 Lee datos
0x22 4 Escribe datos
0x30 2 Es sólo para los botonesButtons only
0x31 5 Da un reporte de sensado de los botones.
0x32 16 Es puerto de expansión para los botones
0x33 17 Da un reporte del sensado del movimiento , así como de los botones.
0x34 21 Puerto de expansión del infrarojo
0x35 21 Da un reporte del sensado del movimiento , así como de los botones.
0x36 21 Da un reporte del sensado del movimiento , así como de los botones.
0x37 21 Da un reporte del sensado del movimiento , así como de los botones.
0x38 21 Da un reporte del sensado del movimiento , así como de los botones.
0x3d 21 Da un reporte del sensado del movimiento , así como de los botones.
0x3e 21 Da un reporte del sensado del movimiento , así como de los botones.
0x3f 21 Da un reporte del sensado del movimiento , así como de los botones.


Nótese que "salida" se refiere a paquetes, que son enviados del host al wiimote, y "entrada" se refiere a paquetes que van del Wiimote al host.

La notación de escritura, que se llevará acabo, es:

Incluir la cabecera del Bluetooth en paréntesis, el ID del reporte, y finalmente el payload. Cada byte se escribe en hexadecimal, sin tomar el prefijo 0x y separado por espacios.
Por ejemplo:
(a1) 30 00 00

Es un paquete de datos de entrada (0xa1), en el canal 0x30, con 2 bytes de payload 0x00, 0x00.

You got an incomming call from Mr. Wiimote

Comunicaciones.
El Wiimote se puede comunicar a la computadora, vía Bluetooth. El controlador Bluetooth que se utiliza es el chip Broadcom 2042. El cual es diseñado para ser utilizado con dispositivos, que siguen el estándar Bluetooth de dispositivos de Interfaces Humanas, (HID por sus siglas en inglés) como pueden ser teclados o mice. El Bluetooth HID se basa directamente en el estándar USB, y mucha de la misma documentación es aplicable.


La computadora, le puede pedir información al Wiimote, mediante el protocolo de descubrimiento de servicios, (SDP, por sus siglas en inglés). En este caso, el Wiimote reportará y regresará una gran cantidad de información.
En particular reporta:
Nombre :Nintendo RVL-CNT-01
ID Vendedor0:x057e
ID del Producto :0x0306


El Wiimote envía reportes al host, con una frecuencia máxima de 100 reportes por segundo. Del estándar Bluetooth, El Wiimote no utiliza ninguna de sus validaciónes o codificaciónes.


Ahora bien, para que la computadora tenga conexión con él, uno debe poner al control en modo de descubrimiento de servicios, esto se logra al apretar los botones 1 y 2 al mismo tiempo, o al apretar el botón rojo de sincronización, que se encuentra en la parte de atrás, cerca de la batería. Una vez que se encuentra en este modo, el HID driver del host, puede empezar a pedirle información al Wiimote.
Pero, si el driver HID del host no logra conectarse con el Wiimote, en menos de 20 segundos, el Wiimote se apagará . Apretando los botones 1 y 2 continuamente, hará que el Wiimote, se tenga que mantener en modo de descubrimiento, por lo que no se apagará. Esto, no funciona cuando se utiliza el botón de sincronizar.
Cuando se encuentra en modo de descubrimiento, los LEDS del Wiimote parpadearán. El número de parpadeos es directamente proporcional con lo que le queda de vida a la pila.