¿Secure Boot? Más bien “Restricted Boot”

October 31st, 2011 No comments

restricted boot

Microsoft ha anunciado que los fabricantes que quieran llevar el logotipo de Windows 8 en sus equipos deberán implementar una característica conocida como “Secure Boot”, que consiste en controlar los programas que el ordenador ejecuta en el arranque. Como muchas otras ideas en el pasado, esto no es algo malo de por sí, pero como siempre las empresas y los intereses privados se encargan de pervertir la idea original en su beneficio.

Lo que en un principio está pensado para evitar la ejecución de malware en nuestros ordenadores, se usará para impedir la ejecución de sistemas operativos que no esten previamente autorizados, incluyendo aquellos que aunque esten autorizados hayan sido modificados a posteriori. En teoría, el usuario debería poder autorizar los programas que quiera que sean lanzados en el arranque, pero todo parece indicar que Microsoft y los fabricantes de hardware lo implementarán de forma que no sea posible ejecutar algo distinto de Windows.

Esa es la razón por la que se prefiere llamar a esta tecnología por el nombre de “Restricted Boot”, que refleja de manera más fidedigna las intenciones que guardan estas empresas.

Para los que esteis en contra de la aplicación de estas medidas, es posible firmar una petición pública de rechazo en Stand up for your freedom to install free software.

Podeis encontrar más información en Will your computer’s “Secure Boot” turn out to be “Restricted Boot”?

Categories: Uncategorized Tags:

Gacela migra su código a Gnu Guile

May 11th, 2011 No comments

Como dice el título, estoy reescribiendo parte del código fuente de Gacela, pasando de usar Gnu Common Lisp a usar Gnu Guile.

Hay varias razones para ello; el equipo de desarrollo de Gnu Common Lisp está formado por varias personas, pero lo cierto es que el único que parece trabajar en el proyecto es Camm McGuire, su líder. Esta situación provoca que el desarrollo de Gnu Common Lisp no avance todo lo rápido que sería deseable, que la documentación sea bastante pobre y que hayan bugs importantes a la espera de resolución.

Además me encontré con problemas de integración entre Gnu Common Lisp y OpenGL que hacían que Gacela no funcionara correctamente en algunas plataformas, como por ejemplo los portátiles Asus Eee PC.

Por lo tanto, empecé a buscar un sustituto. Existen muchas implementaciones libres de Lisp y muy buenas, pero una de las razones por las que elegí Gnu Common Lisp fue que era la implementación oficial de Lisp del proyecto GNU y quería continuar con esa idea.

Y de forma accidental me encontré con Gnu Guile. Había leído algo hacía tiempo, pero no había profundizado sobre qué era Gnu Guile. Guile es el lenguaje de extensión oficial del proyecto GNU, además de ser un compilador y un intérprete de Scheme, un dialecto de Lisp.

Cosas que tiene Guile y que yo buscaba:

  • Forma parte del sistema operativo GNU y está soportado por la Free Software Foundation.
  • Sigo teniendo todo el poder de Lisp a mi alcance.
  • Hay mucha gente detrás del proyecto con lo que ello conlleva: buena documentación, versiones frecuentes, una comunidad grande, etc.
  • La facilidad para integrar código en C es impresionante, superando a Gnu Common Lisp y a las ctypes de Python.
  • Soporta multi-threading, que no es algo que necesitara obligatoriamente pero que no me vendrá mal del todo.
  • Y funciona perfectamente en mi Eee PC :-)

Ya he migrado todo el código C y ahora estoy pasando el código Lisp a Scheme, por lo que espero poder liberar la versión 0.5 antes de final de mes.

Categories: Gacela Tags:

No tienen ni idea

May 4th, 2011 No comments

Como cuentan en Netflix Is Killing BitTorrent in The US, resulta curioso comprobar cómo una alternativa de pago como es Netflix está consiguiendo ganar terreno al “todo gratis”, a pesar de que sea algo imposible según SGAE y amigos.

No puedo comprender cómo es posible que no se den cuenta de lo que realmente quiere la gente. Si me pongo a mi mismo como ejemplo, en una tarde lluviosa de domingo no me apatece tener que bajar al videoclub más cercano a buscar una película para ver en casa, sino que lo que quiero es encender el ordenador, acceder a un catálogo y elegir la que más me apetezca. Si tengo que elegir entre una película con buena calidad, extras, etc, a un precio razonable y la misma película gratis pero con calidad discutible, prefiero pagar y tener un buen producto. Pero claro, si la única que tengo a mano es la gratuita de baja calidad, pues me quedo con esa.

