El Guille está que no para

Si hace poco publicábamos las mejoras realizadas con su programa para buscar ficheros localmente, ahora vamos a comentar su nuevo libro… ¡Sobre Visual Basic 9.0!

Sí, ya sé, si hubiera sido un libro sobre "La cría de la patata en ambientes de montaña", o "Construyase usted mismo su refugio nuclear" nos habríamos sorprendido más, pero este libro sí que trae una novedad:

¡Se puede comprar en formato electrónico! 

Y encima, si te das prisa, con un 50% de descuento sobre el precio normal que tendrá dentro de un mes.

Así que ya sabes, si no te aclaras con esto del Visual Studio 2008, el VB.NET que trae, o simplemente coleccionas todo lo que hace El Guille, pásate por aquí y cómpralo.

Cybook Gen3 y el botón que avanza las páginas

Hace como tres semanas que pudo más mi capricho que el sentido común y volví a caer en la trampa: adquirí un nuevo lector de libros electrónicos, en este caso el Cybook Gen3, y encima lo hice por la puerta grande, comprando el kit más caro de todos, que trae unos auriculares, una funda de supuesto cuero –y digo supuesto porque no tengo muy claro que lo sea-, un cargador de 220, y una batería extra.

Realmente ignoro qué equipo de ingenieros diseña estos aparatos, pero no tienen ni idea de ergonomía ni de robustez. Si en el caso del iLiad todas las operaciones se realizan desde un molesto pinganillo que cuelga de la parte inferior del aparato y que seguro iba a durar poco si se lee con él conectado, en el Gen3 tenemos casi el mismo problema, ya que la conexión para cargar el aparato se realiza a través de un cable USB normal y corriente… que se engancha en la parte inferior del aparato, igual que con el iLiad, aunque aquí la ventaja está en que si rompemos el cable podemos cambiarlo sin más problema que comprando un nuevo, y, si somos tan zarpas que también rompemos el conector del aparato, supongo que también se podrá cambiar con maña ya que se trata de un elemento estándar.

Pero lo más estúpido que uno pueda echarse a la cara es la conexión con los auriculares, que se realiza con un conector micro-jack situado al lado del USB (es decir, debajo del aparato); encima, los chicos listos del Gen3 te suministran unos auriculares con el cable recto (sin acodar), con lo que a poco que leamos tumbados vamos a tardar a romper los auriculares y el conector menos de lo que dura un caramelo en la puerta de un colegio.

Quiero creer que esta gente no es muy espabilada (tanto la del iLiad como la del Cybook) y que simplemente se trata de desconocimiento, porque la otra opción no me gusta nada, y es que sería de mucha desvergüenza que lo hagan así para que se rompa pronto. Aparte de ilegal.

En mi caso, en cuanto se acabe la garantía del iLiad lo primero que haré es abrirlo y hacerme un conector de carga en un lateral, ya pondré fotos. Quizás también le ponga una batería de mayor capacidad si la encuentro. En el caso del Gen3 es un poco estúpido ya que el aparato no se puede utilizar si se está cargando…

Otra cosa que no me mola mucho del Gen3 es la duración de la batería. Ni de lejos eso soporta 8000 cambios de pantalla. Pongamos 4000 y quizás nos quedemos largos. En fin, otra mentira más. Y volvemos a lo de antes. ¿Es que no se dan cuenta que se pilla antes a un mentirosos que a un cojo? Aquí también quiero pensar que es por desconocimiento o por pruebas mal realizadas…

Pero por lo que sí que no paso es por la posible violación de la GPL por parte del Cybook, cosa que estoy en proceso de averiguar. Al menos el núcleo del aparato es un Linux, y no hay código fuente publicado. Ignoro si el visor PDF lo es, imagino que sí. Del menú principal y del Mobipocket me imagino que será algo propietario. Aunque IREX no va muy detrás, ya que todavía no han publicado el fuente de su última actualización…

De lo que debería aprender la gente del iLiad es de la velocidad del lector de Mobipocket integrado en el Gen3. Y de las personalizaciones posibles. Se ve que en el iLiad el formato PRC ha sido metido a martillazos, en el Gen3 está perfectamente integrado y funciona fluido, suave y rápido, de hecho es paso de página es rápido, mucho más rápido que en el iLiad. Por el contrario, el paso de página del visor de PDF es algo más lento, aunque con una velocidad más que aceptable.

