Archivo para enero de 2011

Se llevan un grifo

Si piensas que sin vacunar a tu hijo su salud va a ser buena, es como ir de excursión y llevarte un grifo en vez de una cantimplora.

En una carta a unos padres que han decidido no vacunar a sus hijos.

Irma la dulce

Portada de 'Irma la dulce'

Irma la dulce es una película de 1963 protagonizada por Jack Lemmon y Shirley MacLaine y dirigida por Billy Wilder que cuenta las aventuras y desventuras de un gendarme francés que se enamora de una prostituta.

La acción se centra principalmente en el barrio de Les Halles de París donde se consigue, con unas diez ubicaciones diferentes, tener una película entretenida y, sobre todo, divertida, con un humor y una situaciones surrealistas muy diferentes a las que nos tienen acostumbrados las películas de ahora (no por ello son mejores o peores; son diferentes).

Tengo que decir que, aunque quizás el hacia la mitad se hacía un poco larga, tanto el principio como el final (sobre todo el final) es de lo más divertido que hay. De hecho hay una escena cerca del final y las escena final que merecen mención, aunque aquí no las describa por no desvelar sus divertidas situaciones.

A pesar de su duración (2 h 17 m) y de que hacia la mitad se me hizo un poco larga, en la escala MPSO le doy un 8.

La lógica del fumador

La lógica del fumador

Gran viñeta de Juanelo sobre la lógica de algunos fumadores ante la reciente aprobación de la Ley antitabaco.

Solucionar la espera infinita a la acción del usuario en GRUB2 cuando la máquina no se apaga correctamente

Hace tiempo que comenté el problema de que GRUB2 se quedaba esperando la respuesta del usuario al hibernar Ubuntu.

Pues ese problema se produce en más ocasiones y, una de ellas, es que cuando el sistema operativo no se apaga correctamente, es decir, no se apaga con reboot o poweroff sino que hay un fallo en el sistema operativo o hay un fallo de corriente, al reiniciar de nuevo, a GRUB2 le da por esperar hasta que el usuario seleccione una de las entradas de su lista de sistemas operativos.

Eso no está nada mal cuando es un ordenador de escritorio, así puede saber que ha ocurrido un error y entrar en el modo seguro para solucionarlo. El problema viene cuando el sistema operativo se está ejecutando en un servidor que no tiene ni pantalla ni teclado. Te puedes tirar un día intentando conectar por ssh probando diferentes IP y diferentes cables hasta que, por fin, te decides ir a la sala donde está y poner un monitor y un teclado para ver, con entre sorpresa y cabreo, que llevas una jornada intentando conectar con GRUB porque está esperando a que algún usuario compasivo presione Enter.

Este es un error de GRUB, no es que haya una configuración rara por ahí, así está programado en sus scripts. Existe una variable de este cargador de arranque que se llama recordfail que es la que se fija cuando se apaga correctamente y que es la que hace esperar cuando hay un error.

