31 de marzo de 2006

Vocabulario básico necesario a partir de hoy

Bueno, pues ya se ha desmembrado España. Ya ves, decían que iba a doler mucho y al final no ha sido para tanto. Yo sentí un temblor, miré por la ventana y ahí estaba España, desmembrándose. Pero despues pasaron los barrenderos y no se notaba tanto. El caso es que hay que afrontar, compañeros, esta nueva etapa. Para evitar que nuestra lengua y cultura se desmembre tenemos que crear una lista de vocabulario común que utilizar. Recomiendo a toda la gente de bien que se aprenda esta página para no perderse en los debates políticos que se nos vienen encima

27 de marzo de 2006

Por qué los retrasos de Vista no importan

Ahora que todo el mundo comenta los retrasos de Vista, hay que decir algo que es 100% verdad:

Tarde lo que tarde Vista en ser desarrollado, salga a principios del 2007 o a finales o se retarde hasta a principios del 2008 (siendo extremistas), todo el mundo lo va a usar. No es que a Microsoft se le estén yendo los clientes por culpa de los retrasos precisamente. Si, en algún que otro lado están cambiandose a Linux. Las ventas de Mac siguen estables. Pero ese 90-95% de clientes de Microsoft que forman el mundo del "escritorio" están simplemente esperando a que salga el próximo Windows.

Se quejan de los retrasos, claro, y mucho. Pero se quejan porque quieren usar Vista. No es que la cuota de mercado de Microsoft esté cayendo en picado precisamente: Los usuarios de Windows 9x/XP no están migrando a Linux (ni a Mac) en masa. A pesar de los worms que hubo antes del SP2 y de no haber tenido una versión nueva en cinco benditos años, siguen "esperando". Si se quisieran pasar a Linux o Mac, ya se habrían pasado hace un año o dos, o empezarían ahora. Pero no lo hacen, simplemente esperan a Vista: Evaluan cuanto tiempo y esfuerzo va a costarles cambiar, pero lo esperan fielmente como perritos falderos. Apple es la única excepción que se está beneficiando de estos retrasos, y seamos realistas: Si los usuarios de Windows quisieran pasarse a Apple de verdad y teniendo en cuenta la enorme cantidad de usuarios de windows que existen, las ventas de Apple crecerían un 100% o más, no el 30% y pico actual, que no es una mala cifra en absoluto pero no pone fin al monopolio de Microsoft. La venta de PCs que no son de Apple crece mucho menos del 30%, creo que alrededor del 10-15%...pero un 10-15% sobre una base varias decenas de veces más grande que la de Apple

Y si podemos echar la culpa a alguien de esto (en el terreno de Linux, no de Mac) es a nosotros mismos, los que hacemos software libre. Hemos tenido cinco años y muchas meteduras de pata de Microsoft para robarles millones de clientes por la cara, y no lo hemos logrado porque - seamos realistas - nos hemos pasado cinco años trabajando para intentar igualar a XP, superar nuestro propio retraso, no ofrecer nada mejor. Solo las futuras versiones de Suse y Ubuntu empiezan a parecer un sustituto serio para XP a nivel global. Ahora bien, para haber robado a Microsoft muchos usuarios esas distros deberían haber salido hace dos años. Asi que cuando salga Vista nos pasaremos un mínimo de 2-3 añitos intentado cazar a Vista. Y ahí, podremos empezar a competir. Tal vez el futuro sea mejor que lo ha sido estos cinco últimos años. Pero a día de hoy, Vista es, por mucho retraso que tenga, un éxito aplastante de Microsoft sobre Linux.

24 de marzo de 2006

Más sobre la ley francesa que pone límites al DRM

Siguiendo al "anuncio" del otro día llegan las reacciones.

Las reacciones llegan desde todos los lados. A mi, ya lo dije en el otro blog, me parece rebien (estos sudamericanos acabarán pegándome el acento :P). El DRM es en esencia un formato propietario excepto que a diferencia de los típicos es irrompible gracias a la criptografía (Bueno, relativamente irrompible) y un formato de esas característica permite que las empresas que producen los contenidos y les aplican capas DRM controlen al mismo tiempo los métodos hardware y software que se utilizan para verlos. El DRM sin control puede usarse como arma anti-competitiva con demasiada facilidad y me parece fabuloso que se creen leyes que garantizan la libre competencia

He encontrado un blog de alguien envuelto en la historia de la ley (gracias a este blog encontrado en planet.mozilla.org). Y me gusta lo que dice (para que no se me quejen de nuevo de que no traduzco lo traducire, el original está en ingles):

