Recent Posts by Gustavo Moreno

Natural y artificial: la dicotonomía imaginaria

Me está empezando a cabrear mucho el ambiente generalizado en el que  «la tecnología» cada vez más personas la perciban como «lo malo», añorando un «retorno a una naturaleza» beatífica que jamás existió, y lo que es peor, dejando que sean otros los que a las finales decidan como serán sus vidas y, de paso, las de todos los demás.

paisaje corotDurante la eṕoca en la que los nacionalismos estaban en auge, la del romanticismo, pusieron en valor la «naturaleza». Pero era una naturaleza con el opuesto de lo «artificial», concretamente lo artificioso de la «industria». Las pinturas de la época romántica están llenas de «naturaleza», pero con el dominio de sólo de una parte de la misma: el paisaje. Aquellos paisajes no eran sino los que representaban a la nación ante el mundo. También para los románticos la imaginación era concebida como fuerza por sobre la naturaleza, la cual no era producto del ser humano, sino la confirmación de que la naturaleza estaba gobernada por fuerzas «sobrenaturales», lo que apuntalaba muy emotivamente la creencia que es posible que haya cosas fuera: la tecnología, con sus artefactos, era una abominación extranatural.

Pero una visión tan profundamente parcializada de la naturaleza lo que está dejando fuera es… el resto de la naturaleza. No hay tal dicotonomía entre natural y artificial. La Naturaleza es el Universo. El Universo es todo lo que existe. Una nebulosa sideral no es más natural que una sierra hecha con quijada de antílope. Ni una cebra es más natural que un generador eléctrico. Ni la montaña se rige por otro «código fuente» natural que una ciudad artificial construida con coral. La Naturaleza es todo lo Real. Si hubiera algo fuera de la naturaleza, equivaldría a decir que está fuera del universo, y por lo tanto, de la realidad. Y al estar fuera de la realidad, no podemos estar hablando de ciudades, generadores eléctricos o cebras.

tren y lluviaProbablemente no sea la única manera. El modo de relación con la naturaleza más auténticamente humano sin duda es la transformación del entorno. Si los dioses existen, nos dieron el don de transformar la Tierra. No veo porque esta facultad ha de ser horrenda; más bien es bella. Los dioses también nos dieron libertad para embellecer la Tierra, o convertirla en un erial por falta de conocimiento, pero no nos la dieron para dejarla como estaba: el precio a pagar por tal conservadurismo era la extinción.

Es entonces con el trabajo, es decir, con la actividad de transformación del entorno, donde el ser humano se relaciona con la naturaleza (la realidad, el universo) más que con ninguna otra actividad. Pero aquí es donde empiezan nuestras alegrías, tragedias y mayores desacuerdos.

Quién tiene el poder para decidir sobre otro ser humano cómo tiene que hacer un trabajo, está decidiendo el modo en que éste se relaciona con la naturaleza. Por lo tanto, los proyectos en los que trabaja se tornan ajenos a él, sin sentido, y esto es lo que se llama alienación. Cuando un trabajo no es elegido por amor al arte, y aun en el caso en que sea así, pero el proyecto sea dirigido exteriormente respecto a los deseos de quien lo realiza, el trabajo es fuente de enajenación, en mayor o menor medida. No es extrañar que con los niveles de creciente alienación de las condiciones de trabajo de una buena parte de la humanidad, estén tomando fuerza de nuevo interpretaciones «sobrenaturales» de la naturaleza, como el nacionalismo o la percepción romántica de la naturaleza.

Al sentirnos ajenos al trabajo que realizamos, puede ser fácil sentirse «aparte» de la naturaleza, y con tal sentimiento es concebible que la naturaleza tenga opuesto, pues no es el trabajador, sino la propia «persona» quién se siente en el opuesto… y añora el «retorno a la naturaleza». Es un pensamiento que, lejos de ser entrañable, es profundamente reaccionario y esquiva por completo el problema. En bruto: el autoritarismo que aliena no es el problema, sino la actividad productiva en sí.

Pero hasta un trabajo alienante, siempre que no llegue a extremos de violencia pura y dura, es más deseable, pone más en contacto con la realidad, que el exilio del desempleo. Exilio que puede llegar a ser muy largo. Lo sé. Yo también tengo un trabajo alienante. Por las mañanas iría a muchos sitios antes que a trabajar. Pero también he conocido el exilio y prefiero un trabajo precario que el vacío.

Si el «retorno a la naturaleza» engendra grandes reaccionarios y es obvio que las condiciones de trabajo actuales tampoco satisfacen, por no hablar de estar en paro, el único camino es la reconquista del trabajo… en el que decidamos no sólo en qué, sino cómo trabajamos. Pero aún, eso sí, cuando ésto último no sea posible, es mejor un trabajo precario que el exilio de la vida productiva.

Trabajo que siempre se realiza con otros. El ser humano no trabaja en el vacío; salvo Robinson Crusoe, y algún otro individualista producido por la reforma protestante, no trabaja solo. La comunidad igualitaria productiva, en la que todos los miembros deciden sus proyectos (en base a la realidad económica) y cómo trabajarlos (según sus capacidades), parece ser el único camino de conseguir vidas con sentido, es decir, sabiendo por qué trabajamos más allá de los ingresos monetarios y sin tentativas de rebelión contra la realidad… empresa esta última que, solos o en grupo, necesariamente lleva a la locura, individual o colectiva. Es aquí, en la comunidad igualitaria como superadora de una crisis a varios niveles y que entiende la naturaleza sin delirios románticos, donde más incide el Manifiesto Comunero.

Léanlo, y tal vez entiendan de una vez que la máquina libera.

 

Cómo publicar calendarios Owncloud en WordPress sin plugin premium

En este artículo explico como me las he ingeniado para importar calendarios Owncloud, versión 9, hacia un WordPress 4.5 en un sistema GNU/Linux, aunque es probable que funcione en otros sistemas. Ningún pluguin gratuito de WordPress importa calendarios de Owncloud y los renderiza a día de hoy. Hasta hace poco lo hacía el pluguin All-in-one Event Calendar, pero una incompatibilidad con las últimas actualizaciones de WordPress han dejado tal característica fuera de combate. Sin embargo, este pluguin sí puede importar archivos ICS desde otro lugar de manera periódica y renderizarlos.

Para importar los calendarios al mismo servidor donde tengo el WordPress, y mantenerlos actualizados y accesibles, he creado un script el cual Cron debe ejecutar cada cierto periodo de tiempo.

En el script que publico, los calendarios importados estarán en la carpeta /uploads/calendarios de la instalación del WordPress, catalogados por usuario y el mismo nombre de calendario del Owncloud. En el plugin All-in-one Event Calendar, será necesario especificar la url de cada calendario importado, por ejemplo:

http://miservidorwordpress.com/wp-contents/uploads/calendarios/usuario/calendario.ics

Cada calendario es importado por el script al que llamo importICS.sh

#!/bin/bash
importICS () {
    URL="http://"$DOMAIN
    dest_dir_root="/var/www/wordpress/wp­-content/uploads/calendarios/"
    dir=$dest_dir_root$CALUSER
    [[ -d $dir ]] || mkdir $dir
    wget ­O $dir/$CALENDAR".ics" ­­auth­-no­-challenge ­­http­-user=$CALUSER ­­http­-password=$CALPASS $URL"/remote.php/dav/calendars/"$CALUSER"/"$CALENDAR"?export";
}
file=$1
while IFS=, read CALUSER CALPASS CALENDAR DOMAIN
do
    importICS
done < $file

El script lee un archivo CSV, delimtiado por comas, del que toma los datos del usuario y calendario a importar del owncloud. Tiene un formato como este:

usuario1,123456,cal1,urlowncloudmidominio.com
usuario1,123456,cal2,urlowncloudmidominio.com
usuario2,123456,tres,urlowncloudmidominio.com

El primer campo es el nombre del usuario del calendario, el segundo su password, el tercero el nombre del calendario y el cuarto el dominio del owncloud.

Este archivo puede editarse fácilmente con una hoja de cálculo y exportarse como CSV delimitado por comas.

Cron ejecuta el script periódicamente para mantener los calendarios actualizados y, en condiciones normales, sólo habrá que hacer cambios esporádicos en el archivo CSV, pero por si se quiere actualizar los calendarios a mano, el script se ha de lanzar con un sólo parámetro: el nombre del archivo CSV. Por ejemplo:

$ sudo bash /opt/ICS/importICS.sh calendarios.csv

Por último, tan sólo hay que añadir la tarea al Cron para que ejecute el script con la frecuencia deseada y con ello ya tenemos los calendarios accesibles para el pluguin All-in-one Event Calendar.

No es imprescindible que los calendarios exportados desde Owncloud tengan como destino la misma máquina donde está instalado Worpress, sino que con algunas modificaciones al script pueden almacenarse en cualquier directorio al que tenga acceso el pluguin. También sería muy deseable añadir certificado SSL, aunque no lo he hecho pues ambas máquinas en mi caso se encuentran en el mismo segmento de red y no viajarán esos datos por Internet. Ténganse en cuenta también que en muchos casos los archivos ICS importados serán de acceso publico, por lo que el servidor donde estén alojados podría requerir configuraciones adicionales para limitar el acceso.

Espero que este artículo sea de utilidad.

Cómo lanzar streaming Bittorrent desde Firefox

Por viernes, 22 abril, 2016 0 , Permalink

¿Queréis ver una película en streaming tan sólo pulsando un enlace del navegador? ¿Queréis que, además, sea un streaming P2P en la red bittorrent?

Muchas veces yo también he querido, por lo que he «inventado» una manera de hacerlo. Para ello utilizaremos la aplicación en javascript Peerflix, un binario que he hecho yo mismo con una explicación para su creación y el navegador Firefox.

Preparativos

La magia de todo la da Webtorrent, del que últimamente se está hablando mucho, sobretodo desde que comenzó a utilizarlo Netflix. Sin embargo, su primer commit fue a mediados del 2014 y hay algunas aplicaciones que lo utilizan como motor. Una de ellas es Peerflix, que permite hacer un streaming en línea de comandos pasándole algunos parámetros.

Para este «invento» utilizo Peerflix, aunque cuando veáis la lógica de cómo monto el tema para lanzar el vídeo desde el navegador, bien podríais utilizar Webtorrent-cli e incluso un lanzador gráfico hecho por vosotros mismos.

Otro de los artilugios que necesitaréis son los reproductores VLC o Mplayer, al menos uno de los dos.

Peerflix es una aplicación en NodeJS, es decir, aplicaciones Javascript que para ejecutarse no necesitan un navegador, con las posibilidades que ello ofrece. Para lanzarlas necesitamos NodeJS instalado en nuestra máquina. La manera más rápida, y es válida en muchos casos, es instalarla desde los repositorios de nuetra distribución. Sería raro, raro, que no estuviera.

sudo apt-get install nodejs

o el equivalente en vuestra distribución.

Ello también instalará la aplicación npm. Esta aplicación es un gestor de paquetes estilo apt, pero para aplicaciones en Nodejs. Esta será condicion si ne qua non para poder instalar Peerflix ya que ésta no existe, que yo sepa, en repositorios de distribución. Para instalarla:

sudo npm install peerflix -g

A partir de ahora, ya podríamos utilizarla en una línea de comandos. Yo lo he hecho mucho tiempo. Y seguiré haciéndolo cuando haga falta.

Pero este post va de lanzarla desde un navegador, ¿No?

Binarios para utilizarlos con Firefox

Firefox no lanza scripts bash. Partiendo de ahí, si queremos asociar un tipo de archivo o de enlace a una aplicación, necesitamos un binario.

Aquí he tenido que crear un script bash que cuando lo veáis al final de artículo, veréis que es muy poca cosa. Básicamente, lanza Peerflix con el magnet y abre VLC o Mplayer.

Necesitaréis, al menos, unos de los dos archivos binarios que contiene este archivo: torrentstream.tar.gz.

Una vez descomprimido, dispondréis de dos archivos:

  • torrentstream-vlc
  • torrentstream-mplayer

No hace falta ser un pensador muy penetrante para darse cuenta de qué reproductor de vídeo lanzará cada uno de ellos. Estos archivos también podéis usarlos en la línea de comandos y quedaros aquí, pero me haría ilusión que lo utilicéis en el Firefox para ver las películas.

Asociar tipo MIME en Firefox

Lo que significa decirle a Firefox: cuando te digan que abras este archivo o este tipo de enlace, lanza la aplicación que te hayan dicho.

Muchas de tales asociaciones ya vienen «de fábrica», pero lógicamente pueden cambiarse.

Para asociar el tipo magnet a uno de los lanzadores que, supongo, ya os habéis descargado o estáis pensando en hacerlo, es sencillo. Si no tenéis el tipo magnet asociado a ninguna aplicación, a la hora de pulsar un enlace magnet, Firefox os preguntará si queréis asociarlo a una aplicación, en un cuadro de diálogo como éste:

dialogo mime firefox

En la imagen, ya tengo la aplicación torrentstream-vlc, aunque es probable que vosotros no la tengáis aún. Sobre otros clientes de Bittorrent que salen en la lista como los de Transmission, bueno; pecadores, pecadores… 🙂

No olvidéis recordar decirle a Firefox que recuerde la elección, aunque puede cambiarse en la preferencias. Pues vale, pero ¿Cómo?

Pues hay que ir a Preferencias -> Aplicaciones, buscáis el tipo magnet y os saldrá algo como esto:

aplicaciones mime firefox

La aplicación sería torrentstream-vlc o torrentstream-mplayer, a elegir.

Y a partir de este momento, cuando hagáis un clic en un enlace magnet, se abrirá la aplicación de reproducción de vídeo de las dos que hayáis elegido. Recordad, también, que es streaming P2P, por lo que antes de empezar la reproducción habrá que esperar unos segundo hasta que tenga suficientes fuentes y llene un pequeño buffer.

Con esto, y un apéndice, ya está hecho. Para aquellos que no se fíen de cargar cualquier binario, y por si alguien quiere hacerlo por sí o mismo o lanzar Peerflix con más opciones, a continuación explico cómo los he creado.

Creación de binarios

Los script bash que hecho me extrañaría mucho que sean estudiados por generaciones futuras. El de Mplayer:

#!/bin/bash

/usr/local/bin/peerflix $1 -m

El de VLC:

#!/bin/bash

/usr/local/bin/peerflix $1 -v

¿Cómo convertirlos en binario?

Yo he utilizado la aplicacion shc y los siguientes comandos:

./shc -v -r -T -f torrentstream-mplayer
./shc -v -r -T -f torrentstream-vlc

Cada uno creará un archivo como torrentstream-mplayer.x que después puede ser renombrado y utilizado.

WebTorrent Desktop, una aplicación de streaming de vídeo y audio con Bittorrent

Por domingo, 10 abril, 2016 0 Permalink

De la mano del ya conocido por estos lares Feross Aboukhadijeh, nos llega Webtorrent Desktop, una aplicación Bittorrent muy sencilla para ver vídeos y escuchar audio en streaming.

Aún está en fase beta y la interfaz es muy simple, aunque ligera y maja, en la que se deja sobre ella un archivo torrent o bien se copia un enlace magnet para comenzar la descarga.

No depende de ningún servidor de archivos y éstos están distribuidos en la red. Tan sólo hay que pegar el enlace o el torrent y empieza la descarga.

WebTorrent (BETA)_005

Hace uso del módulo Webtorrent para Javascript y está embebida en Electron. Webtorrent hace conexiones en un navegador sólo través del protocolo WebRTC. Esta aplicación de escritorio puede, además, realizar conexiones TCP,  por lo que también puede hacer el streaming desde cualquier tracker público bittorrent.

Webtorrent Desktop tiene incorporadas varias fuentes desde las que descargar películas o audio, según dice la web del proyecto:

Whether it’s video from the Internet Archive, music from Creative Commons, or audiobooks from Librivox, you can play it right away. You don’t have to wait for it to finish downloading.

Además de descargar a tu escritorio, también emite a través de Airplay, Chromecast y DLNA.

fotograma bib bunny

Para los que prefieran la línea de comandos, con Webtorrent puede utilizarse el comando webtorrent-cli o Peerflix como alternativa, para el que hice un script en Python.

Instalación Linux Mint (y Ubuntu 64 bits)

Una vez descargado el archivo de la aplicación, descomprimimos y lanzamos el binario Webtorrent. Y ya está.

Es un proyecto abierto y en constante desarrollo, por lo que si quieres colaborar puedes hacerlo en su git.

 

Creatividad y tiempo

Por sábado, 5 marzo, 2016 0 Permalink

No cabe negar que los directivos de hoy todavía se centran demasiado en los factores externos del trabajo, como el dónde y el cuándo, en lugar de incentivar la creatividad, de la cual, en la economía de la información, dependen el éxito y prosperidad de la empresa. La mayoría de los directivos no ha comprendido las profundas consecuencias de la pregunta siguiente: ¿Qué propósito tenemos al trabajar: cumplir una condena o hacer algo? A principios de la década de 1970, Les Earnest, del laboratorio de inteligencia artificial de la Universidad de Stanford, resumía bien la respuesta dada por los hackers a esta cuestión: «Intentamos considerar a las personas no por la cantidad de tiempo desperdiciado, sino por lo conseguido durante períodos de tiempo bastante largos, como medio año o un año». […] La mentalidad de la supervisión del horario laboral trata a las personas adultas como si fueran demasiado inmaduras para hacerse cargo de sus propias vidas. Supone que son sólo unas pocas personas en una empresa dada, o un organismo gubernamental, las que han alcanzado un grado de madurez suficiente para asumir la responsabilidad por sí mismas, y que la mayoría de los adultos son incapaces de hacerlo sin la guía continua de un reducido grupo con autoridad. […] Los hackers no suscriben el lema de que «el tiempo es dinero», sino más bien el adagio de que «mi vida es mi vida». Y ahora, sin lugar a dudas, se trata de vivir nuestra vida de forma plena y no como una depauperada visión de segunda categoría.

 
«La ética hacker y el espíritu de la era de la información», Pekka Himanen

Listar archivos de directorio remoto en WordPress con Linux

Por miércoles, 2 marzo, 2016 0 Permalink

Cuando sea necesario listar contenidos de carpetas compartidas en una intranet con WordPress, hay algunas posibilidades. Una de ellas es cargar el recurso compartido con enlaces con un aspecto similar a éste -> file://FileServer/Public

El problema de cargar el directorio remoto con el protocolo file:// es que para muchos navegadores son necesarios instalar plugins en cada uno de ellos. Es una solución válida, pero requiere instalar los plugins en cada navegador de los ordenadores que utilicen la intranet, lo que podría ser un dolor en redes de gran tamaño.

Otra opción es montar el directorio remoto con cifs en un punto de montaje del host virtual dónde está la instalación del WordPress. De ese modo, WordPress podrá acceder a los archivos remotos a través de los enlaces en la máquina local como si estuvieran físicamente en ésta.

Para mostrar el contenido de un directorio local como contenido de un post o página existe el plugin m1DownloadList.

Preparativos

Si no tenemos cifs, lo instalamos:

$ sudo apt install cifs-utils

Tenemos en una máquina remota una carpeta compartida SMB con permisos de solo lectura llamada \\SRVFILE\Public con credenciales para el usuario gato con el password Pajaro

Vayamos primero a instalar los paquetes necesarios en el servidor Linux. Este post está escrito pensando en Debian y derivadas, pero en otras distribuciones será muy, muy parecido.

Supongamos que tenemos el host virtual en la ruta:

/srv/wordpress/intranet

Entonces, creamos un directorio dentro de esa ruta:

$ sudo mkdir /srv/wordpress/intranet/srvfile

Credenciales

Creamos en el servidor donde está alojado el WordPress un archivo con las credenciales cifs, llamado /etc/smbcredentials, con el suguiente contenido:

username=gato
password=Pajaro

Interesa que el contenido de este archivo sea leído por el mínimo número de usuarios posible, lo ideal sería que sólo lo lea root en los sitemas Debian o el usuario con permisos de administración de distribuciones Ubuntu. Como regla general, sería de ayuda establecer estos permisos:

$ sudo chmod 500 /etc/smbcredentials

Montaje automático al arranque

En el archivo /etc/fstab están definidas las particiones que se montarán en el sistema de archivos al inicio del sistema, además de comparticiones remotas.  Las particiones y las shares «se montan» (en el argot linuxero) en cualquier punto del árbol de directorios, lo que equivaldría a decir que las carpetas compartidas pueden mapearse hacia cualquier lugar. Es en la ruta /srv/wordpress/intranet/srvfile donde montaremos el recurso compartido.

Editamos el archivo /etc/fstab con permisos de escritura:

$ sudo vi /etc/fstab

Calma: si no te gusta Vi, puedes usar Emacs, Nano o aquel con el que te sientas mas cómodo 😉

y añadimos la siguiente línea:

//SRVFILE/Public     /srv/wordpress/intranet/srvfile     cifs     credentials=/etc/smbpasswords       0     0

Hay mas opciones, claro; para ello te dejo que consultes las páginas man y lo tunees al pelo según tus necesidades 🙂

Para comprobar que esté todo bien, no es imprescindible reiniciar. Podemos montar la carpeta compartida con el comando:

$ sudo mount -a

Lo que montará toda la tabla de sistemas de archivos del /etc/fstab

Si todo ha ido bien, veremos los archivos compartidos con el comando:

$ ls /srv/wordpress/intranet/srvfile

Plugin de WordPress M1 Download List

Se trata de un plugin para listar directorios locales sin subirlos con la interfaz de WordPress.

Su uso es muy sencillo; tras activar el plugin, basta crear una página o artículo con un shortcode definiendo en él la ruta local a partir del directorio raíz del host virtual.

Como indican las instrucciones del plugin, para visualizar el recurso compartido anteriormente es suficiente con introducir este shortcode:

[m1dll path="srvfile/"]

Y saldrá algo como esto:

m1downloadlist

Es posible que tengas que configurar el juego de caracteres para que se visualicen los acentos y eñes, pero eso vendrá más adelante.

 

Si has intentado instalar el navegador web Iridium en Linux Mint como indican las instrucciones de instalación de su página, habrás tenido el problema de que el paquete no está en los repositorios para la distribución, a pesar de que sí está para la versión de base Ubuntu.

Para instalarlo desde repositorio, puede añadirse el siguiente repo al archivo /etc/apt/sources.list

deb https://downloads.iridiumbrowser.de/ubuntu utopic main

De momento, no hay soporte para versiones más actuales del sistema operativo, pero ya podemos instalar sin compilar de fuentes la versión libre de Chrome.

Smuxi: mensajería multiprotocolo con aire retro

Hubo un tiempo donde todo el que quería comunicarse por Internet en tiempo real tenía que conectarse al IRC. Fue antes de los blogs, del Messenger y mucho antes de Facebook y otros grandes recentralizadores.

El IRC no tenía avatares, ni gráficos molones. No tenía trending topic ni hypes. ¿Qué tenía, entonces?

Era comunicación en tiempo real basada en texto a finales de los 90. Simple, directo, rompedor. Nunca antes en la Historia se habían juntado personas localizadas en diferentes partes del mundo en una misma sala para charlas sin esperas. Ninguna teoría de la Historia lo predijo. Los BBS y las listas de correo eran asíncronas. Es decir, podían pasar meses hasta que los receptores de un mensaje decidieran responderlo. EL IRC era inmediato. Eramos un apodo en un mundo sin fronteras, cadenas de texto casi como telepatía. Era salir por primera vez del territorio en cual el determinismo nos había tenido confinados, el hub de la megápolis para cualquiera que tuviera un módem y un ordenador. Tenía un mundo de posibilidades ingobernables.

Smuxi es un cliente multiprotocolo con todo el aire retro de aquellos clientes de IRC. Puede conectarse a cualquier red de IRC (¡aún viven!) y también a Jabber,  Twitter y otras. Además, puede estar conectado a través de TOR. Si queréis consultar la lista de características, aquí.

irc smuxi

Para instalarlo en Linux Mint, hay que introducir los siguientes comandos:

sudo add-apt-repository ppa:meebey/smuxi-stable
sudo apt-get update
sudo apt-get install smuxi

Para conectar a un servidor como freenode hay que ir a Servidor → Conectar y elegir apodo. En Buscar chat grupal veremos las salas de charla.

Si queremos estar al mismo tiempo en un servidor Jabber y tener los datos de conexión guardados, deberíamos ir a Smuxi → Preferencias → Servidores y configurar los datos.

smuxi servidor
Aún le faltan características como OTR y envíos por DCC que tienen otras aplicaciones, pero para quien quiera un cliente de mensajería en tiempo real muy retro, con posibilidad de cifrado con TOR, esté cliente puede que le resulte interesante.

Resumen del 2015

Por jueves, 31 diciembre, 2015 0 Permalink

Este 2015 ha sido un año intenso en mi vida, que empezó por rescatar a una amiga de un maltrato el 1 de enero entre amenazas, y en el que, gozosamente, también conocí a los amigos de la Matriz, a los Aesires, a los Indianos y a mucha gentuza maja 🙂

Todos los post la Enredadera que he publicado durante el 2015 tienen que ver de un modo u otro con ellos. He hecho una selección de los más significativos para mí. En algunos casos no son los que más visitas han tenido, ni los mejor elaborados, pero son los que mejor marcan épocas que este año me ha regalado, como aquellas canciones que evocarán recuerdos para siempre.

Redes de pares

La topología de diamante

El templo y las fuentes

Caos armónico

Instalar GnuSocial en una Raspberry Pi

Ofuscar el tráfico bittorrent: introducción breve

Testeo automático de conectividad en bash

Mi debut fue en el Somero 2015

Feliz 2016! 😉

Películas a la carta en línea de comandos

Por martes, 1 diciembre, 2015 0 , Permalink

Peerfilm es un script para ver vídeos en streaming en la red bittorrent. El script necesita Python 2.7 y depende del programa Peerflix, escrito en Nodejs. Para instalarlo:

#npm install -g peerflix

Una vez instalado y resueltas otras posibles dependencias, Peerfilm estará listo para utilizarse. A continuación comparto el script:

"""
   Peerfilm

   Author: Gustavo Moreno
   Email: gustavo@laenreadera.net

   Streaming P2P via bittorrent

   Depends on:
       - Peerflix

   Install Peerflix:

       - npm install -g peerflix

   This script streams films from bittorrent network. Using it is easy. Just
   enter a magnet uri in prompt or load a CSV file that contains magnet uris.

   CSV file is delimited by ';' and fields are:
        Title;Year;magnetURI

"""

import subprocess

class Films:

       def __init__(self):
          self.magnetList = []
          self.inputIsMagnetURI = False


       def selectTorrentSource(self):
          # Choose between single magnet or csv file
          sourceInput = raw_input("Enter path of CSV file or enter magnetURI: ")

          if 'magnet:?' in sourceInput:
             self.inputIsMagnetURI == True
             self.loadMangetURI(self.inputIsMagnetURI)
          else:
             self.CSVFile = open(sourceInput,"r")
             self.loadMagnetURI(self.inputIsMagnetURI)


       def loadMagnetURI(self, singleMagnet):

          if singleMagnet == True:
             self.title = 'Streaming... '
             self.magnetURI = source
          else:
             self.buildListFromFile(self.CSVFile)


       def buildListFromFile(self, CSVFile):

          peli = []

          lineas = CSVFile.readlines()
          for linea in lineas:
              peli = linea.split(";")
              self.magnetList.append(peli)


       def userSelectFilmFromList(self):
          # Prompt user to choose a film from a given list of titles

          numerationOfAvailableFilms=0
          for row in self.magnetList:
             print numerationOfAvailableFilms+1, " ", row[1], " ", row[0]
             numerationOfAvailableFilms += 1

          num_peli = int(raw_input("What film do you want to watch? "))
          self.title = self.magnetList[num_peli-1][0]
          self.magnetURI = self.magnetList[num_peli-1][2]


       def streamFilm(self):
          # Launch peerflix to VLC
          # Type 'peerflix -h' in console to see available parameters

          print "\n\n\nStreaming... ", self.title, " \n\n\n"
          subprocess.call(['/usr/local/bin/peerflix', self.magnetURI, '-v', 'peliculas/%s'%self.title])


       def play(self):

          self.selectTorrentSource()

          if self.inputIsMagnetURI == True:
              self.streamFilm()
          else:
              self.userSelectFilmFromList()
              self.streamFilm()


film=Films()
film.play()

El archivo CSV está delimitado por ; y tiene los siguientes campos:

Título;Año;Magnet

Por ejemplo:

EL corredor del Laberinto: Las Pruebas;2015;magnet:?xt=urn:btih:2813c7e559a98b8e11fd360c1af3773839bcc6dc&dn=El+corredor+del+laberinto-Las+pruebas+%282015%29.HDrip&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Fexodus.desync.com%3A6969

Este script lanza el reproductor VLC. Peerflix, el proceso al que llama subprocess, tiene otros parámetros como lanzar el vídeo en los reproductores omx o MPlayer.

captura de peerflix y vlc¡Saludos!