jueves, 16 de julio de 2009

Split the code, Luke !



Hace tiempo que vengo desarrollando un proyecto de una magnitud considerable en mi lenguaje favorito ( para los que ayer no vinieron a clase, léase en C ).... Naturalmente, y , como buen informático, ampliamente influenciado por los más prestigiosos manuales sobre Ingeniería del Software, todo mi código fuente estaba en un único fichero .c y un único fichero cabecera .h. Es sobradamente sabido de que esas mariconadas de que el código conviene distribuirlo sensatamente entre múltiples ficheros fuente no es más que una invención de los autores de esos libros, que sostienen con argumentos que aparentan muy sensatos y que dicen que están comprobados pero que en realidad constituyen una forma de tener algo que decir en sus manuales para poder poner algo entre tapa y tapa y tener algo que vender, y por lo que ingresar un dinero para poder alimentar a sus retoños..... En particular, el argumento de que así, cuando buscas algo en tu código fuente, lo encuentras más rápido y fácilmente, dado que vas directamente al fichero donde lo que buscas tiene que estar, me parecía el más endeble..... Leñe..... ¡ Si encontrar lo que busco en mi editor favorito teniendo un único fichero lo único que requiere es recordar de una maldita vez y para siempre si en él Buscar es Control-B o Control-F !

De todas formas, ayer, no sé por qué, me dio por ser ingenuo y creerme esas paparruchas ( probablemente fue un ataque de pánico al ver que el tamaño de mi fichero estaba alcanzando unas dimensiones tan desmesuradas que entraba dentro de lo posible que me devorase y mis pobres parientes ni siquiera encontraran en este cuarto unos restos de los que disponer del modo que estimasen más oportuno).

Así que empleé un tiempo razonable en hacer un diseño inteligente ( no confundir con la teoría de los antidarwinistas ) sobre cómo distribuir mi código en unidades de compilación homogéneas y coherentes... Una vez planificado el patrón de corte y confección en un DIN-A4 para saber por dónde tenía que meter las tijeras divisorias, me puse a ello. Me sorprendió lo fácil que logré hacer las adaptaciones que me parecieron oportunas ( separar el código entre los ficheros obtenidos en mi diseño de las escisiones - splitters, puagh ! - , crear un fichero cabecera para cada unidad de compilación, incluir cláusulas de salvaguarda para evitar definiciones dobles por inclusión múltiple de los .h.... esas cosas ).

Hasta ahí parecía fácil..... Lo siguiente era donde el sudor frío amenazaba con paralizarme. Tuve que escribir una larga línea comenzando por gcc, incluyendo las opciones convenientes para la compilación y el enlazado, y la lista de ficheros fuente a compilar y enlazar. El resultado fue una orden cuyo aspecto abstruso hacía palidecer las frases más enrevesadas que pueda contener una mezcla de serbo-croata, olov y arameo; y la gran cuestión: ¿ cuántos errores de compilación voy a obtener ? El resultado me dejó estupefacto. Pulsé ENTER y el sistema no hizo nada,..... sólo volver al prompt mansamente.... Ni un sólo error de compilación, ni una triste queja del linker, ni un mísero warning..... Nada.... Era una cámara oculta, sin duda. Ahora hago un DIR y veo que no ha generado ningún .exe y se me va a quedar una cara de gilipollas que lo flipas. Coño, pues no.... Pues hay un .exe. Vale.... los autores de la broma, que a estas alturas no tiene ni puta gracia, han sido muy elaborados.... Han dispuesto que el compilador con truco crease un .exe. ¡ Qué cabrones ! Lo dejan todo p'al final, pa cuando ejecute el .exe que no será más que una cáscara de nuez y no hará nada. Hmmm.... Vamos a ejecutarlo, que la cara de tonto va a marcar un antes y un después. ¡ El complejo programa funciona, exactamente igual que el que obtenía de compilar mi fichero único !

¡ He visto la luz ! Los autores de manuales de Ingeniería del Software son unos tíos honestos. A partir de ahora todos mis proyectos software los planificaré desde el inicio para que su código esté distribuido de modo adecuado en múltiples ficheros....

Fíjate, querido lector, que hasta estoy empezando a considerar la idea de que eso de la Programación Orientada a Objetos no sea una tomadura de pelo. ¡ Cualquier día pruebo !

