Cómo limpiar los restos de Docker

Normalmente, cuando descubres Docker, te pones a bajar y probar imágenes como loco, a construir algunas que no funcionan bien… Al final se te queda una caché de demasiados GBi sin usar.

Limpiar los contenedores detenidos

$ docker rm $(docker ps --all --quiet)

En realidad, le hemos dicho que los borre todos, pero los que estén en marcha no los borrará salvo que le hubiéramos pasado la opción --force.

Limpiar las imágenes sin etiquetar

docker rmi $(docker images --filter dangling=true --quiet)

Mercurial y Git pueden ser amigos

Si eres como yo, que me gusta Mercurial por encima de todos los demás VCS que he probado, pero te ves obligado a trabajar con Git muchas veces porque, aceptémoslo, es el más popular de todos, hay una herramienta que te hará feliz: Hg-Git.

Permite trabajar con Mercurial (y TortoiseHg, claro está) contra repositorios Git de forma casi transparente.

Las ramas locales de Git se traducen a bookmarks de Mercurial (que, por cierto, no conocía, y es un método fantástico para trabajar), y las ramas remotas de Git se traducen a etiquetas locales de Mercurial (bueno, algo parecido).

A la hora de hacer un clone, push o pull, debes indicar que se trata de un repositorio Git usando los protocolos git+https:// o git+ssh:// (también tienes git+file://, pero es innecesario ya que se detecta automáticamente), y el plugin se encargará del resto.

Debido a algún bug actual, puede que clonar un repositorio remoto te sea muy lento. Para esos casos, te recomiendo clonar a través de Git, y luego traspasarlo a Mercurial desde el clon local, que irá bastante rápido.

Por supuesto, lo mejor de todo es conocer y usar ambos sistemas, pero llevo un tiempo trabajando con esto y va francamente bien.

Cómo migrar un repositorio de Bazaar a Git

Recientemente hablábamos de cómo escoger un control de versiones. Suponiendo que hayas escogido Bazaar y luego hayas querido cambiar a Git, esto te será útil:

# yum -y install git bzr-fastimport
$ git init nuevo-repo.git
$ cd nuevo-repo.git
$ bzr fast-export ../viejo-repo.bzr | git fast-import

Por supuesto, si usas otra distro, cambia la primera línea por su instalador de paquetes correspondiente.

Cómo lograr que alguien te diga que el teclado y el ratón son mejores para jugar que un mando

Fácil: pregunta en un foro de Steam cómo arreglar un problema que tienes para configurar el mando en cualquier juego.

Videoconferencias estilo Hangouts y Skype, pero más fácil

Pruébalo: appear.in. Es tan simple que hace complicada cualquier alternativa, y encima su política de privacidad es muy amigable. De hecho, no necesitas ni abrirte una cuenta.

Su funcionamiento es:

  1. Eliges un nombre para tu sala, por ejemplo: recallstack.
  2. Entras en esa sala a través del link: appear.in/recallstack.
  3. Le mandas ese mismo link a los demás que quieras que entren en esa sala.
  4. Si quieres evitar que alguien adivine el nombre de la sala y os vea, puedes bloquearla, en cuyo caso quien quiera entrar tendrá que ser primero aprobado por los miembros.

Otra buena alternativa es Jitsi Meet, con la ventaja de ser libre, y con la desventaja de que aún no funciona en Firefox.

Por supuesto, si prefieres usar XMPP o SIPJitsi (versión escritorio) es una gran alternativa.

El problema de tener demasiadas redes sociales

Antiguamente, con una cuenta de e-mail podías hablar con el mundo entero.

Hoy necesitas cuenta en Skype, Google Hangouts, Facebook, Vine, WhatsApp, Twitter…

Movim

Muy a menudo me encuentro en la situación de querer enviar un mensaje a un amigo… ¡y no saber cómo! ¡Y eso que tengo el móvil lleno de programas para redes sociales y mensajería!…

Sobredosis de redes sociales

Sobredosis de redes sociales

¿Te pasa lo mismo? Entonces analicemos la causa de esta situación y la solución:

