Archivos Mensuales: septiembre 2010

Gelatina Democrática!

En mi casa, somos muy diversos, diversas tendencias, diversos colores y creencias, ¡Como Venezuela pues! …

Pero a diferencia de otras familias, que se han separado únicamente por colores (sean políticos, de piel o de creencias) nosotros hemos aprendido a disfrutar de cada uno de esos colores, a unir lo bueno de cada uno en una amalgama democrática, que sabe muchisimo mejor que cada una de sus partes …

En vez de pedir por la destrucción de sus enemigos, disfruten el sabor que significa trabajar lado a lado por un hermoso y diverso país …

¿Gelatina de Fresa sola?, ¿gelatina de mora azul sola?, ¿Gelatina de piña sola?, ¿por qué?, no se dejen llevar por discursos separatistas, llenos de odio y segregacionismo, ¿por qué saborear un único color? disfrutemos de todos los colores de una sola vez, variados, coloridos como el arcoiris, con un sabor tan rico y diverso como nuestra Venezuela …

¡Adoro mi Venezuela, tan mutisápida como la Hallaca o la gelatina de colores! ¿y tú?

¡Felíz día del ejercicio democrático!

[La nota del día] Ejercicio Democrático

Como un domingo típico, me levanté a “experimentar” con diversas cosas en GNU/Linux (esta semana: un trabajo para generar diversas formas de instalación de los equipos Lemote) y me puse luego a barrer las hojas del patio de la casa de mi madre (ambos votamos juntos en el mismo centro electoral), luego del almuerzo, me dirijo a votar …

¿Saben?, es una sinigual mezcla de sentimientos encontrados, mi hermano entrando con su esposa al centro electoral y la prima-hermana de su propio suegro, dirigente del PSUV le grita a sus compañeros de mesa (ella era testigo de mesa) “miren!, llegaron los escuálidos opositores”, DIOS!, su propia familia exponiéndolos al escarnio público!, de una manera flagrante haciendo proselitismo político y nadie ahí para detener eso, mi hermano por respeto no dijo nada y procedió a votar …

¿Qué estamos enseñando?, si nuestro líder puede violar la ley, yo también?, me puedo sentir “guapo y apoyao'” y hacer lo que quiera? …

Esa “PRECISAMENTE” no es la democracia que estamos construyendo hoy …

Política Sifrina …

Ayer recordé algo que quise escribir en la semana, pero nunca tuve tiempo, y es el caso de Maria Corina Machado, con su dedo meñique “pintado” en la publicidad “Somos mayoría”, lo triste es que el dedo está “pintado” con Photoshop …

