Archivo para la categoría ‘De cosas de Informática (es lo mío)’

Eligiendo navegador

Ventana de selección de navegador en Windows 7

Microsoft, por algún que otro problemilla entre su sistema operativo y la Unión Europea, ha tenido que dar la oportunidad de elegir el navegador Web en su flamante Windows 7. Ahora, al menos por parte de ellos, la e azul ya no estará presente en todo sistema preinstalado. Ya será cosas de los usuarios… que, lógicamente, elegirán la e azul sin ni siquiera pararse a pensar el por qué.

El caso es que todo esto quizás no hubiera ocurrido si desde el primer momento que a alguien se le ocurrió decir que Microsoft incurría en monopolio con su IE, simplemente hubieran puesto un desinstalador.

Pero claro, por aquella época no dominaban el mercado, tanto de los navegadores como casi, casi de Internet, así que quisieron imponerse a golpe de talonario. Eso sí, han firmado tantos cheques en forma de multas para la UE y en forma de salario de informático para cumplir los requisitos, que probablemente les hubiera salido mucho más barato hacer el desinstalador… y un navegador nuevo.

Y aunque hubieran hecho esto, seguro que actualmente seguirían con la hegemonía en el mercado de los navegadores (aunque no se que mercado, son gratis) porque los usuarios usamos lo que hay, no nos paramos a pensar y, ni mucho menos a instalar otra cosa.

Así que casi seguro, cuando salga esta ventanita, el ratón se moverá confuso hasta encontrar algo conocido, como es esa grande y reluciente e, donde hará clic. Y al final todo seguirá igual.

ASUS Eee PC y Windows Starter

El otro día se compró mi hermano un ASUS Eee PC 1001 con Windows 7 Starter (en una tienda muy conocida y al precio standard).

El equipo en sí está muy bien. Es pequeño, no hace ruido, apenas se calienta, con una pantalla brillante y nítida y suficientemente grande como para navegar perfectamente por Internet, leer el correo electrónico, ver vídeos, leer libros,… por supuesto, todo para uso personal. En el momento que aparece otra cabeza para ver la pantalla ya se está demasiado cerca… aunque a veces hasta es mejor :P .

Pero el sistema operativo, Windows 7 Starter… bueno, eso mejor insertáis una unidad USB, arrancáis y lo formateáis completamente. Porque Windows 7 Starter da verdadero asco.

Que sí, que vale, que está hecho para dispositivos con poca potencia, pero no, no es normal que no se pueda cambiar el fondo de pantalla. Sí, habéis leído bien: en Windows 7 Starter no se puede cambiar el fondo de pantalla.

Y, a parte de esto, tampoco tiene la interfaz Aero (cosa casi lógica, si quieres), ni hay previsualizaciones de las ventanas en la barra de tareas, no reproduce DVD (ni con un DVD externo), no se puede cambiar entre usuarios sin cerrar sesión y ni siquiera tiene el modo de compatibilidad con Windows XP. Vamos, completito, completito. Y no, no es por las capacidades del hardware. Es pura política.

De verdad, hay veces que confías y dices “vaya, por fin han hecho un producto que funciona” y ahora van y la cagan con esta mierda.

Hibernando el sistema en Linux (y solucionando algún que otro problema)

La hibernación es una característica de los sistemas operativos que permite que toda la memoria RAM se copie al disco duro de forma que, en el próximo reinicio del sistema, se cargue la memoria RAM del archivo previamente guardado sin necesidad de realizar el inicio del sistema de forma normal.

Con esto se consigue que no sea necesario cerrar ninguna sesión ni ningún programa que esté en ella y, la próxima vez que se arranque el ordenador, todas las aplicaciones estarán en el mismo estado que cuando lo hibernamos.

En Linux disponemos de esta opción desde el menú de apagado de la interfaz gráfica, por lo que basta hacer clic en el botón correspondiente para que nuestro sistema hiberne.

Pero, además de esta opción, en los sistemas Linux también tenemos un comando que realiza esta acción: hibernate.

Con este comando conseguimos hibernar el sistema desde una consola o desde un script de apagado automático de la máquina, para que en el próximo reinicio tengamos todas nuestras aplicaciones abiertas.

Pero la función hibernate no está exenta de sus riesgos. A mi los errores que me daba eran principalmente dos:

El primero es que si había varias hibernaciones seguidas, esto es, según termina de iniciar el sistema después de una hibernación realizar otra (mediante el comando), en el segundo reinicio después de esta hibernación, se producían errores en las aplicaciones debido a fallos de segmentación en alguna de las librerías que usaba (las que vi fueron libc.so y libdbus.so).

Me inclino a pensar que después del reinicio no sabía exactamente donde estaban localizadas las librerías en memoria y por eso fallaba. O, quizás el kernel de Linux tenga una función de posicionamiento aleatorio del código para evitar ataques y todavía no funciona todo lo bien que debería. Pero, como digo, esto son suposiciones. Además, después de un poco de uso normal, en las siguientes hibernaciones todo iba perfectamente.