Para intentar aplicar un parche para solucionarlo hay que editar dos archivos. El primero es el archivo /etc/default/grub. En ese archivo hay que comentar (con una almohadilla como primer carácter de la línea: #) la línea que contiene el texto GRUB_HIDDEN_TIMEOUT="0". Además, si estás en un servidor, también se pueden quitar los parámetros por defecto del kernel, quiet splash, para que salga la información de inicio en lugar de la agradable imagen de inicio del sistema.

El segundo archivo que hay que modificar es el archivo /etc/grub.d/00_header. Hay que modificar la función make_timeout() (a partir de la línea 238, más o menos) comentando (también con una almohadilla como primer carácter de la línea: #) la línea que pone set timeout=-1 y añadiendo, justo debajo, la línea set timeout=15, donde 15 es el número de segundos que esperará GRUB a iniciar en caso de error (en caso de que recordfail esté a 1). Y digo comentar en vez de sustituir la línea para que, en caso de que no funcione, se pueda volver sin problemas a la versión anterior de este archivo.

Con estos cambios conseguiremos que aunque el equipo no se apague correctamente, sí se inicie correctamente cuando vuelva la luz (o cuando se inicie de nuevo). Y, en caso de que el fallo sea de hardware o de software, no os preocupéis que el propio Linux ya indicará información sobre el error.

Mi pequeña opinión (y cabreo) sobre la «Ley Sinde»

Bueno, como ya se ha visto, los señores del PP y PSOE han aprobado, a expensas de lo que piense la mayoría de la ciudadanía (que no los internautas), la tristemente famosa Ley Sinde. Y lo han hecho por sus cojones, así, sin más.

Las consecuencias que tendrá esta ley, según mi opinión, serán:

A nivel de descargas: absolutamente ninguna. ¡Oh, vaya!, no se si se ha entendido: ninguna. Porque hay muchas lagunas, muchas cosas por decidir que no son obvias. Como dice Ricardo Galli (texto largo), ¿qué es un enlace? ¿Qué pasa si sólo está el texto del enlace? ¿Y si no lleva el protocolo? Vamos, que harán lo que les salga de las gónadas en nombre de “los derechos de autor”.

Y los dueños de las páginas, con llevarse su hosting a otros países solucionado. Porque si no es así nos cierran Google (alguien me ha dicho que en Google se encuentran enlaces a torrents, pero yo ni idea). Y aquí la carcajada que, con el siguiente párrafo, será ira.

A nivel de libertad de expresión: demasiado. Porque en nombre de esta supuesta infracción de los derechos de autor podrán cerrar cualquier Web en la que encuentren un sólo enlace que pueda ser lesivo para algún mal llamado creador. Así de simple.

La sección podrá adoptar las medidas para que se interrumpa la prestación de un servicio de la sociedad de la información que vulnere derechos de propiedad intelectual o para retirar los contenidos que vulneren los citados derechos siempre que el prestador, directa o indirectamente, actúe con ánimo de lucro o haya causado o sea susceptible de causar un daño patrimonial.

Y esto nada tiene que ver con los creadores artistas y, ni siquiera, con el dinero (que es única y exclusivamente la razón por la que se hace todo esto: dinero). Esto ya toca la libertad de expresión. Y por ahí no pasamos.

Dice Rajoy que es para “proteger los derechos fundamentales y los derechos de autor”. Mis derechos fundamentales, ese de la libertad de expresión, ese de la copia privada sin ánimo de lucro, no los protege. Y yo, como autor, tampoco. Pero ese es otro tema. Citando a Julio Alonso, ha fallado dos de dos.

La solución es muy, muy, muy simple: cambiar el modelo de negocio. ¿Que no es tan simple? Quizás si todo el dinero que han invertido malgastado en poner a un topo en el gobierno, hacer las campañas mediáticas donde insultan a sus clientes llamándoles piratas, crear miedo y desconcierto entre la población (conocido como FUD en inglés), quizás si todo ese dinero lo hubieran invertido en I+D, hoy no habría descargas, porque si hay algo que pueda competir con lo gratis es lo sencillo.

Si yo, desde mi TV, desde el mando de mi TV, pudiese elegir y comprar, por un precio módico (una película, en tu casa, por más de 3 € ya sería cara; que les entre bien en la cabeza, mi casa no es el cine) la película que en ese preciso momento quiero ver ¿en serio creéis que me voy a molestar en encender el ordenador, buscar el enlace, ponerlo a descargar, esperar (con estas conexiones de ADSL un par de días), pasarlo al disco duro y verlo en la TV? En serio, mi tiempo vale mucho más que 3 €.

Señores pertenecientes a la industria del entretenimiento, que no creadores artistas, estáis empresarialmente muertos, pero aún no lo sabéis. Yo que vosotros me pondría las pilas y dejaría de legislar en contra de quienes os damos de comer. Pero esto es sólo un consejo. Es el tiempo quién os pondrá en vuestro sitio.

Actualización 26/1/2011: Muy interesante y didáctico el artículo de El Mundo donde se resume qué es y cómo actúa la Ley Sinde.

1000

Esta es la entrada número 1000 de este blog. Y sólo la publico para decir que es la entrada número 1000 después de 4 años, 11 meses y 9 días.

Antes de esta hay 999 entradas en las que hablo de informática, de alguna paranoia y, sobre todo, de cosas de las que no tengo ni idea. Pero, oye, es mi blog y me… eso.

De esas 999 entradas cuelgan 1755 comentarios, a parte de los más de 17 000 que ha bloqueado Akismet y de los más de 2500 que ha bloqueado Invisible Defender. Si es que si no fuera por tanto comentario no sería lo mismo… ¡Gracias spammers! ¡Ains!

Y después de casi cinco años sigo manteniendo a los mismos lectores de siempre, que debéis de ser unos 100 diferentes que venís cada segundo día a ver cuál es mi próxima diarrea mental. Di que a muchos os conozco personalmente y os tengo aleccionados… ;)

Y ya, que yo no tengo tanga verborrea como para poner más literatura (aunque me gustaría) así que, espero seguir con otras mil entradas… vamos, hasta que me canse, y espero que vosotros sigáis también ahí. Muchas gracias a todos.

Clases en C++ con constructores con parámetros variables (variadic functions)

Tanto C como C++ tienen la característica, mediante macros, de crear funciones con un número indefinido de argumentos. Esto es lo que se conoce como variadic functions.

Un ejemplo de una función en C con argumentos variables sería el siguiente:

#include <stdarg.h>

int
variadic_function(int arg_count,...) {
va_list arg_list;
va_start(arg_list,arg_count);
int i, sum;
for(i = 0; i < arg_count; i++) {
sum += va_arg(arg_list,int); // acciones con el argumento
}
return sum;
}

Para declarar una función que tenga un número indefinido de argumentos es necesario incluir los puntos suspensivos (…) como argumento, pero al menos debe tener uno que no sea indefinido, esto es, primero un argumento y, posteriormente, los puntos suspensivos. Esto es así porque en la función va_start() hay que pasarle, como segundo argumento, el nombre del último argumento conocido de la función. Si no tuviese al menos un argumento conocido no se podría pasar este argumento a la función va_start().

También se pueden crear métodos (funciones dentro de clases) que tengan la lista de argumentos variable, incluidos los constructores de las clases, de la forma:

class MyClass {
public:
MyClass(...);
};

Y dirán ustedes ¿y aquí por qué no se pone al menos un argumento como nos acabas de indicar?

Y yo voy a responder con otra pregunta: ¿qué es lo que te enseñan el primer día de curso de programación orientada a objetos sobre los métodos de una clase? Que los métodos no estáticos de una clase tienen un argumento implícito que es un puntero a la instancia de dicha clase. El famoso puntero this en lenguajes como C++, Java, D y alguno que otro más.

Y como este argumento es el primero del método, se puede pasar sin problemas como segundo argumento de la función va_start() para indicar que es el último definido de la lista. La implementación sería, más o menos, así:

#include <cstdarg>

using namespace std;

#include "MyClass.hpp"

MyClass::MyClass(...) {
int size = X; // el tamaño lo tenemos que tener especificado de alguna forma
int sum = 0;
va_list arg_list;
va_start(arg_list,this);
for(int i = 0; i < size; i++) {
sum += va_arg(arg_list,int);
}
va_end(arg_list);
}

Esto de los argumentos indefinidos en C y C++ es una de las chapuzas que hay para tener esta funcionalidad ya que, en su mayoría, se hace con macros (aunque están implementadas de forma interna al compilador).

Hasta que no tengamos el estándar C++0x (el nuevo estándar de C++ que supongo que ya quedará poco para que salga definitivamente) no tendremos esta característica incluida en el lenguaje. Incluso se ha ampliado a parámetros variables en las plantillas (variadic templates), con lo que podremos tener tuplas de n elementos de distinto tipo. Pero, de momento, nos conformaremos ;) .