La reciente adopción en Francia de medidas para la interoperabilidad del DRM en la ley francesa de "derechos de autor" (copyright) ha despertado sospechas y ha hecho que Apple se alarme

Me gustaría explicar porque hemos propuesto tal cosa. Primero: Queremos proteger la libertad de elección y la privacidad de los usuarios. Nos oponemos a la idea de que el vendedor de una canción o de cualquier otro tipo de material imponga al usuario los métodos para leerla, para siempre, y especialmente en el entorno del hogar del consumidor. Es esencial asegurar que el consumidor puede escoger el dispositivo que prefiere, al igual que hoy en día puede usar su equipo de alta fidelidad y no tiene que comprar uno nuevo para cada distribuidor.

Segundo: Queremos que el mercado sea un mercado libre y abierto. En vez de forzar monopolios artificiales, preferimos crear un ecosistema donde la empresa innovadora tiene oportunidades. Para que eso sea posible, los innovadores necesitan tener cierta información de como interoperar con los dispositivos existentes. Para asegurar que los pequeños innovadores puedan entrar en el mercado no queremos que esta información sea costosa. Como aquí estamos discutiendo una libertad esencial -- la de crear e innovar -- estimamos que el unico precio aceptable es: Sin ningún cargo

Tercero: Queremos proteger a los desarrolladores de software libre. Muchos de ellos son personas que programan por diversión, no por los beneficios. Que puedan conseguir la información necesaria sin ningún cargo es vital para ellos. Tambien deben poder publicar el código fuente del software que interopera con cualquier DRM. Tenemos que garantizarlo por ley
[Nota personal: ¿A alguien le recuerda esto a la GPL3?]

Para dejarlo claro: ¿Podemos permitir que un par de empresas establezcan monopolios controlando cuidadosamente a sus clientes y excluyendo la competición? No creo que ningún americano quiera eso. Ni apple, ni Microsoft, ni nadie está amenazado por esta ley si sus intenciones con respecto a los consumidores y la competencia son buenas. Si Apple quiere continuar siendo importante en el sector de la música online, tendrá que innovar y continuar proporcionando nuevos productos. Es una buena noticia para los consumidores, que tendrán a su disposición mejores y más baratos productos. Y es una buena noticia tambien para Apple, a largo plazo"


Y recordar que esta ley no es anti-apple, está pensada para todo tipo de DRM en un futuro en el que todo el video y la música se distribuyen mayoritariamente por internet y con grandes empresas detrás de ello y no siempre queriendo jugar limpio

Como complemento, este artículo de Wired, "How France is saving Civilization" (título exagerado pero contenido interesante)

21 de marzo de 2006

Bombazo: Francia fuerza a las empresas a abrir el DRM (y prohibe el P2P)

Con un par de huevos. Eso si, aparentemente es la ley que tambien castiga el uso de P2P, pero yo me centro en el DRM que me parece bastante más importante. De todas maneras me encanta Francia. Este fin de semana, manifestándose por su futuro mientras los españolitos nos manifestabamos por el derecho a hacer botellón. Ah, Francia...Paris, la Sorbona, Versalles, la Revolución Francesa (incluidos los guillotinazos de gente que no se lo merecia, como toda buena revolución que se precie)

A pesar de que la gente lo está vendiendo en las noticias como un "anti-itunes", es más bien la respuesta de un gobierno a las necesidades que están imponiendo las nuevas tecnologías y que afecta a toda la industria. (Si hubiera sido solo una decisión judicial contra Itunes hubiera sido decepcionante)

Como ya dije un día, el DRM no se trata de limitar al usuario ni de evitar el pirateo ni milongas de esas. Eso es lo que tal vez vendan a las productoras para que les apoyen. Una canción con DRM comprada en Itunes jamás podrá escucharse en otros dispositivos que Apple no permita y te limita a productos Apple. Del mismo modo, los usuarios de Ipod no pueden escuchar música con DRM de Microsoft si Microsoft no quiere (puede no importar hoy porque Itunes es el lider pero a saber en el futuro).El DRM simplemente trata de controlar los mercados de los productos hardware/software que se utilizan para codificar/descodificar DRM.

El Ministro de Cultura Francés parece entender al menos el problema que crea el DRM: "Someone who buys a song has to be able to listen to it, no matter which device or the software of choice". Y la ley parece ir en el camino correcto: The technical measures must not result in the impediment of interoperability", "The technical measures can't be an obstacle for the free use of the oeuvre or protected object within the limits of the rights foreseen by the current code". Y lo que es más, lo van a promocionar por Europa: we'll see if we can push this on a European level