El segundo de los problemas se producía con GRUB 2, el nuevo gestor de arranque que traen las distribuciones de Linux más modernas (en mi caso Ubuntu 9.10). GRUB 2 tiene un registro llamado recordfail que se fija a uno cuando el sistema arranca y a cero cuando se apaga correctamente. Si se apaga incorrectamente y recordfail queda a uno, en el siguiente reinicio no aparece el timeout del menú de inicio del sistema por lo que hay que seleccionar el sistema operativo a arrancar manualmente.

Con el comando hibernate, una vez que inicia de nuevo el sistema, no fija de nuevo la variable recordfail de GRUB 2 a uno, con lo que en los siguientes reinicios después de hibernar, siempre hay que seleccionar el sistema a arrancar de forma manual.

Para solucionar esto, hay que configurar el comando hibernate. El archivo de configuración, como es norma en sistemas Linux, está en /etc/hibernate/hibernate.conf. En este archivo hay que añadir las siguientes líneas:

LockGnomeScreenSaver true
OnResume 00 /etc/pm/sleep.d/10_grub-common thaw

La primera línea bloquea la sesión de Gnome con su salvapantallas (porque tampoco lo hace por defecto con lo que después del reinicio aparecía la sesión sin contraseña; un gran fallo de seguridad) y la segunda línea indica que se ejecute el archivo /etc/pm/sleep.d/10_grub-common con el parámetro thaw, que es el archivo que fija recordfail a cero en cada inicio correcto del sistema.

Con esta pequeña solución, ya tenemos el comando hibernate listo para incluir en nuestro script de apagado automático sin que tengamos que arrancar todas las aplicaciones en cada reinicio.

Taskbar Shuffle

Seguro que cuando estás trabajando en tu ordenador (si es que trabajas con él :P ) te has encontrado alguna vez con que tienes unas cuentas ventanas abiertas y, en la barra de tareas, están todas desordenadas. Vamos, que si pudieses las agruparías a tu modo para no tener que andar buscando qué aplicación quieres activar.

Pues para esto existe una aplicación: Taskbar Shuffle. Con esta aplicación se pueden reordenar tanto los botones de la barra de tareas como los iconos de la bandeja del sistema simplemente arrastrando y soltando. Funciona tanto en Windows XP como en Windows Vista (nada dice de Windows 7 aunque no sé si ya traerá integrada dicha funcionalidad) y tiene versiones de 32 y 64 bits.

Ejemplo de movimiento de botones con 'Task Shuffle'

Es una aplicación simple y sencilla que apenas consume 4,5 MB de memoria y que te ayuda a que el ordenador funcione como tú quieres.

Clonar un objeto en Javascript

En Javascript las variables que apuntan a objetos son referencias, por lo que la asignación entre las mismas se hace de esta forma con lo que la modificación de una de estas variables afecta al resto de referencias. Por ejemplo:

var myObject = {
text: ‘Clonning Objects’
};

var mySecondObject = myObject;
mySecondObject.text = ‘Clonando Objectos’;

// saldrá una alerta con el texto ‘Clonando Objetos’ ya
// que las variables se asignan por referencia
alert(mySecondObject.text);

En el alert(...) saldrá el texto ‘Clonando Objetos’ ya que ambas variables apuntan a la misma zona de memoria, de ahí las referencias. Es debido a esto, y que en algunas ocasiones necesitas clonar un objeto, por lo que es necesario implementar una función que lo haga. Para ello tenemos esta función, que la he visto en StackOverflow aunque la he retocado un poco, que funciona perfectamente:

function clone(from) {
if(from == null || typeof from != “object”)
return from;

if(from.constructor != Object &&
from.constructor != Array)
return from;

if(from.constructor == Date ||
from.constructor == RegExp ||
from.constructor == Function ||
from.constructor == String ||
from.constructor == Number ||
from.constructor == Boolean)
return new from.constructor(from);

var to = {};
to = to || new from.constructor();

for (var name in from) {
to[name] = typeof to[name] == “undefined” ?
this.clone(from[name]) :
to[name];
}

return to;
}

Con esta función, el ejemplo anterior se convierte:

var myObject = {
text: ‘Clonning Objects’
};

var mySecondObject = clone(myObject);
mySecondObject.text = ‘Clonando Objectos’;

// saldrá una alerta con el texto ‘Clonning Objects’ ya que,
// aunque las variables se asignan por referencia, nuestra
// función ha clonado nuestro objecto con lo que son dos
// objetos distintos
alert(mySecondObject.text);

Y aquí el mensaje del alert(...) ya será ‘Clonning Objects’. Con esto ya podemos duplicar objetos… Pero, como no había quedado muy conforme con la solución seguí buscando, más por encontrar otro tipo de solución (no veo lógico que Javascript no tenga una forma nativa de clonar objetos) que por mejorar rendimiento. Y, aunque no encontré la forma nativa (creo que no la hay), sí encontré otra mucho más corta y más elegante:

