Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

miércoles, 12 de octubre de 2011

Underclocking en Granada


Overclocking es un término ampliamente difundido y reconocido por muchos usuarios de la informática, incluso por aquellos que no lo ponen nunca en práctica. Consiste, como sabréis, en aumentar la frecuencia de reloj de un dispositivo electrónico para conseguir una mayor velocidad. Con ello se incrementa el consumo de energía y, por consiguiente, requerirá una refrigeración mayor.

Frente al overclocking podemos situar el underclocking. Conocido el primero es fácil inferir en qué consistirá el segundo: en una bajada de la velocidad de reloj para reducir el consumo energético y el calentamiento del dispositivo, consiguiendo así una mayor estabilidad y que se prolongue su vida útil.

Al igual que durante el proceso de overclocking se llevarán ajustes tanto a la frecuencia del reloj de un procesador como a su voltaje, durante el underclocking se irán reduciendo paulatinamente la frecuencia de reloj y el voltaje necesarios para su funcionamiento. El ajuste de voltaje en este caso recibe el nombre de undervolting.

Aunque podría parecer un contrasentido buscar de forma activa una reducción en la velocidad de procesado de los componentes de nuestros equipos, lo cierto es que es fácil encontrar varios usos al underclocking. Entre ellos podemos citar:
  • La disminución del consumo eléctrico de los dispositivos redunda en un incremento del tiempo de uso de la batería cuando se trata de un dispositivo portátil.
  • Es posible llegar a bajar tanto la frecuencia de reloj que resultaría útil para usar en el equipo software antiguo que se ejecutaría demasiado rápido en los equipos modernos (esto es posible hacerlo también vía software, ciertamente).
  • Podemos hacer uso del equipo en ambientes más silenciosos.
Si os resulta interesante el concepto y estáis en la Campus Party Milenio de Granada durante el próximo fin de semana, seguro que os interesa la charla sobre esta disciplina que auna economía y eficiencia energética con un uso responsable de los recursos informáticos. Desde el Área de Ciencia de la Campus, de la mano de Hard-h2o y con la colaboración de la Agrupación de Voluntariado Ambiental de Santa Fe, AUCA, Rocío Serrano y un servidor aportaremos nuestro punto de vista sobre esta particular forma de usar los ordenadores, incluyendo un taller realizado por expertos del overclocking.

lunes, 10 de octubre de 2011

D.E.P. Dennis Ritchie


# include <stdio.h>

int main(void)
{
printf("Bye Dennis. We'll miss you :_( \n");
return 0;
}

jueves, 6 de octubre de 2011

D.E.P., Steve Jobs

"Si hoy fuera el último día de mi vida, ¿haría lo que voy a hacer? No hay razón para no seguir... Nadie quiere morir, incluso los que saben que van a ir al cielo. Pero hay que renovar, lo nuevo sustituye a lo viejo y así debe ser (...) A veces la vida te golpea con un ladridllo. No perdáis la fe. Estoy convencido de que la única cosa que me ha mantenido en pie ha sido amar lo que hago. Tenéis que encontrar lo que amáis. Vuestro trabajo es una parte muy importante en la vida, y la única forma de queda satisfechos es creer que estáis haciendo algo grande. Amad lo que hacéis".

Actualización a 26/10/2011: Tras las declaraciones de Stallman (tan acertadas en el fondo como desafortunadas en la forma, a mi parecer) enlazo una entrada del blog de J.J. Merelo, "Atalaya: desde la tela de araña" sobre esta cuestión.

domingo, 2 de octubre de 2011

Mi lista de libros para primero de… Informática

Leyendo el "Diario de un copépodo" hace unos días encontré una propuesta de libros para primero de Biología de lo más interesante. Su entrada partía de una idea sugerida desde "Oteando desde proa", cuya lista de libros para primero de Física también me ha encantado. De hecho, de ambos he escogido al menos un libro para primero de Ciencias Ambientales (carrera que estoy cursando ahora por la UNED): Física básica, de Antonio Fernández-Rañada, y Ecological and General Systems, de Howard T. Odum.