Y no hablemos de los tiempos de carga, tanto durante el encendido como en la apertura del un documento. Los libros en formato Mobipocket se cargan casi instantáneamente, y los PDF con algo menos de velocidad, pero no a la desesperante lentitud del iLiad.

La presentación de los libros es algo más cutre en el Gen3 que en el iLiad, pero sin embargo permite mostrar más libros en pantalla, y no usa el formato barroco en xml, sino que extrae los metadatos del propio documento, de haberlos.

La funda de cuero es demasiado gruesa y los agujeros están un poco desplazados, de tal manera que si ya es un poco complicado pasar página con el aparato en sí, metido en la funda resulta un tanto doloroso. Imagino que con el tiempo las teclas se vayan soltando. Otro potencial problema son las teclas laterales, al estar en el canto del aparato y ser éste tan delgado, lo habitual es que pulses alguna sin darte cuenta. Y sacar la tapilla de goma para ponerlo a cargar, conectarlo al PC o enchufar los auriculares es toda una odisea con la funda puesta. Casi un trabajo de Hércules.

La SD de 2GB que viene con el kit está de origen formateada con FAT… y nada más insertarla el aparato arma de las suyas, corrompiendo el contenido y dejándolo inútil excepto para un formateo. Ahora la tengo en FAT32 y parece que funciona bien. Lo dicho, esta gente no se entera mucho.

Bugs. Bugs. Bugs.
Unos cuantos. El botón de borrar no funciona, en este caso es un “by design”, ya que lo pone en el manual.

Está el tema de la corrupción de la SD, que se produce si está formateada en FAT o si apagamos el aparato (o se apaga solo) mientras tenemos un libro abierto que esté situado en ella. En ese momento perdemos por dónde íbamos y la solución pasa por hacer un chkdsk de la tarjeta en un PC (y seguiremos habiendo perdido la posición). Aunque este problema no se presenta siempre, sí lo hace con la suficiente frecuencia como para resultar frustrante, ya que si en el caso del visor PDF tenemos la página por la que vamos, en el PRC sólo hay una barra analógica. Y anda que no cuesta volver al sitio en donde estábamos. Si el libro está situado en la memoria del aparato, este problema también se presenta, pero con menos frecuencia. Así que mejor será que salgas a la biblioteca antes de apagar el aparato.

No avisa de que se está quedando sin batería, es decir, si estás leyendo y el aparato decide que ya no le queda carga, se apagará y perderás el punto de lectura y posiblemente dejes corrupta la SD, y es que la pantalla de lectura no lleva indicador de batería. O lo uno o lo otro. Es decir, o ponen el indicador o avisan y cierran bien (más o menos como en el iLiad, que te avisa y si ignoras, al final se apaga bien).

Parece ser que el medidor de batería es bastante más impreciso que el del iLiad (que ya lo es de por sí).

También tiene problemas de conexión, o más bien a veces Windows (lo he probado en un XP y en un Vista x64) lo reconoce como una cámara… y cuando “la enciendes” o te sale un fondo azul como lo que ve la cámara o se activa la que tengas en el ordenador. Ya sabemos qué era originalmente el SDK y la placa de evaluación con la que hicieron el aparato.

La calidad de la pantalla, pese a ser una generación superior a la del iLiad, es mucho peor, y no me refiero al nivel de grises, sino a que un tamaño de letra que se ve estupendamente en el iLiad apenas se puede distinguir en el Gen3, aunque aquí supongo que también tendrá culpa el software.

Si leemos con el iLiad a plena luz del sol, la pantalla semeja ser papel de periódico un poco agrisado, sin embargo la del Gen3 tiene una especie de gránulo multicolor que por lo menos a mi me da la impresión de ser similar a lo que vemos cuando nos restregamos los ojos…

El servicio técnico es inexistente, es decir, no hay una dirección de correo electrónico clara a donde preguntar, ni un teléfono de asistencia, y según he podido leer por ahí, en general no suelen hacerte mucho caso con la excusa de que los correos son filtrados por su sistema de antispam… Mi experiencia es la de enviar dos consultas sin respuesta desde la dirección de correo desde la que se compró el aparato… y solucionar los problemas gracias a los foros de MobileRead.

