Ayer vi en el otro lado como un tipo se había montado su porpia Wii con monitor. La cosa no deja de ser una frikada, pero me resulto curioso y, sobre todo, me gustó la idea de los infrarojos. A ver si dice pronto cómo lo hizo y nos preparamos nuestro propio disporitivo de infrarojos, que de momento no lo tenemos muy dominado.
Archivo por meses: enero 2007
Caida de MSN Messenger
Supongo que a muchos os ha ocurrido que ayer por la noche, por mucho que escribiesies por el messenger (da igual desde qué aplicación), vuestros mensajes nunca obtenían contestación. Creo que fue algo generalizado. Lo peor de todo es que se podía ver a los contactos y sus estados, pero no podías comunicarte… ¿Qué se siente al volverse mudo y sordo digitalmente? Supongoq que algo parecido.
Creo, que para casos así, lo mejor es disponer de otras alternativas, tipo google talk (tanto la versión web como de escritorio), jabber, etc. Si esto lo complementas con programas multicuenta (Gaim, Kopete, etc.), se convierte en algo, hasta estupido, da igual que se caiga una red, vas a poder siguir hablando con tus amigos por las otras.
Ya sabéis, todos a instalarse el Gaim y a crearse cuentas en jabber.org 😉
Wiimote y Bluetooth
Como comenta Queltosh, estamos trabajando en programar desde linux el mando de la Nintendo Wii. De momento tengo varias cositas hechas, pero de poca importancia, principalmente la detección y conexión de los mandos que halla. La siguiente porción de código es la que se encarga de la detección:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | static int search_wiimotes() { inquiry_info *ii = NULL; int max_rsp, num_rsp; int dev_id, sock, len, flags; int i; char addr[19] = { 0 }; char name[248] = { 0 }; dev_id = hci_get_route(NULL); sock = hci_open_dev( dev_id ); if (dev_id < 0 || sock < 0) { perror("opening socket"); exit(1); } len = 4; max_rsp = 255; flags = IREQ_CACHE_FLUSH; ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info)); num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags); if( num_rsp < 0 ) perror("hci_inquiry"); for (i = 0; i < num_rsp; i++) { ba2str(&(ii+i)->bdaddr, addr); memset(name, 0, sizeof(name)); if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name), name, 0) < 0) strcpy(name, "[unknown]"); if( !strcmp( name, "Nintendo RVL-CNT-01" ) ) { strcpy( _wii_handlers[_wii_counter].addr, addr ); _wii_counter ++; } } free( ii ); close( sock ); return 0; } |
Con el código anterior se detectan hasta un máximo de 255 dispositivos Bluetooth y luego seleccionamos los que sean Wiimotes.
Una vez hemos detectado todos los Wiimotes, procedemos a conectarnos a ellos. Pues en este punto surje un problema: algunas implementaciones de la biblioteca Bluez (o de la pila de Bluetooth, no estoy seguro), tienen un fallo y no dejan realizar la conexión, diciendo que la clave no es correcta. Parece ser que el fallo ya está solucionado en versiones posteriores, pero en la que trae Ubutu Edgy (la que uso para las pruebas) no :'(. Así que a esperar toca.
Para los que quieran el código que hace la conexión con un Wiimote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | /** * Crea una conexión con un wiimote. * @param addr Dirección del wiimote */ static int wii_internal_connect( char addr[19] ) { struct sockaddr_l2 loc_addr; int fd_in, fd_out; fprintf( stderr, "Conectando a: %s\n", addr ); fd_in = socket( AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP ); if( fd_in < 0 ) return -1; str2ba( addr, &loc_addr.l2_bdaddr ); loc_addr.l2_family = AF_BLUETOOTH; loc_addr.l2_psm = htobs( 0x13 ); if( connect( fd_in, (struct sockaddr *)&loc_addr, sizeof(loc_addr) ) < 0 ) { close( fd_in ); return -1; } fd_out = socket( AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP ); if( fd_out < 0 ) { close( fd_in ); return -1; } str2ba( addr, &loc_addr.l2_bdaddr ); loc_addr.l2_family = AF_BLUETOOTH; loc_addr.l2_psm = htobs( 0x11 ); if( connect( fd_out, (struct sockaddr *)&loc_addr, sizeof(loc_addr) ) < 0 ) { close( fd_out ); close( fd_in ); return -1; } _wii_handlers[_wii_counter].in = fd_in; _wii_handlers[_wii_counter].out = fd_out; _wii_counter ++; return 0; } |
Probablemente la mejor definición que he visto de Web 2.0
Via Barrapunto.com veo esta definición de Web 2.0:
es la Web normal, pero poniendo bordes redondeados a las cosas y llenándolo todo de degradados de color.
La verdad, creo que es lo que mejor se ajusta a la realidad 😛