Al leer las entradas de sus blogs pensé en la carrera de Informática y en algunos libros y manuales que considero imprescindibles para un alumno de primero. Como ellos, me he centrado en pocos títulos y en libros que pueden servir de apoyo y referencia durante toda la carrera, aunque puedan interesar particularmente como acercamiento a las materias que se tratarán a lo largo de la misma.

El primero de los escogidos no es otro que Conferencias sobre computación, de Richard Feynman. El archiconocido físico y premio Nobel, que tanto aportara en su principal campo de investigación, dio un impulso a la computación mediante su modelo de computadora cuántica publicado a principios de los años 80 del pasado siglo. Su libro Conferencias sobre computación recoge, no obstante, los principios en que se basa la Informática, y resulta tan claro y didáctico como en sus obras sobre Física (Seis piezas fáciles, por ejemplo, es imprescindible). El libro comprende siete capítulos y nos enseña la Física subyacente en los circuitos, en qué consisten las máquinas de Turing, la teoría de la información y el teorema de Shannon, vital para la codificación de mensajes. Aunque en nuestra rama del conocimiento todo avanza a una velocidad vertiginosa, el ordenador con el que lees esta entrada sigue estando basado en la arquitectura Von Neumann al igual que el antiguo ENIAC o, mucho más recientemente, los queridos ordenadores e 8 bits.

La algoritmia es la base de la programación y vas a tener que enfrentarte a ella durante toda tu carrera (académica y profesional, si te dedicas al desarrollo de software). Aunque existen buenos libros, algunos de ellos traducidos al castellano, voy a optar por un título que está disponible en inglés y que, además, es posible descargar gratuitamente de la página de uno de los autores. Se trata de Algorithms, del profesor Christos Papadimitriou, Sanjoy Dasgupta y Umesh Vazirani. Abarca múltiples acercamientos a la resolución de problemas y una aproximación a la clase de complejidad NP-completo.

Una de las materias en las que, a mi parecer, menos se profundiza en el sistema académico actual es la Ingeniería del software. Queremos que nuestra formación sea la del ingeniero y se nos vea como a tales, pero después en el mercado laboral es difícil encontrar empresas donde se trabaje con metodologías adecuadas. Al menos en España, claro. Afortunadamente esto va ocurriendo en cada vez menos ocasiones, pero no viene mal tener una buena base de Ingeniería del software y hacerla crecer con las últimas metodologías (programación extrema, desarrollos ágiles, TDD, etcétera). Un clásico de la materia es el libro de Roger S. Pressman, Ingeniería del Software. De ahí podréis saltar a otras maravillas como The Pragmatic Programmer de Andrew Hunt y David Thomas. ;-)

Como no todo va a ser programar, un acercamiento a las redes no nos vendrá mal. No es una materia que se vea en los primeros años de la carrera pero, como pronto empezaremos a acercarnos a la misma a través de las asignaturas de sistemas operativos y similares, nunca está de más conocerla bien. Uno de los clásicos es el libro de Tanenbaum Redes de computadoras.

Por último, una de las grandes olvidadas de la titulación es la Seguridad. Resulta imprescindible, los sistemas informáticos son impensables sin ella y, sin embargo, apenas se ve de pasada en asignaturas de redes o mediante alguna optativa. Y ya que en primero veréis asignaturas como Álgebra o Matemáticas Discretas y no os dirán para qué pueden servir, os recomiendo acercaros al mundo de la criptografía y la seguridad a través de otro libro disponible gratuitamente en la red, este en español, que creo fundamental: el Libro Electrónico de Seguridad Informática y Criptografía de Jorge Ramió Aguirre.

¿Y vosotros? ¿Sin qué libros no concebís pasar por cualquiera de las carreras de Informática?

miércoles, 28 de septiembre de 2011

Nueva vuelta de tuerca a la privacidad en la nube.

Entrada publicada originariamente en el blog Lobosoft bajo el mismo título.

Quienes me conocen saben de mi escepticismo sobre la computación en la nube. No es que no me parezca un campo apasionante, que lo es, ni que reniegue de la ubicuidad de los datos y del software, pues la considero una configuración de sistemas informáticos válida e interesante hasta cierto punto y para determinados usos. Lo que no me gusta (ya no como profesional de la informática, sino como usuario de la misma) es que mis datos estén diseminados por el mundo y no sentirme dueño de mi software: que este sea única y exclusivamente un servicio (SaaS).