function clone(o) {
return eval(uneval(o));
}

La función eval(...) coge un texto y lo evalúa como su fuese Javascript, de forma dinámica. Y, lógicamente, la función uneval(...) hace lo contrario: dado un código en Javascript —una clase, un array, etc.— lo convierte en el texto correspondiente, por lo que esta función lo que hace es convertir el objeto en texto y el texto generado otra vez en objeto, clonando así el objeto que se pasa como parámetro.

De estas dos formas, la segunda solución me parece más elegante —pocas cosas se consiguen en una sola línea de código—. El problema que puede existir es el rendimiento, ya que no he visto nada por ahí y yo tampoco he hecho pruebas, así que la decisión queda para cada uno. Yo he probado las dos y ambas funcionan sin problemas. Si alguien hace sus pruebas, que comente sus resultados.

Comunicación entre procesos

A la hora de desarrollar un sistema operativo, después de haber planificado la gestión de memoria y la gestión de procesos e hilos, le toca el turno a la comunicación entre los distintos procesos, IPC en inglés, imprescindible para el funcionamiento del sistema.

Para la comunicación a bajo nivel (en el kernel) entre hilos existen varias técnicas que se pueden resumir en:

  • Memoria compartida: Varios procesos, aunque en espacios de memoria distintos, comparten una zona de la misma donde leen y escriben los datos a compartir. La ventaja es que se pueden compartir grandes cantidades de datos y es un sistema muy rápido y sin problemas para lecturas. En cambio, existe el problema de la sincronización del acceso cuando varios procesos tienen que escribir en la misma zona de memoria simultáneamente.
  • Paso de mensajes: Es un sistema donde, mediante canales compartidos entre los procesos, éstos leen y escriben para comunicarse. Se suele implementar mediante sockets, pipas y FIFO’s aunque hay más tipos de implementación. La ventaja es que las lecturas y escrituras son síncronas por lo que no hay problemas de lectura y escritura simultáneas. El problema es que la cantidad de datos a comunicar puede estar limitada.

El sistema operativo BeOS y su sucesor, Haiku, han implementado una solución muy elegante: por un lado, como los sistemas compatibles con POSIX tiene la compartición de memoria; por otro lado, implementó dos técnicas adicionales:

  • El paso de mensajes entre hilos directamente mediante las funciones send_data(...) y receive_data(...) con el inconveniente de que las funciones son síncronas y después de enviar el primer mensaje, hasta que no se lee no se puede enviar otro.
  • El paso de mensajes mediante puertos. Los puertos son el homólogo a los sockets pero entre procesos y mucho más rápidos. Existe un elemento común entre dos hilos llamado “puerto” a través del cual los procesos se comunican mediante las funciones write_port(...) y read_port(...). La ventaja de esto es que el puerto puede tener un buffer por lo que, hasta que no se llene, las llamadas a estas funciones son asíncronas.

Con estas dos técnicas, se consigue tanto la comunicación entre procesos como la sincronización entre distintos hilos gracias a que las llamadas a las funciones de lectura y escritura son síncronas.

Debido a que este tipo de comunicación, aunque muy rápida, es bastante complicada de aplicar, sobre todo porque los datos pasados entre los distintos procesos no tienen tipo, son flujos de bytes, se han implementado otras técnicas de comunicación, pero estas a nivel de aplicación, es decir, no es el proceso el que responde, sino la aplicación completa mediante una API dedicada a ello.

Algunos ejemplos de estas implementaciones son RPC, MPI, COM, DCOM, DDE, OLE, CORBA, ICE, D-Bus, DCOP, MBUS, RMI, Sockets, Doors, OpenBinder, etc.

En esta lista hay que destacar OpenBinder. OpenBinder es una implementación de un nuevo tipo de comunicación entre procesos. Este proyecto nació con lo que iba a ser la siguiente versión de BeOS, la 6, aunque posteriormente maduró dentro de Palm al ser esta empresa la que compró los derechos sobre BeOS.

OpenBinder está un nivel por encima del resto de implementaciones de comunicación entre procesos. Y digo un nivel por encima porque esta API proporciona una comunicación, por decirlo de alguna forma, a nivel de componentes, es decir, los componentes del sistema operativo, incluyendo los componentes de la interfaz gráfica (ventas, botones, etc.) son clases que heredan de clases de OpenBinder, con lo que cualquier componente es susceptible de comunicarse con cualquier otro. Este sistema inicialmente implica bastante complejidad, pero está optimizado para ser muy rápido y, además, lo que se pretende con él es poder hacer aplicaciones, especialmente GUI’s como las X, que sean distribuidas de forma transparente para el desarrollador.