Resumiendo
Para finalizar diré que el aparato me gusta pese a todas las pegas que he comentado, me gusta más que el iLiad aunque ahora valoro las características únicas de éste, como el mayor tamaño y calidad de la pantalla, la forma de trabajar con documentos PDF y la pantalla táctil.

Otra cosa a tener en cuenta es que el iLiad no resulta tan caro comparado con el Gen3. El primero vale 650 euros, el segundo, 350. Con el primero tienes una pantalla casi del doble de tamaño, de mejor resolución y calidad, así como la posibilidad de dibujar sobre ella.

En cuanto al software de lectura, el Gen3 gana al iLiad por goleada, pero cuando la gente de IREX se espabile los va a dejar a la altura de los talones, porque se trata de una máquina más rápida –con la paradoja de que ejecuta el software a menor velocidad- y con más posibilidades.

Finalmente, y espero que sea por mucho tiempo, he aquí mi resumen de gadgets con los que leo (con algunos hago otras cosas, pero todos me sirven para leer):

1. Dell x51v (PDA): Mi vieja, entrañable y venerable PDA, por la que han pasado más de un centenar de libros; todavía la uso para leer en inglés libros en formato Mobipocket, ya que es la que mejor uso hace del diccionario. Como hecho anecdótico, la batería dura más que la del iLiad.

2. iRex iLiad (eBook): Genial para leer PDF incluso en A4 si no van a doble columna. Lo uso cuando viajo para llevarme la documentación técnica en lugar de los tochos de manuales. Para Mobipocket no sirve dada la poca velocidad del paso de hojas y del diccionario.

3. Cybook Gen3 (eBook): Genial para leer Mobipocket y PDF, este último siempre que esté adecuadamente formateado. Aunque el diccionario funciona bien, la selección de la palabra resulta dificultosa porque al no ser la pantalla táctil, hay que ir con los cursores.

4. Q1Ultra (UMPC): Para leer PDF a todo color en A4, con la programación de las teclas rápidas es una gozada. La duración de la batería pasa de las tres horas, arranca y funciona muy rápido para ser un PC de estas características, y también se puede leer Mobipocket. No lo uso mucho porque cuando me doy cuenta, en lugar de leer estoy haciendo Sudokus o jugando al Hexic. Este me sirve para leer libros técnicos online.

5. PC: Sin comentarios. Con la pantalla TFT de 24 pulgadas que tengo es una gozada leer el Scientific American y otras revistas electrónicas, pero como soy un gandulazo, eso de leer sentado en una silla no es lo mío.

6. Mi biblioteca. Sin comentarios. Mi fuente principal. Unos 3000 volúmenes. Un 20% de ella todavía por leer, y aumentando. 1/3 de libros de ciencia ficción (una Ultramar casi completa, una espuerta de Martínez Roca negros…), 1/3 de libros de ciencia (mates, física, electrónica, informática…), 1/3 de otras cosas (novela histórica, best sellers, clásicos…).

Hemos leído: Serial Port Complete 2nd. Ed. (Jan Axelson)

Otro que ha caído como una pera madura de un árbol. Y no es porque no traiga información, que la trae, y mucha, sino porque… porque… aparte de los elementos de diseño hardware, que no me interesan lo más mínimo –para eso están los chatarrillas, como yo los llamo[1]-, no me aportan nada nuevo, sino más bien… se queda muy corto.

Pero veamos qué trae el libro. Los primeros capítulos son un poco rollo, con una serie de explicaciones teóricas sobre nomenclaturas, características y opciones. Los siguientes sí que les pueden resultar interesantes a los diseñadores de hardware, ya que incluso modela ecuaciones mediante código. Habla de largos máximos, de atenuaciones, masas, etc., todo ello cuestiones de diseño que no me incumben y de las que sé lo justo para poder lidiar con los problemas habituales cuando se programa con puertos serie de por medio. Sigue con más explicaciones teóricas sobre los puertos serie de los PC.

