Apps con BitTorrent



Apps con BitTorrent

0 0


ContinuumOnTour2013-BiTorrent-Presentation

Presentación para la JSConf 2015

On Github lporras / ContinuumOnTour2013-BiTorrent-Presentation

Apps con BitTorrent

Presentado por Luis Porras / @lporras16 Ruby/Javascript Developer en Selfie.com

Oh hey, these are some notes. They'll be hidden in your presentation, but you can see them if you open the speaker notes window (hit 's' on your keyboard).

Barranquilla Y Concepción

¿Conocen BitTorrent?

  • Protocolo para Intercambio de archivos peer-to-peer
  • Comunmente usado para transferir archivos grandes
  • Favorito de piratas

Creado por

  • Bram Cohen diseñó el protocolo en abril de 2001
  • publicó su primera implementación el 2 de julio de 2001
  • En enero de 2012, BitTorrent tenía 150 millones de usuarios activos de acuerdo con BitTorrent, Inc
  • tras el cierre de la web Megaupload, el uso de esta plataforma se ha incrementado considerablemente

Muerte de Un Grande

Los países de habla hispana representaban ocho de los 12 donde Megaupload aparecía en la lista de las 30 páginas web más visitadas. La conquista de Latinoamérica se consumó gracias a sitios como Taringa y Cuevana, ambos creados en Argentina.

RENACE LA LEYENDA

Los países de habla hispana representaban ocho de los 12 donde Megaupload aparecía en la lista de las 30 páginas web más visitadas. La conquista de Latinoamérica se consumó gracias a sitios como Taringa y Cuevana, ambos creados en Argentina.

UnOfficial Mega Search Portal

Technically the site doesn’t search Kim Dotcom’s Mega. Instead, it allows users to submit links to files hosted on Mega and makes this repository searchable.

Mega-Search.me, a searchable repository of files hosted on Kim Dotcom’s Mega, has launched a new sister site. Mega-Stream.me brings back some of the Megavideo glory by allowing users to stream video and audio files from Mega. Users can stream videos directly from the Mega-Search.me website or paste a link to an audio or video file hosted on Mega.

UnOfficial Mega Video Streamming Portal

Aclaraciones Importantes

Por favor NO APOYEN LA PIRATERIA

Esta charla no es para aprender a piratear

Yo no soy un pirata

Estructura de una Red BitTorrent

  • Peers: (Puntos) Todos los usuarios de la Red
  • Leechers: (Sanguijuelas) Usuarios que descargan archivos pero no comparten
  • Seeders: (Semillas) Usuarios que contienen el archivo completo
  • Trackers: (Rastreadores) Servidor especial que tiene información necesaría para que los peers se conecten unos a otros

Trackers: Inicialmente es la única forma de localizar qué usuarios contienen el archivo que se quiere descargar.

The Swarm (Enjambre)

Los Usuarios que los trackers se encargan de buscar.

Analogía

Tracker, panal de abejas.

Enjambre, los usuarios.

La miel, el contenido del torrent

1. Un usuario baja de un servidor web un archivo .torrent que contiene la información del fichero que queremos descargar 2. Este archivo .torrent se abre con algún "programa cliente", que sabe interpretar dicha información. 3. El tracker y el peer se comunican a través de una 'conexión HTTP'. El tracker informa de la lista de todos los peers y seeds que contienen partes del archivo que queremos descargar. El tracker se actualiza con la información del nuevo peer que acaba de ingresar. 4. Una vez que el peer sabe dónde tiene que buscar las partes necesarias, este peer se comunica con otros mediante 'sockets TCP' o 'UDP' y el archivo empieza a descargarse en el ordenador del usuario.

Clientes Torrents

Mejoras al Protocolo

Index of BitTorrent Enhancement Proposals

Mejoras al Protocolo

DHT (Distritbued Hash Table)

Cada Nodo conserva info de los nodos vecinos

Evitando un cuello de botella en la caida de un Tracker

Los clientes Torrent tienen la funcionalidad de desactivar el DHT con "Private Flag"

Mejoras al Protocolo

Web Seeding

Busca combinar la potencia de la descarga directa del servidor con la del P2P.

Hay como mínimo una semilla completa de la que descargar siempre

WebSeed - HTTP/FTP Seeding (GetRight style)

Mejoras al Protocolo

Super Seeding

Ayuda a reducir el número de piezas que el 1er seed debe subir para crear las primeras semillas

Cuando un seed “A” es super seeding, no es una semilla normal con el 100% del archivo sino que se oculta como un leecher normal que no tiene ningún dato. A medida que otros peers entran en el enjambre, el superseeder (el peer disfrazado) les manda un mensaje de que tiene una nueva pieza — una pieza que en realidad nunca ha sido enviada. Esto hará que el peer “B” del enjambre pida solamente ese trozo.

Cuando el peer “B” termina de descargar aquella pieza, el seed "A" no le comunicará que tiene otras piezas para enviar hasta que vea que la primera pieza que le envió a "B" haya sido compartida con al menos otro peer “C”. Mientras eso no pase, el peer “B” no tendrá acceso a ninguna de las demás piezas de la semilla “A”, y así “A” no desperdiciará su ancho de banda de subida teniendo que volver a enviar piezas que ya ha enviado.

Limitaciones

Leeching: Normalmente los usuarios se desconectan rápidamente una vez obtenido la copia completa de su archivo.

Para evitar esto han aparecido los denominados trackers privados. Normalmente para usar un tracker privado hay que identificarse previamente.