Repito, esto NO es un "anti-Itunes", aunque es cierto que pueda afectar a las cuotas de mercado dominantes de Itunes (De hecho si se pudiera empezar a comprar músicas para otros reproductores que no sean el de Apple, las ventas de Itunes probablemente SUBIRIAN aunque pudiera afectar a las ventas de los ipods). Esto tambien beneficia a los usuarios de Ipod porque tambien podrán usar el DRM de otras tiendas. Y con respecto al tema del DVD, tambien les da por saco a las productoras, creo yo.

Como desventaja, la ley pone multas a quien intente romper los métodos DRM. No es que me haga saltar de alegría (las multas me parecen exageradas, 3 años de prisión y 300.000 Euros de multa para quien desarrolle cosas que rompan el DRM) pero la lógica está bastante clara: La ley intenta forzar a las empresas a que puedas acceder a los contenidos de la manera que quieras, de manera que no sea necesario romper los métodos DRM, asi que se prohibe romper el DRM. Tambien se prohibe el P2P y se ponen multas de un máximo de 150 Euros. En realidad se rebajan las penas por el uso del P2P (antes se podía ir a la cárcel por lo visto), lo cual es un progreso desde mi humilde punto de vista. De hecho la reducción de penas en ese punto podría....animar el tráfico P2P, lo opuesto de lo que se pretende.

No se que interpretación harán David Bravo y nuestros diversos heroes nacionales. Mala por lo del P2P, apuesto. Yo de momento me alegro porque como digo el DRM me importa bastante más, pero tampoco he leido el texto de la ley (que aun no se ha aprovado de manera definitiva, eso se hará en Mayo y empieza a hacer efecto en el 2007): Me parece una ley que ataca de manera rádical uno de los problemas clave que están teniendo los contenidos multimedia con las nuevas tecnologías y lo hace poniendo el ojo en que el ciudadano tenga derecho de acceder los contenidos sin que las compañias le encierren en esquemas DRM propietarios. Lo de que no se pueda romper los métodos DRM....pues puede tener sus pegas, pero no está tan mal si vamos a tener una oferta donde elegir y una competencia real en cuando a medios para acceder a los contenidos. Si lo piensas, en Europa tampoco podemos hacer ingeniería inversa: Al menos que no sea por motivos de compatibilidad, pero si no es por motivos de compatibilidad no puedes, y no diría que esa prohibición es abusiva. Además como decía Linus Torvalds, DRM es una tecnología y tiene usos legítimos nos guste o no, no todo el DRM parece tan "malo" como lo parece el de la música/video.

Lo del P2P ya digo que me la suda porque la gente lo va a usar igual que lo usa ahora que tambien es ilegal, de hecho lo usará más porque ahora las penas son menores. No me importa demasiado, porque lo que puede causar esta ley es el principio de un "despegue" en los servicios de música online de pago (en cuanto precios y en cuanto a todo) que hagan menos necesario el P2P. No ha sido una ley grandiosa (muchísima confrontación falta de apoyos claros etc, muy al estilo del estatudo catalán) pero es un principio a poner en jaque a las técnicas DRM de las narices de una vez y evitar su abuso. Que es algo que me importa más que poder bajarme música con P2P, sinceramente.

Odio sudo

Ha salido un articulo sobre el tema hoy en slashdot que me ha provocado a escribir este blog

Jamás de los jamases me ha gustado esa configuración por defecto de Mac OS X y que ubuntu ha copiado. Para el que no lo sepa, en Mac OS X no hay "cuenta por defecto de root" por defecto, simplemente se usa sudo cuando se necesita. O algo asi. En Ubuntu al menos es asi: Durante la instalación jamás te pregunta la contraseña que quieres poner a root. Tan solo crea una cuenta "sin privilegios" y se anima a que la gente use sudo

Nunca me ha gustado y me parece horrible, sinceramente. Imagina un programa de IM o un navegador. Buscales un fallo que permita la ejecución remota de código, y como código dile que ejecute "sudo rm -rf /". ¿Dónde está la seguridad? ¿Desde cuando permitir a usuarios normales ejecutar cosas como root es bueno? Sorpresa sorpresa, puedes hacer "sudo su" y (lógicamente) acceder a un shell de root sin que nadie te diga ni mu. Es por eso por lo que lo primero que hago nada más instalar Ubuntu es hacer "sudo passwd": Poner una contraseña como Dios manda.

