Cosas mías

October 31, 2006

Cómo convertir una IP en formato texto a su valor numérico

Filed under: Programación

En un boot de Windows CE, de cuyo nombre no me dejan acordarme, no ha mucho tiempo tuve que realizar un parser de una IP en formato texto a valor númerico, sin biblioteca en tiempo de ejecución, depurador y sin cualquiera otra extensión. Limitado a un espacio de 128K con todo incluído, arranque, asignación de memoria, inicio de red las más noches, carga sobre SD los sábados…

Bueno, tras este homenaje al insigne escritor español, vuelvo a empezar.

Es cosa interesante esta de los sistemas de arranque, con todas sus limitaciones, tanto a la hora de desarrollarlos como a la de depurarlos. Windows CE lleva un modelo de arranque en tres etapas. La primera la suministra el fabricante del microprocesador y la implementa el ingeniero de hardware. Normalmente va integrada dentro de la propia flash del micro y apenas tiene código para buscar el dispositivo de arranque real. Vamos, que es como una BIOS.

Luego está el fichero llamado "eboot.nb0", que se situa sobre el almacenamientos secundario (una tarjeta Secure Digital en mi caso, en otros un disco duro, un CD o una ROM). Este fichero es lanzado por la BIOS (para entendernos), y sería el equivalente al arranque de un XP. En el CE estamos limitados a 128 KB de tamaño, en el que tenemos que embutir como podamos todo lo necesario para arrancar la máquina. Luego ese fichero termina llamando a NK.BIN, que realmente es el sistema operativo, almacenado en una imagen con el nombre descrito.

En el caso que nos ocupa, el "eboot.nb0" ha de inicializar la RAM y su correspondiente MMU, los puertos serie, la tarjeta de red (puesto que existe la opción de conectar el Platform Builder en lugar de arrancar el sistema operativo desde la placa), el puerto paralelo si lo hubiera, el pcmcia y los sistemas de ficheros básicos. Y sorprendentemente, todo eso apenas ocupa 80K de código.

Este "eboot.nb0" lo suministra el fabricante del chip, aunque todos terminan tomando el modelo de Microsoft, que viene de la época del MS-DOS y apenas ha evolucionado. Y el fabricante te da unas especificaciones, y si quieres otras, pues te toca meterle mano a ese código.

Aunque existe un depurador para ello, no es habitual disponer de él, por lo que te las tienes que ingeniar. Normalmente este fichero saca un montón de información por puerto serie… una vez que has conseguido poner dicho puerto serie en marcha, por lo que si lo que vas a modificar no tiene que ver con el hardware de la máquina, pues lo mejor es hacerte un proyecto en el PC simulando lo mejor que puedas la tarea, y luego copiar el código y rezar para que no tenga demasiados bugs.

En mi caso el fabricante suministra la conexión con el Platform Builder mediante DHCP, y si tienes un dispositivo sin pantalla (como es mi caso), la cosa se puede volver muy, pero que muy interesante, pues estás poco menos que ciego. Por ello decidí cambiar el boot de DHCP a IP estática, IP que vendría indicada en un fichero de texto ASCII con el formato habitual de "aaa.bbb.ccc.ddd".

Pero eso suponía el tener que convertir dicha cadena, una vez cargada de SD mediante una serie de funciones un tanto barrocas, a un unsigned int, que es el formato que realmente entiende el ordenador. El mayor problema es que no disponemos de nada, apenas de lo que el fabricante haya incluído en ese fichero. Por suerte la función atoi sí que está implementada…

Otro problema es localizar dónde cambiarla o asignarla, aunque no vamos a entrar en él, la cosa puede convertirse en una búsqueda interesante, entretenida, forzosamente desesperante y tendente al suicidio. Pero supongamos que hemos descubierto el lugar correcto y sabemos cómo hacerlo. Sólo nos queda realizar la conversión.

En ip tendremos el valor final de la IP convertida, y en ucAsciiIP, el valor original en formato texto. El código es el siguiente:

 UCHAR ucAsciiIP,*ptemp;
 unsigned long ip=0;
 int i,j=0;

 ptemp=ucAsciiIP;
 for(i=0;i<4;i++)
 {
  ptemp=&ptemp[j];
  if(i<3)
  {
   j=0;
   while(ptemp[j]!=’.')
    j++;
   ptemp[j]=0;
  }
  ip+=atoi(ptemp)<<(i*8);
  j++;
 }

Aunque el pedazo de código pueda parecer lioso, es muy sencillo. Vamos buscando los puntos y sustituyéndolos por un cero; luego la cadana anterior contiene el número correspondiente entre 0 y 255 en formato ASCII. La llamada a atoi realiza la conversión, y volvemos a iterar. El condicional que compara si i es menor que tres está porque el último número ya tiene su terminador nulo.

De esta forma hemos realizado un parser de IPs compacto, rápido y que sólo utiliza una función de la biblioteca de tiempo de ejecución. La implementación de atoi es trivial, y la dejamos para ejercicio del lector.

Una ventaja importante de este código es que la IP en formato cadena no tiene que tener un formato fijo, sino que valores como "192.168.2.1", "133.5.4.6" o "1.3.5.5" son perfectamente válidos y parseables.

October 25, 2006

La madre de todos los jaleos (o cómo sobrevivir con el SP1 del Visual Studio 2005 en producción)

Estoy en la Beta del Service Pack 1 del Visual Studio 2005, y casi es peor el remedio que la enfermedad.

Actualmente mi área de desarrollo está relacionada con Windows CE, el Platform Builder 5 y tecnologías asociadas, de hecho servimos a nuestros clientes plataformas construidas para ejecutar en dispositivos CE (no, no son PDAs). La cuestión es que ahora estamos dando el salto desde el eMbedded Visual C++ 4sp4 al Visual Studio 2005, y dadas las características de los dispositivos y las pocas facilidades que da Micrsosoft, aparte de su pésima documentación, la cosa no es fácil, y más todavía cuando hemos quitado todo el aparato gráfico y lo hemos sustituido por el nuestro.

Dado que la Beta estabiliza bastante el Visual Studio (en general es más rápido), me resulta interesante desarrollar con ella instalada, aparte de poder ir verificando bugs solucionados (de momento, de los que yo conozco y me afectan, no han solventado ninguno si no es en velocidad y estabilidad, y esa es otra historia). Pero a nuestros clientes no podemos suminstrarle nada que tenga relación con la Beta, por motivos de licencia y porque entonces deberían ellos instalarse también el service pack beta.

¿Qué es lo que ocurre? Pues la máquina de desarrollo tiene instalado el SP, y todo lo realizo desde ella. Como es un equipo con Windows de 64 bits, el Plaftorm Builder y el eMbedded Visual C++ no van muy finos (aparte de que hay que instalarlos "con truco"), de hecho llegan a presentar inestabilidades y a hacer "cosas raras" que en un Windows de 32 bits no ocurrirían. Por ello tengo una máquina virtual que contiene el citado PB y el EVC, y es ahí donde compilo y genero los Windows CE.

En contra de lo que pudiera parecer razonable, esa máquina virtual compila los CE más rápido que mi ordenador físico, quizás porque sólo tiene instalado lo estrictamente necesario. Y gracias al sistema de conexionado de redes, no tengo ningún problema para depurar y sincronizar con los aparatos desde ahí. Lo único achacable es una cierta lentitudo a la hora de abrir los programas y de realizar mantenimientos (como hacer copia de seguridad del código o empaquetarlo para distribuirlo -un Windows CE en código fuente puede ocupar muy bien 200 megas).

Cuando desarrollo cosas que no tienen nada que ver con el Platform Builder, aunque sí con el Windows CE y sobre nuestros propios dispositivos, uso la máquina host, a veces con la máquina virtual del PB conectada para cosas en concreto, a veces sin nada más. Cuando he finalizado lo que quiero distribuir, comienza el baile.

Tengo otra máquina virtual con el Visual Studio 2005 RTM instalado. Bueno, realmente son dos, la versión en inglés y la española, por si las moscas. Tengo que abrir la VM del PB y cambiar ciertos ficheros que pertenecen al Visual Studio 2005SP1 por ficheros de la versión RTM (unos no funcionan con otros y vicecersa), luego reconstruir el CE correspondiente, conectarlo a la placa y entonces usar las otras máquinas virtuales para probar el código generado con la host y el Visual Studio 2005 sp1. Hasta ahora todo ha ido como la seda (el sp1 no rompe código, o al menos a mi no me lo rompe), pero es un lío de cojones tener tres máquinas virtuales abiertas, copiar ficheros de una a la otra, y es muy fácil liarte y dejar en un lado lo que no debes… Y eso que trabajo con un sistema con dos monitores, creo que con uno me moriría de asco.

Antes sólo funcionaba el Virtual Server R2 con el XP de 64 bits, y era un coñazo del quince, pues no permite arrastrar y soltar, y hay que hacerlo todo mediante carpetas compartidas, lo que me obligaba a entrar como Administrador a todos los lados. Ahora, con la Beta del Virtual PC 2007 (en la que también estoy), ya tengo funcionalidad de arrastrar y soltar y la cosa se simplifica un poco; por lo menos no tengo que estar como administrador en casi ningún sitio y puedo usar cuentas restringidas, con la mejora en segurirdad que eso supone.

Bueno, pues eso es todo. Simplemente comentar que tanto el SP1 del Visual Studio como la Beta del Virtual PC 2007 son muy pero que muy estables y que funcionan de maravilla en un XP de 64 bits, aunque el SP1 del VS a mi modo de ver lo único que añade es algo de rendimiento en la personalidad de C++ nativo y C++/CLI, pero bugs creo que soluciona muy pocos por no decir ninguno.

October 23, 2006

Ha salido Firefox 2.0

Parece que le estoy cogiendo el gustillo a esto de chupar blog… pero hay algo que debo decir sobre Firefox, pensamientos nacidos gracias a mi post sobre el IE7 y a los comentarios recibidos y, sobre todo, a una entrada que Diego ha puesto en su blog, es algo que pocas veces se dice en relación al tema que nos toca.

Firefox 2.0 acaba de salir. Por si alguien no lo sabe todavía, Firefox es un navegador WEB multiplataforma (que yo sepa existen versiones para Windows, Linux y Mac), heredero del mítico Netscape Navigator y que ha pasado por muchas encarnaciones, unas debidas a la mala leche de ciertas empresas, otras simplemente por cambios en el diseño y en su filosofía.

Firefox es Software Libre, y eso quiere decir que no es necesario que pagues por usarlo. Puedes, si así lo deseas, donar algo de dinero, pero es un acto voluntario, como voluntarios son la mayoría de los programadores y traductores que hacen dicho software.

Mucho se ha dicho sobre el producto, generalmente con malevolencia y segundas intenciones. Pero para mi hay una cosa que sobresale sobre todas las demás, para público escarnio y befa de casi cualquier programador, analista o jefe de proyecto corporativo (léase perteneciente a Microsoft, Opera, Symantec y un largo, larguísimo etcétera).

Firefox podrá tener fallos de seguridad, ser más o menos rápido, tener esta o aquella característica, ser más bonito o más feo, pero cojones, está hecho por gente voluntaria, gente a la que no les pagan por ello, gente a la que -seguro- no tiene las herramientas que otros en ciertas empresas.

Y sin embargo, ahí están, al pie del cañón, día tras día, corrigiendo fallos de seguridad, mejorando el producto.

Y luego están las empresas con esas plantillas de super programadores magníficamente pagados, con esos medios por todo lo alto y esos departamentos de flagrantes mentiras (uis, perdón, quería decir márqueting), que generan productos de pago que se caen a pedazos, con bugs encadenados o que cuando solucionan uno generan otro nuevo, y cuando solucionan éste, vuelven a destapar el anterior.

Por un lado el poder del dinero, de la organización, y por el otro un puñado de aficionados con voluntad. Y a estas alturas no me refiero ya al Firefox, sino al cdrdao, al k3b, al qmail, y a otros muchos más.

Me da la impresión de que algo falla. Que un chaval en sus ratos libres haga un programa como el cdrdao y que Nero no de pie con bola con su versión 7. Que Microsoft saque el IE7 como novedad y que ya sea viejo antes de salir. Que el .NET y sus herramientas de desarrollo relacionadas no terminen de cuajar, que el Vista se caiga a pedazos, y que, por ejemplo, las X sean mucho más estables cada vez, o que el gcc sea lo que es o, simplemente, que un grupito de chavales sean capaces de construir una distro de linux como Ubuntu.

En fin, me repito: hay algo podrido en el negocio del software.

Actualización
Como muy amablemente me corrige el amigo JT curses, Ubuntu tiene detrás a una empresa, mea culpa por el error y no documentarme, así que quien lea la entrada que cambie Ubuntu por Debian y santas pascuas. :-)

October 22, 2006

El nuevo IE7, más de lo msimo

Como todo quisqui está poniendo su entrada bloguera sobre el nuevo IE7, yo no voy a ser menos y también me subo al carro, a chupar cámara… digo espacio internetero.

Muchos han comentado el fallo de seguridad que cierta empresa hizo público justo un día después de la salida del programa; aquí me sumo a los pocos que, en lugar de criticar a Microsoft, se han echado encima de la empresa, puesto que ellos -junto a otros muchos integradores y profesionales- tenían la versión final del IE mucho antes que los demás. Desde mi punto de vista no se trata más que de oportunismo mal entendido, un afán de destacar de cualquier modo sobre la competencia y una desvergüenza sin parangón hacia la empresa. Vamos, que a mi se me caería la cara al suelo de vergüenza si hubiera hecho algo así.

Microsoft sale al paso diciendo que no es un fallo del IE, sino del Outlook Express y que próximamente saldrá un parche para ello. Personalmente tampoco entiendo esto: ¿un fallo del OE que se muestra a través del IE? Dejemos correr el agua.

Bueno, pero esta entrada no se debe a todo lo anterior, sino a contar mis apreciaciones sobre la nueva versión o, en otras palabras, siempre se dejan las cosas a medio hacer.

Comenzamos con las tan cacareadas pestañas, todo un logro tecnológico e inventivo, casi nada, oiga. ¡Pestañas! Algunos han mostrado las inconsistencias sobre las mismas, unas veces puedes abrir todos tus favoritos de golpe, otras no.

Un tema que no he visto contado por nadie es el de la UI tan bonita, con casi todos los elementos bloqueados. Volvemos al Windows 3.1, como los cangrejos, que andan hacia atrás… En plena era de la "customización" toma UI con elementos fijos. Se ve que tenían prisa…

Han añadido un cuadro de búsqueda justo a la derecha de la barra de dirección. Otra super novedad chachi guay del paraguay, en exclusiva. A ver si aprenden de Opera, que usa la misma línea de dirección para todo, incluso dependiendo de qué "comando" pongas, busca aquí o allá.

Otra cosa bonita, el zoom que no ajusta, que se desborda por los laterales, con lo bien que lo hace la gente de Opera y en menor medida Firefox. ¡Joder, si haces algo, por lo menos hazlo lbien!

Microsoft perdió el norte, ya ni respeta sus propias Guías de Uso. ¿Cómo manejo las suscripciones RSS desde el teclado? ¿Cómo voy saltando de entrada en entrada? Sencillamente, no puedo. No hay atajos de teclado. Y tampoco soporta canales con DTD, lo que quiera que signifique eso. Joder, son los únicos que no.

En fin, que el IE no es una mejora del Navegador, es un intento infructuoso de ponerse al día en las últimas novedades y, como siempre, dejan las cosas a medio hacer.

No voy a entrar en el tema de la seguridad, con eso que dicen que han reescrito el motor del IE, ni tampoco voy a entrar en lo rápido cual centella al viento que carga esta nueva versión…

October 17, 2006

Serie Dune (III): Hijos de Dune (Frank Herbert)

Ultramar Editores, 1987
84-7386-3598-3

Lectura número 0099/2006

Los gemelos de Paul y Chani han de decidir si siguen la Senda de Oro sin caer en la Abominación igual que lo ha hecho su tía Alia, poseída por quien menos nos podemos esperar, todo ello mientras se encuentran inmersos y sorteando las fintas dentro de las fintas dentro de las fintas que los demás poderes de este pecular universo trazan.

La novela transcurre en un crescendo que culmina en la apoteosis final, original como pocas; de todos modos se precisa de una relectura -como en toda la serie-, para saborear de verdad todos esos guiños y juegos adelantados que Herbert nos brinda en sus obras.

October 14, 2006

Eduardo Punset: El viaje a la felicidad

Filed under: Lecturas, Ciencia

Círculo de Lectores, 2005
84-672-1907-6

Lectura número 0098/2006

¡Qué libro más curioso! Un intento de cuantificar la felicidad mediante una fórmula que en cierta medida tiene bastante sentido, sin dejar de ser una mera cuantificación a groso modo de algo que, considero, no se puede -ni podrá- medir.

Pero eso no quita que el libro sea interesante, con un contenido muy equilibrado entre la enumeración de meros datos y estudios, y la divulgación al más puro estilo Sagan. 

Y una vez finalizado te sabe a poco, quieres más de lo mismo, pero en el mismo tono y con la misma calidad literaria, porque aunque el tema no sea santo de mi devoción, la presentación lo convierte en algo interesante y de valor.

Aunque no deja de ser un ensayo, sus cualidades son muy significativas, y casi díría que podríamos verlo como un libro de autoayuda un tanto inusual; Punset hace que nos fijemos en lo que hay detrás, en las falacias de la vida actual, en que el dinero no da la felicidad ni siquiera te acerca a ella, que lo opuesto de la belleza es la enfermedad y que lo contrario a la felicidad es el miedo.

Un libro interesante, muy bueno -aunque corto-, y que recomiendo que todo el mundo lea.

October 13, 2006

Gregory Benford: El océano de la noche (Serie Centro Galáctico I)

Edición electrónica.

Lectura número 0097/2006

Historia de un primer contacto extraterrestre, casi de refilón, se aparta en gran medida de la media del subgénero de los contactos extraterrestres más que nada por su característica más sobresaliente: realismo. La novela es realista, los personajes son humanos, hasta el snark lo es en su humanidad maquinera.

Pero lo que a mi modo de ver estropea en gran medida la novela es el componente etereo, no científico de la obra; no me refiero al trato de los personajes, sino al hecho de que el snark tome el control de Alexandria una vez muerta esta, o el final, con Nigel transformado de esa manera.

En fin, imagino que se trata de un guiño hacia los lectores menos críticos y más orientados a temas fantásticos…

October 6, 2006

Serie Dune (II): El Mesías de Dune (Frank Herbert)

Ultramar Ediciones
Edición electrónica

Lectura número 0095/206

Escribo esto desde Holanda, la segunda novela de la serie, para muchos la peor de todas, para mí un mero intermedio entre la primera y la tercera, carente de la profundidad de la primera pero no por ello inferior a cualquier otra buena novela de ciencia ficción.

Y para los que quieran saber más, Google es tu amigo. :-P

October 3, 2006

Serie Dune (I): Dune (Frank Herbert)

Ultramar Ediciones, 1982 (la de las Erratas)
Plaza & Janés, Debolsillo, 2002
Edición Electrónica

Lectura número 0094/2006

Qué decir de esta obra que no se haya dicho ya. Pues eso, al que le interese, que busque referencias por Internet, que yo estoy vago últimamente.

APIs para hospedaje del CLR (O cómo controlar una VM .NET desde C++)

Filed under: Programación

El otro día, navegando por los nuevos artículos aparecidos en la MSDN, me encontré con uno bastante curioso, CLR Hosting APIs, o en castellano: APIs para hospedaje del CLR.

Aunque el título suene a chino, el contenido del artículo es enormemente interesante, pues nos cuenta cómo controlar cualquier máquina virtual .NET ejecutando cualquier cosa desde C++ nativo.

Para ello existen una serie de interfaces de acceso público que permiten dicho control. El artículo lo explica brevemente, y señala nuevas referencias para continuar estudiando.

Como chico aplicado que soy :-) , lo he traducido. Aquí está.

Get free blog up and running in minutes with Blogsome
Theme designed by Gary Rogers