Luego trae dos capítulos enormemente interesantes ya que la literatura sobre el tema es bien escasa: RS-485, que es un RS-232 en el que se usan dos hilos diferenciales como soporte físico para el envío y recepción de datos, lo que tiene la ventaja de que al ser una señal diferencial tiene muchas menos pérdidas y en consecuencia permite cables de mayor longitud, y la desventaja de que no se permite enviar y recibir simultáneamente ya que ambos hilos se usan a la vez para la comunicación. Eso no quiere decir que no pueda ser bidireccional, sino que o bien se envía o bien se recibe. Personalmente he usado ampliamente este soporte físico para realizar comunicaciones dentro de una máquina, y lo cierto es que no tengo claro si las ventajas superan a los inconvenientes o al revés. En fin, con estos dos capítulos cualquiera se vería cualificado para diseñar sobre este formato de hardware.

Quiero hacer notar (y esto no viene en el libro), que existen protocolos más modernos y robustos basados en los hilos diferenciales, como el CAN, que usa la Mercedes dentro de sus coches. La ventaja es que resulta enormemente seguro en cuanto a pérdida de datos y que muchos temas de protocolos –como el de lucha para conseguir el control del bus- se llevan a cabo a nivel de hardware, con lo que liberan al programador de tareas bastante complejas y que llevan mucho tiempo desarrollar.

El capítulo 8 desvaría un poco, y seguro está puesto para llenar páginas: habla del Bluetooth, Wifi, etc. como protocolos serie… El primero de ellos lo es, pero el segundo seguro que no.

Dos capítulos dos sobre desarrollo con puertos serie bajo .NET (y a C++ y VB que los zurzan). Nada nuevo bajo el sol y que no esté contemplado más o menos bien leyendo la documentación de la MSDN. Aparte de algún gazapillo perdonable (un System.String se envía en formato UNICODE, no ASCII, sólo por poner un ejemplo, ya que hay alguno más), el texto trae los típicos ejemplos realizados en VB.NET y C#, facilones y evidentes. En el segundo profundiza algo más, explicando los eventos y cómo realizar programación asíncrona, aunque sólo toca la superficie.

Y es que lo que trae es apenas nada en cuanto a desarrollo de software en el que intervenga una o más UARTS, os lo digo yo que llevo buena mili con el tema.

Luego viene un capítulo sobre puertos serie sobre dispositivos, explicando un modelo de Microchip que incorpora una UART, tratando sobre cuestiones de diseño y de programación en C sobre dicho micro. Ciertamente es un capítulo loable, pero dado que cada microprocesador incorpora las UART y sus registros a su manera, tan sólo sirve para dar una ligera idea de lo que uno se puede encontrar cuando programa un procesador.

Y digo flojito porque una obra que se precie de completa debería haber contemplado este tema con mayor profundidad. Debería haber explicado cómo funcionan las UART dentro de un microprocesador grande, con toda la parafernalia de los niveles de interrupción, vectores instalables y prioridades de la UART frente a los timers (por poner un ejemplo). También debería haber cubierto en profundidad los chips UART, pastillas que llevan 4, 8 ó 16 UARTS y que se anexan al bus de datos (y cómo integrarlas dentro del firmware), o cómo montar cores UART dentro de una FPGA o similar…

Sí que trae un capítulo interesante pero de nuevo flojito sobre diseño de protocolos sobre canales serie. De nuevo apenas contempla lo más básico.

Finaliza con mucho rollo sobre convertidores USB-RS232, muchos de los temas apenas son interesantes porque de eso ya se ocupa el fabricante del chip, pero hay que llenar páginas poniendo rollos en lugar de escribir sobre lo que hay que escribir.

El libro no está mal, pero apenas cubre una iniciación tanto en el diseño del hardware como en el desarrollo con estos dispositivos; es perfectamente válido para cualquiera que empiece con el tema, pero desde luego no llega a los talones de cualquier aplicación o diseño de la Vida Real™.


[1] Que nadie se tome a mal el nombre. Dentro de lo que yo llamo nomenclatura simpática, un diseñador de hardware en un chatarrillas, un diseñador gráfico un pintamonas, y un jodío developer un chafateclas, y desde luego no hay ninguna intención peyorativa, sino que simplemente me resultan nombres tan irreverentes como yo mismo soy.