sudo tiene un archivo de configuración y puede ser muy útil si se le configura adecuadamente. Puedes decirle que solo te permita ejecutar tal comando, y tal: Me refiero a la configuración por defecto de Mac OS X y Ubuntu. Puestos a permitir ejecutar al usuario cualquier cosa gracias a sudo, porque no das permisos de administrador a los usuarios y terminas antes

(Nota: Antes de que alguien piense que no me he dado cuenta, Ubuntu solo permite ejecutar cosas con sudo a la cuenta de usuario no privilegiado que se crea en la instalación, el resto no pueden porque no se les incluye en el grupo wheel. Aun así, pueden aprovechar un bug para ejecutar rm -rf o lo que sea)

15 de marzo de 2006

Experiencias virtuales con el servidor gratuito de Vmware

Como todo el mundo debería saber, VMWare va a distrubir gratuitamente una versión de su software de virtualización. Eso implica que los usuarios de Linux podremos instalar un windows para (por ejemplo) jugar a los juegos del messenger, probar páginas con el Internet Explorer, o lo que sea, con un rendimiento más que razonable. (Digo Windows, porque para ejecutar Linux o sistemas operativos gratuitos ya está Xen)

Pero la versión gratuita aun no ha salido, solo han sacado betas. Eso si, son Betas de un producto gratuito que se desarrolla a partir de un producto ya existente, lo cual da ciertas garantias: No es una "versión .0" realmente. La máquina virtual se puede descargar de aquí tras un "registro" (nombre de usuario, contraseña, blah blah). Te da opción a bajarlo en tar.gz o en .rpm, son alrededor de 100 MB. Yo uso Debian, asi que me he bajado el .rpm y le he pasado el alien ("traductor" de rpm a deb y viceversa) y funciona. dpkg -i vmware-server y a correr.

"Q: ¡Pero Diego, estás instalando software propietario en tu sistema operativo libre!"
A: Si. Estoy instalando software propietario para ejecutar software propietario. Francamente, si voy a instalar un sistema propietario de forma virtualizada, me importa muy poco que el software de virtualización sea libre o no. Sería mejor si, pero yo no lo considero peor que instalar el plugin de flash de macromedia.

Una vez instalado hay que ejecutar vmware-config.pl como root. Te pregunta donde quieres instalar unos iconos y no se que leches. Los fanáticos del orden de los paquetes se tiraran de los pelos al oir que el software este se va a poner a instalar archivos por ahi. Yo personalmente les he puesto como ruta /opt y les podría haber puesto /tmp: No son necesarios para ejecutar vmware. No tendrás vmware en los menus ni los iconos, pero a quien le importa eso. De todas maneras hay un script de desinstalación que los borra.