OpenBinder no merecería más atención que la del resto de sistemas si no fuese porque esta tecnología está implementada dentro del sistema operativo Android, dejando de lado el resto de sistemas. Esto es cuanto menos curioso, ya que el resto de tecnologías están ampliamente probadas y esta, quizá, sea la más nueva. Pero aquí es donde se ve lo que gasta Google en I+D; no se conforma con lo que hay, quiere lo mejor (según ellos, claro).

Y ya puestos, se pueden empezar a hacer conjeturas: por ejemplo, los dispositivos Android completos podrían estar en la nube de Google, no sólo los datos que manejan, por lo que tu teléfono móvil o tu ordenador podrá ayudar a Google a procesar sus propios datos.

Ahora hay que esperar un poco más a que salga Chorme OS para ver qué sistemas de comunicación tiene y saber si esta teoría será real o una simple paranoia mía :) .

Analizando GCD

Hace unos meses que Apple sacó a la venta la última versión de su sistema operativo, Mac OS X 10.6 Snow Leopard.

Esta versión es principalmente una versión de, como dicen ellos, afinamiento. No se han incorporado características nuevas sino que se han refinado las actuales dándole al sistema una mayor velocidad y estabilidad. Lo que sí han hecho es incorporar en el núcleo del sistema una tecnología que no se ve pero que sí se nota: Grand Central Dispatch.

Logotipo de Grand Central Dispatch

GCD es una nueva tecnología que lo que hace es distribuir las tareas que tienen que hacer las aplicaciones en tareas más pequeñas para así aprovechar toda la potencia de las máquinas que tienen varios procesadores o varios núcleos por procesador, como viene siendo habitual en los ordenadores de hoy en día, no sólo los Apple.

Esta tecnología viene a solucionar el problema de la escasez de paralelismo con la que contaba Mac OS X, pero, más que por su incapacidad, por la desidia de los desarrolladores a incorporarlo en sus aplicaciones. Aunque tienen sus razones, claro, es bastante complicado sincronizar hilos cuando no tienes un API que te ayude a hacerlo.

GCD añade dos cosas al nuevo sistema operativo de Apple. La primera es lo que se conoce como un pool de hilos, es decir, en lugar de que cada vez que queramos realizar una acción de forma paralela creando un hilo para así aprovechar los diferentes procesadores, lo que hacemos es indicar al sistema que queremos realizar tareas paralelas. Es el propio sistema el encargado de crear los hilos correspondientes y de ejecutarlos con una de las tareas a realizar.

La diferencia con los hilos tradicionales es que los hilos de GCD ni se crean ni se destruyen (esto me suena), simplemente existe una o varias listas de estos hilos (el pool) donde cada tarea se va a asociando a cada uno de estos hilos hasta que termine. Una vez terminada la tarea, el hilo no se destruye, sino que vuelve a la lista correspondiente. Además, estas listas de hilos tienen diferentes prioridades con lo que se puede tener más precisión a la hora de ejecutar tareas.

Lo bueno que tiene esto es que el programador no tiene que preocuparse de nada más que de indicar cuáles son las tareas a realizar de forma paralela. El sistema se encargará de distribuirlas entre las distintas listas de hilos disponibles.

Pero para lograr esto, Apple se ha tenido que sacar de la manga una extensión para el lenguaje C de su compilador Clang. Esta extensión es lo que se conoce en otros lenguajes, como Java o Javascript, como closures. Las closures son funciones anónimas o funciones lambda, algo así como los punteros a funciones de C pero con capacidades extras, como el acceso a variables locales, que se puedan devolver por otra función o que se puedan declarar en línea.

A esto, los desarrolladores de Apple le llamaron bloques. Entonces un bloque sería un trozo de código ejecutable que se parece a una función pero que no tiene nombre (función anónima) y que puede acceder a las variables locales del ámbito donde se ha declarado. Y la sintaxis que han hecho es al mejor estilo de C: austera. Veamos unos ejemplos, aunque la forma de trabajar es similar a Java y Javascript pero con distinta sintaxis:

// bloque asignado a una variable y accediendo
// a una variable local
int b = 3
multiplicar = ^ int (int a) { return a * b; };

// x valdría 6
int x = multiplicar(2);

// declaración de un tipo de bloque
typedef void ( ^ my_block_type)(int count);

// función que repite la ejecución de un bloque n veces
void repeat(int times,my_block_type block) {
for(int i = 0; i < times; i++) {
block(i);
}
}

// declaración en línea (pasando como parámetro
// un bloque completo sin declararlo previamente
// como se hace con los punteros a funciones)
repeat(10, ^ (int count) {
printf(“count = %d\n”,count);
});

Gracias a esta nueva extensión, con apenas trabajo por parte del desarrollador, se puede aprovechar toda la potencia de las máquinas multiprocesador. Y, realmente, cuando se dice con “pocas líneas” es cierto. Basta con identificar las tareas (ese es el trabajo difícil) y usar las funciones dispatch_* de la nueva API pasando como parámetro un bloque de código con la tarea a ejecutar. Es el sistema, de forma transparente, el que se encarga de distribuir las tareas en los distintos procesadores creando los hilos necesarios para ello o utilizando los que están en el pool.

La verdad es que hay que agradecer a Apple que por fin se pusiese las pilas en cuanto al rendimiento de sus sistema, que ya iba bien de por sí, pero siempre puede ir mejor, sobre todo por facilitar el paralelismo de tareas a los programadores. Y aunque esto está muy bien, todavía no he visto por ningún sitio cómo han solucionado el problema de la sincronización/comunicación entre tareas (a parte de la memoria compartida y semáforos, claro), ya que esta extensión es sólo para aprovechar las máquinas multinúcleo.

Y es que, a mi entender, creo que esta solución que tan bien les está yendo, es un parche para un problema que viene de lejos. Venga, va, aquí los abucheos por criticar el Mac OS X. Pero expongo mis razones:

Esta solución crea un pool de threads con los que, a partir de un momento dado, se empiezan a realizar tareas sin la necesidad de estar creando y destruyendo hilos continuamente sino reaprovechándolos. Existe más de un pool con diferentes prioridades para así gestionar mejor las tareas. Esta solución es así porque la forma en Apple que implementó los hilos en Mac OS X no es la de lightweight threads (hilos ligeros) sino la de hilos más parecidos a procesos que a hilos en sí.

Esta solución implica que la creación de cada hilo sea bastante costosa, aproximadamente unos 512 KB por cada uno, mientras que la solución de hilos ligeros, la que implementan BeOS y Haiku (sí, ha salido BeOS, ¿raro en este blog? :) ) es la de verdaderos hilos ligeros, con lo que la creación de los mismos apenas lleva 50 KB (32 KB de memoria de pila y el resto de estructuras internas del kernel).

512 KB por hilo creado es mucha memoria utilizada. Y más teniendo en cuenta la cantidad de aplicaciones y servicios que se están ejecutando en un sistema operativo actual según se inicia. Por pocos hilos que crees estás consumiendo mucha memoria y hay que tener en cuenta que cuantos más hilos (ojo, con un límite), más paralelismo y mayor aprovechamiento del hardware. Y vale que ahora la memoria es barata, pero ¿los nuevos sistemas funcionarán en hardware antiguo? Quizás esto no sea una prioridad para Apple, pero siempre hay que pensar en todo.

Como comenté antes, tampoco sé exactamente como se sincronizan las tareas en Mac OS X, mientras que en BeOS/Haiku tenemos tres mecanismos muy ligeros para ello: semáforos, comunicación entre hilos y puertos. El problema es la complejidad a la que se enfrenta el programador para hacer esta sincronización, aparentemente solucionada en Mac OS X, pero que no debería ser un problema si existe una buena API dentro del sistema que lo facilite.

En conclusión (y ya para terminar este ladrillo de entrada) creo que Apple ha mejorado mucho su sistema con esta característica, tanto para los usuarios, aprovechando el hardware al máximo, como para los programadores, haciendo que con escasas líneas de código aprovechen mejor dicho hardware, pero sigo pensando que la solución inicial de hilos pesados no es tan buena como la solución de hilos ligeros.

¿Para cuándo se podrán grabar las llamadas en Android?

Hay una aplicación que hecho mucho de menos en el sistema operativo Android, y es la aplicación que grabe las conversaciones.

Quizás no la hayan hecho porque violaría la privacidad de dichas conversaciones, pero hay que reconocer que puede llegar a ser muy útil. Siempre que se avise de la grabación se puede usar en un juicio (esperemos que, por nuestro bien, no llegue a ser necesario), pero si no lo vas a usar y es para uso personal, en teoría no habría que avisar de ello ¿no? Pero ¿sería legal?

De todas formas, la parte que me interesa es la tecnológica. Creo que en el API de Android no es posible interceptar una llamada más lejos de saber quién es el que llama, por lo que la grabación de la misma, al menos de momento, no es posible. De todas formas, sí que tiene una clase y una constante, MediaRecorder.AudioSource.VOICE_CALL, para grabar voz (indica que se graba la voz de entrada y de salida, esto es, la del que llama y la del que es llamado), de donde se puede intuir que si se podrá en un futuro.

Además, esto sería extremadamente útil para hacerte tu propio contestador automático dentro del propio teléfono sin contar con los servicios de contestador de las operadoras. Y, por supuesto, es software libre, podemos ir mucho más allá con esta característica. Algo así como una mini centralita Asterisk con todas las posibilidades que ello conlleva.

Y ya que estamos interceptando llamadas, también sería muy buena idea sacar otra aplicación que, entre dos terminales con el mismo software, se pudiesen cifrar dichas conversaciones. De hecho sería buena idea ya que hay quién avisa de que tengamos cuidado con lo que se habla por el teléfono.

Supongo que tarde o temprano lo harán. Es, como dicen en algunos foros, un must have, una aplicación imprescindible. Ahora esperemos que sea más pronto que tarde.

Editando vídeo con Avidemux