viernes, 12 de junio de 2009

El mundo laxo




Cuando empecé a programar, allá por los primeros años ochenta del siglo pasado, empecé con el BASIC.... de ahí, directamente me fui a lo que me atraía mucho más.... programar en ensamblador, que es donde a mí me "molaba" verdaderamente jugar... poder entrar en las entrañas de la máquina sin límites....

Pero el primer estudio serio, concienzudo, programado y estructurado que hice de la programación como ciencia fue utilizando PASCAL... Del PASCAL más puro, seguramente una de las características más significadas es que es un lenguaje fuertemente tipeado.

Muchos años después, tuve que retomar , a un nivel profesional, un proyecto que, por ahorrarse unas perrillas, una empresa muy seria había encargado, su parte de programación, a un profesor de secundaria en sus ratos libres.... Aquello era un desastre sin paliativos que hubo que corregir casi línea a línea.... El conjunto del desarrollo usaba la última versión entonces aparecida de Macromedia Director... El lenguaje usado para programar era el lenguaje asociado al producto, el lingo.... Me familiaricé con él en dos patadas, pero me sorprendió la carencia absoluta de tipos.

Veo paralelismos entre el mundo de los productos financieros y los lenguajes de programación; se asistió en un par de décadas a una transformación regular... De unos productos y servicios bancarios, o unos lenguajes de programación, cada uno que elija la "vista" que quiera, donde todo estaba estrictamente regulado, en buena medida como sabia prudencia para protegernos de nosotros mismos, a unos productos y unos lenguajes poco menos que absolutamente desregulados.....

Últimamente, los productos y los lenguajes han evolucionado años-luz... Sin embargo, aun con las muchas mejoras en la seguridad que la sabiduría casi siempre creciente ( ¡ quiero creer ! ) nos ha proporcionado, hoy, ambos mundos, a pesar de que aún mantienen cierta laxitud en las regulaciones, la compatibilizan en los mejores casos con una seguridad muy aceptable.

Sin embargo, y con todo lo que ha caído (desde economías enteras hasta transbordadores espaciales), vuelvo a ver propuestas de lenguajes de programación que postergan peligrosamente la posibilidad de detectar errores que con otro diseño se detectarían en tiempo de compilación, y créditos hipotecarios que se conceden valorando el bien inmueble con una temeridad ajena a que el valor de los inmuebles que garantizan millones de créditos vivos va a sufrir, sin duda, aún, un severo correctivo, si el cliente ( normalmente la pareja ) es bien considerado por la entidad...

¿ Habremos aprendido las lecciones ? ¿ Volveremos a buscar restos dispersos de los cuerpos de unos astronautas cualquier día ? ¿ O del valor de las garantías que le aceptó una entidad privada irresponsable a un cliente que no necesita comprarse un mercedes nuevo mientras la inmensa mayoría de las empresas no reciben el mismo trato para poder pagar una nómina en un momento en que su tesorería está llena de arañas? ¿ Me habré vuelto demasiado conservador o será cosa sólo de la edad ?

No desfallezcas.... Son ostie di un vecchio... Creo que estoy premenopáusico.

viernes, 8 de mayo de 2009

Memorias de un ingeniero...

Absolutamente hilarante, extraordinaria.... Lo único triste de todo el relato es que no es fruto de una imaginación desbordante, cuenta la realidad.

Memorias de un ingeniero

viernes, 1 de mayo de 2009

Del voto y de los ámbitos que le son propios




Recuerdo una anécdota en el Instituto. En segundo de BUP, una chica, "interrogada" por un profesor, cuya tendencia política no parecía difícil de deducir a partir de sus modos, maneras y criterios, y actuaciones, dio, auna pregunta de sí o no, una respuesta que yo percibí instantáneamente como errada. El profesor, entonces, se acercó a una columna de pares de mesas, y apuntó con el dedo sucesivamente a tres, preguntándoles a botepronto: ¿tú crees que la respuesta de Sonia es correcta? Los tres dijeron que sí. Viendo la ocasión, el profesor volvió a la zona de su mesa "preferente" y dijo: que levanten la mano los que crean, como Sonia, que la respuesta correcta es Sí. 39 manos se alzaron. Ahora, que la levanten los que crean que es no.... Yo levanté tímidamente la mía, en la atroz tesitura de exponer mi respuesta a una cuestión científica con el evidente riesgo de dejar mal a una compañera. Tras el contundente 39 a 1, el profesor, anunció, henchido, que la respuesta correcta era la de Sergio, y que el 39 a 1 a favor de la errónea demostraba que la Democracia es un sistema inválido.