Otra cosa que hace vmware-config.pl es compilar sus módulos. VMWare necesita cargar unos módulos (propietarios e ilegales) en el kernel y como consecuencia de ello necesitan compilarlos y para ello necesitas un compilador y archivos de cabecera del kernel. Si tienes tu propia versión del kernel compilada, el script encontrará el directorio donde tienes las fuentes (gracias al enlace /lib/modules//build). Si utilizas ubuntu o red hat o una del kernel de una distro famosa estás de suerte: el paquete de vmware incluye decenas de módulos precompilados para cada versión del kernel. Incluye los módulos compilados para la versión up de redhat, la versión smp para athlon, la versión smp para xeon...es esto lo que hace que el paquete de vmware sean casi 100 MB

Una vez instalado insertará el solo los módulos y ejecutará el script "/etc/init.d/vmware start", que es un script que como parte de la instalación ya se te ha añadido al inicio del sistema y que se encarga de insertar los módulos y arrancar los servicios de vmware.

Una vez hecho eso, ya está instalada la cosa. Ahora uno va como usuario y ejecuta "vmware". Aparece una cosa como esta:



Pero sin la cosa de windows XP professional claro. Una vez ahí le das a "crear nueva máquina virtual", y un asistente te va haciendo una serie de preguntas: Qué sistema operativo vas a instalar (aparentemente no da lo mismo), la memoria que le quieres dar, el tipo de interfaz de red (puedes asignar una tarjeta de red a una máquina virtual y cosas así, yo lo he configurado para que se conecte a red utilizando la conexión normal que uso), el disco duro, cdrom etc. Y llega el momento de arrancar. Te sale como una especie de BIOS (puedes apretar F2 para configurar parámetros de la máquina virtual de vmware con una interfaz idéntica a la de las BIOS) y si tienes metido un CD de windows, se autoarranca y le das a la instalación

En este periodo (el de instalación) el rendimiento parecerá penoso por lo mal que se mueve el ratón y demás. Es normal. Una vez instalado el sistema operativo (Windows en mi caso) le das con el botón derecho del ratón a la entrada de la máquina virtual que sale a la izquierda en la captura de arriba. Una entrada del menu te dice "install vmware tools". Le das y magia: La unidad de CDROM del XP virtualizado se convierte por arte de magia en un "CD virtual" del propio vmware. Como si hubieras metido un CD, se autoarranca y se inicia una instalación de un driver de tarjeta gráfica optimizado para el entorno de vmware. Tras reiniciar la cosa mejora mucho y el rendimiento del sistema operativo virtualizado es, de verdad, impresionante. No es como en una instalación nativa pero es muy, muy buena.

Y ahí queda eso. Una vez ahí puedes "pausar" la máquina virtual (vmware guarda el "estado" de manera que lo puedas utilizar en el próximo reinicio), hacer un "snapshot", y cosas asi. Una cosa muy curiosa es que puedes utilizar dispositivos USB en los sistemas operativos virtualizados. Es decir, el dispositivo usb no se virtualiza: El módulo del kernel de vmware detecta los dispositivos USB sin driver que haya conectados en mi sistema linux, y si a través de la interfaz de la captura le doy a "VM -> removable devices -> usb devices" y le doy al dispositivo que haya conectado, vmware hace de "proxy USB" y se lo pasa al controlador USB virtual de la máquina virtual, y puedes utilizar bajo windows los drivers y programas del fabricante. Mi webcam puede almacenar fotos y no tenía programas en linux para acceder a las fotos y casi no la usaba por no rearrancar a windows, con vmware eso se acabó:



En resumen, un producto muy bueno. No me extraña en absoluto que vmware tenga el "momentum" que tiene. Si eres usuario de linux y nunca has probado vmware y necesitas windows para lo que sea, o si eres usuario de windows y quieres probar linux para ver si te gusta, sería una estupidez quedarse con las ganas y no utilizar un producto gratuito como vmware

13 de marzo de 2006

La alianza de itanium invertirá en GCC

O al menos eso dicen las noticias.

La pregunta que todo el mundo se hará es por qué no se hizo esto desde el principio. La clave del Itanium es descargar en el compilador la responsabilidad de generar código óptimo para el procesador, más de lo que ya de por si hizo RISC frente a CISC. GCC es un compilador libre, Linux lo utiliza y Solaris ya le falta poco (si es que no lo han terminado ya) para poder ser compilado de los pies a la cabeza con GCC. Aunque lo de opensolaris no era obvio, si que era obvio desde hace ya unos años que Linux iba a jugar un lugar importante en el mercado de servidores. De hecho Linux y Solaris son la única esperanza de Itanium: Microsoft apostó mucho con Intel sacando su serie de windows - XP, 2003 server - para Itanium (mucho antes de empezar a ver máquinas x86-64), pero la falta de ventas les ha "obligado" a matar a futuras versiones de escritorio (XP). Solo van a sacar para itanium para clusters, si no recuerdo mal (no estoy seguro de si tambien han matado a la de servidores normales - por si a alguien le apetece comerse en la cabeza, esto y x86-64 son las razones por las que mi intuición me dice que las relaciones Microsoft-Intel no pasan por el mejor momento de su historia)

Bueno. El caso es que me parece ésta una gran noticia porque asumo que parte del trabajo producido como parte esa inversión influirá en la calidad de GCC para todas las arquitecturas no solo para Itanium. Tambien es de suponer viendo esta noticia que los que se van a encargar de mejorar el GCC van a ser los mejores expertos de las compañias que forman la alianza, lo cual significa que habrá gente muy buena colaborando con GCC, algo que a GCC no le viene mal.

Por supuesto esta noticia es interesante solo por eso, por lo del GCC. El Itanium a estas alturas va a ser dificil de salvar. Itanium ha vendido muchísimo menos de lo que la gente esperaba: IDC predijo que en 2004 las ventas de Itanium alcanzarían los 28.000 millones y no han pasado de los 1.400, que es una cifra más que decepcionante. Tan decepcionante (y sospechosa) ha sido esta predicción particular de IDC que a día de hoy es dificil dudar que a IDC le pagan por ser optimista (siete años con predicciones de grandes ventas para el itanium, siete años plagados de equivocaciones y no pequeñas equivocaciones sino equivocaciones mesianicas, junto con las citas del CEO de Intel diciendo que "las firmas analistas como IDC preveen grandes ventas" y cosas asi). Las empresas asociadas a Itanium van a invertir 2.000 millones al año durante cinco años para mejorar la situación del Itanium y nadie entiende por qué, porque con las cifras de ventas de Itanium no es que no ganen mucho, es que ni siquiera van a recuperar la inversión. No hay predicción que de ni tan siquiera un pequeño margen de esperanza al Itanium, ni tan siquiera las excesivamente optimistas y cómicas predicciones de IDC.

Pero al menos GCC mejorará, a nadie le amarga un dulce

10 de marzo de 2006

Entrevista a Linus

En forbes

Q: So you are leaving the door open?
A: Hey, I'm flexible. Some people call it being indecisive, but personally, I think it's a sign of intelligence when a person is able to change his mind when circumstances change.


"If you're a mad scientist, you can use GPLv2'd software for your evil plans to take over the world ("Sharks with lasers on their heads!!"), and the GPLv2 just says that you have to give source code back. And that's OK by me. I like sharks with lasers.

8 de marzo de 2006

"El fin de los discos duros" II + Intel

Una vez dije que el fin de los discos duros estaba relativamente cerca y que ahora si que iba a ser ssustituido por memorias flash (en el plazo de 10 años)

Quizás alguien estuviera en desacuerdo conmigo, pero la realidad es que la transición ya está empezando. Se empieza por un cache para acelerar el arranque del sistema (es lo que llevan los imac intel por cierto), luego se aumenta de tamaño, etc etc. Se utiliza esa memoria flash porque a diferencia de la mecánica del disco la memoria flash no necesita hacer movimientos del brazo y por tanto es infinitamente más rápido en cuanto tienen que leerse datos de varios sitios. Ahora que se empieza a ver memoria flash por todos los lados surgirán empresas e inversiones orientadas a producir mejores productos flash, las memorias flash disminuirán de precio y aumentarán el número de ciclos de escritura a un número razonable (recordar que los discos no son eternos, tambien tienen un uso limitado solo que la técnica los han perfeccionado lo suficiente como para poder ser utilizados continuamente durante años). Otras cosas interesantes en theregister hoy:

  • Nueva plataforma "core" de Intel que tiene todas las posibilidades de poner en verguenza a los AMD (sería ridículo que no lo hiciera, si Intel no es capaz de responder enérgicamente al pelotazo de AMD de los últimos 2 años sería una empresa condenada al fracaso)

  • Esa plataforma saldrá en el 2007 para portátiles e incluirá soporte de 802.11n

  • Tambien hizo benchmarks Intel, y parece que las cosas le van bien. No tanto como muestran ahí (a saber lo que podían haber hecho a las máquinas para joder a los amd), pero probablemente bien.

  • La plataforma "ultra-mobile PC" va a ser la novedad de este año. Básicamente se trata de hacer cosas como el 770, parecen apetecibles

  • Y por último, notas de una presentación de google que a los googleros se les han escapado y en las que dicen que quieren convertir al PC en una especie de "cache". Microsoft gana dinero del software de los clientes y si el valor de las cosas acaba estando en la red (ej: te da lo mismo utilizar linux que windows para acceder a esos servicios) y los clientes son simples "terminales tontos", el valor de Microsoft se reduce. Asi que es oficial: Los terminales tontos han vuelto.


(Espero que tras leer esos enlaces la gente comprenda porque http://www.theregister.com es un sitio imprescindible)

5 de marzo de 2006

Me gustan los errores devueltos en cadenas de error

Aparentemente a alguien no le ha parecido buena queja mi queja sobre que Unix debería volver códigos de error en forma de cadenas en forma de enteros. Creo que debería haber explicado exactamente que quiero decir por devolver cadenas de error en vez de números (lo cual no quiere decir que me vaya a arrepentir de algo de lo que dije, más bien lo contrario)

Básicamente, mi queja era que yo quisiera que se pudiera hacer "si 'cvs update' = 'No updates found"" en vez "si 'cvs update' = 0". ¿Por qué? Porque "No updates found" significa algo, y "3", no. Si me gustaría probar cadenas de error en vez de códigos es porque tienen significado, y eso es bueno.

Pero vayamos por partes. Algo que no admito es que la gente se ponga a hablar de "filosofía Unix", de potencia, de scripts y de extendibilidad en un post que supuestamente va a críticar a las cadenas de error. Las cadenas de error no restan extendibilidad ni potencia ni nada por al simple razón de que son prácticamente lo mismo. El programador quiere saber lo que ha devuelto el comando y en vez de utilizar un código, utiliza una cadena de error, punto. Las posibilidades son exactamente las mismas.

La persona a la que le gustan los códigos de error tambien dice que se evitan problemas como que en una actualización/modificación del software un cambio en una simple letra tire al traste todo lo que se haya construido encima. Me gustan ese tipo de afirmaciones en las cual se dice que tal cosa tendrá tal efecto y ese efecto es efecto secundario (indirecto), porque en muchas ocasiones la asociación que se hace a ese efecto secundario no tiene porque tener ni pies ni cabeza, como en este caso: Si las cadenas de error son malas porque al cambiar una letra todo se va a la mierda, los códigos de error son malos porque cambiando un "2" a un "3" tambien mandarás todo a la mierda, y puestos a ser cínicos tal vez sea solo yo, pero mientras que cambiar un número apenas se notaría a primera vista - porque en realidad no significan nada por si solos sin una asociación a un código de error - una falta en una cadena de error se notaría mucho más. Si nos ponemos a buscarle siete patas al gato, porque no afinar un poco y sacar ocho. Lo de traducir ni lo comento: en ningún lado he propuesto que dichas cadenas de error deberían ser traducidas. Eso es como proponer que el "if" debería traducirse a "si" cuando compila un español. Los programas deben funcionar correctamente al margen del idioma del usuario, punto.

Pero voy a explicarme más: No me he sacado esto de la manga, repito, y no son solo sistemas operativos como Plan 9 los que me hacen pensar que las cadenas de error son mejores (llamarlas "cadenas de error" es un poco inadecuado, porque para empezar no tienen porque indicar un error, pero bueno). Aquí va un ejemplo de por qué lo que pido no es ninguna fantasía absurda

if (malloc(...) == NULL)

¿Se ve, o no se ve? NULL no es más que un define a "(void *) 0". No solo es NULL: Hay millares de defines de C en el mundo desde hace décadas, algunos de ellos se utilizan para comprobar el retorno de las funciones (no tan a menudo como se podría por desgracia). Tengo un preload.c aquí que hace un switch y luego tiene un "case PROC_EVENT_FORK", "case PROC_EVENT_EXIT", y un "case PROC_EVENT_EXEC".

¿Por qué en C se hace esto desde hace décadas y esta bien, y cuando propongo que bash haga lo mismo a la gente no le gusta, tan metida tiene la gente los "estándares" en la cabeza como para no tener un poco de imaginación e imaginarse cosas distintas a las que utilizamos? ¿Tan mala es la idea de poder hacer un "if cvs update = 'no update found'"? ¿O por qué no puedo hacer un case "$(cvs update)" in en bash, y a continuación poder poner "no update found"), "no repository found") igual que hago en C con los switch, en vez de poner 5), 2) y -1)?.

Si fuera yo, diseñaría el sistema para que los programadores proporcionaran esas cadenas de error y que estas cadenas se pudieran utilizar en bash, en C y en cualquier lenguaje de manera uniforme. La manera simple de implementar esto es utilizar códigos números que se correspondan con las cadenas de error y dejar que el lenguaje de turno se las arregle de la manera que le plazca. Si uno quiere utilizar el preprocesador en C, pues bien. Si bash quiere comprobar cadenas de texto, pues cadenas de texto. Eso es el método "conserva la compatibilidad". Pero la idea de que unix devuelviera cadenas enteras tal como hace 9P en Plan 9 (que tiene por cierto más "espiritu Unix" que Unix y que es el sistema operativo que utiliza desde hace años uno de los dos creadores de Unix) no me parece absurda (incluso considerando los inconvenientes) en absoluto, porque aunque parezca inútil el facilitar la gestión de errores ayudaría a hacer más fácil la gestión de errores que es uno de los problemas que tienen muchos programadores para construir software más robusto, y por eso estoy dispuesto a pagar un precio, al igual que los creadores de Unix se arriesgaron cuando decidieron utilizar un lenguaje interpretado para programar el kernel, un sistema de archivos jerárquico y un shell fuera del kernel (en aquel tiempo la norma era implementar el kernel en ensamblador, meter dentro el shell y los sistemas de archivos no jerárquicos). Para tener lo que tenemos hoy se tomaron en su día decisiones arriesgadas que en aquel tiempo eran medio herejías para algunos. Si tuviera oportunidad (que no la tendré nunca pero pongamos que si por el bien de este post) no me importaría tomar una decisión arriesgada como el que los procesos devuelvan cadenas de texto en las llamadas al sistema, por muy herejía que parezca.