Si no es capaz de pintarse con tempera el dedo para darle “más realismo” a la propaganda, ¿creen ustedes que subirá a los cerros de los barrios de Baruta? (me la imagino diciendo con voz sifrina “hay Dios no!, que se me ensucian las uñas y me daña la manicura, ¿me lo pueden pintar con Fotochó?” …

Política “In Absentia”

Fué ilógico no ver al candidato Carreño en el cierre de campaña de Hugo Chávez, pocas veces asistió a mitin alguno, candidato asignado “a dedo” y que en reiteradas ocasiones se ha puesto en entredicho que viva en el estado Lara; ya el propio Reyes Reyes dijo en una entrevista “Si, pero no importa, él tiene familia acá” como si el derecho a ser diputado por una región fuera transitivo y heredado de padre a hijo o de familia y amigos …

… Como anécdota jocosa, en una entrevista en un canal regional le preguntaron “en donde vive?” y solo pudo decir “en Barquisimeto …” luego de la insistencia dijo en un breve destello de inteligencia “en Baradida” aunque nadie en Baradida sabría decir si lo tiene como vecino …

Son bastantes las cosas por las cuales NO VOTÉ por Carreño, desde la vez que desde la comisión que investigaba la presencia de Ramiro Montesinos en Venezuela y este dijo “yo lo vi muerto con estos ojos que se han de comer los gusanos” y solo 5 días más tarde una comisión de la DISIP lo encontró “enconchado” en una finca en Guárico. También están sus excesivos gastos (con un simple sueldo de parlamentario) desde trajes caros Louis Vuiton o Norton & Wilson, hasta los quinceaños de su hija con Chino y Nacho, nadie se ha preguntado ¿como rayos paga esos lujos?, son estos diputados los que “facilmente” saltan la talanquera o simplemente “le venden su voto” a transnacionales, a consorcios o a la “propia burguesía” solo para seguir manteniendo sus lujos …

… Después no se quejen cuando este hombre les dé la espalda … advertidos quedan todos! …

Criminalizados …

¿Soy sincero?, me encanta jugar videojuegos en mi PC, desde Urban Terror pasando por Alien Arena, Warzone 2100 (en este me envició TR0N) y otros juegos de shooter (disparos) o de estrategia (al estilo de World Of Warcraft, pero en GNU/Linux), yo *considero* que llevo más de 15 años jugando este tipo de juegos (desde la época de Doom 1, Duke Nukem y Quake 2) y no soy ni un malandro, ni un asesino ni tengo “explosiones de enojo” contra nadie …

Pero los diputados de PODEMOS y PPT me criminalizaron!,  jugar videojuegos violentos (a pesar de que soy un mayor de edad, plenamente conciente de mis actos) es un crímen en este país jugar algún videojuego que simule violencia, alegando que los videojuegos degeneran en eso, violencia (como si los malandros jugaran en sus ratos libres CounterStrike), quiero una Asamblea Nacional que “piense” y sepan hacer las cosas y no anden *criminalizando* a diestra y siniestra …

Voto Conciencia – Voto Equilibrado

Considero que mi voto fué equilibrado, leí la curricula de cada candidato de cada facción y *casí* que voté por uno de cada tolda, mi única “sorpresa” fué votar por una representación “indigena”, ¡Me sorprende que en el municipio Iribarren hay etnias indígenas autóctonas!, sé que la mayoría de las personas no votó así, votaron por “colores” y por “facciones”, más por un sentimiento interno (con tripas, vísceras y corazón incluídos) *votar entubado* que analizar los curriculos y propuestas de cada candidato …

Aún estamos muy lejos de eso, no debería importar por QUIEN votes, con las estructuras democráticas participativas necesarias, toda comunidad debería tener acceso DIRECTO a su candidato y hacerle llegar propuestas, proyectos de decreto y ley y participar en las discusiones …

Un ejemplo claro es la propuesta de la gente de NodoLibre sobre legislación en materia de “conocimiento libre”, no importa si el diputado de tu zona es rojo rojito o es azul azulito, él (o ella) está en el DEBER de escucharte y todos y cada uno de nosotros, apenas tengamos conocimiento de quienes ganaron, debemos consignar estos documentos, con un esbozo bien digerible de lo que significa, a todos nuestros diputados y diputadas …

Un llamado a la sindéresis …

Me da tristeza (ya lo he hecho saber innumerables veces) que los discursos decanten en pasiones “divisionistas”, me “criminalizan” por jugar videojuegos violentos, pero todos los últimos tweets (y dents) de la última hora del propio presidente de la república contienen frases como “destruir, arrollar, demoler, acabar, Ataque masivo, destrucciòn total de la oligarquía, ataque de blindados, arrollamiento demoledor”, NO ME CONSIDERO (y gracias a Dios tengo una conciencia muy bien formada) un soldado para andar en “Batalla” peleando “guerras” y “destruyendo y demoliendo enemigos”, ¿es así como se piensa ganar el voto de los indecisos y de los contrarios? …

Es bastante triste la polarización del país, Barquisimeto está forrada de pancartas con la cara de Henri Falcón (¿él era candidato?) pero no hay plata para terminar transbarca, Los mítines de la “oposición caraqueña” no salen de la Plaza Alfredo Sadel, aún cuando hay 5 millones de venezolanos que jamás han votado, que ni esperan nada de Chávez y no esperan ya nada de ellos y siguen en sus cerros *esperando* a que álguien los mire …

Pero vean el lado positivo …

Votar hoy 26 de Septiembre, por una Asamblea Nacional, del color y partido que sea o que deseen, es más importante INCLUSO que el voto para el presidente de la República, pues la Asamblea Nacional es el órgano del ejercicio democrático del día a día, es el representante de tu calle, de tu barrio, de tu comunidad el cual irá con tus propuestas a que sean debatidas y aprobadas, es el hombre que debe responder por tus necesidades, por tus carencias …

Pongamos un ejemplo para los geeks que a veces no entienden mucho de política, Hugo Chávez hizo un decreto (el 3390) para aprobar el uso masivo del Software Libre en el ejecutivo y todas las dependencias de la APN (Administración Pública Nacional), pero él representa el ejecutivo, su decreto no pasará de ahí y jamás podrá tener caracter orgánico ni mucho menos sancionatorio, es la Asamblea Nacional la llamada a convertir los progresos de decretos como el 825 ó el 3390 en Leyes Orgánicas que fomenten el uso del Software Libre y la masificación del conocimiento libre hacia todas las instancias de la República (Universidades, Escuelas, Centros de Investigación, Comunidades, etc), vayan pués y soliciten a sus “desde mañana” diputados electos a la Asamblea Nacional que recuerden este compromiso …

… Miro la mano de mi vecina, una consagrada “quejona” y veo que no ha votado, le pregunto el por qué y me dice “es que las cosas nunca cambian”, y le respondo ¿como rayos piensa que va a cambiar si usted y más de 5 millones de venezolanos nunca van a votar? …

¡Vamos pues!, a votar todos, a vestir el dedo meñique de morado, como una muestra de que aún y a pesar de todo, queremos a esta, nuestra patria VENEZUELA …

Felíz día del ejercicio Democrático …

Gnome Dia: creando un set de iconos personalizado para diagramar

Preámbulo

Gnome Dia, es una aplicación de diseño, orientada a esquemas y diagramas, es una de las herramientas que a primera vista parecen “sencillas” pero llega a ser tan poderosa que incluso tiene interpretadores de diagramas ER a bases de datos y diagramas de objetos a código funcional en C++ o PHP, Python.

Como vemos la descripción de la Wikipedia, es un “sustituto” de Microsoft Visio u otros modeladores de diagramas y esquemas y en muchos casos sobrepasa en las capacidades a otros diagramadores comerciales. Es parte del proyecto Gnome.

Los Set de iconos en Gnome Dia

Dia tiene una enorme cantidad de iconos para diversas actividades, desde redes, pasando por ingeniería eléctrica o electrónica, hasta diagramas de flujo o Entidad-Relación, se pueden encontrar páginas para descargar otros sets, etc.

Gnome tiene muy buenos set de íconos, aunque algunos de ellos son tan simplistas, que contrastan con los hechos por herramientas comerciales como Visio, pero, ¿podemos cambiar eso?.

En la mayoría de los casos, la ingeniería reversa, las capacidades de generar código y demás, quedan “opacadas” porque la gente en busca de “eyecandy” se encuentran con unos iconos horrendos para representar las cosas por lo que terminan usando herramientas o propietarias o diseñandolos gráficamente en Inkscape.

Pero eso se acabó, aprenderemos a hacer nuestros propios íconos!

¿Cómo son los Set de Iconos en Gnome Dia?

Cada ícono en DIA es una SHAPE que realmente es una figura SVG (versión 1.0, importante decir esto) diseñable en Inkscape, con algunos cambios como por ejemplo:

  • Cada SHAPE es un XML que “contiene” dentro al SVG
  • Cada SHAPE declara su nombre, su icono (para representarlo en la paleta de herramientas) y sus puntos de conexión (por donde las líneas se unirán al objeto para unirse a otros objetos).

Todas las SHAPES son agrupadas en una “sheet” (hoja) que representa el set completo de shapes (iconos) y le dice a DIA cuales debe cargar. el archivo SHEET también es un XML bastante simple.

¿Como se crea el archivo SHEET?

Cada SHEET es un archivo XML con un namespace específico (de Dia, el dia-sheet-ns) y posee la siguiente estructura:

<?xml version="1.0" encoding="UTF-8"?>
<sheet xmlns="http://www.lysator.liu.se/~alla/dia/dia-sheet-ns">
<name>Pheno-Icons</name>
<created_by>Jesus Lara - jesuslarag@gmail.com</created_by>
<description>Collection of SVG icons convert to Gnome Dia</description>
<contents>

Donde:

NAME: es el nombre que presentará nuestro set de iconos dentro de la paleta de herramientas de DIA

DESCRIPTION: Contiene una descripción informativa del set

CONTENTS: Contendrá la definición de cada icono

Los íconos se definen de la siguiente manera:

<object name="internet">
<description>Internet Cloud</description>
</object>

Donde:

name: Es el nombre del ícono (como se llama el archivo en el filesystem, la regla es que se llame {name}.shape para el icono y {name}.png al botón que lo representará en la barra de herramientas.

El archivo sheet que generemos debe estar guardado en el directorio de sheets de DIA, esto es en:

/usr/share/dia/sheets

¿Cómo son las SHAPES en DIA?

Una SHAPE representa un ícono, es un XML con “al menos” dos namespaces, uno representa la forma SVG (imagen) y otro es la metadata informativa para DIA. Se guardan en Linux con extensión “.shape” y deben ir en una carpeta llamada “exactamente igual” que el nombre del set de iconos (sheet) en la siguiente ruta:

/usr/share/dia/shapes/{nombre del sheet}/

El XML que lo representa tiene la siguiente forma:

<?xml version="1.0"?>
<shape xmlns="http://www.daa.com.au/~james/dia-shape-ns" xmlns:svg="http://www.w3.org/2000/svg" xmlns:math="http://exslt.org/math" xmlns:dia="http://www.daa.com.au/~james/dia-shape-ns" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
  <name>Printer</name>
  <icon>Printer</icon>
  <connections>
	<point x="0" y="0"/>
	<point x="0" y="21"/>
	<point x="41" y="41"/>
	<point x="20.5" y="21" main="yes"/>
  </connections>
  <textbox align="center" resize="no" x1="105.20242" y1="619.06097" x2="107.20242" y2="621.06097"/>
  <aspectratio type="fixed"/>
  <svg:svg version="1.1" width="100.603" height="118.54186" id="svg2"></svg:svg>
</shape> 

Donde:

<shape>: representa el nodo raíz del XML de la forma

<name>: representa el nombre del ícono, como está en el sistema operativo (name.shape)

<icon>: representa el ícono (formato png, 22×22 pixeles) que mostrará esta shape en la barra de herramientas

<connections>: representa los nodos (x,y) de cada “punto” donde esta shape se conectará a otras vía flechas, líneas u otros conectores, por defecto es en el centro, aunque la coordenada (0,0) representa la esquina superior izquierda del ícono.

<textbox>: la shape puede tener una (o más) área de texto donde escribir información, esa área de texto posee alineación de texto y posición X1, Y1 (parte superior) y X2, Y2 (parte inferior).

<aspect_ratio>: significa si el ícono pierde su proporción al ser escalado, si aspect_ratio = fixed, este no perderá su proporción (alto y ancho), si aspect_ratio = flow (o simplemente no se declara) entonces se podrá cambiar el alto y ancho a voluntad.

<svg:svg>: es el nodo raíz del gráfico SVG, nótese bien que viene en la forma de nodo:namespace, como sucede cuándo mezclas más de una sintáxis XML.

Como nota informativa, el tamaño “por defecto” de una shape, si no se especifica en SVG, es en píxeles, aunque podría usar cualquiera de las siguientes unidades de medida:

  • centímentros (cm)
  • Puntos (pt)
  • Pulgadas (inch)
  • Pixeles (px)

Ideas para un buen ícono para DIA

NO NECESARIAMENTE se puede llevar directamente un ícono de SVG (Inkscape, por ejemplo) a DIA, DIA solo reconoce una parte del sub-set de SVG 1.0; por lo que no todas las formas son “renderizadas” en DIA, esto como parte de simplificar tanto el tamaño como el renderizado de diagramas complejos, entre algunos consejos se cuenta:

  • Cuando creen un icono en Inkscape apagar la opcion:

Archivo > Preferencias de Inkscape > Salida SVG > usar Colores por nombre; Esto es porque Dia no reconoce colores por nombre (ejemplo: black) sino unicamente por valor hexa (#000000)

  • No debe tener capas (los “grupos” o layers en DIA no son reconocidos)
  • No usar gradientes en las formas, ni para los bordes ni para el relleno, si necesita un gradiente “emúlelo” con muchas formas separadas de colores en degradado.
  • nunca usar “STROKE” o bordeado de una figura, si necesitas un borde, usa otra forma mas grande, o rectangulos rellenos para simular líneas.
  • NO USAR LINEAS, si requiere líneas, use cuadrados (paths) rellenos muy finos.
  • No usar cuadrados con bordes redondeados (conviertalos a trayectos)
  • Convierte todas las formas a trayectos (sobre todo los circulos y cuadrados redondeados)
  • Si hay grupos de formas, desagruparlas, DIA no trabaja bien con grupos
  • Simplifique los vectores, aunque queremos “vistosidad” recordemos que a final de cuentas es un diagrama “serio” y DIA tardaría muchísimo en renderizar SVG muy complejos.

Si ya tenemos esto claro, podemos hacer un ícono.

Creando un ícono para DIA

  1. Abrimos Inkscape
  2. Creamos un documento nuevo … > No layers (sin capas)
  3. En Archivo > Propiedades del documento: redimensione el ícono para que sea “al menos” 50×55 pixeles, más grande es innecesario para DIA (recuerde, es un SVG, NUNCA perderá definición por muy grande o pequeño que lo pongan).
  4. Creen el ícono como indican los consejos arriba
  5. Tomen alguna de las figuras, y en el menú OBJETO > Propiedades del Objeto … le colocarán un “ID”, esta figura se llamará “nombre”, en etiqueta pondrán “#nombre” y en title pondrán el nombre que quieren que lleve este ícono.
  6. Este nombre, deberá ser único en TODO DIA así que preferentemente sea de la forma “set de iconos” – “nombre del icono”, para asi evitar confusión.
  7. En lo que hayan terminado se verá así:

Guarden y cierren el Inkscape.

Convirtiendo este SVG a Shape

Inicialmente, debemos “convertir” el SVG “de Inkscape” en un SVG “plano” sin más etiquetas XML que las oficiales, aunque en el propio InkScape podemos decir en “Archivo > Guardar como … > SVG plano“, yo lo he hecho por la consola:

inkscape printer.svg --export-plain-svg=printer1.svg

Esto genera a partir de printer.svg un archivo llamado printer1.svg que es una versión “plain” del SVG.

No he encontrado una “forma” de convertir a SVG a DIA, la única que encontré es de Thiago Ribeiro de Gnome, en la cual habla que “se hizo” un script en PHP que transforma (me imagino usando DOM) el archivo SVG a SHAPE, pero dicho script no lo he encontrado en ningún lado.

Yo he usado XSLT (Xtensible Style Sheet Transformations), una forma de transformar archivos XML de un formato a otro (incluso a otros formatos no-XML), con XSLT transformo el SVG en un SHAPE y leo la capa “#nombre” para darle nombre al ícono, es automática y simplemente pide el nombre del archivo.

Para hacer la transformación en consola, he usado XSLTPROC, que es un procesador XSLT 1.0 que viene nativo en todas las distribuciones de GNU/Linux.

Se ejecuta así:

xsltproc -o {nombre icono}.shape svg2dia.xslt {archivo.svg}

La hoja de transformación XSLT pueden descargarla de acá SVG2DIA.XSLT y es GPL v.3

TODO:

  • La hoja debería computar el alto, ancho y centro del ícono, para así computar “al vuelo” los conectores
  • Debería computar “de alguna parte” la posición del textbox, para personalizarlo de manera sencilla

Posteriormente, tenemos que crear el ícono PNG (22×22) a partir del SVG, eso también es fácil usando inkscape en la consola:

inkscape -h 22 -w 22 --export-png=printer.png printer.svg

Esto genera un ícono PNG de 22px por 22px a partir del archivo printer.svg

Cuándo ambos archivos (el .shape y el .png) están listos, los copiamos en el directorio de shapes de nuestro set de íconos (o lo agregamos a un set existente editando el archivo .sheet), agregamos la shape al archivo .sheet y verificamos que funciona en Gnome Dia.

Gnome Dia:

Simplemente abrimos Dia (Gráficos > editor de Diagramas), si nuestro set de iconos está bien y fué reconocido, lo encontraremos en la lista:

Desplegamos la lista, lo buscamos y veremos todos los iconos creados en la barra de herramientas, ya solo nos queda probar los íconos y hacerlos interactuar con otros íconos en un diagrama, he acá un ejemplo:

Automatizando el proceso:

Si ya tenemos todos los íconos SVG para crear las shapes, en el archivo comprimido encontrarán un script bash “muy simple” que simplemente toma todos los SVG de un directorio, los convierte a shapes y genera el icono PNG respectivo.

Así, solamente faltaría que te creara la carpeta del set de iconos y te generara el archivo .sheet!

Pero pronto, pronto!

Conclusiones

Podemos ampliar las capacidades de Gnome Dia simplemente con agregar nuevos íconos para nuestras necesidades de diagramación, también recordemos que Dia tiene módulos que se le pueden adaptar (en python) como por ejemplo dia2code, que genera código (perl, Python, PHP, C++) a partir de la definición de objetos, asi que las capacidades de DIA son ilimitadas!.

Disfruten su nuevo set de íconos!

Los drivers nuevos de Broadcom no son libres

Había leído y esperado con bastante expectativa la noticia de que la empresa fabricante Broadcom liberaría los drivers para sus tarjetas inalámbricas.

Como ya sabrán actualmente hay 2 drivers para Broadcom, los que proporcionó la misma broadcom por allá por el kernel 2.6.20 (los bcm43xx) y los que “re-escribió” el proyecto “linux-wireless” (b43) usando el stack mac80211 de Kernel, oficialmente estable desde la versión 2.6.24.

Ambos drivers requieren de una aplicación binaria (conocida como firmware o driver STA) para poder encender y trabajar con la tarjeta, el driver queda unicamente como “puente” de comunicación entre el firmware (la verdadera aplicación que está accediendo al hardware) y el kernel Linux, la presencia de este binario los hace drivers “no-libres” (muy a pesar de que el código fuente incorporado en el stack mac80211 sea GPL).

Incluso la gente de Barrapunto se hizo eco de la noticia, sin echarle una miradita al código fuente (prometido en el staging-next 2.6 del kernel Linux) para en verdad corroborar si *es* o *no es*.

Para el que simplemente no quiera leer tecnicismos, se lo resumo acá … No lo es!.

¿Que libera entonces Broadcom?

Como les dije allá arriba, hay 2 drivers para el kernel Linux, el actual (b43) es escrito y mantenido por la gente de LinuxWireless y nada tiene que ver broadcom en el asunto.

Entonces broadcom se ha comprometido a llevar un proyecto de driver nuevo, basado en el wireless stack mac80211, para UNICA y EXCLUSIVAMENTE su hardware nuevo basado en tecnologías 11n, solo cubre (leído en: /drivers/staging/brcm80211/README):

  • Soporte para Firmware “on-chip” (en futuro)
  • Solo las PCI-E BCM43224, BCM43225, BCM4313 serie N
  • Núcleo para incorporar (a futuro, pero ellos no los desarrollarán) otros drivers para hardware antiguo usando la arquitectura mac80211.
  • Hardware que requiera SSB (Sonics Silicon Backplane driver, léase las que levanten con b43, b44 y bcm43xx) simplemente no van a ser soportadas.

¿Usa o no usa firmware?

Si, si usa firmware como podemos observar en el Makefile:

+For all chips, copy brcm/bcm43xx-0-610-809-0.fw and
+brcm/bcm43xx_hdr-0-610-809-0.fw to /lib/firmware/brcm (or wherever firmware is
+normally installed on the system).  In the /lib/firmware/brcm directory, then
+create the following symlinks:
+
+        ln -s bcm43xx-0-610-809-0.fw bcm43xx-0.fw
+        ln -s bcm43xx_hdr-0-610-809-0.fw bcm43xx_hdr-0.fw
+
+
+Currently supported chips
+==============
+PCI
+Name            Device ID
+BCM4313         0x4727
+BCM43224        0x4353
+BCM43225        0x4357

Lastima!, mucha gente estaba esperando ansiosa que la gente de Broadcom liberara un driver que no usara firmware para su funcionamiento.

Pero, hay esperanza!

En el TODO la gente de broadcom promete que para un próximo futuro reemplazarán la interface propietaria SSB y utilizarán una versión integrada al núcleo Linux, también prometen reemplazar toda la infraestructura privada por versiones públicas en el kernel Linux.

Eso ya es algo!

Conclusiones

Si estabas esperando a que Broadcom trajera un driver inalámbrico para tu vieja bcm43, pues no, habrá que esperar que alguien haga un fork y contruya el driver, puesto que Broadcom se dedicará únicamente a sus versiones para redes 11n y de 5Ghz.

Tribalismo: El Enemigo en nosotros (carta de Mark Shuttleworth)

Mark Shuttleworth, el actual regente de Canonical Ltd (la empresa detrás del proyecto Ubuntu) ha publicado un excelente artículo titulado “Tribalismo: El enemigo en nosotros“, y es un llamado tanto a las fervientes guerras inter-distro y obviamente una autocrítica a evitar las tendenciosas posturas “tribales y sectarias” de algunos “Ubuntu-fans” o “Debianitas” o de cualquier otra “tribu” a desligarse de esas posturas y trabajar juntos por el bien del Software Libre.

Voy a empezar por lo último, pues me llama bastante la atención “… Los que hacemos todas estas cosas, las hacemos porque creemos en ellas, no porque queremos demostrarle a nadie que está mal”, Si se está en el movimiento del software libre y se apoya una distribución cualquiera, es para trabajar por ella y no para usarla como “escudo” para atacar a los demás.

Se creó una extraña matriz alrededor de mi artículo anterior, referente a la definición formal y técnica de “Distribución Libre” (basado en los preceptos de la FSF), como le respondí a Efraín, yo comulgo más con la idea de una distribución que permita expandir la usabilidad del software libre más allá de las fronteras a las que estaba confinado y luego que la gente está ahí, podrá entender más fácilmente las cosas que la FSF promulga, pero la idea final es el entendimiento y la colaboración, no lo ataques, que eso nos convierte en “Tribus” de Trolles.

Como conclusión a Efrain y de su interesante artículo sobre el mismo tema recalqué:

“FSF tiene un concepto radical de libertad que no comulga con Ubuntu, las libertades de Ubuntu van más allá de las 4 libertades de la FSF, pues concurren en ella libertades de masificación, de conocimiento y otras libertades que NADA tienen que ver con las libertades técnicas de la FSF. Enorgullecete de eso y comienza a predicarlo por ahí … deja de predicarle a los monjes conversos … que de esos monjes conversos se encarga la FSF.”

La idea es obviamente aceptar las partes básicas de la radical postura de la FSF, que a fin de cuentas también son útiles, para poner un ejemplo, en la política venezolana hay dos vertientes radicales, las que dicen “Dictadura del proletariado!, partido único y siempre-eterno en el poder” y otras que dicen “Capitalismo para todos, no importa quien gobierne, mientras quien mande sea el dinero”, el resto de los venezolanos se decantan por la calle del medio. La FSF ha contribuido con su postura radical a marcar una “frontera sur” a donde tal vez no todos quieren llegar, pero es un marco de referencia para la defensa de las libertades de todos, Ubuntu combina más practicidad y facilidad para lidiar con otra serie de libertades con las cuales no lidia la FSF (Libertad de distribución, acceso masificado al conocimiento abierto y libre) y creo que se puede llegar a una ruta de consenso “por la calle del medio” sin caer en “Ubuntu-Fans” o “Debian-Monks”.

La utilidad de la FSF ha sido en cuestiones como por ejemplo, darnos cuenta que de manera subverticia se incorporaban binarios cerrados que no cumplían con las 4 libertades, de pasar “desapercibidos” ahora de manera notoria al usuario se le informa en Ubuntu que posee un hardware del cual el fabricante no ha querido liberar especificaciones y por ende, se le instalará una pieza de software que es netamente privativa; lo que yo espero (como usuario, no hablo en nombre de GNU ni la FSF pues no formo parte de ninguna) es que estas “advertencias” (que sirven como adoctrinamiento y entendimiento de la filosofía del software libre) se hagan recurrentes a los usuarios para que estén al tanto de las violaciones que las empresas hacen a sus libertades.

La utilidad de Ubuntu, por otra parte, ha sido la de la masificación (y no la del diseño de “la facilidad de uso”, ya veremos por qué) y no podemos liberar el mundo cuando solo 4 monjes Debianitas controlan y tribalizan todo, Ubuntu ha hecho proliferar el software libre de maneras tales que incluso aquellos que no eran libres se liberaron gracias a su masificación.

Esta “distro-war” ya es común, mucha gente acusa a otras distros de no ser “Ubuntu-Like” y claro, la popularidad de Debian en estas latitudes ha causado que su hijo “Ubuntu” sea más popular que otras distribuciones (por eso me fijo más en ella, mis disculpas si eso trae escozores a los “Ubuntu-Fans” pensando que yo le tengo zaña a la distribución), claro, todos acusan a Fedora de ser una distro “arropada por esa capitalista empresa Red Hat”, pero lo que muy poca gente conoce es que el 32% de las mejoras de usabilidad que disfruta Ubuntu han nacido en Fedora y Red Hat (un 10% ha nacido de openSuse, otro 10% de proyectos como Debian y solo un 1% ha nacido en nativamente en Ubuntu), tambien tenemos que los Ubuntu-Users son los más activos generadores de bugs, mientras que los usuarios de Fedora son los más activos “cerradores” de bugs.

Por lo que a conclusión, cada distribución es necesaria y cada postura es necesaria, sin ese “monstruo capitalista” de Red Hat detrás, el escritorio Gnome no estaría a la altura de “enamorar y hacer feliz” a tantos Ubunteros; desde las mejoras gráficas de Cairo que llevaron a Compiz en OpenSuse,  hasta las mejoras del núcleo X11 aportadas por usuarios Arch/Gentoo e incluso el mismisimo parche “limpiador” que crea el kernel “linux-libre” desarrollado en la comunidad de Fedora, no estaríamos donde estamos.

btw la ventana GTK de “asistente” para módulos non-free de inalámbricas fué desarrollada para Fedora 10 y el núcleo Xen 4.0 que disfruta Debian es de la gente de CentOS.

NADIE puede negar esta simbiosis y relación estrecha entre proyectos, lo más ideal es ponerle a cada cosa su etiqueta y seguir adelante juntos para que se logren los espacios de “libertad” que se necesitan …

¿Qué importa que alguien de la FSF diga que Ubuntu es “no libre” más que para encender un flame-war estúpido?, como dice Mark, “El tribalismo nos hace estúpidos”!, si, bueno, Ubuntu es no-libre en los aspectos técnicos de la FSF, pero ha llevado un mundo de software libre a más gentes que ninguna distribución GNU/Linux a nivel mundial y eso es digno de aplauso, simplemente apoyemos desde las meta-distros (Debian, Fedora) para que nuestras mejoras, nuestro trabajo, sirva para que esas distribuciones cada vez sean más libres.

En un mundo real, no puedes pedir que todos sean monjes, santos y castas … ¡Sería de un total aburrimiento! …

Sobre el purismo y la definición formal de “libertad” en el Software Libre

Sentimientos encontrados existen en las personas con respecto al hecho de decirles “Tu distribución NO ES libre”, el caso raya en el fanatismo y el insulto (sobre todo en Ubuntu-fans) cuando les dices eso; sin embargo, la idea es entender donde estamos y hacia donde vamos, NADIE (al menos yo no) les está diciendo que no utilicen Ubuntu, pero al menos, que entiendan en la situación en la que se está.

Es un asunto de libertad …

No de precio, rezan los princios de la GNU y de allí se derivan las 4 libertades que tanto se profesan en los eventos de SL (FLISOL, CNSL, JORNASTEC) y tan poco se profesan, estas son:

  • La libertad de usar el programa, con cualquier propósito (libertad 0).
  • La libertad de estudiar cómo funciona el programa, y adaptarlo a tus necesidades (libertad 1). El acceso al código fuente es una condición previa para esto.
  • La libertad de distribuir copias, con lo que puedes ayudar a tu vecino (libertad 2).
  • La libertad de mejorar el programa y hacer públicas las mejoras a los demás, de modo que toda la comunidad se beneficie. (libertad 3). El acceso al código fuente es un requisito previo para esto.

Pero además, estas libertades deben incluir el hecho que para mantenerse la libertad cero plenamente vigente, el acceso al mismo no pueden existir regalías o patentes que pongan en riesgo al usuario por darle uso al software.
También se debe tomar “en cuenta” que una licencia es “libre” cuando esta además de cumplir estos principios, los mantiene “a perpetuidad”, esto significa, que no podrá ser *revisada* por futuros miembros para volverla “no-libre”.

Para que estas libertades sean reales, deben ser irrevocables mientras no hagas nada incorrecto; si el desarrollador del software tiene el poder de revocar la licencia aunque no le hayas dado motivos, el software no es libre.

Una libertad que se gana, no se puede perder.
Un principio FUNDAMENTAL y considero del cual se basan todas las quejas del “purismo filosófico” acerca del Software Libre devienen de este principio:

Para que las libertades de hacer modificaciones y de publicar versiones mejoradas tengan sentido, debes tener acceso al código fuente del programa. Por lo tanto, la posibilidad de acceder al código fuente es una condición necesaria para el software libre.

Entonces, ¿es algún fanatismo enfermizo de Richard Stallman y de sus súbditos trolles subyugados? …Bien, para los que aún no se leen el manifiesto (afirmando en leer, línea por línea entendiendo cada frase), les explicaré.

Primer principio del relativismo cultural de Noam Chomsky: el que me caiga gordo en su manera de ser de Richard Stallman, no significa, ni le quita ni le disminuye facultades para tener la razón.

Violaciones a la ley 0:

Un software debe ser usado, siempre para cualquier proposito, esto además agrega un punto importante “… y en cualquier lugar de la tierra”; esto es, código fuente o aplicación que se riga o base en las leyes norteamericanas para “proteger los intereses” de EUA, evitando su distribución en zonas de conflicto o “enemigos potenciales” (léase: Iran, Irak, Cuba, Corea del Norte, etc), es un software que debe ser considerado “no-libre” muy a pesar de que se pueda acceder al código fuente, hay restricciones de acceso al mismo a través de leyes establecidas en el marco de la Ley Patriota y la DMCA.

  • Usar Cifrados de más de 2048 bits fuera de USA.
  • Usar aplicaciones cubiertas por patentes americanas
  • Qué tácitamente una empresa “se pliegue” a las “Export Policies” de Estados Unidos.

Entonces, para muchos que incluso los he leído “fanáticamente” defendiendo a Ubuntu como software libre y para colmo se declaran “revolucionarios”, les recuerdo entonces que Cuba es según este gobierno, un país hermano, si lo es, entonces ¿estás de acuerdo a los export policies de USA?, mucho del software agregado “por defecto” en Ubuntu agrega regulaciones de exportación a paises en conflicto con USA, pero al ser “OSI-compliant” entonces son agregados por defecto en Ubuntu; algunos ejemplos:

  • Java Runtime Environment y JDK
  • TODO software hecho en Java o que use la JDK de Sun/Oracle, no podrá ser usado en Siria, Cuba, Irán u otros países en conflicto.
  • TODO software hecho para plataforma .NET/Mono
    • Banshee está hecho en Mono y se instala por defecto (sin preguntarme)
    • Tomboy está hecho en Mono C# y se instala por defecto (sin preguntarme)
  • Aunque no lo crean!, el OpenOffice de Novell (GoOO) que se agrega “por defecto” en Ubuntu, sigue estas restricciones:
  • Any Software downloaded from Novell for or on behalf of the United States of America, its agencies and/or instrumentalities (“U.S. Government”), is provided with Restricted Rights. Use, duplication, or disclosure by the U.S. Government is subject to restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 or subparagraphs (c)(1) and (2) of the Commercial Computer Software – Restricted Rights at 48 CFR 52.227-19, as applicable.
  • Debemos recordar “además” que el Logotipo de Oracle (incorporado por Novell y que pueden ver en OpenOffice) tiene serias y restrictivas condiciones de uso (este logo es eliminado del paquete OpenOffice de Debian).

Nota: hasta el año 2009 Mozilla Firefox agregaba controles de regulación de exportación, pero luego de varias negociaciones, fueron “eliminados” esos principios de “no exportación” a países en conflicto ¿pensaban que Firefox no estaba en Debian únicamente por un problema de Logo y nombre?.

¿Se han dado cuenta que no es solamente los paquetes “non-free”?, algunos con los cuales comenzaba a discutir el concepto de “libertad” de Ubuntu pensaban eso, ¡Es que yo tengo la libertad de decidir que instalo!, ¿Estás seguro?.

Ubuntu te ha instalado (y sin preguntar) paquetes como Banshee (reproductor musical hecho en Mono C#) o Tomboy, o un kernel privativo, peor aún, han cambiado a OpenOffice por una versión “modificada” de OpenOffice de Novell (Go-OO) que soporta openXML y otras adiciones aportadas por Microsoft bajo licencias “extrañas” como la Microsoft open Source License (que permite la revisión a futuro de la misma, pudiendo cerrar en un futuro).

Violaciones a la libertad 1

Esta es bastante evidente, ¿de qué no contamos con fuente para modificar?, existen infinidad de aplicaciones dentro de Ubuntu de las cuales no se cuenta con el fuente necesario para modificar el comportamiento, léase:

  • Adobe Flash Runtime
  • Adobe Acrobat Reader! (santo Dios, esto es instalable!, teniendo a Evince, no sé para qué está en los universe de Ubuntu).
  • Linux-Restricted-Modules: Incorpora binarios para activar diverso hardware dentro del equipo, un ejemplo de ello son las tarjetas inalámbricas.
  • bluez-firmware (firmware para “activar” el bluetooth de varios dispositivos) que vienen varios binarios no distribuibles ni modificables.

Estas, sin embargo, son más fáciles de evitar, simplemente ¡No las instales si no las necesitas!.

Violaciones a la Ley 2

Estas son consecuencia de las primeras, si hay regulaciones que “niegan” o “limitan” la distribución de partes o la totalidad del software hacia “ciertas zonas que mi bajo discrecional criterio asumo como enemigas”, entonces no puedo ejercer mi derecho a distribuirlas libremente, si no puedo distribuir el OpenOffice de Novell a amigos en Cuba, Siria, Irán o Palestina, entonces simplemente mi libertad 2 (distribuir) será gravemente coartada.

¿podemos seguir afirmando que una distribución es libre, porque es libre para mí, pero no para otros países?, es un concepto bastante “limitado”, conformista e hipócrita de la libertad.

Violaciones a la ley 3

Producto de la segunda, no podemos modificar paquetes que aunque se tenga el código fuente, este no pueda ser “modificado” o “distribuido”, según los gustos de quien lo modifique, un caso de esto es “Asterisk”, su licencia prohibe las modificaciones sin la autorización de Digium (la empresa detrás de Asterisk) y para colmo, toda modificación debe “ceder” los derechos de autor a Digium, violando ostensiblemente mis derechos.

Aplicaciones como Skype, Dropbox, Mbrola (software de sintesis de voz, solamente se permite su uso “no comercial” y bajo los permisos expresos del autor, violando mi libertad 2 y 3), Nvidia-graphics, fuentes TTF no libres, unrar-nonfree (para descomprimir con el algoritmo RAR, protegido por patentes) son algunos ejemplos de aplicaciones que están en repositorios “main” o “universe” y que pueden ser instaladas, muy a pesar que violan alguno de los 4 principios.

No es dejar de usar …

No le estoy pidiendo a la gente que deje de usar Ubuntu, al contrario, la idea detrás de esto es que mientras más gente se integre a Linux y comience a usarlo, los fabricantes de hardware tendrán que admitir que liberar sus drivers para acceder a mejoras de la comunidad es lo que necesitan.

Tampoco es menospreciar el éxito de Ubuntu o Canaima como distribuciones Linux, puesto que sin ellas mucho de los actuales usuarios “noveles” y “no-informáticos” no estarían en Linux, pero casualmente *ese* es el riesgo, personas que desconocen plenamente los conceptos de “libertad” y asumen que “si, estoy usando software libre porque me sentí en total libertad de instalar Wine y una copia pirata de Autocad 2010”.

Tal y como pasó con Mozilla, al descubrir que un grueso de sus descargas desde Asia venían de Irán, le tocó negociar con USA una “carta abierta de no-violación” para eliminar las restricciones de las “Export Regulations” de USA, claro, eso es a un costo (cualquier mejora que viole las regulaciones del departamento de comercio, como cifrados de altos bits, etc, no podrán ser incorporadas so pena de violar las reglas de exportación de tecnología a paises en conflicto).

Al igual que Broadcom, al descubrir que un gran número de personas estaban comprando hardware “de otras marcas” para no tener que bregar con problemas en Linux, ahora les dió por comenzar “de a poco” a liberar sus drivers a la comunidad.

Pasará con Novell, tendrá que dejar de irrespetar la distribución “universal y absoluta” del software libre, so pena de que alguien en un país no regulado haga un Fork de su Go-OO y le quite todas las cosas “sospechosas de patentes” incorporadas por Microsoft.

Es entender …

La idea no es dejar de usar, pero SI es entender, no decir “Ubuntu es libre” o “Canaima es Libre” porque yo lo digo!, sin entender un poco las razones por las cuales se dice esto; yo al menos en mi caso no estoy pidiendo ni dejar de usar Ubuntu ni dejar de usar Canaima (nuestra distribución nacional), estamos pidiendo comprensión a las leyes y un poco de sindéresis, entender cuáles son los procesos y frentes de lucha, dónde estan flaqueando nuestras libertades y donde debemos hacer más énfasis en defenderlas.

Es muy fácil decir “es libre” solo porque te presta la “comodidad” de que todo funcione, sin darte cuenta que amigos en países como Nigeria, Somalia, Siria o Palestina no pueden usar esa distribución porque prefiere “estar bien con los intereses norteamericanos” que en favor de las libertades universales del hombre y del ciudadano …

YO entiendo mis limitaciones a la libertad, entiendo que hay cosas que me coartan mi libertad pero debo usarlas porque “no hay equivalente -aun- en software libre”, admitir esto como un mantra, es ser libre, entender “bueno, mi hardware inalámbrico no funciona sin un binario, pero sé que eso está ahí, entiendo mi proceso de pérdida de las 4 libertades por ello”, o “cielos!, no me gusta gnash, yo uso Flash porque es más rápido, óptimo y aprovecha mejor la aceleración por hardware, pero ENTIENDO que no es libre”, o “Bueno, yo uso Ubuntu, yo sé que mis amigos Sirios o Cubanos, Haitianos, Libaneses, o Palestinos no pueden usarla so pena de estar expuestos a *piratería* y a crímenes de violación de tratados de exportación y entiendo entonces que eso es NO SER LIBRE” o “Bueno, tendré cuidado de usar Mono C# u openJDK porque no sé como me afectarán sus problemas de patentes en la soberanía tecnológica de mis aplicaciones”, ESO es ser libre, o al menos es admitir que estamos “mas o menos libres” con limitaciones, progresando hacia un futuro cada vez más libre …

Asi que Ubuntero/Canaimero, NO ESTOY pidiendo que dejes Ubuntu (o Canaima) pero sí apoya cada día porque sea más libre, con menos restricciones, menos regulaciones, con la posibilidad de decirle al usuario “mira, hay un kernel-libre y uno no-libre” explicándole cada uno con ventajas y desventajas, no hay simplemente mejor libertad que el conocimiento libre!.

Si después de leer este artículo, tu fanatismo te lleva a una necesidad imperiosa e irrefrenable de trollear y venirme a decir “Adorador de Stallman”, entonces deja tu fanatismo para Ubuntu, es discusión seria …

Compilación y empaquetado en GNU/Linux Debian y derivados

Nota: Esta NO PRETENDE ser una guía oficial, ni tampoco un HOWTO de como compilar oficialmente para Debian siguiendo los Debian Policy, es simplemente una guía para personalizar y/u optimizar la compilación de paquetes personales en GNU/Linux Debian y derivados (Trisquel, Ubuntu).

Esta guía nace del día Hackmate realizado en los “jueves técnicos” entre NetLynx y Mundo Accesible, dictado por Alejandro Garrido Mota (alias mogaal), en el cual se habló de empaquetamiento Debian.

¿Qué es empaquetamiento?

Empaquetamiento es la posibilidad de tomar el código fuente de una aplicación y compilarlo, generando un “paquete” que no es más que un instalador para Debian (formato .deb).

Al empaquetar, contamos con una aplicación instalable desde su .deb con el comando:

dpkg -i paquete.deb

además, si la agregamos a un repositorio personalizado (usando reprepro) podremos contar con la resolución automática de dependencias y todas las posibilidades de aptitude.

Previas básicas de compilación

Qué es compilación?

Proceso de traducción de un código fuente (escrito en un lenguaje de programación de alto nivel) a lenguaje máquina (código objeto) para que pueda ser ejecutado por la computadora.

Cada computadora, cada arquitectura, requerirá un binario completamente distinto.

¿Qué se usa para compilar en GNU/Linux?

Para Compilar en GNU/Linux se usan las herramientas de compilación tradicionales de GNU, como GNU C (o también llamado GCC: GNU C Compiler), bison, auto-tools (crean y/o modifican los archivos configure y Makefile), etc.

Esa serie de herramientas se instalan en Debian con el meta-paquete build-essential:

aptitude install build-essential

Instalando lo necesario para compilar y empaquetar en Debian

Se necesita instalar todo lo necesario para compilar y además, crear paquetes en Debian, para esto ejecutamos:

build-essential dh-make devscripts fakeroot debhelper debian-policy ccache dh-autoreconf autotools-dev

Con esto, ya estamos listos para compilar y empaquetar en GNU/Linux Debian.

Optimizando nuestro paquete

Una de las características de Debian, es que al ser una meta-distribución GNU/Linux, sus paquetes están “semi-optimizados” o “nulamente-optimizados” para aprovechar las características del hardware, por ejemplo, cuando instalamos una versión de 32 bits para arquitecturas x86, los binarios vienen para utilizar cualquier versión de CPU desde i386 en adelante (algunos *someramente* vienen para pentium4), esto es a veces una desventaja cuando queremos aprovechar al máximo nuestro Core 2 Centrino Duo o un Opteron Quad-Core.

“mArch” y “mCPU”

Los parámetros de optimización de la arquitectura son los más “usuales”, al decirle al compilador que *aproveche* nuestra arquitectura, este utilizará algunas normas de optimización heredadas de esos CPU (ejemplo, usar amd64 habilitará opciones como fast-math o el uso de directivas de aceleración 3dNow), los beneficios de rendimiento pueden pasar desde un 1-4% hasta un 30% en algunos casos.

La tabla siguiente muestra las distintas “arquitecturas” y el nombre de su valor en “march”.

Arch Procesador
i386 Intel i386 y compatibles
i486 Intel i486, AMD 486
i586 Intel Pentium (sin mmx)
pentium-mmx Intel Pentium con soporte de instrucciones MMX
pentiumpro Intel Pentium Pro
i686 Procesadores basados en Pentium Pro
pentium2 Intel Pentium II basados en Pentium Pro y soporte de instrucciones MMX
pentium3, pentium3m Intel Pentium III basados en Pentium Pro con soporte instrucciones MMX y SSE
pentium-m Intel Centrino con soporte de instrucciones MMX, SSE y SSE2
pentium4, pentium4m Intel Pentium 4 con soporte de instrucciones MMX, SSE y SSE2
prescott Intel Pentium 4 con soporte de instrucciones MMX, SSE, SSE2 y SSE
nocona Intel Pentium 4 con extensión de 64bits con soporte de instrucciones MMX, SSE, SSE2 y SSE3
core2 Intel Core2 con extensión de 64bits y soporte de instrucciones MMX, SSE, SSE2, SSE3 y SSSE3
k6 AMD K6 con soporte de instrucciones MMX
k6-2, k6-3 AMD K6-2 y AMD k6-3 con soporte de instrucciones MMX y 3DNow!
athlon, athlon-tbird AMD Athlon y AMD Thunderbird con soporte de instrucciones MMX, 3DNow!, enhaced 3DNow! y soporte parcial de SSE
Athlon-4,athlon-xp, athlon-mp AMD Athlon XP y Semprom con soporte de intrucciones MMX, 3DNow, enhaced 3DNow! y SSE
k8, opteron, athlon64, athlon-fx AMD K8, Opteron, Athlon 64, Athlon FX, Semprom 64, Athlon X2 con soporte de instrucciones x86_64 (este tag setea automáticamente el soporte para las instrucciones MMX, 3DNow!, SSE, SSE2, enhaced 3DNow! E instrucciones de 64 bits)
k8-sse3, opteron-sse3, athlon64-sse3 Opteron, AMD Athlon 64, Athlon 64 X2 con soporte de instrucciones SSE3

mCPU es idéntico a mArch y si especificamos mArch no necesitamos indicar mCPU.

La directiva MAKEOPTS

Hay una directiva especial, de uso únicamente en momento de compilación, MAKEOPTS, podemos indicar el número de cores a utilizar para el proceso de compilación, por defecto viene en:

MAKEOPTS=-j2

Donde indica 1 CPU, (la regla es cantidad de CPUs + 1)

MAKEOPTS=-j3 permitirá utilizar mis dos CPU cores.

¿Cómo sabemos nuestro CPU?

Si ejecutamos:

dmidecode –type 4

Nos responderá algo como esto:

# dmidecode 2.9
SMBIOS 2.4 present.
Handle 0x0006, DMI type 4, 35 bytes
Processor Information
Socket Designation: None
Type: Central Processor
Family: Other
Manufacturer: GenuineIntel
ID: FB 06 00 00 FF FB EB BF
Version: Intel(R) Core(TM)2 Duo CPU     L7500  @ 1.60GHz
Voltage: 1.1 V
External Clock: 200 MHz
Max Speed: 1600 MHz
Current Speed: 1600 MHz
Status: Populated, Enabled
Upgrade: None
L1 Cache Handle: 0x000A
L2 Cache Handle: 0x000C
L3 Cache Handle: Not Provided
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified

Nuestro procesador es un Intel core 2 Duo, además si ejecutamos:

cat /proc/cpuinfo | grep flags

Veremos que nuestro CPU soporta flags de optimización como: sse2, sse3 o ht (hyper-threading).

Las FLAGS de compilación

Cada vez que algo ha de ser compilado, nuestro compilador lee 4 FLAGS que definen el modo como se compilará la aplicación:

CFLAGS: Opciones del Compilador C, incluyen las directivas de “pre-compilación” u optimización del código fuente, como por ejemplo march, mtune, mcpu, el nivel de optimización (-O), etc.

La directiva DEB_BUILD_OPTIONS, si está declarada en “noopt” deshabilita cualquier opción de optimización.

CPPFLAGS: Opciones del Pre-Procesador de C, permite “modificar” la ubicación de los include, ejemplo:

CPPFLAGS="-I/usr/local/openssl-0.9.7b/include

Cambia el include a una versión “compilada local” de openssl.

LDFLAGS: permite hacer lo mismo que CPPFLAGS, pero para enlace a ejecutables o librerías, esto con el fin de utilizar una versión específica de alguna instalada (cuando hay varias versiones), ejemplo:

LDFLAGS="-L/usr/local/openssl-0.9.7b/lib

Acá, usaremos la versión compilada de la librería que está en la ruta designada.

CXXFLAGS: Opciones del compilador C++ (GNU CPP), son idénticas a las de CFLAGS.

La variable de optimización -O

Importante regla de optimización, conjuga una serie de modificaciones al código fuente para mejorar su desempeño,  las optimizaciones van del cero, al 3, la optimización adicional “s” es para reducir al mínimo el tamaño del ejecutable.

Las optimización por defecto en el fuente Debian es -O2, que es un equilibrio entre performance y estabilidad, un -O3 hace el código fuente aún más rápido pero no necesariamente más estable, por lo que es menester probar primero con esa compilación antes de distribuir un binario con -O3.

La mayoría de los paquetes para distribuciones embebidas (ARM, MIPS, MIPSEL) vienen con -Os para disminuir su tamaño, pero eso los hace lentos, si su problema no es el espacio en disco para estos dispositivos imbuidos (teléfonos, smartphones, routers, beagleboards, portátiles Lemote), entonces es mejor recompilar los paquetes usando -O2.

Otras optimizaciones interesantes

-fomit-frame-pointer:  Omitir los pointers, haciendo el debug mas dificil y el backtrace casi *imposible*, sin embargo, para un ejecutable ya probado y en producción, compensa el performance.

-pipe: Optimización al momento de compilar, usa PIPES en vez de caché en disco para los temporales, aumentando la velocidad de compilación, si acaso posee poca memoria, no use -pipe

-msse3: SSE (Streaming SIMD Extensions) es una extensión al grupo de instrucciones MMX para procesadores Pentium III, (fuente: Wikipedia)

Si habilitamos SSE, directivas de optimización de CPU para procesamiento de audio o video, etc, serán utilizadas.

-m64: Habilita el uso de directivas de 64 Bits.

-ffast-math: Permite que los cómputos de punto-flotante (muy usado por aplicaciones de audio o de video) sean más rápidos.

-funroll-loops: típicamente optimiza los loops DO mediante algunas técnicas, haciendo al código más rápido.

Algunas optimizaciones adicionales: http://www.delorie.com/gnu/docs/gcc/gcc_10.html y en la página de GNU C: http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/i386-and-x86-64-Options.html

Re-Empaquetando una aplicación

Todo codigo fuente “Debianizado”, posee una carpeta “/debian” que contiene una serie de archivos importantísimos para que este pueda ser construido; explicaré algunos someramente:

changelog: agrega la resolución de bugs abiertos y los cambios realizados en el paquete desde que se incorporó a Debian.

control: describe el paquete, sus dependencias, arquitecturas particulares, etc

copyright: describe el autor y la licencia del paquete

patches: directorio que contiene todos los parches “Debian” que serán incorporados al fuente (opcional)

rules: archivo importantísimo, contiene las reglas de construcción del paquete, es acá precisamente, donde modificaremos las reglas de compilación.

Nuevo en Debian: dpkg-buildflags

El comando dpkg-buildflags es nuevo en Squeeze, y retorna las FLAGS como están definidas en Debian.

Si ejecutamos:

dpkg-buildflags --list

Retornará:

CFLAGS
CPPFLAGS
CXXFLAGS
FFLAGS
LDFLAGS

Un ejemplo de lo que retorna de dpkg-buildflags –get:

–get CXXFLAGS

-g -O2

–get CFLAGS

-g -O2

Entonces, para Debian Squeeze, se puede usar el paquete dpkg-buildflags, que retorna las directivas que usará dpkg-buildpackage, para el archivo debian/rules, algunos sugieren colocar así la regla:

CFLAGS=$(shell dpkg-buildflags –get CFLAGS)

Y modificar las reglas en el archivo:

/etc/dpkg/buildflags.conf

Colocando, por ejemplo:

CFLAGS=”-g -Wall -O3 -march=core2 -msse3″

Aunque esto es algo que podemos “exportar” con:

export CFLAGS=”-g -Wall -O3 -march=core2 -msse3″

export CXXFLAGS=”$CFLAGS”

Empaquetando y Optimizando el IDJC

He decidido usar como ejemplo el IDJC, un programa utilizado para streaming en RadioGNU, pueden ver una introducción del paquete acá:

http://wiki.radiognu.org/doku.php?id=idjc

Los pasos a seguir son los siguientes:

1.- Descargamos el fuente oficial de la página de SourceForge (version 0.8.3)

2.- Instalamos los paquetes “requeridos” para compilar IDJC:

aptitude install python2.6-dev libjack-dev python-gtk2-dev  \
libvorbis-dev libxine-dev libsamplerate0-dev libflac-dev libshout3-dev \
libsndfile1-dev libmad0-dev libavcodec-dev libavformat-dev libtwolame-dev

3.- Aunque podríamos “debianizar el fuente (ejecutando dh_make -f ../fuente.tar.gz)” voy a aprovechar que ya está “debianizado” en Sid, descargandome únicamente la carpeta “/debian” requerida para construir el paquete.

Para ello:

4.- buscamos el paquete en Debian Packages, lo he encontrado en SID: http://packages.debian.org/sid/idjc

5.- Me descargo la “debianización” del fuente:

http://ftp.de.debian.org/debian/pool/main/i/idjc/idjc_0.8.3-1.debian.tar.gz

6.- Descomprimo el paquete idjc_0.8.3-1.debian.tar.gz y muevo la carpeta debian al fuente del idjc:

tar xvf idjc_0.8.3-1.debian.tar.gz && mv debian /usr/src/idjc-0.8.3/

Luego de “debianizado” el fuente, vamos a personalizar la optimización.

Abrimos para ellos el archivo debian/rules.

Optimizando el paquete Debian

Al abrir el archivo debian/rules, nos encontramos con que el empaquetador ya ha hecho algunos “tunnings” necesarios, en dado caso debemos entender que:

Con override_dh_auto_configure podemos cambiar la configuración del paquete (como si pasaramos las líneas en el ./configure).

Con override_dh_auto_build, con esto cambiamos las FLAGS.

Encontramos en el debian/rules del idjc las directivas:

OPTI_FLAGS := -D_REENTRANT -O2 -fomit-frame-pointer -ffast-math -fstrength-reduce -funroll-loops -mmmx -msse -mfpmath=sse -march=pentium4

Y las he cambiado a:

OPTI_FLAGS := -D_REENTRANT -O3 -pipe -fomit-frame-pointer -ffast-math -fstrength-reduce -funroll-loops -mmmx -msse -msse3 -mfpmath=sse -march=core2 -mcpu=core2 -m64

Luego que modificamos el archivo debian/rules, solamente nos toca “construir” el paquete.

Para ello:

7.- Salimos de la carpeta “debian” y nos vamos a la raíz del fuente y ejecutamos:

dpkg-buildpackage -us -uc

Y este creará el paquete .deb.

Ahora a instalar!.

Salimos al directorio donde está el fuente (cd ..) y ahí estará una serie de archivos:

-rw-r–r– 1 root src    1752 sep 11 17:27 idjc_0.8.3-1_amd64.changes
-rw-r–r– 1 root src  605336 sep 11 17:27 idjc_0.8.3-1_amd64.deb
-rw-r–r– 1 root src  115867 sep 11 17:27 idjc_0.8.3-1.debian.tar.gz
-rw-r–r– 1 root src    1354 sep 11 17:27 idjc_0.8.3-1.dsc
-rw-r–r– 1 root src 1308809 sep 11 15:46 idjc_0.8.3.orig.tar.gz

El archivo .deb (nuestro paquete optimizado) lo podremos instalar con un simple:

dpkg -i idjc_0.8.3-1_amd64.deb

Y listo!.

Conclusiones

Además de las opciones de EXPORT, hay ciertas directivas DH (como DH_BUILD_OPTIONS) que aún estoy aprendiendo y pues me permitirán no solo optimizar paquetes sino mantenerme en el Debian Policy (al menos, dh_lintian no me generó error en el paquete optimizado).

Me imagino (como aclaré al inicio) que tengo algunas observaciones y errores en mi código, pero espero que algun Debianita Experto las aclare y permita hacer a esta guía más útil y correcta.

Disfruten sus .deb optimizados! .

[La Nota del Día] Solo un Windows-User consigue trabajo en CANTV

Hoy me tocó iniciar el registro de empleo de CANTV, me pidieron que ingresara allí unas cosas para una solicitud que hice …

Para mi sorpresa, cuando hago click sale esto:

En fin, probé con Chrome, Chromium, Firefox, Swiftfox, Epiphany, Konqueror y hasta Konqueror con cambio de Tag, con el IE4Linux y pues nada me funcionó.

Tendrán que esperar que me instale un Windows o actualice mi wine+IE4Linux nada más para poder contactarlos …

Deepwater Horizon: SCADAs, PDVSA y pantallas azules

Deepwater Horizon: Plataforma semi-sumergible de aguas profundas en el Golfo de México, era de la empresa “TransOcean” (con sede en Majuro, islas Marshall) y arrendada a BP hasta el año 2013; tiene el record de haber perforado el pozo más profundo del mundo …

… y creo que encontró al Balrog, la plataforma falló el 26 de abril de 2010 a causa de “errores no documentados”, explotó y se hundió en el mar dos días después causando el derrame y la catástrofe petrolera más grande de la historia.

SCADA: Acrónimo de “Supervisión, control y adquisión de datos”; los SCADA son sistemas de software encargados de comunicar sistemas de sensores y monitores de campo (controladores autónomos) para el control de complejos procesos de la industria desde la pantalla de un computador.

BSOD: Acrónimo de “Blue Screen Of Death” y es referencia a la “pantalla azul” de error de MS Windows que ha existido desde sus inicios …

… Y existirá “in saecula saeculorum”…

La catástrofe

Cada día son más las informaciones filtradas que confirman que la catátrofe del “Deepwater Horizon” se debió a una *masiva falla en sus sistemas SCADA*; cuando el tubo perforador se fraccionó y comenzaron las explosiones, ni siquiera se escucharon las alarmas y todo el sistema de máquinas colapsó en un único BSOD.

En informaciones filtradas desde Wikileaks y luego hechas públicas en algunos medios masivos como el “The New York Times” y otros; al parecer un masivo fallo en el sistema SCADA de la plataforma petrolífera ha causado la mayor catástrofe de la historia.

¿Quién dijo que lo productos de Microsoft no podían matar personas?

Un empleado de la plataforma le ha dicho a la comisión que investigaba el caso, que:

“For months, the computer system had been locking up, producing what the crew deemed the “blue screen of death.” “It would just turn blue,” he said. “You’d have no data coming through.”

Es decir, el sistema llevaba meses fallando, bloqueandose en pantallas azules y no se recibía ningún dato de los sistemas SCADA, hasta que punto que el propio día del accidente, el sistema de emergencias y alarmas colapsó y no se activó.

¿La causa?

Algunos expertos afirman (y algunas investigaciones adelantadas en Wikileaks) que una “cyber-guerra digital” se encuentra en pie entre las grandes transnacionales de la energía, saboteándose o contratando cyber-criminales para su causa, BP, los sabotajes a los pozos de Shell en Albania, los posibles colapsos de pozos y producción de algunos países son solo una mera sospecha del asunto …

Pero fuera de la especulación, la causa técnica del fallo en DeepWater Horizon es la existencia del primer “Troyano” específicamente diseñado para atacar (via infiltrado por Internet o USB) sistemas de misión crítica como el WinCC SCADA Systems (de la gente de Siemens), como se ha colgado en algunos sitios de Internet como cnet, el exploit ataca un famoso fallo de Windows (Zero Day Flaw) y puede verse su descripción acá.

Stuxnet Trojan y lean también “Not Another Conspiracy

Notas interesantes sobre Stuxnet

  1. Se presenta como un “Driver” legítimamente válido (WHQL), explotando un fallo de certificados de Windows.
  2. Firmado digitalmente “válido” con un certificado de Realtek (empresa China)
  3. Luego de revocado, fué firmado con otra empresa China válida (JMicron)
  4. El troyano estuvo más de un año sin ser detectado por los Antivirus, el primer patrón fué de ESET en Julio de este año (casi un mes después del hundimiento de DeepWater Horizon)
  5. Los países más afectados han sido India e Irán.
  6. Ataca mediante un “flaw” de Zero-Day a cualquier versión de Windows, incluso Windows 7 (desde NT hasta 7 y Windows Server 2008).
  7. El fallo (hueco de seguridad) del que se basa, tiene más de 10 años descubierto y aún Microsoft no sabe como cerrarlo (muy irónico a lo que BP sufrió para cerrar el hueco causado por su BSOD)
  8. Ataca via USB, pero versiones más recientes tienen un “carrier” que lo deposita vía correo electrónico.
  9. Una variante fue modificada “específicamente” para atacar sistemas SCADA como el WinCC SCADA System de Siemems.
  10. ClamAV incorporó detección al Stuxnet el 20 de Julio, solo 4 días después de la primera “gran empresa Antivirus” (ESET) ¿no y que los antivirus para Linux son malos en detectar malware?.
  11. Mucha gente da gracias en Internet a versiones “live-CD” de varias distribuciones de Linux para poder acceder a las particiones Windows infectadas, reparar el registro de Windows con herramientas libres y eliminar las trazas del virus.

El sistema ya ha atacado a aproximadamente un 40% de las empresas en India, Indonesia e Irán, sin embargo, su uso para sabotaje premeditado es como mínimo, de terror.

Ya habíamos oído los casos de como un Troyano causó un agujero de infiltración en una red de computadoras del departamento de Defensa de USA, o que el mismo Troyano ha causado fallas en sistemas en Irán e India, o que los 157 muertos del accidente del avión SPANAIR en Palma de Mallorca fueron a causa de un Malware en la computadora del avión; pero es la primera vez que se detecta el uso de un malware específicamente diseñado para un software, una plataforma y de uso absolutamente terrorista..

¿Y que tiene que ver Venezuela en todo esto?

Pues, WinCC SCADA System es la plataforma de monitoreo más popular de Venezuela, industrias químicas, farmacéuticas, Polar y la propia PDVSA utilizan WinCC SCADA en sus plataformas; una simple búsqueda en Google muestra que Siemens da publicidad a sus “éxitos de implantación de WinCC” en sitios como la planta de cerámicas Proppant de Puerto Ordaz, En algunos sistemas de tráfico implatandados y lo que he visto peor, en 2008 se implantó toda una red de monitoreo con WinCC SCADA System en más de 2600 plataformas de extracción, en 300 martillos de extracción y en 2 plantas de energía distribuida en la costa sur y sur-oriental del lago.

Que suenen las alarmas …

Ya no es solo el término de “soberanía tecnológica” enfocado a la filosofía y el cumplimiento del 3390 (como a veces se orienta mucho este tema), sino un problema eminentemente técnico, en DeepWater Horizon las alarmas no sonaron, pero es necesario que en PDVSA las alarmas suenen, ¿seguiremos diciendo que Windows es mejor?, ¿qué no hay otras soluciones?, el proyecto SCADA nacional ha hecho esfuerzos para implantar sistemas en Software Libre, al cual muchos directivos no le han hecho caso, puesto que ya vemos como en 2008 se hizo una inversión millonaria en este sistema que está detrás de la catástrofe petrolífera más grave de la historia …

¿Seguiremos esperando a que un malware paralice nuestra primera industria para decir *Epale!, es verdad!, debimos haber migrado a Software Libre!?

Es en este momento, cuando cyber-criminales en el mundo entero, se dedican a diseñar malware para sistemas de misión crítica en una especie de carrera cyber-terrorista, caen aviones, se dañan estaciones espaciales, se hunden plataformas de extracción de petróleo y todavía hay gente que dice “Dame una solución porque no hay nada mejor que Windows” …

Más info sobre el malware: http://blogs.eset-la.com/laboratorio/2010/07/20/stuxnet-episodio-2/

SCADA Nacional > http://www.cintal.com.ve/tecnologia/argos/

Microsoft e Internet Explorer 9: Perdiendo en su propio territorio

Como parte del proceso de pruebas sobre su “compatibilidad” y “gran destreza” del Internet 9 (aún en preview y sin muchas cosas instaladas) la gente de Microsoft creó un sitio web “test drive” para probar capacidades como “aceleración por GPU” y el tan esperado “HTML 5”, entre las pruebas me llamó mucho la atención una, “La pecera IE” (Fish IE Tank) hecha enteramente en HTML 5:

http://ie.microsoft.com/testdrive/Performance/FishIE%20tank/Default.html#

Y en la cual ellos prueban en “FPS” (Frames por Segundo) su capacidad de renderizar eficientemente HTML5, al ser HTML 5 ¿será visible en otros navegadores?, la respuesta es un rotundo “si” y nunca falta alguien que entonces, se le ocurra hacer un benchmarking …

¿Qué ocurrió? … pues que ni en su propio sitio web la gente de Microsoft gana una! …

Firefox 3.7 (preview actualmente) e incluso Firefox 3.6 han logrado vencer en velocidad al navegador de la compentencia mientras que Google Chrome ha quedado atrás por poquito, claro está, la comparación fué contra Chrome 6 (basado en Chromium 6).

En mi caso, he corrido la prueba “personalmente” pero no al Internet Explorer 9, sino a los navegadores instalados en mi GNU/Linux Debian.

Peces Microsoft

Nota: Me gustaría saber si pueden mantener los mismos FPS en un Cubo Compiz!, yo si puedo!.

En promedio, los resultados de cada navegador:

En común para todos:

Ejecutándose en un Gnome Debian con compiz, renderización por hardware UXA habilitada y efectos Compiz activados.

Tamaño de pecera: 1400 x 897 / Cantidad de peces: 50

Opera 10.61 Linux amd64

32/34 FPS con algunos “sobresaltos” a 40 FPS

CPU: 55%

Google Chrome (oficial) versión 6.0.495-dev

25/30 FPS con algunos leves saltos a 35 FPS

CPU: 80%

Acá viene lo bueno! …

Iceweasel  (firefox – 3.5.10)  – Gecko 201010263

22/28 FPS sin variaciones

CPU: 40%

SwiftFox (Firefox 3.6.8 – Gecko 730)

FPS:  28/30 a veces baja a 25

CPU: 45%

Chromium-Browser (núcleo libre de Google Chrome) 7.0.503.0 (a pantalla de 1400×912)

FPS: 38/42 FPS con saltos que llegaban a los 57 FPS

CPU: 70%

Firefox 4 – Beta 6 versión “MineField” (Gecko: 901)

FPS: 36/40 FPS con sobresaltos hasta 60FPS!

CPU: 40%

Nota: demo no ejecutó ni en Konqueror 4.4.5 ni en Epiphany 2.30

La máxima cantidad de FPS obtenidos por Internet Explorer en Windows 7 con Microsoft Direct2D + un GPU basado en Nvidia y en una ventana de 780×500 ha sido de 60 FPS y yo he obtenido 57 en un Chromium! en una simple Intel 965 en un GNU/Linux Debian!.

Como nota curiosa y para ser “fiel” a la prueba original, he corrido ahora con 100 peces (y no 50) en MineField y en Chromium a un tamaño de ventana 780×620 “semejante” a la prueba de Internet Explorer 9 en el video oficial.

Les pongo las capturas de pantalla:

MineField (Firefox 4 Alpha)

Chromium 7

Como comparativa, Opera 10 dió 48 FPS y Swiftfox 3.6 dió 53 FPS, que no dista de ser una estadística “mala” comparado que no son navegadores que tengan habilitada “aceleración por hardware” y tampoco muy “modernos”; por lo que el propio Sistema Operativo ha ayudado mucho.

Conclusiones

Aunque no es de desmerecer que estén trabajando en un navegador que soporte HTML 5 (y hasta insinúan que SVG) y que traiga “aceleración por GPU”, estos rendimientos no son  “ajenos” a los usuarios Linux y más queda demostrado que con mi computadora, que no es ninguna Nvidia ni ATI, he conseguido rendimientos semejantes en navegadores que ya son de uso *común* entre los linuxeros y no es “preview alpha release” que no saben los usuarios Windows “cuando saldrá” y peor aún, cuando consumirá de VideoRAM y de CPU/GPU este navegador.

Y que conste!, que no ejecuté la prueba en un kernel “realtime” para que luego no dijeran que era un “aprovechado” …

UPDATE: La tentación pudo más, corriendo la prueba en un kernel “realtime”, pero además, en el mismisimo cubo Compiz! …

A ver si Windows 7 + Internet Explorer 9 pueden hacer esto!

A %d blogueros les gusta esto: