Archivo para septiembre de 2010

Es una extensión

Internet es una extensión digital de la vida analógica, y [la desconexión] equivale a prohibirle a alguien leer, ver, escribir y hablar. Ni en las prisiones se llega a tanto.

Un comentario en Menéame sobre que Tim Berners-Lee dice que “desconectar a la gente de Internet es como enviarla a prisión”.

Discos duros tradicionales vs. discos duros SSD

Ya he comentado algo de los discos SSD, pero ahora quiero comparar sus características:

Disco duro normal Disco duro SSD
Capacidad 2 TB 160 GB
€/GB 0,7 €/GB 3 €/GB
Velocidad de transferencia mantenida 150 Mb/s (aprox.) 250 Mb/s (aprox.)
Latencia lectura aleatoria 8,5 ms 0,065 ms (65 µs)
Latencia escritura aleatoria 9,5 ms 0,085 ms (85 µs)
Consumo inactivo 6,39 W 0,075 W
Consumo activo 9,23 W 0,15 W
Tasa de errores de lectura 1 en 1014 bits 1 en 1016 bits

Que los discos duros SSD son el futuro no tiene discusión; y que serán, probablemente, los fabricantes de memorias en lugar de los actuales fabricantes de discos duros los que se lleven el gato al agua.

De hecho, como se puede apreciar en la tabla, de momento sólo el precio y la capacidad es lo que no hace a estos discos competitivos, mientras que cuanto más se avance en el tiempo, mejores capacidades y precios conseguiremos, con lo que o la tecnología actual da un salto de gigante en algún sentido (o bien en capacidades o bien en velocidades) o está avocada a la desaparición.

Yo ahora mismo ya me estoy planteando tener un disco duro SSD para el sistema y otro normal para datos. Y vosotros ¿qué opináis?

Llamadas a métodos protegidos desde clases externas en C++

Seguro que esta solución ya está implementada por ahí pero yo no la he encontrado.

Para ponernos en antecedentes, tenemos una clase Thread en C++ que representa hilos de ejecución. Esta clase tiene un método execute() que es el que realmente ejecuta el hilo. De esta se puede heredar para implementar dicho método y que este se ejecute en un hilo independiente. La clase Thread cuenta con métodos protegidos (protected) para que sólo los usen las clases derivadas.

Pero, además de derivar la clase Thread, esta clase tiene una clase anidada llamada Thread::Worker que también se puede derivar con la ventaja de que se pueden pasar muchas instancias de Thread::Worker a una sola instancia de la clase Thread para que las ejecute.

El problema surge cuando desde la clase Thread::Worker, al igual que desde las subclases de Thread, se desea acceder a los métodos protegidos (que, en teoría, son sólo para ayudar en la funcionalidad de las clases derivadas). Inicialmente esto no es posible ya que no se puede acceder a métodos protegidos de una clase si no es desde la propia clase o desde clases derivadas, no importa si son clases anidadas, a efectos de protección, son como clases externas.

Con algunas omisiones de código, la implementación de las clases es la siguiente:

/* Clase Thread (gestión de hilos) */

class Thread {
[...]
public:

/* Clase Worker (tareas que se ejecutan en los hilos) */

class Worker {
protected:
Thread * const getOwnerThread() const;
public:
virtual void execute();
[...]
};

private:
Worker* _worker;
[...]
protected:
bool isThreadRunning();
virtual void execute();
[...]
public:
Thread(Worker* worker) : _worker(worker) {
// Al añadir el Worker que asigna el hilo al que pertenece
_worker->_owner = this;
}
[...]
[...]
};

/* Clase MyThread derivada de Thread */

class MyThread : public Thread {
protected:
virtual void execute() {
while(isThreadRunning()) { // llamada correcta porque esta función es protegida en la clase padre
// hacer las cosas del hilo
}
}
};

/* Clase MyWorker derivada de Thread::Worker */

class MyWorker : public Thread::Worker {
protected:
virtual void execute() {
while(getOwnerThread()->isThreadRunning()) { // llamada incorrecta porque esta función es protegida en la clase Thread, que no es la clase padre
// hacer las cosas del hilo
}
}
}

/* Función de entrada de la aplicación */

int
main() {
MyThread* mt = new MyThread(); // correcto
Thread* t = new Thread(new MyWorker()); // incorrecto, no se pueden llamar a funciones protegidas desde fuera de la clase
return 0;
}

La funcionalidad deseada es que la clase Thread::Worker se comporte como la clase Thread cuando se hacen clases derivadas de ella, para poder usar la funcionalidad de gestión de la clase Thread desde la clase Thread::Worker (las funciones protegidas).

Pero al compilador no le gusta que se llamen funciones protegidas desde clases externas aunque sean anidadas.

La solución pasa por crear un puntero a método en la clase anidada que sea asignado a la función que hay que ejecutar. Cuando la instancia de la clase Thread::Worker es añadida a la instancia de la clase Thread, esta última asigna las direcciones de memoria de sus métodos a las variables internas de la clase Thread::Worker, con lo que una llamada mediante dichos punteros funcionará sin problemas y ejecutará el método protegido de la clase Thread desde la clase externa Thread::Worker.

La implementación sería, más o menos de la siguiente forma:

class Thread {
[...]
public:
typedef bool (Thread::*ThreadMethod1)();

class Worker {
[...]
private:
ThreadMethod1 _isThreadRunning;
protected:
bool isThreadRunning() {
return (getOwnerThread()->*_isThreadRunning)();
}
[...]
};

Thread(Worker* worker) : _worker(worker) {
_worker->_owner = this;
_worker->_isThreadRunning = &Thread::isThreadRunning;
}

[...]
}

Con esto se consigue que la clase Thread::Worker se comporte, a efectos de derivación de clases, como si se derivase de la clase Thread. Hay que tener en cuenta que las clases derivadas de la clase Thread::Worker siempre se tienen que añadir a una instancia de la clase Thread para todo funcione correctamente.

Como es bastante difícil interpretar código fuente desde esta lectura, he preparado una pequeña aplicación en C++ para mostrar el funcionamiento de este tipo de solución.

Espero que esto sirva para alguien a parte de mi. Y si lo encontráis por algún otro sitio me lo comentáis, porque como he dicho al principio, seguro que no soy el primero en hacerlo.

Parking barato

Tarifas de parking

Pues baratito que nos sale el parking, oiga.

Para ser exactos, según reza el cartel, sale a 0,022 céntimos de euro por minuto, esto es, a 0,00022 €/minuto. Vamos, que la hora te cuesta poco más de un céntimo de euro y puedes estar las ocho horas laborables por menos de once céntimos.

Pero me da a mi que no era eso precisamente lo que querían poner: ¿no será, quizás, pienso yo, que lo que debería poner el cartel sea «0,022 €/min»?

Lo curioso es que creo que todavía nadie se ha dado cuenta de ello, porque todavía no han cambiado el cartel en cuestión (pues como mínimo lleva un año, aunque supongo que más).

Sería gracioso ir a pagar lo que corresponde según el anuncio (no se si es vinculante o no) y ponerse testarudo, además, con toda la razón. A ver quien es el primero que lo hace :P .

La evolución de Bender

The evolution of bending unit 22.

Muy buena esta caricatura de la evolución de Bender.

La encontré como avatar de un usuario de un foro de programación pero no he encontrado el autor original (cada Web que la mostraba ponía su propio logo). Sea quién sea, muchas gracias, es muy bueno :P .

Efecto Dunning-Kruger

El efecto Dunning-Kruger es un fenómeno psicológico según el cual las personas con escaso conocimiento tienden sistemáticamente a pensar que saben mucho más de lo que saben y a considerarse más inteligentes que otras personas más preparadas.

Según un estudio de los profesores Kruger y Dunning:

  • Los estudiantes más brillantes, muy superiores a sus compañeros, estimaron que estaban por debajo.
  • Los estudiantes mediocres se consideraron por encima de la media.
  • Los estudiantes rematadamente malos se mostraron convencidos de estar entre los mejores: de hecho, cuanto más inútil era el individuo, más seguro estaba de que hacía las cosas bien.

En resumen: los más incompetentes sufrían un doble agravio: “no sólo llegan a conclusiones erróneas y toman decisiones desafortunadas, sino que su incompetencia les impide darse cuenta de ello”.

Lo vi en Fogonazos y es bien antiguo ya, incluso comentado aquí. Pero no ha dejado de recordarme a unas cuantas personas… por desgracia.

Ley de Meskien

Ley de Meskien: Nunca hay tiempo para hacer un buen trabajo, pero siempre hay tiempo para repetirlo.

De las Leyes de Murphy para trabajadores.

Videojuegos y nativos digitales

Los jóvenes a los que se les permite jugar con videojuegos en los que deben atender numerosos factores aprenden más rápidamente que los demás a distinguir lo esencial de lo importante, a fijarse en lo que de verdad cuenta y a prescindir de lo secundario… Las consolas hacen esto a la carta: lo llaman “atención visual selectiva”… aprenden probando –acertando unas veces y equivocándose otras– a desarrollar estrategias para salvar obstáculos… Los especialistas lo califican de “conciencia situacional”, que a lo largo de los últimos años ha hecho que los pedagogos y filósofos urdieran la “estrategia de la innovación multidisciplinar”. Hoy es imposible innovar sin recurrir a la multidisciplinariedad y es imposible familiarizarse con ella sin videojuegos.

Eduard Punset, jurista, escritor, economista y divulgador científico español.

Yo lo vi en Vida Extra, un blog dedicado a videojuegos.

Es privado pero público

[...] un centro comercial es un recinto privado que pertenece a una empresa, pero mientras está abierto al público y no se requiera identificación para entrar, tiene la condición de recinto público.

Pequeña aclaración sobre recintos privados que se comportan como públicos hecha en una interesante entrada sobre si puedo, o no, sacar fotos en recintos privados y públicos.

Más sobre pantallas electrónicas

Bueno, más que pantallas, papel electrónico.

Continuando con el futuro de las pantallas de el otro día, hoy tenemos una noticia quizás mejor: el papel electrónico de Sony.

Papel electrónico de Sony

Y es papel con todas las características, vamos, que muestra texto e imágenes y es flexible (no mucho, de momento).

Ahora mi previsión: en unos años todos los dispositivos serán como el papel, estando toda la circuitería totalmente integrada en aparatos muy delgados y totalmente flexibles desde donde poder consultar toda la información que queramos. ¿Muy arriesgada? Por supuesto. Pero lo veremos “en unos años” ;) .

Las 10 estrategias de la manipulación mediática

  1. La estrategia de la distracción.
  2. Crear problemas y después ofrecer soluciones.
  3. La estrategia de la gradualidad.
  4. La estrategia de diferir.
  5. Dirigirse al público como criaturas de poca edad.
  6. Utilizar el aspecto emocional mucho más que la reflexión.
  7. Mantener al público en la ignorancia y la mediocridad.
  8. Estimular al público a ser complaciente con la mediocridad.
  9. Reforzar la autoculpabilidad.
  10. Conocer a los individuos mejor de lo que ellos mismos se conocen.

Noam Chomsky, lingüista, filósofo y activista estadounidense. Recopiladas de un interesantísimo artículo en español de Gramscimanía donde, además de enumerarlas, las describe.

Posible futuro de las pantallas electrónicas

Hace algún tiempo, más o menos cuando me regalaron el Papyre y lo enseñé a toda mi familia, comenté con ellos que mi idea de las tecnologías de pantalla futuras era que todas iban a confluir en la de la tinta electrónica. Eso sí, en color, con una tasa de refresco mucho mayor y con posible retroiluminación en caso necesario.

Pues no soy ningún gurú (ni mucho menos), pero viendo la noticia de las nuevas pantallas Mirasol de Qualcomm creo que no me he equivocado demasiado.

Comparación de pantallas SuperAMOLED, Mirasol y Retina

Ahora mismo, según la noticia, todavía no tiene suficiente contraste ni demasiada resolución, pero tiene la gran ventaja de que es en color como sus competidoras y sólo consume cuando se cambia de imagen, no es necesario refresco.

A ver si con un poco de suerte lo podemos ver en 2011 ;) .

Abundancia de datos

La abundancia de datos no hace ciudadanos mejor informados, el espíritu crítico sí.

Walklem en un comentario de Menéame sobre Por qué la abundancia de datos en Internet no ayudará a crear ciudadanos más informados.

Lo bueno de la ciencia

Lo bueno de la ciencia es que no necesita una cabeza líder que ordene las cosas. Simplemente están ahí y basta que alguien quiera verlas.

Resumen de un artículo de MiGUi donde opina sobre las palabras de Stephen Hawking de que dios no es necesario y de por qué todas esas reacciones en contra.

Si pago quiero mis gigabytes

Cuando contrato un ADSL me comprometo a no sobrepasar el tráfico contratado (cosa altamente difícil) y la operadora se compromete a que todo el tráfico sea aceptado.

Hay dos tipos de tráfico: el PIR, que es la velocidad máxima del tráfico (lo que pone en la publicidad), y el CIR, que es la velocidad garantizada, que suele ser un 10% del PIR en ADSL (en fibra óptica puede llegar hasta el 80%, de ahí que ONO sí que garantice los famosos 50 Megas de la publicidad).

El caso es que esto viene a que las operadoras quieren cobrar por datos descargados en lugar de tener una tarifa plana, por lo que, desde aquí, y cogiendo la idea de The Chux Norrix blog, quiero que se hagan las cuentas correctamente:

  • Si contrato una ADSL de 6 Mbps por 40,90 €/mes + IVA + cuota de línea (por ejemplo) y teniendo el 10% garantizado, esto es 0,6 Mbps, al mes puedo bajarme 0,6 Mbps * 60s/m * 60 m/h * 24 h/d * 30 d/M Megabits, esto es 1 555 200 Megabits, o lo que es lo mismo 194 400 MB, es decir, 189 GB mesuales (redondeando a la baja), lo que viene saliendo a algo más de 0,25 €/GB (más la cuota de línea).
  • Como todo el tiempo que está el ordenador encendido no estoy bajando cosas (porque, a parte de bajarlas, también tengo que gastar mi tiempo en verlas), todavía queda un excedente que ya está pagado, por lo que si otro usuario quiere usarlo y excederse de esos 189 GB, el dinero cobrado a mayores a ese otro usuario debería descontarse de mi factura.
  • Como yo soy un usuario normal y no tengo los medios para ello, es cosa de las operadoras el control del tráfico, es decir, son ellas las que tienen que realizar correctamente las mediciones de tráfico consumido para después facturarme acorde a dicho consumo. Y lo mismo con el resto de usuarios y excedente de ancho de banda.

Como creo que esto es importante y no lo he visto en demasiados sitios, lo he copiado descaradamente de la entrada CIR y PIR de The Chux Norrix blog.

Si contratas otras modalidades de ADSL, estos son algunos cálculos adicionales:

  • ADSL 720 Kbps: 22 GB/mes.
  • ADSL 1 Mbps: 31 GB/mes.
  • ADSL 3 Mbps: 94 GB/mes.
  • ADSL 6 Mbps: 189 GB/mes.
  • ADSL 10 Mbps: 316 GB/mes.
  • ADSL 20 Mbps: 632 GB/mes.
  • ADSL 50 Mbps: 1,54 TB/mes.

Sólo una última pregunta: ¿en conexiones 3G también se garantiza el 10%?

¡Mamá, Linux está en la tele!

Literalmente, además.

El caso es que cada día más y más marcas se unen a la moda corriente de poner un sistema operativo Linux en sus televisores, entre otros Sony y Samsung. Pero no por lo cool que podría ser tener Linux en este dispositivo, sino por todas las posibilidades (de ganar dinero) que trae. Porque, digámoslo claramente, es única y exclusivamente para ganar más dinero.

Gracias a Linux… bueno, lo lógico sería decir gracias a GNU/Linux, un sistema operativo que desarrolla muchísima gente y que es gratuito, podemos tener en el televisor mucho más que un televisor. Hacia lo que van ahora mismo las marcas es a integrar Internet, es decir, que no sea necesario un ordenador para ver vídeos, escuchar música o ver tus series favoritas por streaming.

Lo bueno que tiene Linux es que está muy desarrollado, muy probado, funciona en multitud de arquitecturas y, además, está libre de royalties y de pago de licencias. Aunque la licencia no lo obliga, lo único que se debería hacer es, si desarrollas algo que funcione con él (por ejemplo el driver de tu televisor), sería publicarlo bajo la misma licencia, esto es, hacer software libre.

Hay empresas, como Samsung, que ya tienen su propio Linux para procesadores ARM dentro de sus televisores, con lo que, gracias al software libre, tienen el valor añadido de que es el propio aparato el que reproduce directamente archivos de vídeo, como .avi y .mkv, sin necesidad de ningún reproductor externo.

Estas dos cosas son las que están llevando cada vez a más marcas a adoptar el modelo de negocio de dar más valor añadido a sus productos. Pero claro, desarrollar un sistema operativo, aunque una gran parte ya esté hecho, es una tarea ardua, difícil y, sobre todo, cara. ¿La solución?: Google. Sí, Google tiene su sistema operativo, Android, especialmente diseñado para dispositivos embebidos, esto es, teléfonos móviles, tablets,… y es muy fácil adaptarlo a televisores, con lo que tanto Sony como Samsung están pensando en pasare al mismo.

Aunque todavía es muy pronto para aventurarse, creo que el futuro va a ser tener a la televisión como sustituto de los HTPC teniendo en el propio televisor todo lo necesario para grabar, reproducir, guardar multimedia y conectarse a Internet sin necesidad de nada más. Además, todas las empresas que apuesten por estas tecnologías (no necesariamente con Android) serán las que vayan mejor en los mercados. Porque si algo caracteriza a la sociedad actual es que cada día somos más exigentes con lo que vemos y escuchamos y lo que queremos es poder elegir. Y este sistema es con el único con el que lo conseguiremos… eso si antes no eliminan la neutralidad de la red, pero ese es otro tema.