Así de simple. Ya no entro en el tema de la cultura libre, de los beneficios de permitir la libre distribución, etc, etc, sino que voy directo a la existencia de un mercado que está completamente desatendido.

Resulta sorprendente comprobar el enorme volumen de negocio que están desperdiciando simplemente porque son incapaces de ver delante de sus narices. Ellos tienen películas, música, tienen dinero, gente, y unos cuantos con cámaras medio escondidas en las salas de cine les están ganando la partida simplemente porque no tienen ni idea.

Categories: Uncategorized Tags:

Nuestros datos son nuestros

April 5th, 2011 No comments

Hoy mismo he estrenado mi cuenta para micro-blogging en identi.ca para escribir mensajes cortos sobre cosas que me llamen la atención, noticias, etc. En principio es un servicio similar al ofrecido por Twitter u otros, pero si nos fijamos bien veremos que es mucho mejor de lo que nos podemos imaginar.

Y es que identi.ca funciona completamente con software libre, StatusNet, y nos da total acceso a nuestros datos (mensajes, amigos, seguidores, …). Es decir, que si no nos gusta cómo funciona identi.ca, podemos hacer la maleta y marcharnos a otro servidor o montarnos nuestro propio servidor, ya que tenemos el software y los datos.

Como he comentado en posts anteriores, resulta preocupante el poder que ejercen empresas como Facebook o Twitter sobre los comentarios, fotos y relaciones de sus usuarios. Los datos son de las personas que introducen esos datos, son sus opiniones, son sus fotos, y ninguna empresa tiene derecho a apropiarse de toda esa información. Por eso, proyectos como identi.ca o como Diaspora o como muchos otros son tan importantes, porque anteponen la libertad de sus usuarios a ese ansia de poder, porque nos demuestran que es posible crear empresas éticas que no hacen negocio machacando los derechos y la libertad de las personas.

Así que ya lo sabeis, ahora tambien me podeis seguir en mi cuenta de identi.ca.

Categories: Uncategorized Tags:

De ingenieros informáticos y prestigio

March 16th, 2011 No comments

El otro día, durante una amena charla con compañeros de fátigas, hablamos sobre la eterna polémica de los ingenieros informáticos, los colegios oficiales y tal y tal, y se me quedó grabada la siguiente pregunta: ¿Por qué los ingenieros informáticos están mal valorados en España pero en otros países son los reyes del mambo?

He trabajado para empresas de España y de USA, y ciertamente la diferencia entre ambos países es como el día y la noche. En USA las personas con un buen perfil tecnológico son las estrellas, con buenos sueldos y muy buena valoración. Y por lo que me han contado esto mismo ocurre en países europeos como Alemania, Suiza o Irlanda. ¿Por qué no en España?

Una de las razones que se suelen dar es el bajo nivel de conocimientos sobre tecnología del empresariado español, lo cual, aunque cierto, no me parece una razón suficiente. Los empresarios de otros países tambien fueron unos incultos sobre estos temas y eso no ha impedido la aparición de un tejido empresarial fuerte alrededor de la informática y el encumbramiento de los ingenieros en general al olimpo de los grandes profesionales.

En mi opinión la gran diferencia entre USA y España radica en que en España no existe una verdadera industria del software sino una industria de servicios. El sueño de cualquier joven ingeniero informático estadounidense al salir de la universidad es crear una empresa o trabajar en una ya existente cuya misión sea revolucionar el mundo con la última gran idea. Puede que lo consiga o puede que no, pero su objetivo es crear algo nuevo e innovador. En cambio, el ingeniero informático español aspira a trabajar en alguna gran empresa parcheando antiguos sistemas de gestión y facturación, y si puede colocarse como funcionario mejor que mejor. En principio, algo así no debería ser malo, pero lo cierto es que esa falta general de ambición desemboca en la poca valoración que tenemos los ingenieros informáticos españoles.

