sábado, 11 de enero de 2014

!como se ha perdido el diseño en sistemas!

¡Cuando ocurrió?... creo que fue Microsoft aunque después los siguieron muchos. Si sos un enfermito linux, o un joven programador, estaría bueno que leyeras esto. Muchos siguen linux por snobismo y no por razones de fondo.
Es increible lo mal hecho que esta Windows como diseño... pero es algo que muchas veces no se entiende y veo que se tiende a continuar su filosofía técnica, incluso por aquellos que lo denostan. No entiendo como gente con posgrados y que gana fortunas pueden abandonar principios básicos.
(ojo!!! con el tiempo aprendí, cosa que no siempre hacen los linuxeros, a apreciar el fantástico trabajo de debuggin y de puesta a punto de WIndows. Por eso lo uso. Windows es lo siguiente:
Un mal diseño, con mucho debugging y mucha puesta a punto. Estas ultimas cosas no dejan de ser un gran mérito).
Pero vamos al punto. Un ejemplo de mal diseño a partir de una situación concreta:

Hace un tiempo discutía con una de las pocas personas con las que todavía puedo discutir cuestiones de diseño lo siguiente:
No me gustaba que una nueva distribución de linux que había visto, cuando booteaba en modo consola (o como sea que se llame en linux a lo que en windows se llama booteo solo simbolo de sistema) había abandonado el modo texto y mostraba la consola en modo gráfico. Mi amigo, creo que mas por llevarme la contra que por otra cosa, me decia que estaba bien. Mi argumento era el siguiente:
Si uno bootea en "solo simbolo del sistema" en windows o en modo consola en unix, es porque hay una buena razón para no bootear en interfaz gráfica. Quizá hubo un problema, o quizá estas haciendo una reconfiguración de algo muy básico o lo que sea, pero hay algo que no es normal. En ese caso, el sistema tiene que estar en un estado lo más simple posible y si arma una consola en modo gráfico forzosamente tiene que cargar los drivers de video (que son específicos de cada placa) y desarrollar rutinas en modo gráfico que son más complejas que el modo texto. Todo esto para mostrar una consola cuya aspecto no puede ser mucho mejor que el que se muestra en modo texto. Que no, que no, que no... como el es muy buen programador le tuve que reconocer que al estado del arte actual, el modo gráfico es algo suficientemente sencillo y una tecnología suficientemente madura y dominada como para no considerarse una situación compleja. Idem respecto al mayor requerimiento de memoria que dado la infinita memoria que tienen las computadoras actuales no es un problema "dibujar una consola" que usar el super eficiente modo texto (en el cual una pantalla puedo ocupar 2k, si leiste bien nene, 2k, en la vieja epoca la memoria se media en kilobytes y eso era mucho).
Bueno hace poco me paso lo siguiente:
En el booteo de windows me aparece pantalla azul... error no se cuanto y mensaje
CONFIG_LIST_FAILED
Intento bootear en modos más simples: modo a prueba de fallos, ultima configuracion buena conocida etc, hasta llegar al "solo simbolo del sistema". Siempre el mismo error.
Puta, esto huele a un formateo. Detesto el formateo. Una muestra de la aberración que es el diseño Microsoft es que ha acostumbrado a la gente a resolver los problemas formateando. Eso es como si para arreglar un problema en el stereo del auto, hubiera que cambiar todo el auto completo. Es una muestra de que todo esta acoplado. Linux en ese sentido es mejor pero no resuelve la cuestión por otras razones que no vienen al caso y no tengo tanta experiencia como para fundamentarlo, asi que vamos a dejar de lado esto.
Bueno la cosa es que este tipo de cosas habitualmente va a un formateo en el cual tienden a perderse datos (ese es otro tema: ¿que es un dato?, por ejemplo las configuraciones son datos, pero bueno, es otro tema) lo cual es una aberracion.
Bueno, busco el error en Internet. Aparece el error en la knowledge base de Microsoft, que suele ser una muestra en si misma de lo mal hecho que esta windows (aunque, reitero, con mucho debuggin y puesta a punto, por eso lo uso, no es un tema menor). Ademas de un reconomiento de lo estupido que es su diseño, no mostraba como resolver nada.
Sigo buscando y encuentro:

 http://www.luiskano.net/blog/2011/01/10/como-solucionar-bsod-config_list_failed-en-windows-xp/