¿Por qué hay redes sociales?

Básicamente, porque cubren (o se aprovechan de) nuestra necesidad de estar en contacto con otras personas (o de alimentar nuestro ego).

Además, sirven para compartir cosas que nos gustan de forma no intrusiva. ¿Recuerdas que antaño recibías montones de PowerPoints de gatitos? Ahora aparecen en las redes sociales, un lugar más apropiado para ellos.

Pero… ¿por qué hay tantas redes sociales?

Por dos motivos: son monolíticas y usan protocolos privativos. ¿Te suena a chino? Me explico:

1. Son monolíticas

Una red monolítica, o centralizada, es la que no te permite comunicarte con el exterior.

Supongamos que Lechuga quiere contactar con Manzana:

Red social monolítica

Red social monolítica

Lechuga tiene que:

  1. Averiguar en qué red/es social/es tiene abierta su/s cuenta/s Manzana.
  2. Posiblemente, instalar un programa en su teléfono (o PC, tablet, etc.).
  3. Abrir una cuenta en dicha red social (previa aceptación de su presumiblemente abusiva política de privacidad).
  4. Averiguar cómo escribirle un mensaje a Manzana a través de ahí.
  5. Mandar el mensaje.

Lo dicho: un soberano lío.

2. Usan protocolos privativos

Un protocolo es una manera de comunicarse. Si es privativo, solo el inventor sabe cómo funciona; por lo tanto, solo él puede usarlo.

¿De verdad es tan importante que se usen protocolos estándares y abiertos?

Sí. Es imprescindible.

Imagínate un mundo en el que no existiera el USB. Pues algo parecido es lo que pasa ahora mismo con la famosa web 2.0. Sencillamente, si todas las redes sociales usaran el mismo protocolo, podrían comunicarse entre sí, y con una sola cuenta podrías hablar con todo el mundo… de nuevo.

Y si eso es tan sencillo…

¿Por qué las grandes redes sociales no corrigen esos problemas?

Porque entonces esas empresas dejarían de tener tantísima información, y…

La información es poder.

— Francis Bacon

Con el modelo monolítico, cuanta más gente usa mi red social, más gente quiere entrar en mi red social para hablar con esa otra gente, y entonces más, y más… ¡y así hasta el infinito!¿Qué se puede hacer con tu información? ¿Cuánto dinero vale? No lo sé, calcúlalo tú. Pero piensa que en esa información están:

  • Tus gustos, inclinaciones políticas, religiosas, etc.
  • Qué le escribes a tus amigos.
  • Las coordenadas exactas de tu ubicación en cada momento de tu vida (si tienes instalada su aplicación en el teléfono).
  • Quiénes son tus amistades.

Pero bueno, dejemos al lado las teorías conspiratorias conspiraciones y centrémonos en la solución.

¿Cuál es la solución?

Una red social que corrija los dos puntos en que fallan las actuales: debe ser federada (o descentralizada) y usar protocolos abiertos y estándar.

Volvemos al ejemplo del e-mail:

Red social federada

Red social federada

En el diagrama queda claro que ni a Lechuga ni a Manzana les importa lo más mínimo dónde tenga el otro su cuenta. Simplemente con saber la dirección de e-mail, se pueden comunicar, que es lo que les interesa.

De hecho, tampoco les importa qué programa usen para ver el correo: Outlook, Thunderbird, algún programa de webmail… Es irrelevante porque todos estos programas hablan los mismos protocolos, que son estándares y abiertos.

Pero, obviamente, el e-mail se nos queda corto para lo que queremos en una red social. Sin embargo, hay un protocolo similar que sí se puede usar:

XMPP, ese viejo amigo que no sabías ni que existía

XMPP (o Jabber) es un protocolo abierto que existe desde 1999, (oficialmente estandarizado en 2000) federado, y que solventa todos esos problemas de un plumazo.

Seguramente lo utilices a diario sin siquiera saberlo, ya que muchas redes sociales lo utilizan internamente (Whatsapp (ligeramente modificado), Tuenti, etc.) o permiten el acceso a través de él (Facebook, Google Hangouts, etc.), aunque suelen bloquearle la federación.

El protocolo es muy extensible, y cuando alguien propone una buena extensión, esta también acaba estandarizándose. Tanto es así que hasta se ha convertido en el favorito para el Internet de las Cosas, pero eso ya lo explicaré otro día.

Habiendo pasado tantos años, existen docenas de clientes para todos los sistemas operativos actuales. Ha madurado mucho, y es actualmente uno de los sistemas más seguros que existen cuando se utiliza en modo OTR.

Cómo empezar a usar XMPP

Para empezar, dejaré claro que un pod es un servidor en el cual puedes hacerte una cuenta, conectado a toda la red XMPP.

Mensajería básica

En su versión más básica, permite tener una lista de contactos, ver su estado de presencia, y chatear con ellos. Si no necesitas más, puedes usar cualquier pod público para empezar.

Redes sociales basadas en XMPP

Hoy en día ya tiene extensiones para que pueda usarse como red social básica, con características tales como:

  • Multiconferencias.
  • Chats de audio y/o vídeo.
  • Microblog.
  • Compartición de archivos.
  • Comentarios.
  • Publicar tu ubicación, estado de ánimo, etc.

Actualmente, hay tres proyectos que destacan bastante:

Jappix

Recomiendo empezar con esta, porque es bastante estable. Está enfocado a ser un chat con extensiones de red social. En su última versión incluye videoconferencias multiusuario.

Ofrece integración con Jappix Me, que sirve para crearte un blog personal basada en el perfil público de tu cuenta XMPP.

Movim

Todavía no es muy estable, pero ya es usable. El proyecto está enfocado más en ser una red social con chat integrado. Tiene un sistema de control de la privacidad de tus publicaciones más exhaustivo, pero sencillo. Compatible con Jappix, y también incluye un blog para tus publicaciones públicas.

Buddycloud

Es quizá el más ambicioso de los tres proyectos, ya que consiste en crear todas las extensiones necesarias para hacer de XMPP la completa red social que debería ser. La contrapartida es que, a diferencia de Movim y Jappix, se basa en extensiones que aún no están estandarizadas (aunque están en proceso) y por tanto no es compatible al 100% con las demás redes XMPP.

Programas para usar XMPP

Para chatear, también te dejo algunas recomendaciones:

  • Windows, Mac OS X, Linux: Jitsi.
  • Android:
    • Conversations, o su derivado FJS Messenger, por ser los más intuitivos.
    • El más completo parece ser Jitsi, pero aún está en desarrollo y no es demasiado intuitivo. Permite hacer videollamadas.
  • iOS: No lo he probado, pero aquí tienes una lista. Se aceptan sugerencias.
  • Firefox OS: Loqui.
  • Navegador web: Si usas Jappix o Movim, puedes chatear desde ahí. Si no, Converse.js parece lo más sencillo.

Corre la voz

Los programas están ahí, el protocolo está ahí. Lo único que les falta es publicidad y usuarios, así que la próxima vez que alguien se te queje de sobredosis de redes sociales, explícaselo y ayúdale a abrirse una cuenta XMPP, la última cuenta que tendrá que abrirse en su vida. Así ayudarás a tener una mejor web.

Cómo evitar que Firefox abra todo con Gedit

Un problema muy habitual al usar Firefox en Linux, sobre todo si usas GNOME, es que descargas un fichero de cualquier tipo, y siempre quiere abrirlo con Gedit.

Solución

  1. Crea el fichero ~/.local/share/applications/xdg-open.desktop con el siguiente contenido:
    [Desktop Entry]
    Name=XDG Open
    Comment=Open with default app
    Comment[es]=Abrir con la aplicación por defecto
    Exec=xdg-open
    Terminal=false
    Type=Application
  2. Edita el fichero ~/.local/share/applications/mimeapps.list.
  3. Busca la línea que pone application/octet-stream=gedit.desktop; y cámbiala por application/octet-stream=xdg-open.desktop;.

Explicación

Firefox no detectaba correctamente el tipo de fichero. Realmente, esto es problema del sitio web del que lo descargas, que no indica correctamente su Content-Type (MIME Type).

Como consecuencia, Firefox, en lugar de usar algún método inteligente para averiguar el contenido del fichero, usa el programa que use tu sistema operativo para abrir ficheros desconocidos, o sea el que esté indicado para el MIME application/octet-stream (fichero binario genérico). En GNOME, dicha aplicación es Gedit. Como resultado, da la impresión de que Firefox quiere abrir todo con Gedit.

Sin embargo, el comando xdg-open es un programa que abre cualquier fichero intentando detectar automáticamente su MIME antes de abrirlo. Al aplicar la solución, forzamos al sistema a tratar de averiguar el MIME cuando no se le dice explícitamente, lo cual funcionará bien en la mayoría de los casos.

¿Qué entorno de escritorio escojo para GNU/Linux?

Al entrar en GNU/Linux, es una de las grandes dudas que todos nos planteamos. Lo haré en forma de preguntas y respuestas.

¿De dónde provienes?

Un criterio sería buscar algo parecido a lo que ya estás acostumbrado.

De Windows

  1. Cinnamon. Distro recomendada: Linux Mint.
  2. KDE. Distro recomendada: OpenSUSE.

De Mac OS X

  1. ElementaryOS.
  2. Unity. Distro recomendada: Ubuntu.

De Android o iOS

  1. GNOME 3. Distro recomendada: Fedora.
  2. Android-X86 (no es algo muy “para novatos”, y no la he probado).

De un antiguo Linux con GNOME 2

  1. GNOME 3 Classic Mode (busca por “Classic” en extensions.gnome.org). Distro recomendada: Fedora.
  2. XFCE. Distro recomendada: Fedora.
  3. Cinnamon. Distro recomendada: Linux Mint.

¿Cómo te gusta trabajar?

Puede que no te dé miedo lo nuevo, así que veamos qué gustos tienes a la hora de manejarte por el escritorio.

Me gusta tener controlado todo a simple vista

… es decir, tener la pantalla bien aprovechada con tanta información como se pueda, pero siempre de forma organizada.

  1. Unity. Distro recomendada: Ubuntu.

Me gusta personalizar absolutamente todo en mi escritorio

  1. KDE. Distro recomendada: OpenSUSE.

Me gusta concentrarme en una sola tarea a la vez y tener las menos distracciones posibles

  1. GNOME 3. Distro recomendada: Fedora.

Me gusta que mi escritorio consuma lo mínimo imprescindible

  1. XFCE. Distro recomendada: Debian Testing.

Me gusta que mi ordenador tenga una estabilidad a prueba de bombas

  1. XFCE. Distro recomendada: Debian Stable.

Notas finales

  1. Hay unos cuantos escritorios y distros que no incluyo. Esto se debe a que esto está enfocado a novatos, y por eso no quiero marearles con demasiadas opciones.
  2. Da igual el entorno de escritorio que escojas, al final siempre puedes usar las aplicaciones que más te gusten de cada uno.
  3. Puedes tener varios entornos de escritorio instalados a la vez, e iniciar sesión en el que más te convenga para cada ocasión.
  4. Aunque veas diferencias entre las recomendaciones de Fedora, Debian y OpenSUSE, en general estas distros son muy recomendables para cualquier entorno de escritorio estándar que quieras usar. Al decir estándar me refiero a los que no están intrínsecamente ligados a una distro en concreto, como GNOME, KDE y XFCE.

Escogiendo control de versiones (bzr, git, hg)

Es una elección difícil. Por suerte o por desgracia he usado los 3 últimamente, así que ahí van mis impresiones:

Bazaar

Empezaré por él porque es el que menos me ha gustado, y porque está muriendo, así que no lo recomendaría para proyectos nuevos.

Está muy bien que viene muy integrado con su GUI Bazaar Explorer, que si bien no es la mejor, es más intuitiva que la línea de comandos.

El principal problema que le he visto es que es muy lento al trabajar en red, al menos al usar Launchpad, que de por sí es la menos intuitivo de las plataformas online de desarrollo que he probado. También la metainformación de los repositorios tiende a ocupar más con Bazaar que con los demás.

Otro problema es que al iniciarte con él te da tantas opciones para organizarte las ramas de tu repositorio, que acabas mareándote… aunque a decir verdad esto pasa con todos al principio.

Git

Sin duda es el más popular de todos, aunque para mí ocupa el 2º puesto. Es el sistema que desarrolla y utiliza la Linux Foundation, con lo cual queda garantizada su eficiencia.

Es muy rápido, y tiene tantísimos comandos para tantísimas cosas que va a ser casi imposible que te falte uno para lo que necesitas. Lo malo es que de tanto que tiene se pasa, y para un principiante resulta algo abrumador, sobre todo teniendo en cuenta que te zambulles directamente en la línea de comandos, ya que no tiene una GUI libre multiplataforma decente (hay muchas, y trae una de serie, pero es horrible). Este es quizá el peor punto para mí. Con Bazaar y Mercurial puedes dejar para más tarde lo de la línea de comandos, si es que llegado el caso lo ves necesario.En parte se debe a que está escrito principalmente en C y Bash, lo cual ha hecho que su implementación en Windows haya sido algo complicada (de hecho es un proyecto aparte), y que algunas GUI hayan empezado por simplemente convertir los clicks de botones en comandos de consola, algo un tanto cutre si lo comparas con tener una buena biblioteca a la que llamar. Esto lo están arreglando con libgit2, pero de momento no llega al nivel de Git.Eso sí: tiene un fuerte enfoque en permitirte modificar el historial de cambios, y está presente en algunas plataformas de desarrollo fantásticas, como GitHub o Bitbucket.

Mercurial

Es mi preferido. Para empezar, en cuanto a eficiencia, cabe destacar que Facebook lo utiliza, y según dicen tienen un código más grande que el del propio núcleo de Linux, y han conseguido optimizarlo hasta niveles que Git les hubiera resultado muy difícil debido a su arquitectura. El resto de usuarios nos podemos beneficiar de los más de 500 parches que han contribuido. En definitiva, es rápido, compacto, escalable y extensible.

De hecho, su fuerte énfasis en su extensibilidad lo podemos notar al ver que viene de serie con una serie de plugins desactivados, que al activarlos nos proporcionan herramientas más avanzadas que lo que es el núcleo de funciones principales. Este enfoque me parece el mejor de los tres, ya que hace que la zambullida inicial sea menos dura, pero que no te quedes sin herramientas conforme te van saliendo necesidades más específicas. Por ejemplo, Mercurial no está muy a favor de modificar el historial, pero puede hacerse de diversas formas con extensiones, y ofrece otras alternativas como MQ.

Toda esta extensibilidad y multiplataformidad vienen en parte de haber elegido desde el principio un lenguaje como Python para escribirlo (con algunas extensiones en C), y ello permite lo que para mí es lo mejor de todo: TortoiseHg. Lo siento, me encanta la línea de comandos, pero esta GUI es sencillamente insuperable.

Reflexión final

La verdad es que, preferencias aparte, se trabaja bien con los tres. Si alguno te gusta más, úsalo y ponte a programar, y no te preocupes demasiado por las demás cosas.

Instalar OpenERP 7.0 en Fedora 19/20

Instalar los paquetes necesarios:

# yum install openerp7 openerp7-httpd-fonts-access postgresql-server

Iniciar los servicios hasta el próximo reinicio:

# systemctl start openerp postgresql

Iniciar los servicios automáticamente:

# systemctl enable openerp postgresql

Desactivar el cortafuegos hasta el próximo reinicio (deberías añadir una excepción, pero no lo explicaré aquí):

# systemctl stop firewalld

Activar el usuario necesario de la base de datos:

$ sudo -u postgres createuser --createdb openerp

Navega a http://localhost:8069 y crea tu base de datos desde ahí.

Si necesitas cambiar la configuración:

# nano /etc/openerp/openerp-server.conf
# systemctl restart openerp
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.