En USA, esas ganas de hacer cosas nuevas y de romper moldes unida a esa habilidad que tienen los inversores norteamericanos para ver las oportunidades, convierten a los ingenieros informáticos en máquinas de hacer dinero y de alcanzar el éxito. Les da un prestigio que ya querríamos aquí.

Por eso siempre digo que hay que sacudirse las pulgas de encima, hay que hacer cosas nuevas, leer y estudiar mucho, estar al día, ser grandes profesionales, ambiciosos, sin miedo a nada… Hace ya tiempo, alguien me dijo que era injusto que perdiera su puesto de trabajo porque otro con un cursillo de Access pudiera hacer lo mismo que él por menos dinero. Bien, querido lector, yo nunca me he sentido amenazado por alguien así, pero si es tu caso, ningún colegio oficial impedirá que acabes en el arroyo, ya que para jugar a este juego lo que se necesita es prestigio del bueno, y eso ningún cursillo de Access te lo dará.

Categories: Uncategorized Tags:

Libertad y software libre

March 8th, 2011 No comments

Tal como explican en el boletín de noviembre de la FSFE, el 27 de enero Egipto bloqueó Facebook y Twitter. Esta medida paralizó momentaneamente las protestas en el país. Parte de la prensa asumió que esto se debía a la influencia de la nieta de Mubarak, novia de Mark Zuckerberg. Por supuesto, esto no es cierto, pero da que pensar. ¿Qué ocurriría si en vez de Egipto estuvieramos hablando de EEUU o de Europa? ¿Podría resistir una empresa como Facebook o Twitter la presión que ejercerían estos estados sobre ella?

Desde siempre los defensores del software libre se han preocupado por proveer a la sociedad de herramientas descentralizadas, sin un único punto de control que las haga vulnerables, y con algoritmos totalmente abiertos y transparentes. La arquitectura de la misma Internet sigue esta filosofía. Otro ejemplo serían las redes P2P. Aunque es cierto que también se pueden bloquear protocolos e incluso llegar al punto de cerrar redes enteras, son medidas más expeditivas y más complicadas de realizar.

Pero si le damos a una empresa el poder de controlar nuestras conversaciones y de almacenar nuestros contenidos correremos el riesgo de ser censurados, o incluso de ser eliminados totalmente del mundo digital simplemente por el hecho de que nuestras ideas incomoden a aquellos que ostentan el poder. Además, y quizás peor, los poderosos disponen de una herramienta perfecta para catalogar, filtrar, buscar personas por sus ideas, comentarios, relaciones… Ni George Orwell hubiera imaginado un Gran Hermano tan poderoso que las personas le entregarían su libertad a cambio de tan poco.

Categories: Uncategorized Tags:

Ejecución de programas Gacela en el navegador (rectificación)

February 28th, 2011 No comments

Y es que a veces hay que meterse una patata en la boca antes de decir nada. O coger una patata en cada mano antes de bloguear nada.

En el post anterior sobre cargar ficheros con Javascript dije que con Ajax no se podía, que era necesario usar iframes, etc, etc… ¡¡Mentira cochina!! Pues claro que se puede, y resulta mucho más fácil.

El código para cargar un programa Lisp, compilarlo y ejecutarlo sería así:

<html>
    <head>
        <script type="text/javascript" src="lisp2js.js"></script>
        <script id="head_js" type="text/javascript"></script>
        <script type="text/javascript">
            function cargar (fichero) {
                var req = new XMLHttpRequest();
                req.open('GET', fichero, false);
                req.send(null);
                if (req.status == 200) {
                    var lisp_code = req.responseText;
                    var js_code = string2js(lisp_code);
                    document.getElementById('head_js').text = js_code;
                }
            }
        </script>
    </head>

    <body onLoad="cargar('programa.lisp'); init();">
    </body>
</html>

Esta sería la versión síncrona, aunque también se puede hacer de forma asíncrona. Se pueden ver más ejemplos en Using XMLHttpRequest.

Categories: Uncategorized Tags:

Ejecución de programas Gacela en el navegador

February 25th, 2011 No comments

Actualización: Todo lo explicado en esta entrada puede hacerse mucho mejor usando el objeto XMLHttpRequest, tal como cuento en Ejecución de programas Gacela en el navegador (rectificación). Si quieres saber cómo no hacerlo, sigue leyendo :-D