4 de marzo de 2006

"Conditional GET"

Hace tiempo me metí con HTTP por ser un protocolo algo vetusto para las necesidades de hoy. Una de las cosas que odiaba especialmente es que cada vez que mi cliente RSS (akregator) mira los feeds, se baja todo el feed nuevamente incluso cuando no había habido cambios. No es un comportamiento muy óptimo: Primero se debería mirar a ver si el documento que el cliente tiene en cache está actualizado, el servidor envia un hash (o algo) en cada documento, el cliente lo almacena, y la próxima vez que vaya a mirar el documento envia o mira el hash de nuevo, y si no ha habido cambios, no se reenvia el documento. Existen problemas reales de servidores que son "atacados" por clientes de rss que se bajan todo el feed cada X tiempo (tanto, que se ha llegado a hablar de que RSS iba a acabar fracasando por no poder aguantar grandes demandas)

Aunque mi falta de pasión por HTTP persiste (sigo pensando que HTTP es perfectamente sustituible por un sistema de archivos remoto bien diseñado e implementado), me he alegrado al saber que HTTP 1.1 si puede hacer aquello de lo que yo me quejaba: Existe la posibilidad de que los clientes almacenen el campo ETag y Last-Modified cuando cogen un documento. Asi, la próxima vez que vayan a mirar ese mismo documento los clientes enviarán esos campos guardados como cabeceras "If-None-Match" e "If-Modified-Since", y el servidor responderá con el código 304, "Not Modified"

Un grep rápido me ha llevado a comprobar que firefox almacena esos campos y más en el cache, y que algunas páginas lo usan y que otras no (las páginas dinámicas parecen no estar muy interesadas en ser cacheadas, por ejemplo). Pero bueno, tan importante es criticar como hacer justicia, y si HTTP a pesar de sus defectos da la talla, la da y es justo reconocerlo. Ahora lo que me importa es conseguir que akregator de la talla y utilize esto para ahorrarme ancho de banda. Ya hay un bug abierto desde hace meses (no muy activo), y parece que KHTML está envuelto en el asunto. Ya se verá

Por si alguien tiene curiosidad, me he enterado de todo esto siguiendo un enlace sobre MSNbot. Parece ser que el bot de msn escanea los feeds con mucha frecuencia haciendo caso omiso de la utilización del conditional get, parece ser que mucha gente bloquea al bot de msn por su mal comportamiento

1 de marzo de 2006

cosas que odio de unix, capítulo...

Te pasas años usando cosas hasta que al final te das cuenta de que algo simplemente está mal hecho. Unix tiene muchas cosas mal hechas (creo que ya he escrito bastante sobre ello en este blog) al igual que tiene otras bien. Asi que hoy me toca continuar mi propia tradición

Man. Man es una puta mierda. ¿Por qué las secciones están divididas por números? No se si soy el único, pero jamás he sabido ni quiero saber cual es la sección man correspondiente a la sección de funciones de librerias. Es la 3. Pero a mi no me importa, de verdad. Antes que "man 3 opendir" preferiría algo más lógico, como "man lib opendir", por ejemplo. No entiendo porque me tengo que aprender de memoria una tabla de correspondencias "número -> sección de manual". Es más, no me extrañaría que en alguna de esas certificaciones te obligaran a saberte de memoria algo tan estúpido.

Luego está el tema de los parámetros. Intenta crear un archivo que tenga el mismo nombre que uno de los parámetros. "touch --help". ¿A qué me refiero realmente, a un archivo o a la ayuda? Si, se puede evitar con "touch -- --help", pero esa no es la cuestión. La cuestión es que en Unix, en la linea de comandos típica de bash, los parámetros comparten el mismo espacio de nombres que el sistema de archivos. Y eso no está bien, porque por definición implica que a veces los dos van a "chocar". El "--" es una forma de decir al shell que ignore a las opciones y se centre en los archivos, pero se usa las pocas veces que la gente se encuentra con estos casos en la consola, ¿cuanta gente lo usa en scripts? A todo script al que le pases un parámetro a un ejecutable le puedes pasar "--help", y los resultados son muy divertidos. Me pregunto como podría afectar eso al entramado de scripts y de historias que tenemos en unix, o incluso si se puede utilizar esta falta de comprobación de ciertos parámetros como agujero de seguridad (cosas más raras se han visto en windows)

Es un hack muy útil, pero lo ideal sería un sistema que funcionara siempre.

Están ustedes leyendo la página de internet número 1.577.505

Certificado por Alexa. Ahí queda eso