El papel

Fue la Revolución Industrial, con su lucha contra el analfabetismo, y la fabricación de papel barato lo que permitió la rápida propagación de ideas a través de la prensa y los libros. Es 400 años después de Gutenberg cuando se puede decir que la sociedad lee masivamente.

Jesús Encinar, CEO de idealista.com, en un texto acerca de la invención de la imprenta y del papel.

Noche y día

Carátula de 'Noche y día'

Si hay que busco en una película es que me entretenga. Sólo eso, no pido más: entretenimiento. Y es por eso que esta película, Noche y día, cumple a la perfección… excepto por un pequeño detalle.

La película narra las andanzas de un agente secreto (Tom Cruise) que tiene que proteger un aparato de nueva tecnología para que no caiga en manos de “los malos” (en este caso españoles) para lo que cuenta con la ayuda de una compañera elegida al azar que no sabe nada del tema (Cameron Diaz).

A lo largo de la película os encontraréis con multitud de acción y efectos especiales, muy al estilo de las películas de Tom Cruise. Alguna fantasmada que otra pero muy divertidas. Además, por una vez, tiene unos diálogos muy graciosos que se salen del típico rifirrafe sin sentido entre el bueno y el malo.

Y, hablando de malos españoles en España, ese “pequeño detalle” erróneo de la película (no sigas leyendo este párrafo si quieres descubrirlo por ti mismo) es que… nos han puesto los San Fermines en Sevilla. Sí, ¡¡en Sevilla!! ¿Es que Jordi Moyá, el español malo, no fue capaz de decirles que ahí no eran? Buf…