El Guille busca ficheros por ti

¿Te peleas con la nueva forma de buscar que trae el Vista? ¿Lo consideras barroco, retorcido y sin mucho sentido? ¿Funciona lento, no encuentra lo que buscas o simplemente no te gusta? ¿Se te corrompe el índice y entonces sí que no encuentras nada de nada?

Pues bien, la solución a todos esos males está aquí: se llama gsBuscarTexto, la ha parido el incomparable Guille, y la puedes conseguir gratis de trinca aquí.

El programa da la opción de anclarse en el menú contextual del explorador para poder realizar las búsquedas sobre una carpeta o un grupo de carpetas, y usado desde la línea de comandos tiene como una espuerta de opciones, y también permite arrastrar y soltar carpetas sobre el campo de la búsqueda… Sólo le falta hablar y decir “papá”.

No voy a explicar nada más sobre él excepto poner una captura, ya que cuando te lo vayas a bajar verás las instrucciones completas sobre cómo funciona…

Y si te apasiona esto de programar, también tienes acceso al código fuente del mismo…

El que esto escribe lo ha probado en XP en una máquina virtual y en Vista de 64 bits en su ordenador principal… y te asegura que esa utilidad siempre estará en su Caja de Herramientas.

Capture

Hemos leído: Multithreading Applications in Win32 (Beveridge y Wiener)

Este libro ha sido una completa decepción ya que sin ser malo –que lo es-, no me ha aportado nada nuevo. Yo esperaba descubrir esplendorosas técnicas más allá de lo habitual… pero o no las hay o los autores no se enteran mucho.

El libro ha envejecido bastante bien, ya que si obviamos los comentarios sobre Windows 3.x, 95 y NT, casi todo lo explicado continua siendo actual y útil… bugs incluídos. Eso no es óbice para que los ejemplos sean pésimos y empleen código bastante malo y desactualizado. Si bien lo último es lógico, lo primero no. Las carencias del código llevan hasta a no liberar objetos del núcleo y del GDI en algunos ejemplos… algo inaceptable dentro del código moderno (y menos aún del anterior, ese olvido terminará degradando Windows 95 hasta que nos fuerce el reinicio).

Los autores presentan una descripción somera sobre multitarea, y luego pasa a contarnos cómo usar un hilo mediante CreateThread() y cómo esperar a que éste acabe de forma incorrecta –ellos mismos lo dicen-. Tras eso nos cuentan cómo utilizar las funciones Wait… (WaitForSingleObject, WaitForMultipleObjects, …) para recibir el evento de finalización.

Luego viene un capítulo clásico que explica las secciones críticas, los mutexes, los semáforos y los eventos (éstos últimos explicados de forma bastante oscura y barroca), sin aportar nada nuevo y enfocados al tema práctico, explicando con qué funciones de Win32 se pueden hacer.

También nos cuenta cómo suspender y activar los hilos, y cómo cambiar su prioridad.