Me gusta bastante el cine antiguo. Más que muchas de las películas modernas (vamos, la mayoría de las de ahora que suelen ser bastante malas). De hecho tengo varias de los Hermanos Marx, de Cary Grant, Westerns, etc.

De las últimas que he conseguido ha sido “Le llamaban Trinidad”. El problema de estas películas antiguas es que, a parte de que cada día son más difíciles de conseguir debido a que la red de eMule cada día va peor, el vídeo no es del todo bueno ya que generalmente están copiadas de un VHS o, incluso, capturadas con una cámara de la propia televisión.

'Le llamaban Trinidad' en una televisión Samsung

Por ejemplo, la copia que he conseguido de esta película viene con las bandas negras propias de una película de cine proyectada en la televisión pero dentro de los propios datos de vídeo (como si esa información negra fuese parte de la película), con lo que en mi televisión se ve, además de con las bandas negras superior e inferior, con bandas negras laterales, es decir, la película se ve en el centro de la televisión con un borde negro de unos 10 cm.

Bueno, después de tanto rollo para llegar aquí, la cosa es que antes de grabarla en un DVD para hacer la correspondiente copia de seguridad se me dio por arreglarla pero sin saber con qué aplicación podía hacerlo. En principio busqué algo así como “video crop tool” en Internet y me llevó hasta VidCrop, una aplicación muy bonita y sencilla pero que cuesta dinero si no quieres ver su logotipo en tu recién arreglada película. Una pena.

Como no aparecían más, fui al siempre útil CDLibre.org, a la sección de vídeo, y allí encontré Avidemux.

Avidemux es principalmente un editor de vídeo pero no de varias pistas para construir una película, sino un editor de imágenes de vídeo. Con esta aplicación se consigue aplicar filtros a la imagen, redimensionar el vídeo, quitar algunas partes del mismo (digamos las bandas negras superior en inferior ;) ) y, como, recodificar el vídeo con algunos de los codecs que se tengan instalados en la máquina.

Con esta aplicación, y después de más de dos horas y media de procesado para 700 MB (tengo que comprar un ordenador nuevo…), ya tengo mi película lista para que se vea en la televisión sin ningún problema, como si tuviese el cine en casa (mucho mejor, por cierto, que en el cine no hay sofá; y, sobre todo, en casa no cuesta 7,50 €).

Y ahora que ya tengo el programa de conversión de vídeo, tengo que buscar el de edición no lineal, ahora sí, para componer una película un vídeo casero a partir de varios fragmentos.

Aplicaciones básicas de Android

Las aplicaciones más o menos básicas que uso en Android, que casi todas las he bajado antes de hacer la primera llamada, son las siguientes (el orden no importa):

  • APNdroid: Para activar y desactivar de una forma rápida el 3G del teléfono dejándolo sólo en 2G. Por si acaso no tenemos tarifa plana de datos o estamos en el extranjero.
  • ASTRO File Manager: Gestor de archivos para Android. Se pueden ver los archivos tanto del sistema como de la tarjeta de memoria. Otra opción (menos interesante a mi entender) es OI File Manager.
  • Barcode Scanner: Aplicación que, mediante la cámara de fotos, decodifica códigos de barras y códigos bidimensionales (códigos QR). Muy útil para buscar aplicaciones en el market a partir de enlaces en la Web.
  • My Tracks: Aplicación similar a Google Maps pero que guarda las rutas que haces en formato KML o GPX y que luego se pueden subir a Google Earth.
  • AK Notepad: Bloc de notas. Simple, sencillo y funcional. Este es sólo uno de ellos, hay muchas opciones.
  • Diccionario RAE: Buscador de palabras en el diccionario de la RAE. También en el Diccionario Panhispánico de Dudas.
  • Toggle Settings: Aplicación para cambiar de forma rápida las opciones más comunes dentro del sistema operativo, como apagar y encender la Wifi, el GPS, el Bluetooth, el brillo, etc. Otra opción es Useful Switchers a la que considero más estándar por seguir la guía de estilo gráfico de Android pero menos funcional que Toggle Settings.
  • ConnectBot: De las que más me gustan. Un cliente SSH para Android. Y la verdad es que funciona bastante bien.
  • Rings Extended: Con esta aplicación podrás seleccionar cualquier sonido para los eventos del sistema ya que el sistema sólo tiene unos pocos sonidos por defecto.
  • TasKiller Free: Para matar alguna tarea que se queda ejecutando sin que lo sepas. Siempre viene bien tener algo de esto. Antes estaba Advanced Task Manager pero se volvió de pago y perdió parte de su atractivo.
  • Ultimate Stopwatch: De los mejores cronómetros que he visto, sobre todo en presentación. También tiene cuenta atrás.
  • Voice Recorder: Graba notas de voz y guárdalas como archivos. Android ya tiene un grabador de voz pero sólo sirve para enviar MMS de voz.
  • tCalendar: Widget para el escritorio donde se muestra la fecha simplemente. Mucho más pequeño que el widget del calendario que trae Android por defecto y, para mí, más útil.
  • Weather Widget – Free: Widget para el escritorio que muestra la meteorología. Existe una versión de pago que se supone mejor. La versión gratis tiene buenos gráficos pero no acierta demasiado. De todas formas yo la tengo puesta.
  • GPS Status 2: Aplicación que simplemente muestra los valores del GPS y de la brújula al estilo de los antiguos receptores de GPS. Quizás le falta que puedas guardar las posiciones en una lista.
  • Analog Compas: Simple brújula. Otra opción sería Orienteer.
  • Bubble Burst Lite: El juego de juntar bolas de colores que viene en todos los Windows Mobile (debe ser el buque insignia igual que lo fue el buscaminas en Windows 3.11 :) ).
  • Solitaire: El famosísimo juego del solitario. Por si nos aburrimos.
  • Astrid: Aplicación de gestión de tareas más orientado a la gestión de tareas de proyectos (hitos) que a las tareas diarias (por ejemplo, una tarea no tiene un día de inicio, sólo un día de finalización). Sincroniza con Remember the milk (algo despacio, según su página).
  • Battery Life: Widget que te muestra el estado de la batería mediante distintos colores.

Por supuesto estas son las que uso yo habitualmente y de aquí se me escapan algunas, como un lector de eBooks (tengo que probar FBReader), una aplicación de mensajería instantánea (como Nimbuzz), etc. Si a alguno se le ocurre alguna más que falta que lo ponga en los comentarios.

Cliente SSH en Android

De las cosas que más me gustan de estos teléfonos inteligentes es que en realidad no son teléfonos, son miniordenadores que tienen un teléfono integrado (y más cosas). Y la prueba está en el cliente SSH para Android, ConnectBot:

Imagen del cliente SSH, ConnectBot, para Android

Desde aquí puedes mirar a ver si tu servidor se está comportando bien casi estés donde estés (siempre que haya cobertura, claro). Y, si algo falla, siempre puedes lanzar algún comando que otro en el terminal.

Y esto, creo yo, es sólo el principio. No me quiero ni imaginar la capacidad de monitorización de estos aparatos, por ejemplo, para ver tu casa desde tu lugar de vacaciones. Llamadme friki, pero quién dice casa dice empresa, guardería, etc. Habrá que ir empezando a desarrollar… ;)

Diagrama para dar soporte técnico informático

Diagrama para dar soporte técnico informático

Esto hay que imprimirlo, pero que bien grande, y ponerlo en la puerta del despacho, de casa, de casa de tus padres y hasta del portal si es necesario.

Gratamente visto en Mundo Geek y acertadamente creado por los Randall Munroe de XKCD.

Programas de conversión y edición de vídeo

Esta entrada no es precisamente para recomendar alguna aplicación de conversión y edición de vídeo, más bien todo lo contrario, es para ver si alguien me puede recomendar alguna aplicación de este tipo, da igual que sea para Windows o para Linux.

Lo que quiero convertir son vídeos en formato MPEG-TS en alta definición (1920×1080) a otro formato más manejable y, sobre todo, a “media definición” (digamos en calidad DVD, 720×480, porque creo que todavía nadie tiene un reproductor Blu-Ray en su casa).

En principio, la opción que más me gusta para convertir vídeos es FFmpeg, que, aunque se suele usar en modo consola, creo que es la más potente de todas. Ahora tendré que buscar una interfaz que sea sencilla porque no tengo muchas ganas de aprenderme todos los parámetros de sus comandos.

Otra opción que vi en un comentario de Mundo Geek es Oxelon Media Converter que aún no he probado.

En cuanto a la edición, existen varias opciones para Linux de las que están en los repositorios de Ubuntu, pero no sé cual es la mejor y/o más sencilla. En Windows tenemos las potentes como Adobe Premiere o Sony Vegas, pero son ambas de pago y no voy a piratearlas.

¿Alguien e puede recomendar algunas aplicaciones de este tipo? Gracias a todos ;) .

Actualización: Resulta que he probado Oxelon y no es más que una interfaz gráfica para ffmpeg. Pues vale…

Software de grabación para Linux: G4C

Hace tiempo (bastante) que unos amigos comenzaron a desarrollar un proyecto de software libre para Linux donde de lo que se trataba era de crear una nueva aplicación de grabación de CD y DVD nativo y sin necesidad de usar las famosas utilidades de cdrecord (cdrtools).

El proyecto se llamó G4C como guiño al famoso K3B (creo recordar que fue así, sino corrígeme Nacho) y la verdad es que tenía muy buena pinta. Incluso tienen un vídeo de demostración que es de donde he sacado esta imagen:

Captura de pantalla del programa de grabación para Linux G4C