Bueno, el caso es que, como entretenimiento (tampoco busquéis más), en la escala MPSO le doy un 6,9.

Causa y efecto

No hacen ciencia los países ricos, sino que son ricos los países que hacen ciencia.

Vladimir de Semir (1948), matemático y periodista científico.

Leyendo sobre la rentabilidad de la divulgación científica.

La importancia de divulgar la ciencia

Vivimos en el seno de una sociedad que depende profundamente de la ciencia y la tecnología y en la que nadie sabe nada acerca de esto, lo que constituye una fórmula segura de desastre.

Carl Sagan (1934 – 1996), astrónomo y divulgador científico.

Desarrollar librerías en linux usando otras librerías (y sus curiosos efectos)

Después del pequeño tostón del otro día donde se comentaba la ruta de las librerías en Linux, hoy toca comentar el gran tostón de cómo se desarrollan librerías que usen otras librerías y varios efectos durante el enlazado. Si no estáis muy interesados en el desarrollo de librerías en Linux no sigáis leyendo porque quizás me odiéis. Y si sí desarrolláis librerías… bueno, quizás tampoco deberíais seguir… quedáis avisados.

Lo primero, una descripción rápida de como programar una libraría en Linux:

Creas el archivo de código fuente, por ejemplo mylib.cpp, para luego compilarlo con la opción del compilador de generar código independiente de la posición (PIC):

$ g++ -Wall -fPIC -c mylib.cpp

Luego enlazas todos los archivos objeto resultantes (*.o) en el binario de la librería indicándole al linker, además, el nombre de la librería (soname):

$ g++ -shared -Wl,soname,libmylib.so.0 -o libmylib.so.0.1 *.o

Una vez hecho esto se puede instalar la librería en algún directorio como /usr/local/lib u /opt/lib, aunque no es necesario para hacer estas pruebas.

Para usar la librería, basta con crear un programa, por ejemplo myprog.cpp, y enlazar esta librería en él. Eso sí, no os olvidéis de indicarle al compilador dónde están los archivos de cabecera (con la opción -I) y de exportar la variable LD_LIBRARY_PATH indicando el directorio de vuestra librería (como vimos el otro día):

$ g++ -I/path/to/mylib/include -o myprog -lmylib myprog.cpp

Una vez tenemos la librería y nuestro programa que la usa vamos con los curiosos efectos:

En el caso de que nuestra librería use otra librería de forma interna, a la hora de compilar es necesario indicarle donde están los archivos de cabecera de la librería a usar (opción -I) pero no es necesario indicarle, a la hora de enlazar, la librería con la que enlazar:

$ g++ -Wall -fPIC -I/path/to/otherlib/include -c mylib.cpp
$ g++ -shared -Wl,soname,libmylib.so.0 -lotherlib -o libmylib.so.0.1 *.o

A la hora de compilar nuestro programa con nuestra librería enlazada de la forma anterior, es necesario que enlacemos nuestro programa a la otra librería, sino ni siquiera enlazará porque no se pueden resolver los símbolos de otherlib que usa mylib. Por ello nuestro programa se compilaría:

$ g++ -o myprog -lmylib -lotherlib myprog.cpp

En caso de enlazar mylib con otherlib (usando la opción -lotherlib antes comentada), no sería necesario enlazar myprog con otherlib. Resumiendo este tostón incomprensible: hay que enlazar nuestro programa con todas las librerías que use y todas las que usen éstas y no lo estén ya en las mismas, aunque siempre es mejor enlazar cada cosa con lo que utiliza.

Un ejemplo:

  • Compilo mylib sin enlazar con otherlib:
    • Compilo myprog enlazando a mylib: error porque no enlaza con otherlib.
    • Compilo myprog enlazando a mylib y otherlib: todo correcto.
  • Compilo mylib enlazando con otherlib:
    • Compilo myprog enlazando a mylib: todo correcto porque, aunque hace uso de otherlib, esta ya está enlazada en mylib.
    • Compilo myprog enlazando a mylib y otherlib: todo correcto aunque innecesario porque otherlib ya está enlazada con mylib.

Buf… bueno, yo lo entiendo porque me ha pasado y he investigado un rato para resolverlo, pero visto aquí, así, sin anestesia… pues cuesta. Pero bueno, aquí queda por si en un futuro se me olvida. Y para quién le sea útil, por supuesto.

Un chiste de romanos

Lo había escuchado hace tiempo y se me había olvidado hasta que me lo recordó un comentario que leí por ahí, y es que estos chistes hay que recordarlos que son muuu buenos:

Un legionario romano le dice a otro:

— Oye, ¿cómo se llamaba la serie esta de televisión que venían unos extraterrestres que tenían forma de lagartos y comian ratones?
— V
— ¡Por el culo te la hinco!

Si es que me parto yo sólo :D .

Esto es un debate

Desde el blog Las penas del Agente Smith tenemos un diagrama adaptado de Pharyngula para seguir unas pautas a la hora de debatir sobre un tema.

Sí, sí, habéis leído bien: unas pautas para saber debatir sin incurrir en descalificaciones ni en posturas inamovibles o la utilización de argumentos falaces o no verificados ni verificables:

Diagrama de cómo debatir

Es bastante simple, sólo hay que seguir ciertas normas para intercambiar ideas entre seres humanos racionales… porque lo somos ¿no?

Quizás sea buen momento para imprimirlo y llevarlo siempre encima… ;)

La España fantasma

La España fantasma

Un mes después de hacer el pedido a BuBok de «La España fantasma», el libro solidario de Kurioso, me ha llegado, por fin, mi ejemplar.

Después de una hojeada rápida he de decir que la presentación es impecable, con una calidad de la impresión y la encuadernación que nada tiene que envidiar a otro tipo de publicaciones que no sean bajo demanda.

Las fotografías también son muy buenas, mostrando lo vacías, en la mayoría de los casos, que estaban las calles aquel 11 de julio de 2010, además de otras cuantas imágenes de quietud del país debido al evento.

Ahora a leer los pequeños artículos de la gente que, desinteresadamente, ha colaborado para la realización de este libro.

Origen (Inception)

Carátula de 'Origen' (Inception)

Origen (Inception en inglés) es una película de 2010 dirigida por Christopher Nolan y protagonizada por Leonardo DiCaprio, entre otros, que trata de que, mediante una máquina, se pueden extraer o insertar ideas o pensamientos en sujetos a través de los sueños. Y hasta aquí puedo leer…

En principio esta película está muy recomendada y es quizás por eso por lo que tenía grandes expectativas. De hecho, en FilmAffinity le dan más de un ocho, algo bastante extraño ya que los usuarios solemos puntuar por lo bajo. Aún así las dos horas y media de película se hacen bastante largas, sobre todo la primera hora donde es sólo la introducción y es en la siguiente hora y media donde se resuelve todo.

El concepto de la película me recordó bastante a Matrix; sí, en serio; en Origen se construyen realidades a partir de sueños de otras personas mientras que en Matrix eran realidades a partir de las inducciones de una máquina, pero el concepto de realidades alternativas es el mismo en ambas. La diferencia es que aquí todo lo hacen las personas y, además, se pueden construir realidades dentro de realidades, esto es, sueños dentro de sueños. Algo complicado de llevar al cine pero que en esta película se identifica bastante bien; sólo hay un par de momentos en que no sabes si están en la realidad o en qué nivel de sueño.

Después tiene acción, bastante acción. ¿Dónde se ha visto una película americana de grandes productoras que no la tenga? Pues esta no es la excepción. Pero está bien justificada. Además, se explica al principio.

En cuanto a los efectos especiales son bastante… genéricos. A mi entender hoy en día los efectos especiales no tienen demasiado mérito ya que todos se hacen por ordenador, ya no existen los artesanos que los hacían a mano. Pero ojo, que se haga todo por ordenador no desmerece en absoluto la gran labor que realizan los diseñadores gráficos y modeladores en 3D de software. A lo que me refiero es que todo se hace con la misma herramienta; ya no hace falta ser un artista multidisciplinar para los efectos especiales.

El argumento está bien llevado. Realmente es bastante lineal y es por esto, quizás, por lo que se hace un poco aburrida… lenta, más bien. La linealidad se pierde en un par de puntos pero que no dan lugar a mayor complicación que una gran exclamación del tipo “¡Ah!, por eso…”.

En mi MPSO le doy un 7,8 ya que, aunque me pareció un poco lenta, tengo que decir que es una historia innovadora dentro del cine que sale como churros de hoy en día y bastante bien llevada a la práctica. Es una película que recomiendo pero sin demasiadas expectativas, sólo con ganas de entretenerse un rato.