En lo personal he podido comprobar cómo personas cercanas a mí han sufrido problemas con la disponibilidad del servicio de aplicaciones en la nube y, aunque obviamente esto es algo que puede ocurrirnos con cualesquiera otros de cuantos están involucrados en el proceso, como el acceso a Internet por parte de nuestro proveedor, por ejemplo, lo cierto es que tener un plazo de entrega de un trabajo determinado y no poder llevarlo a cabo porque hay problemas con los servidores puede resultar algo exasperante. De cualquier forma, esto es soluble mediante replicación de servicios y una mejora de la confianza y la asistencia técnica de los mismos.


Sin embargo, que los datos se encuentren en la nube es una cuestión más delicada. ¿Qué empresa dejaría en un servidor remoto el detalle de sus operaciones contables? ¿Y los datos de sus clientes o trabajadores? ¿Almacenaríamos nuestro historial médico en un disco duro “virtual” accesible a través de Internet? ¿Quién nos asegura que los datos no serán robados, como ocurriera recientemente con las cuentas bancarias de usuarios de Sony? ¿Y que no serán usados por nuestra compañía para ofrecernos otros servicios –como publicidad personalizada– al más puro “estilo Google”?

Hasta hace poco, nadie podía asegurarnos que nuestros datos no pudieran ser robados, usados o alterados sin nuestro consentimiento y/o conocimiento. Sin embargo, esta noche leía con interés una noticia sobre un avance en la resolución de esta problemática llevado a cabo por la gente de Microsoft. Se trata de una implementación parcial de un sistema de cifrado homomórfico, en la que se permiten algunos cálculos básicos (sumas, multiplicaciones) que, no obstante, permitirán ser combinados para llevar a cabo operaciones más avanzadas, como funciones estadísticas del tipo del modelo logístico.

Este avance es importante ya que el cifrado homomórfico permitiría vislumbrar un futuro interesante para el almacenamiento de datos en la nube. Sin embargo, desde la publicación del artículo de Ronald L. Rivest en 1978 (On Data Banks And Privacy Homomorphisms) transcurrieron más de 30 años de debates hasta que se ofreció un posible escenario de resolución de un sistema de cifrado homomórfico completo. Fue en su tesis de doctorado, A Fully Homomorphic Encryption Scheme, donde Craig Gentry presentó un modelo matemático completamente funcional; con todo, la gran cantidad de cálculos necesarios para hacerlo funcionar llevaron al experto en seguridad Bruce Schneier a afirmar que transcurrirían al menos cuarenta años más hasta que pudiera ser llevado a la práctica un sistema así de complejo con el mismo rendimiento que uno que no use cifrado. Schneier llegó a sus conclusiones basándose en la ley de Moore y en los datos aportados por Gentry en un artículo acerca del cifrado homomórfico y el tiempo requerido para llevar a cabo las operaciones de búsqueda por parte de un hipotético Google que usase de este mecanismo de cifrado.

El funcionamiento básico del cifrado homomórfico es el siguiente: supongamos un esquema criptográfico con un sistema de cifrado simétrico o asimétrico donde tenemos dos funciones, C(x,k), que cifra el valor ‘x’ usando la clave ‘k’ y otra D(y,k) que descifra ‘y’ usando la clave ‘k’. Entonces podemos afirmar que

D(C(x,k),k) = x

Esto es así para cualquier sistema de cifrado. Se cumplirá que es homomórfico si además existe un conjunto de pares de funciones (F, G) tales que

D(F(C(x,k)) = G(x)

Las funciones F y G pueden ser o no la misma, pero dada F podemos saber G, y viceversa.

Como resultado de lo anterior, podemos llevar a cabo operaciones sobre los datos cifrados, sin descifrarlos, por lo que el proveedor de servicios no tiene la necesidad de almacenarlos en claro y únicamente nosotros, como clientes, tenemos acceso a los mismos sin cifrar.

¡Ay, qué feliz habría sido nuestro paso por la asignatura de matemática discreta si hubiéramos encontrado ejemplos así de prácticos en el primer año de carrera! ;)