Pues oiga, ni tanto ni tan calvo. Yo tuve muy claro que la pregunta sometida a votación no era candidata a obtener una respuesta atendiendo a un criterio de mayorías y minorías. De lo cual no se puede deducir que una votación no sea un sistema válido para que el pueblo escoja a sus gobernantes. Hay ámbitos y hay ámbitos.

El caso es que veníamos de cuarenta años en los que no se podía votar nada ( excepto un par de referendos franquistas que se celebraron bajo la premisa de que votar sí era votar que Franco se quedaba y votar no indicaba que Franco no se marchaba) y pasamos el péndulo a un extremo en que se pretendía votar todo.

Y en estos días, a esa cuestión, yo siempre correspondo con una pregunta: ¿ te parece razonable someter a votación si la gripe la causa un virus? Todas las personas preguntadas convinieron ya sin duda alguna en que hay cosas que no conviene establecer por el resultado de una votación.

En general, en ámbitos científicos, yo creo que hay un método alternativo y bien establecido, que ha tenido un éxito sobradamente contrastado, a someter las cosas a votación, incluso cuando se trata de cuestiones en las que ni siquiera los expertos muestran unanimidad. Ahora bien, el caso es que hay cuestiones que deberían situarse inequívocamente en el campo de la Ciencia.... ¡ que se resuelven por votación ! El caso paradigmático son los criterios de definición, clasificación y diagnóstico de las enfermedades psiquiátricas. Un conjunto de expertos se reúnen periódicamente y deciden, a veces llegando a votar, qué es una enfermedad mental y qué no, y de ahí surgen los standards "científicos" con que los psiquiatras de casi todo el mundo diagnostican.

Resumiendo un texto del Dr. David D. Burns, prestigioso psiquiatra ( "Adios Ansiedad", ed Paidós ) :

Para que se le diagnostique un Trastorno de Ansiedad Generalizada, tiene usted:

- que preocuparse excesivamente por las cosas, la mayoría de los días, durante más de seis meses.

- tiene que costarle trabajo controlar su preocupación

- la preocupación tiene que causarle una aflicción significativa en su vida

- tiene que sentir los síntomas físicos de la ansiedad

[sigo citando al Dr. Burns]: ... estos criterios pueden parecer razonables hasta que los examinamos críticamente. ¿ qué es preocuparse "excesivamente" por las cosas? ¿ cuánto hay que preocuparse, para que sea excesivo ? Si usted no lo sabe yo tampoco. Y ¿ por qué tiene que durar 6 meses su preocupación para que se le diagnostique esa enfermedad? Si lleva usted 5 meses y 29 días cumpliendo esos criterios.... ¿ Enferma usted súbitamente de TAG la medianoche del día que se cumplen los seis meses? [...] Si usted llega a Urgencias con fiebre alta, tos, disnea y la radiografía muestra una pulmonía, yo le diagnostico una pulmonía... No le digo: ¿ lleva usted dos con esos síntomas? Ah, pues mire, la definición de pulmonía requiere que los tenga durante tres días; no puedo diagnosticársela. Vuelva usted mañana , si sigue vivo, y entonces podré tratarle la pulmonía. Eso sería absurdo: la pulmonía es pulmonía dure tres días, una hora o un minuto....

Pero bueno, empecé un post, y este es un tema que da, como mínimo, para un libro.... Como ya se vislumbra lo que quiso exponer a tu gentil atención el Tecnólogo Heterodoxo, lo voy a dejar aquí.... Gracias por leerme.

sábado, 25 de abril de 2009

Programar es divertido