El proyecto Gacela, en el que llevo trabajando cerca de dos años y medio, está formado a su vez por tres subproyectos:

  • Gacela, la definición del lenguaje y el compilador / intérprete, que funciona localmente en el ordenador.
  • Lisp2js, el compilador de Lisp a Javascript que permite traducir programas Gacela y ejecutarlos en una página web.
  • Gacela on Wheels, un entorno web para el desarrollo de juegos con Gacela.

Estos últimos meses estoy más centrado en Lisp2js y en la posibilidad de ejecutar en el navegador programas escritos con Gacela. La idea es poder incluir en una página web un código en Javascript del estilo file2js(‘mi_juego.lisp’); iniciar_juego(); que traduzca el código en Lisp a código en Javascript, lo incruste en la página y lo ejecute. Pero me encontré con una dificultad que no había previsto y que me sorprendió, y es que Javascript por motivos de seguridad no tiene funciones para trabajar con ficheros.

A continuación explicaré de qué forma podemos cargar ficheros con Javascript y de paso explicaré cómo Gacela consigue añadir código Javascript a una página y ejecutarlo. Para otro día queda el funcionamiento interno de Lisp2js.

La forma de acceder a un fichero con Javascript (siempre estoy hablando de un fichero que se encuentre en el mismo dominio) es usando el elemento iframe. Hay otras formas, como usando Ajax, pero eso requiere usar algo de PHP en el servidor y la idea es que el invento pueda funcionar localmente sin necesidad de servidor web.

El código que hará funcionar todo es el siguiente:

<html>
    <head>
        <script type="text/javascript" src="lisp2js.js"></script>
        <script id="head_js" type="text/javascript"></script>
        <script type="text/javascript">
            function cargar (fichero, func) {
                var el = document.getElementById('mi_iframe');
                if (el == null) {
                    var el = document.createElement("iframe");
                    el.setAttribute('id', 'mi_iframe');
                    el.onload = function() { ejecutar_mi_codigo(func); }
                    el.style.display='none';
                    document.body.appendChild(el);
                }
                el.setAttribute('src', fichero);
            }

            function ejecutar_mi_codigo (func) {
                var el = document.getElementById('mi_iframe');
                var lisp_code = el.contentWindow.document.body.textContent || el.contentWindow.document.body.innerText;
                var js_code = string2js(lisp_code);
                document.getElementById('head_js').text = js_code;
                func();
            }
        </script>
    </head>

    <body onLoad="cargar('programa.lisp', function() { init(); });">
    </body>
</html>

Se usan dos funciones, una para crear el iframe e indicarle el fichero que debe abrir y otra para ejecutar el código que estamos cargando. Se hace así porque iframe funciona de forma asíncrona, por lo que le decimos lo que debe hacer cuando tenga todo el contenido usando la propiedad onload.

La primera función, cargar, se ocupa de crear el iframe, pero si ya existe se limita a indicarle el fichero a cargar. Aunque en este ejemplo no tiene mucho sentido, sí que lo tiene si tuvieramos que cargar varios ficheros.

La segunda función, ejecutar_mi_codigo, se lanza cuando el iframe acaba de cargar el fichero. Usando las propiedas textContent o innerText (esto depende del navegador) recogemos el código Lisp, lo traducimos a Javascript y lo insertamos en su correspondiente sección en la cabecera. Finalmente iniciamos la ejecución del código.

Así, aunque de forma más transparante, Gacela es capaz de cargar código Lisp en una página web y ejecutarlo. Es decir, que el mismo código se ejecuta de la misma forma localmente en un ordenador o de forma remota a través del navegador, que es lo que se pretende.

Categories: Uncategorized Tags:

No quieren que copiemos… pues no lo hagamos

February 20th, 2011 No comments

No voy a entrar a hablar sobre la “ley Sinde”; mucho se ha hablado ya y gente como Ricardo Galli o Enrique Dans lo hacen mucho mejor de cómo lo haría yo. Que esa ley atenta contra derechos constitucionales es algo obvio y si ha salido adelante ha sido por presiones políticas y económicas que poco tienen que ver con los valores éticos que se supone deberían defender los “padres de la patria”.