El problema es que el proyecto se paró en junio de 2006 y parece ser que no sigue para delante. Una pena, la verdad, porque tenía muy buena pinta y sé que se lo estaban currando de verdad. Y es una pena, sobre todo porque era capaz de grabar dos (o más) CD’s de forma asíncrona. En la prueba del vídeo se usaron dos grabadoras, una interna y otra externa por USB y ambos CD’s se grabaron correctamente.

De todas formas el proyecto es GPL por lo que si alguien quiere continuar sólo tiene que bajarse el código fuente y dedicarle algún tiempo. ¡Ánimo!

Personalización de los cursores

Cursor de BeOS en grande y con sombra

Cursor de BeOS con sombra

Cuando conocí por primera vez el BeOS una de las cosas que más me llamó la atención fue su puntero del ratón. No era la típica flecha del Windows ni siquiera la flecha con fondo negro y pequeña de las X11 de la época (que aún se siguen usando, por supuesto). Era una mano, pero mucho más estilizada que la mano de Internet Explorer para señalar los enlaces Web.

En principio no me gustó, pero luego con el tiempo y la imposibilidad de cambiarla (cosas de un sistema operativo tan joven) me fui acostumbrando hasta que al final es mi cursor preferido. De hecho es el que tengo en el Windows de casa, eso sí, ligeramente adaptado a los otros tipos de cursores de Windows (cambio de tamaño, carga del sistema, etc.).

Si queréis probarlo, aquí os dejo un archivo comprimido con el conjunto de cursores del BeOS para Windows.

Lo nuevo de SkyOS (o como un gran proyecto puede convertirse en una auténtica mierda)

SkyOS es era un gran proyecto. Un proyecto ambicioso. Un proyecto muy ambicioso de un sólo hombre.

SkyOS es un sistema operativo completo creado por una sola persona, el austríaco Robert Szeleney. Pero cuando se dice “completo” quiere decir realmente completo. Es decir, él se ha creado su kernel (híbrido), sus drivers, su interfaz gráfica, su API y, también, las aplicaciones del SO como un gestor de escritorio y un IDE. Pero, además, ha portado innumerables aplicaciones incluyendo Firefox, Thunderbird, Gaim, Pixel, Abiword, GIMP, Blender, etc. y juegos como Quake y Doom. Y todo esto desde cero.

Al lado de este hombre Linus Torvalds no es nadie (¿crea un kernel monolítico y tiene la suerte de que lo usa la gente y ya se cree alguien? Este es otro tema…).

Pero claro, en todos los proyectos de grandes dimensiones (y este lo es porque lleva en eterna beta desde 1997) empiezan a surgir los problemas. Como comenta su autor en la Web, existen innumerables dispositivos de hardware en el mercado actual y una persona sola no es capaz de desarrollar los drivers tan rápido como para que su SO sea competitivo.

Es por esto que, inicialmente, el desarrollo del sistema está estancado a la espera de decidir qué solución tomar. En pricipio había varias (como se puede ver en la Web) pero creo que finalmente ha optado por la opción incorrecta: ha decidido cambiar su kernel por uno de Linux o de BSD con lo que los drivers ya están desarrollados.

Y aquí es donde creo que la caga. Pero bien cagada.

En el mundo de los sistemas operativos que usa más gente del 0,0001% están Windows y Linux. De Windows hay varias versiones de las que todos hemos oído hablar. De Linux, por mucho que se diga, sólo hay una versión: GNU/Linux. El resto son distribuciones, es decir, diferentes formas de hacer lo mismo. Te dan el kernel de Linux (el que ha hecho Linus Torvalds) con una serie de aplicaciones (que han hecho la comunidad) y gestores de paquetes para cambiarle el sabor pero, en realidad, es exactamente lo mismo.

Y a eso es a lo que voy: un sistema operativo completo, nuevo, innovador, que no se basa en ningún otro, que no está influido por nada ni nadie ¿y lo que hace es ponerle el kernel de Linux? ¡¡Noooo!!

Siempre he considerado los sistemas operativos minoritarios como una opción real (a falta de darle el pequeño empujón económico y publicitario que necesitan) y siempre he estado revisando SkyOS, pero creo que a partir de ahora dejaré de hacerlo. Siento ser tan tajante, pero no quiero otro Linux con una interfaz diferente y otra API que aprender para hacer aplicaciones.

Pero ¿cuál sería la solución para el problema de los drivers? Pues es bien sencillo. Es más, el mismo Robert Szeleney la ha propuesto: liberar el código bajo una licencia libre. Con esto la comunidad se volcaría y desarrollaría como para Linux teniendo en cuenta que aunque SkyOS está en una (eterna) fase beta, es un proyecto muy avanzado y que con muy poco desarrollo adicional sería perfectamente usable e, incluso, una alternativa viable contra los dos grandes el grande y al pequeño.

Pero, oye, también lo entiendo. Se ha tirado 12 años realizando su sueño y estoy seguro de que ahora no quiere que nadie se lo contamine, así que seguirá él sólo realizando experimentos. A ver que sale de ahí. Y me desdigo: seguiremos atentos.