A pesar de lo interesante del avance de Microsoft y sus aplicaciones prácticas en la nube, los esquemas de cifrado con homomorfismo parcial no son demasiado raros. Por ejemplo, uno que todos conoceréis es RSA, que es homomórfico respecto a la multiplicación. Dadas un par de claves pública y privada (K,k), para todo par de valores ‘x’ e ‘y’ se cumple que:

D(C(x*y,k),K) = x*y

Un posible escenario de uso del cifrado homomórfico podría ser el de una empresa que desee hacer uso de un servicio en la nube para almacenar datos de sus clientes. La explotación de una vulnerabilidad en el servidor podría exponer dichos datos al atacante en un sistema como los actuales y, si el servicio almacenase todos los datos cifrados como mejora de la seguridad, el acceso a los mismos sería demasiado penoso. Imaginemos que nuestra empresa desea realizar una consulta sobre sus datos de clientes para obtener aquellos residentes en una provincia determinada que hayan alcanzado un determinado volumen de compras. La consulta sobre la tabla de clientes requeriría ir descifrando cada una de las filas, comprobar si se cumplen las condiciones requeridas y devolverlo, o no, en función de ello. En un servidor que usase el cifrado homomórfico la consulta se haría sobre los datos cifrados directamente, devolviendo únicamente aquellos que se vieran afectados por la consulta y podrían ser descifrados en el propio equipo del cliente sin ser expuestos a “miradas ajenas” en ningún momento.

En resumen, se trata de un interesante avance en lo tocante a la seguridad y la privacidad en la nube, para evitar que esta devenga en nubarrón.

Para saber más:
El cuadro que ilustra la entrada es un óleo de J. M. William Turner, "Rain Cloud", y la camiseta la he encontrado en Nerdy T-Shirt.

martes, 30 de agosto de 2011

All Watched Over By Machines of Loving Grace




ALL WATCHED OVER BY MACHINES OF LOVING GRACE





I like to think (and
the sooner the better!)
of a cybernetic meadow
where mammals and computers
live together in mutually
programming harmony
like pure water
touching clear sky

I like to think
   (right now, please!)
of a cybernetic forest
filled with pines and electronics
where deer stroll peacefully
past computers as if they were flowers
with spinning blossoms.

I like to think
   (it has to be!)
of a cybernetic ecology
where we are free of our labors
and joined back to nature,
returned to our mammal
brothers and sisters,
and all watched over
by machines of loving grace.
    Me gusta pensar (¡y

cuanto antes, mejor!

en un prado cibernético

donde mamíferos y ordenadores

vivan juntos en mutua

armonía programada

como el agua pura

tocando el cielo despejado.



Me gusta pensar

     (¡ahora mismo, por favor!)

en un bosque cibernético

lleno de pinos y componentes electrónicos

donde los ciervos paseen tranquilos

entre las computadoras como si fueran flores

con pétalos que giran.



Me gusta pensar

    (¡tiene que ser!)

en una ecología cibernética

donde seamos liberados del trabajo

y volvamos a la naturaleza,

retornando a nuestros

hermanas y hermanos mamíferos,

vigilados todos

por las máquinas de amor y gracia. 





Richard Brautigan

lunes, 15 de agosto de 2011

Los dictadores benevolentes del lenguaje

Quality of implementation, however, is critically important in the satisfaction enjoyed by users of the language. It is the experiential difference between writing Ruby and JavaScript. The factor that, in my view, most affects this quality of implementation is the vision of the original creator. Where the vision is maintained by a single individual, quality thrives. Where committees determine features, quality declines inexorably: Each new release saps vitality from the language even as it appears to remedy past faults or provide new, awaited capabilities.
[...]
Benevolent dictators make decisions about the language in consultation with the community of users. They are notable for being willing to extend the spirit of the language by making hard decisions that large committees almost always eschew.
[...]
A similar benevolent dictatorship exists with C#. The language, as I have mentioned before, is remarkably well tended by a core group in Microsoft headed by Anders Hejlsberg. (Although there is an ECMA standard for C#, Microsoft is the reference implementation, and the company decides the new features.) The result is a language widely loved by its users (Miguel de Icaza: "It's a beautiful languages that is such a pleasure to program in") and admired by others. Lua, Ruby, D, and Perl are other successful instances of this model.

Leído en Dr. Dobb's. "In Praise of Benevolent Language Dictators", de Andrew Binstock.