Un tema bastante interesante, pero visto casi de pasada, es la entrada/salida asíncrona. Es decir, la I/O overlapped, las APC y los completion ports. La Overlapped I/O funciona ordenando una lectura/escritura y esperando el evento correspondiente de que se ha producido (así es cómo funciona la E/S dentro del .NET y por eso un programa en C# que lea y escriba frecuentemente se ejecuta incluso más rápido que un programa hecho en C++ siempre que no use esas técnicas, que suele ser lo habitual). Las APC son algo más o menos igual, pero los completion ports son una cucada (y es una de las cosas que había leído que existían pero que no había mirado todavía); Creas un pool de hilos, los asignas mediante unas funciones y e voilà, el sistema se encarga de ir despertando/durmiendo los hilos conforme vayan haciendo falta. Todo un hándicap para la programación de servidores.

Y luego entramos en la segunda parte, los temas avanzados, como el uso de volatile y el concepto de transacción. Continúa un nuevo capítulo sobre el uso de hilos con la CRT, o más bien qué cosas hay que tener en cuenta cuando se usan hilos que llaman a funciones de C estándar.

Otro más sobre C++ y cómo C++ facilita la eliminación de errores potenciales gracias a los constructores/destructores, así como la técnica para que las funciones miembro de una clase puedan ser usadas como funciones de hilo…

Sigue con los hilos bajo MFC, la separación entre hilos con bucle de mensajes e hilos sin él, y las cosas que hay que tener en cuenta cuando un hilo maneja o accede a ventanas…

El GDI y las cosas a tener en cuenta cuando se trabaja con elementos del mismo, que no son seguros en cuanto a hilos y la demostración de que la peor técnica para controlar ventanas MDI es usar un hilo para cada ventana.

El siguiente es un poco risible. Cómo depurar programas que usen hilos; en fin, aparte de lo habitual, el autor recomienda determinación, paciencia y creatividad.

Los dos siguientes, pese a ser poco profundos, resultan interesantes: DLL e hilos dentro de ellas y comunicación entre procesos: ficheros mapeados en memoria, pipes, memoria compartida, mailslots, DDE, OLE… El problema es que cuando podría profundizar, toca todos estos temas de refilón. En fin.

El libro termina desvariando un poco, con un capítulo sobre diseño de aplicaciones, ISAPI y poco más.

Ciertamente es una obra demasiado sencilla dado lo complejo del tema y pese a ser tan monotemática…

Hemos leído: USB Complete. Third Edition (Jan Axelson)

Esta lectura, más que por devoción, ha sido por obligación, aunque cuando compré el libro lo hice por devoción. Es decir, mi idea era leer algo serio sobre USB para ver cómo funcionaba, y trastear un poco para poder añadir esa especialización a mi currículum… Pero tras haberlo leído mejor no pongo nada, que ya tengo suficientes quebraderos de cabeza.

He dicho que la lectura ha sido por obligación, y es cierto. Hace dos semanas me pidieron que evaluara hacer un driver USB para una placa que estamos haciendo, o más bien que estoy haciendo, pues estoy más o menos a cargo del tema completo, como si hubiera vuelto a mis orígenes… Recuerdo el cambio de color de cara del ingeniero cuando le comenté que tenía que hacer una placa conectada por USB (lo que, ahora que conozco el percal, entiendo perfectamente, ya que el chaval no es ningún gallina en cuanto al diseño de hardware se trata). Comenzamos a planificar el tema, y mientras él buscaba y evaluaba microprocesadores, chips necesarios y todo eso, yo leía afanosamente este libraco (encima estaba sin ordenador, con mi anterior placa base en el cielo –o infierno, vaya usted a saber- de las placas base, y esperando lo que ahora disfruto). Nos cruzamos una buena cantidad de llamadas, vamos lo típico, que si esto vale esto, que si necesito xx MPIS, que si puedo usar BGA, que cambia esto del protocolo de comunicaciones porque no voy a poder atenderte… Hasta que acabé de leer el libro. Entonces hice La Llamada.

YO: ¿Querías un USB puro?

JEFE: Sipi.

YO: 6 meses + fase beta + fase de pruebas sólo para el driver…

JEFE: ¿A cualo?

YO: Lo que oyes.

JEFE: ¿No se puede acortar?

YO: No creo… -Pensando que en un par de meses podría estar, pero porsiaca…

JEFE: Pos vaya…

YO: Peeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeero…

JEFE: ¿Sí? – Con tono esperanzado

YO: Podemos usar esta solución. Cada chip lleva número de serie, el driver te lo da el fabricante, acortamos también el desarrollo de nuestro hardware porque la solución nos da un acceso directo a una UART, hay dos fabricantes, si uno falla tenemos al otro aunque cambiarlo requiere cambios en el hardware…

JEFE: Pos fale…

Y luego hice la otra llamada: -Gallinica, que vamos a usar lo que has propuesto. Vuelta del color a su cara, y todos tan contentos.

Bueno, después de la anécdota, vamos al libro.

No está mal, aunque no es lo que esperaba (más bien el USB no es lo que esperaba, pero bueno). Comienza explicándonos qué es el USB, su velocidad y lo compara con otros protocolos serie, describiendo también los cuatro modos y las cuatro velocidades junto a qué soporta cada clase…

Luego entra de lleno a explicar cómo funciona el protocolo en sí, cómo se forman los comandos y su contenido, de qué tenemos que preocuparnos y de qué no (por ejemplo, todo el tema de códigos de control, CRCs y demás lo hacen los chips directamente).

Y aquí es donde me entró el canguelo… En mi vida laboral he diseñado varios protocolos que han ido por encima de hilos RS232, RS485, Paralelo (no necesariamente de 8 bits), sockets, incluso pines sueltos de un microprocesador, pero nunca he visto algo tan barroco ni tan enrevesado. Es increíble la complicación del protocolo, tan increíble que pienso mal de él. Que si transaction que si token packet, que si pid, que si endpoint, que si data, que si frames, que si latencias… Y luego están los cuatro modos. Y no hablemos de la negociación e identificación cuando se enchufa un dispositivo USB con las quince espuertas de mensajes que se tienen que enviar, y más aún cuando arrancan y soportan ahorro de energía y cosas así. Ahora entiendo por qué hay tanto driver mierdoso… Lo que es mierdoso no es el driver, sino el protocolo.

Digo que pienso mal porque un protocolo diseñado con esta mala leche sólo puede tener alguna de estas explicaciones: O bien los que lo hicieron cobraban por tiempo de discusión, o por complejidad o quisieron cerrarlo tanto que sólo unos pocos fueran capaces de entender y desarrollar el protocolo…

Continuando con el libro, el autor nos cuenta cómo funciona cada modo y las APIs que hay para hacerlo funcionar. También comenta –por encima- cómo hacer un driver. Y da algunos ejemplos sin mucha utilidad para trastear desde Visual Basic y C++. El libro está centrado en explicar el funcionamiento de la clase HID (Human Interface Device), quizás la más común de todas las clases de dispositivos USB aunque también entra en las demás.

El libro termina con las especificaciones eléctricas y con un capítulo sobre algo llamado USB-on-the-GO, que no he leído y que tampoco sé qué es ni me interesa saberlo.

La que os espera… (ji ji)

Hará como una hora que he recibido de Amazon mis últimas adquisiciones, que son los seis libros situados en la parte inferior que se pueden contemplar en la foto que acompaña esta entrada… casi 200 euros en libros, sumados a otros doscientos y pico de varios pedidos anteriores…


A los de la foto hay que añadir el “Reverse Engineering” sobre el que he comentado y otro sobre patrones, en los que creo poco, por lo menos tal y como se presentan habitualmente (quizás se deba a que en las aplicaciones que yo desarrollo no hay sitio para ellos, y me refiero a sitio físico, ya que a veces con límites de 8 K para el código pocas florituras puedes hacer)…


También hay que añadir un par de libros sobre C++/CLI que ya he comentado por estos lares y dos más sobre C# de los que hablé tiempo ha…


Esto es como un vicio, una vez que compras en Amazon y te sale bien, ya no te puedes contener, tal ha sido el cambio de costumbres que mi librero habitual me dice que ya no me paso por la sección de informática… Y se lo he contado… Y me ha preguntado qué libros son los buenos… Lo mismo en unos meses veo libros en inglés en su escaparate, je je.


Quiero aprovechar para contar un problema que tuve en Amazon y su satisfactoria solución. El pedido anterior a éste traía “Win32 Programming” (el que está arriba a la izquierda del todo), que son dos tomos, pero me vino uno solo… Puesto en contacto con Amazon, me pidieron que retornara el defectuoso y que les dijera cuánto me había costado. Así lo hice, y antes siquiera de terminar de leer el correo, ellos ya me habían enviado, cargándomelo, un nuevo paquete. Una vez que les informé del envío, de su tracking y de lo que me costó hacerlo, me ingresaron ese coste más el que me habían cargado por el nuevo envío… Y cuando recibieron el paquete me enviaron un correo con que todo había sido solucionado.


Efectivamente, haciendo cuentas al final no tuve que pagar ningún dinero por SU problema, si bien es cierto que son un tanto barrocos a la hora de procesar las órdenes.


¿Qué? Ah, sí, el título de la entrada… Pues eso, que ya sabéis lo que voy a leer y estudiar… Así que andad preparados.


Se me olvidaba, la foto:


013