Simplemente quiero hacer una pequeña reflexión al respecto. Todas estas leyes relacionadas con derechos de autor cuyo objetivo es que la gente no pueda ejercer su libre derecho a la copia seguirán surgiendo con el paso de los años, ya que son promovidas por una industria poderosa con el único afán de controlar el mercado, controlar a las personas y convertir cualquier acción de esas personas en dinero, aunque ese control vaya totalmente en contra del bién común y destruya cultura en vez de crearla.

Lo mismo ocurre con los programas, y de hecho las leyes sobre derechos de autor en el software son más restrictivas que en el caso de la cultura. Por eso muchos no usamos programas de Microsoft (no quieres que los copie; pues no los copiaré) ni de Apple (no quieres que los copie; pues no los copiaré) ni de muchas otras empresas. Usamos programas libres de personas o empresas que no nos prohiben usar esos programas libremente.

Y lo mismo ocurre con la música o las películas. No tengo ningún problema en comprar un disco, y el precio no me importa demasiado. Si el disco es caro pero me gusta mucho posiblemente lo compraré. Pero una vez comprado (disco, libro, lo que sea) quiero poder copiarlo, fotocopiarlo, distribuirlo entre mis amigos, etc, etc. Porque si no puedo hacerlo no me interesa ni regalado.

Existen alternativas libres como Jamendo o Magnatune, o podemos encontrar cultura libre en abundancia usando el catálogo de Creative Commons, con lo cual yo me digo, si no quieren que copiemos sus obras privativas… pues no lo hagamos.

Categories: Uncategorized Tags:

La recursividad “infinita” de Lisp

February 11th, 2011 No comments

La posibilidad de aprovechar toda la potencia de la recursividad es uno de los puntos fuertes (hay tantos) de los lenguajes funcionales y aunque voy a hablar de Lisp, ya que es el lenguaje funcional que mejor conozco, lo que voy a decir es aplicable a Scheme, Haskell, etc.

Para la explicación usaré el típico ejemplo de calcular el factorial de un número. El código en Lisp para realizar el cálculo (que nadie se asuste con los paréntesis) sería:

(defun factorial (n)
   (cond ((= n 1) 1)
         (t (* n (factorial (- n 1))))))

La misma función escrita en C sería la siguiente:

int factorial (int n) {
    if (n == 1)
        return 1;
    else
        return n * factorial (n - 1);
}

Sin embargo, esta forma de calcular el factorial de un número suele encontrarse únicamente en libros de programación para explicar el mecanismo de la recursividad. Cualquier programador sabe que cada vez que llamamos a una función el sistema operativo almacena en la pila el estado actual del programa para recuperarlo después cuando vuelva de la llamada a la función, con lo que si queremos calcular el factorial de un número muy grande corremos el riesgo de sufrir un desbordamiento de pila con efectos un tanto desagradables para nuestro programa.

Por esa razón los programadores de C calcularían el factorial de la siguiente forma:

int factorial (int n) {
    int r = 1, n2 = n;

    while (n2 > 1) {
        r = r * n2;
        n2--;
    }

    return r;
}

Ahora evitamos el problema del desbordamiento de pila y el programa, al ser iterativo, es mucho más rápido, aunque el código no resulta tan fácil de leer ni tan lógico como la versión recursiva.

Pero, en contra de lo que podría esperarse, el código en Lisp funciona igual de rápido que el código en C y además, podemos calcular factoriales de números inmensos sin que la pila se inmute. ¿Cómo es posible? Es posible gracias al trabajo del intérprete de Lisp y a una técnica conocida como Tail Recursion (recursividad por cola).

Lo que hace el intérprete de Lisp es sustituir nuestra función por esta otra:

(defun factorial (n &optional (r 1))
    (cond ((= n 1) r)
          (t (factorial (- n 1) (* r n)))))

Si nos fijamos bien veremos que la nueva función no necesita volver sobre sus pasos para calcular el factorial, sino que va calculando el resultado antes de la llamada recursiva. Esto permite que no sea necesario usar la pila, ya que no hace falta regresar a través de todas las llamadas, sino que la última es la que devolverá el resultado directamente.

Si bien es cierto que muchos compiladores de lenguajes imperativos como C tienen en cuenta este tipo de funciones y las tratan como funciones iterativas, los intérpretes y compiladores de lenguajes funcionales lo hacen de forma implícita, lo que permite un código mucho más claro y legible.

Categories: Uncategorized Tags: