Después de poco menos de año y medio con Hellboy, me di cuenta que casi no ejecutaba aplicaciones ahí. Lo que más hago es navegar por la Interweb, y conectarme a Dorothy para trabajar ahí. Entonces pensé que tener todo un Ubuntu 10.10 instalado era demasiado. Quería un Linux que cargara “al toque”, y que sea liviano, sin tantos programas cargados, que no uso.
Ya había probado el Ubuntu Netbook Edition. Pero cuando lo probé, estaba esperando un Linux más completo… quizás por eso no quise volverlo a probar. Por ahí leí que Kubuntu era amigable a las netbooks. Lo instalé, y lo borré a la media hora, muy bloated.
Y llegué a Jolicloud.
Jolicloud es un nuevo sistema operativo “basado en la nube”, donde las aplicaciones son páginas web, como Google Docs y Facebook. En versiones anteriores, estuvo basado en Mozilla Prism, ahora usa un fork de Google Chromiun, llamado “Nickel” (y esto les suena un tanto irónico a los fans de Chrome OS, pero Jolicloud tiene una visible delantera en esta carrera).
Lo primero que me llamó la atención, era que el desktop está hecho con HTML5. Incluso puedes instalar la app en tu Chrome y darle una probada antes de instalarlo. Hace mucho tiempo que venía buscando cómo hacer eso, así que me animé a instalarlo.
La versión 1.1 está basada en Ubuntu Netbook Edition 10.04 (lo que es muy conveniente, ya que es un entorno familiar y tiene muchas aplicaciones en sus repos) e inicia muy rápido (con una splash screen animado guapo
)

Para el login usa SLiM, un login manager muy sencillo, ligero, y bastante configurable. Una vez iniciada la sesión (y registrado en su página web), aparece su dashboard:

Puedes sincronizar tu desktop con otra computadora, y ambos tendrá las mismas aplicaciones (incluso las tradicionales, como pidgin), así como otras aplicaciones.
Googleando un poco, encontré que el script /usr/bin/jolicloud-launcher es el responsable de lanzar el dashboard. En la línea 79 está esto:
my $OFFLINE_URL = "file:///usr/share/jolicloud-daemon/htdocs/index.html";
Que define la URL que debe de cargar cuando la PC está sin conexión a Internet (que en mi caso, es siempre, ya que la conexión a la red se da mucho después que todo el sistema ha iniciado). Entonces modifiqué este ficherito para que esperara la conexión a Internet, y redireccionara a una página web mia:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Loading Jolicloud...</title>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="styles.css" />
<script>
URL='http://paris/pwp/';
function redirect() {
setTimeout ( check, 1000 );
}
function check () {
req = new XMLHttpRequest();
req.open ( 'GET', URL + "ping.php", true );
req.onreadystatechange = function() {
if ( this.readyState == 4 ) {
if ( this.responseText == 'OK!' ) {
window.location = URL;
}
}
}
req.send( null );
setTimeout ( check, 2000 );
}
</script>
</head>
<body onload="redirect();">
<div class="loading">Esperando la conexión con Paris...<br />
<br />
<img src="ajax-loader.gif" /></a>
</body>
</html>
Esta nueva web espera a que pueda recabar el contenido del script ping.php en mi servidor (“Paris”). Cuando esto sucede, quiere decir que está conectado a Internet (y en mi caso, a la intranet de Paperclip via VPN). Ya que esto sólo funcionará en Chrome, usa directamente el XMLHttpRequest
El script ping.php es sencillo:
<?php
// Esta página no debe ser guardada en cache
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header ( 'Access-Control-Allow-Origin: *' );
echo "OK!";
?>
Simplemente imprime un “OK!”, y evita que sea grabado en la caché de los servidores, proxies, y navegador web . El Access-Control-Allow-Origin es para alterar la política del mismo origen, y permitir que el script grabado en Hellboy se conecte vía AJAX a un script en otro lado.
Una vez conectado, se muestra mi desktop HTML5. Es muy fácil programar en Javascript para un único navegador… y el Chrome soporta bastantes cositas del CSS3, como background-size, para hacer que la imagen de fondo cambie de tamaño según el tamaño del contenedor. Así que ahora éste es el escritorio de Hellboy, :

A la izquierda están mis enlaces más usados, que son simples tags <a>. Tendría que hacer una aplicación para Chrome para poder ejecutar programas y otras apps. Eso será después. A la derecha pienso mostrar algún tipo de información, aun no sé qué. Todo está dibujado usando Javascript, el HTML solo tiene un <script>init();</script>, que inicia todo.
Le he puesto también un pequeño selector para el wallpaper:

Un paseo ilegal por flickr me dio algunos de los wallpapers
Ha sido un lindo ejercicio de Javascript, CSS3 y DOM. Aun falta algunas cosas por implementar, pero ahora lo que quiero hacer es compilar el nickel en Ubuntu, y usarlo para el wallpaper de Dorothy. Eso si será alucinante