Lo recuerdo solamente de vez en cuando, pero la verdad es que programar ordenadores es tremendamente divertido, al menos a mí me lo ha resultado desde los doce años, y ya ha pasado algo de tiempo desde entonces, y una cierta cantidad de agua bajo el puente... Y me lo sigue resultando. No voy a decir cuáles son las otras pocas cosas que siguen divirtiéndome como el primer día más de veinte años después de probarlas, so pena de que me acuséis de obsceno ( :-) )...

No obstante, hoy he estado trabajando en varios desarrollos en los que es parte importante el lenguaje Python , y.... ¡ se me ha pasado la hora de comer ! Pensaba comer a las tres, y , cuando quise darme cuenta... eran y media.

Python es un lenguaje extremadamente divertido porque es sencillo a la vez que potente. Tras una mínima introducción, quienes ya hemos programado en otros lenguajes podemos empezar a desarrollar programas a una velocidad sorprendente.... Incluso, aunque no sea una práctica aconsejable de ingeniería del software, en ocasiones me encuentro con necesidades a las que sé que el lenguaje responde, pero que no he estudiado de modo formal y ordenado cómo se usan, y sin embargo, me digo.... ah, pues esto, por narices, se tiene que hacer así... Incorporo el código tal como creo que tiene que ser en el lenguaje sin comprobación alguna, y la mayoría de las veces, funciona exactamente tal como lo esperaba.... sólo muy esporádicamente me da algún error trivial, que no cambia lo esencial.... tras ver el error, inmediatamente me doy cuenta de que la característica no se usa "exactamente" como había sospechado, pero por el tipo de error, por poco descriptivo que sea, te das cuenta de cómo es el matiz entre cómo supusiste que sería, y cómo es en el lenguaje... y a la segunda va la vencida, de nuevo sin más comprobación ( vale, vale, ya veo a mis pasados profesores que me puedan leer llevándose las manos a la cabeza pensando cómo pude salir YO con estas prácticas HETERODOXAS de sus clases.... qué le vamos a hacer, me gusta experimentar).

Por cierto, lo escandalizados que estaban en los años ochenta algunos teóricos sobre el uso de código automodificable ( yo en la primera mitad de los ochenta lo utilicé en ensamblador, y me encantaba la idea, de que una instrucción máquina PUDIESE ESCRIBIR EL CÓDIGO DE OTRA INSTRUCCIÓN MÁQUINA A EJECUTARSE POSTERIORMENTE POR EL PROPIO PROGRAMA).... recuerdo los reproches.... Vale... y cuando ese programa tenga que ir en una ROM en un dispositivo embebido, ¿qué, campeón?

Bueno, la verdad es que ningún programa mío de los ochenta terminó en una ROM controlando ningún aspecto del funcionamiento de ninguna nevera, y me lo pasé muy bien..... Que, como dijeron aquellos grandes filósofos que eran The Beatles, es de lo que se trata esta vida, ¿no?

Feliz jornada.

martes, 21 de abril de 2009

Mercadillo LABshop de abril




Los pasados días 4 y 5 de abril, se celebró la última edición del mercadillo LABshop, con excelente afluencia de diseñadores y público.

En la foto, de izquierda a derecha y de arriba abajo, cuatro aspectos de la tarde del sábado 4: la presencia de Cake-keline, la tienda LABshop, un equipo de la TPA trabajando, y un aspecto de otro negocio presente.

sábado, 18 de abril de 2009

Notepad++




Un día de esta semana estuve buscando un buen editor de texto GPL para mi sistema operativo propietario. Suelo usar Note Tab Light, que es la versión freeware de un excelente editor, pero buscaba algo más orientado a trabajar con código fuente en C, y , a ser posible, software libre. Encontré este extraordinario editor: Notepad++. Cubre un número enorme de lenguajes, seleccionas el lenguaje y te facilita el marcado automático por colores, verificación de correspondencia de paréntesis, llaves, y todas esas cosas abiertos y cerrados..... Trivial de usar y una maravilla. No he dejado el Note Tab Light, que lo sigo usando para tomar notas en ficheros .txt que guardo en una carpeta específica ( se llama postIt, la carpeta, para los crackers que querais entrar en mi sistema y ver los recordatorios de lo que debo incluir sin falta en la próxima lista de la compra y eso, y está en la raíz de la unidad L: ), pero para los códigos fuente Notepad++ es ya mi editor de elección bajo W****s.