Bueno, esto me resolvio el problema. Simplemente se había quedado sin espacio en disco.
Booteo con el hiren boot (que debería ser un producto standar y no una cosa de hackers), borro algunos archivos y voilá, el sistema levanta.
¿que tiene que ve con la discusión inicial y con el diseño? ¿acaso no es razonable que un sistema exija un minimo de espacio libre en disco?.
A ver muchachos:
Es razonable que un sistema complejo, pida espacio de de disco.
NO es un buena muestra de diseño que:
1) Es un poco discutible que pida una espacio más allá de lo que le da el archivo de swapdisk que para eso esta. Pero bueno, digamos que pasa.
2) Tambien es discutible que el sistema no se de cuenta que le esta faltando espacio y no de un mensaje claro tipo : "boludo, dame mas espacio libre".... pero bueno

Lo que definitivamente no esta bien es que:
La razón por la cual necesita ese espacio, es porque necesita armar el registri. Lo que no es nada razonable es que si estoy booteando en un estado de máxima sencillez, el bicho arme todo el registri que incluye cosas que estan en un nivel de funcionalidad mucho más alto que el nivel que pretendo. Es como si el motor de un auto no arrancara porque los asientos electricos no estan funcionando bien. Es lógico al revés, es decir que los asientos, el stereo y los espejitos electricos no anden si no anda el motor o bien si no anda la batería. Se puede discutir eventualmente, algún caso de by-pass (por ejemplo que la radio siga encendida sin la llave puesta como es en algunos casos, o que funcione un implemento x porque es una cuestion de seguridad y entonces tenga una conexion directa a la bateria). Pero lo que no esta bien que la batería o el motor no arranquen porque los asientos se averiaron.
El tema es que el booteo en "solo simbolo de sistema" nunca estuvo bien diseñado (en w98 era peor, una verdadera enfermedad) porque no esta claro cual es el nivel de funcionalidad que tiene que tener, o mejor dicho, el estado de complejidad que tiene que tener. Y en general, las capas en windows estan mal hechas.
Volviendo al tema del modo gráfico, digamos que si "solo fuera el modo gráfico" no estaría mal porque como decía, actualmente no mete mucha complejidad dado el estado del arte ni consume mucha memoria. El problema es cuando no se tiene claro el asunto de las capas y de los niveles de complejidad y pasa lo que se muestra en este ejemplo, en el que un estado que debe ser simple esta lleno de boludeces. Por un lado, voy a entrar a un modo que no tiene ni red ni placa de sonido (o sea que estoy en un problema) y por otro el sistema gasta recursos armando todo un registry lleno de cosas que no interesan cuando estoy en un problema).
En defensa de Microsoft se podría arguir que es posible que no este intentando cargar todo el registri sino solo las partes más básicas. Francamente no lo creo, primero porque no es algo que este claro en la knowledge base, segundo porque no entiendo que necesite tanto espacio para cargar una partecita del registri (mi maquina tenía algo de espacio en disco, no es que estaba con 0 bytes sin contar 1 giga de ram ¿les parece poco 1 giga?... 1 giga es un montón, un sistema operativo de verdad como eran los viejos unixes cargaban en modo consola, con capacidad multitasking, red, sistema de archivos, multiusuario, etc, etc, en 1 mega como muchisimo, el modo "solo simbolo del sistema" no puede ser mucho más complejo que eso).

Respecto a las capas:
Hace poco hablaba con una project lider de una consultora y no veia ningun problema ni en windows ni en linux. Le hablé de las capas y lo entendió en un sentido completamente estrecho, es decir los softwares que acceden a bases de datos de negocios y se hacen con capas.
A ver muchachos: TODOS LOS SOFTWARES BIEN HECHOS TIENEN CAPAS. MAS AÚN TODAS LAS MAQUINAS TIENEN CAPAS.
Por ejemplo ¿entendieron las analogías automotrices?, ¿ustedes pondrian la batería en medio del asiento trasero, el tanque de combustible al lado del conductor y el regulador de los espejos adentro del capot? ..
BUeno, ¿porque los programadores de software lo hacen?.

Respecto al registri
El registri merece un post aparte. Precisamente porque revienta todo el sistema de capas y el ejemplo que doy es una muestra de esto. Es un enorme bodoque, de variables globales (algo que hoy se supone que no existe más) que convierte todo el sistema en una gran  masa de espagueti frio donde todo tiene que ver con todo (o sea, la variable que define el fondo de pantalla con el perrito esta en el mismo lugar en el que esta una variable clave para que ande el hardware, todo fusionado en un archivo que se corrompe, que esta en un formato inaccesible y en el cual es muy dificil de intervenir). Una aberración que en dbase ya se decia que estaba mal. Ningun programador dbase hubiera hecho un enorme conjunto de variables globales relacionadas con funciones regadas a lo largo del sistema. Hubiera sido considerado un mal programador dbase.
Los genios de microsoft hacen eso con un S.O. complejo !!!!!