Se considera que lo justo es subir la misma cantidad de datos que se ha bajado, es decir que la tasa de descarga/subida sea de 1, pero este comportamiento no es común ni está garantizado en BitTorrent. Normalmente los usuarios se desconectan rápidamente una vez que han obtenido la copia completa de su archivo. Esto se denomina leeching. Esta forma de actuar provoca que aunque todo el contenido nuevo se comparta al principio muy rápidamente, con el paso de los días el torrent caduque porque no quedan semillas, ya que BitTorrent sólo ofrece incentivos a los leechers pero no a los seeds que no obtienen ninguna ventaja por permanecer subiendo a la red.

Para evitar esto han aparecido los denominados trackers privados. Normalmente para usar un tracker privado hay que identificarse previamente. Para cada usuario registrado guardan las estadísticas de tráfico y utilizan un sistema de porcentajes que permite saber si el usuario comparte o no los datos que haya descargado o esté descargando. Muchos de estos trackers suelen expulsar a los usuarios que tienen un porcentaje bajo, ya que al no compartir no colaboran con la red.

Sitios Relacionados a Torrent

Búscador más Famoso

Recientemente la justicia sueca ha condenado a los webmasters de The Pirate Bay a multas y penas de cárcel por colaboración en la distribución de archivos con copyright, a pesar de que los contenidos en sí no están albergados en sus servidores.

Universidad de Stanford

Torrent Freak

PUT IO

HIVE

BTAPPS LAB

Yify Torrent Plugin

Yify Torrent Plugin in Action

viejito, y los smartphones?

UTORRENT

Suficiente de Historia

¿Qué es Btapp.js?

  • Librería Javascript
  • Desarrollada por BitTorrent Inc.
  • Permite administrar torrents y muchas cosas más

Funcionalidades Interesantes

Dependencias

Dependencias

Btapp.js depente fuertemente de jQuery, Backbone, Json2 y jStorage

  • <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
  • <script src="http://cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js"></script>
  • <script src="http://underscorejs.org/underscore-min.js"></script>
  • <script src="http://backbonejs.org/backbone-min.js"></script>
  • <script src="https://raw.github.com/andris9/jStorage/master/jstorage.js"></script>

Dependencias

Backbrace es altamente recomendado, para aliviar algunos de los problemas que podrías tener usando árboles profundos de modelos y colecciones.

  • <script src="https://raw.github.com/bittorrenttorque/backbrace/master/backbrace.js"></script>

Código Fuente

  • <script src="http://torque.bittorrent.com/btapp/btapp.min.js"></script>

O... Descargar Btapp.js source

Compatibilidad del API

Compatibilidad del API

Por defecto, el Api tratará de usar Torque

lo que significa, facilita la instalación de un plugin, y el mencionado cliente torrent Si no se encuentra.

Conectarse a Clientes Torrents

Torque

//Se conecta a Torque (por Defecto)
var btapp = new Btapp;
btapp.connect();
            

O...

//Usando la sintáxis de plugin
var btapp = new Btapp;
btapp.connect({
product: 'Torque'
plugin: true
});
            

Conectarse a Clientes Torrents

uTorrent

var btapp = new Btapp;
btapp.connect({
  product: 'uTorrent',
  plugin: false,
  pairing_type: 'native'
});
            

BitTorrent

var btapp = new Btapp;
btapp.connect({
  product: 'BitTorrent',
  plugin: false,
  pairing_type: 'native'
});
          

Fragmentos de Código

Advertencia Asíncrona

No Hacer

var btapp = new Btapp();
btapp.connect();

btapp.get('torrent').each(function(torrent) {
  torrent.remove();
});
          

Hacer

var btapp = new Btapp();
btapp.connect();

// Este código esperará por el evento de añadir el torrent.
btapp.on('add:torrent', function(torrents) {
  torrents.each(function(torrent) {
    torrent.remove();
  });
});
          

Añadiendo un Torrent

var magnet = 'magnet:?xt=urn:btih:f0d665f264393a7dafd7d05d739e1097df652e80&dn=The.Yes.Men.Fix.The.World';

//var url = 'http://vodo.net/media/torrents/Deadside.Pilot.2012.720p.x264-VODO.torrent';

var callback = function() {
  alert('añadido el torrent');
};

btapp.get('add').torrent({
  url: magnet,
  callback: callback
});
          

Archivos Torrents

var files = btapp.get('torrent').get('D9C70109CB05C181F9EC9373BE876A0D40C4D7B0').get('file');

> files.pluck('id');

 ["Continuum Tour 2013.mkv", "Want.to.see.what.happens.next.url", "vodo.nfo"]
          

Porcentage de Descarga del Torrent

var btapp = new Btapp;
btapp.connect();

var url = 'http://vodo.net/media/torrents/Deadside.Pilot.2012.720p.x264-VODO.torrent';

btapp.live('add', function(add) {
  add.torrent(url);
});

btapp.live('torrent * properties download_url', function(download_url, properties) {
  // Solo interesado en el torrent que tiene un download_url que coincide la url provista
  if(download_url == url) {
    var name = properties.get('name');
    // Encontramos nuestro Torrent!
    // Ahora escuchamos los cambios del progreso
    properties.on('change:progress', function(progress) {
      // Tenemos una actualización!
      alert('Progreso de tu descarga de ' + name + ': ' + progress);
    });
  }
});
          

Visualizador del API

Otro Material

Programando en Vivo: Aplicación DHT usando btapp.js por Patrick Williams en Vimeo.

Demostración

Preguntas?

Gracias