Archivism notes

Estas son algunas notas que fui tomando sobre Archivismo Digital. Si bien es un area que me interesa seguir explorando, siento que todavía mi conocimiento sobre procesos y herramientas esta bastante verde, por eso es que sigo buscando formas para mejorar.

  • Archivism != Presservation
    • para preservar necesitamos buscar una forma de publicar y hacer que el contenido se accesible.
    • entiendo que es necesario publicar el contenido para que quede preservado, pero también siento que con tener un backup es un buen primer paso.
  • {{archivebox}} es para mi la herramienta mas fácil de usar, hace casí todo automático. Lo único que habría que ver es de modificar los archivos warc para que no dejen metadatos como la IP o la ruta relativa de donde se guardo
    • otra cosa a tener en cuenta es que tenemos que pasarle a la aplicación todas las URLs que queremos archivar, no hace scrapping.
  • {{grab-site}} es otro proyecto que también esta muy bueno, es mas manual el asunto y no tiene una interfaz tan pulida como {{archivebox}} pero le pasas una URL y guarda todo lo que encuentra.
    • se instala con python directamente baremetal
    • no hay forma de resumir el proceso, si por alguna razón falla y explota o se reinicia el server, el proceso queda en su estado final si arrancas de nuevo, arranca un proceso nuevo.
      • esto es un problema si tenes problemas de cortes de luz y esas cosas, por que para páginas grandes el proceso suele tardar bastante.
    • parece que se puede utilizar wpull3 para resumir lo que estabas descargando, pero bueno, queda todo medio des-prolijo
  • hay otra herramienta llamada warcio pero por lo que estuve leyendo en el repo no respeta 100% el standard de WARC, eso es una cagada. Cada proyecto lo implementa como se le canta.
  • todavía no tengo muy en claro como hace un archivo {{WARC}} para guardar imágenes y videos. Están comprimidos dentro?
  • cada cuanto se debería archivar un sitio para tener siempre la ultima versión mas actualizada? existen herramientas para procesar esto?
    • siento que este es uno de los puntos mas difíciles de seguir, como aseguramos de que tenemos la ultima versión disponible de algo. para sitios chicos no hay mucho problema pero para sitios mas pesados con muchos archivos ahí si tal vez no sirven los sistemas de archivos que conocemos y necesitamos algo mas custom.
  • archivar páginas con mucho Javascript y que carga contenido Dinámico es difícil.
    • para poder preservar el contenido necesitamos bajarnos la version de las librerías Javascript utilizadas, y hay páginas que pueden bajar varias librerías.
    • acá entra en juego Javascript Hell, aunque una web siempre tiene un archivo final comprimido, se puede complicar
  • hay veces que es necesario hacer el proceso de archivado de forma manual, siempre es mejor tener algo antes que nada. Es hasta mas rápido que escribir un script.
  • la acción de archivar necesita recursos, necesita hardware, necesita tiempo. Por eso que es parte fundamental de la acción de archivar, el dedicarle tiempo a asegurarnos de que lo estamos archivando en un lugar donde sabemos que no se va a perder. No podemos confiar en plataformas como {{internet-archive}} solamente, por que puede desaparecer de ahí.
  • el punto es data preservation y open access. la información tiene que estar al alcance de todos, fin.
  • estuve probando bastante {{scrapy}} y la verdad que soluciona un montón de cosas y te da un montón de herramientas para scrapear cualquier cosa.
    • es una libreria de python
    • es para scrapear mas contenido que paginas web completas.
  • https://github.com/ukwa/webarchive-discovery/tree/master/warc-indexer🡭
  • para PDF’s lo mejor es utilizar PDF/A (la A es de Archive)
    • este formato dehabilita un montón de huevadas que puede tener el pdf como Javascript, fuentes externas, videos, audios, para que quede un archivo pdf listo para archivarse y que pueda verse bien en un futuro
  • binary search es lo que se utiliza para hacer búsquedas en archivos de indice. Esto para cantidad de datos (GB) funciona bien. Pero cuando queremos escalar un poco mas (TB o PB) ya no sirve.
  • para archivar una web no alcanza solo con archivar el resultado del acceso a una url. Por que es muy probable que una web genere un montón de request distintos al interactuar con ella (hacer clic, scroll, después de un tiempo de uso, etc) por eso es que proyectos como {{browsertrix}} utilizan un navegador headless para reproducir todo el comportamiento en una web y generar así un archivo completo.

En cierto punto siento que es muchísimo mejor tener archivado algo, por mas que sea simple y que no este completo, a que esperar a tener todo completo. También siento que muchas veces es mas necesario el contenido que la presentación. La presentación es algo que podríamos cambiar o rehacer totalmente de 0 si tenemos el 100% del contenido, en cambio sin el contenido la presentación no nos sirve para nada.

Explorando Archivos

  • Generación de metadata
    • Creo que debería ser el primer paso al generar un nuevo archivo, exportar su metadata correspondiente.
  • Extracción de texto de web archives (WARC)
  • Revision de hyperlinks, como los archivos o web’s se inter-relacionaban entre si
  • Análisis de contenido
    • acá puede variar, pero se podría analizar los datos o el contenido de forma binaria (audios, videos, imágenes y documentos) los datos binarios se podrían almacenar y comparar con otros metadatos
  • Herramientas
    • Apache Spark
      • Es una suite / software para hacer data analytics, tal vez es overkill pero es una alternativa
      • Sparkling🡭 es una herramienta que usan en {{internet-archive}} para procesar datos del archivo
    • Apache Hadoop es una libreria de apache que permite el procesamiento de datos a grande escala de manera distribuida
      • Hadoop tiene un file system que se llama HDFS🡭 que es distribuido, podría servir para {{dweb}}

Resumen

  • Archivism != Presservation
  • Archivismo != Backup
  • Archivismo distribuido, como sería?
    • IPFS?
    • BitTorrent?
    • Estos dos de arriba comparten el concepto de DHT para transmitir / compartir que información / nodos / paquetes tienen
  • Como hacemos para que algo subsista en el tiempo? Como sabemos cuanta información dejo de existir?
  • Tenemos herramientas para saber cuando la información deja de existir?
    • Siempre hablando de internet / web, por que de otras formas no conocemos..
    • Un libro lo podemos prender fuego y va a dejar de existir para siempre
  • Es probable que nunca necesitemos de un archivo y esta bien, no debería cambiar nuestra percepción por las cosas que deberíamos archivar.

Videos (yt)

Para archivar canales completos de yt es necesario tener en cuenta varias cosas, ademas de los videos, tenemos que archivar la descripción, los comentarios y subtitulos. También podemos archivar el canal de audio por separado.

Youtube, nos permite descargar el video en sus distintas calidades, acá esta de mas decir que siempre es mejor descargar el video con mejor calidad.

Hay “dos” versiones de yt-dl:

Los dos son scripts que se ejecutan en una consola.

Hay varios scripts y UI’s que lo que hacen es utilizar yt-dlp por detrás. Eso nos da la pauta de que con yt-dlp alcanza y sobra para descargar todo lo necesario, queda en nosotros si queremos automatizar o mejorar el proceso. Por dentro se utiliza {{ffmpeg}} para todo.

Creo que es necesario descargar todos los metadatos necesarios

Tools video archiving

Por que es necesario archivar?

Por que la información no tiene que desaparecer. Y la información no puede defenderse por si sola.

Rouge Archivism

Creo que es el concepto que mas me gusta, se trata de hacer todo lo relacionado al {{archivismo}} pero desde la sombra, sin tener que alardear de lo que estas haciendo ni tener que andar gritándolo por todos lados. La ventaja de esto es que no levantas sospechas y tampoco causas revoluciones, miradas de gente que puede joderte.

Investigar

  • Operation security
    • nombres random para todo
      • tal vez esto pega un poco en el ego, pero justamente este actividad de archivar y sobre todo si te vas a mover en un entorno muy relacionado con la {{piracy}} es necesario no buscar ese boost de ego por hacer cosas con tu tag / nombre real para que la gente sepa quien lo hizo.
      • la historia de sci-hub, que configuro uno de sus servers con su tag como home y a partir de ahí pudieron deducir quien era la persona.
    • secrecy = psychological cost
      • That secrecy, however, comes with a psychological cost. Most people love being recognized for the work that they do, and yet you cannot take any credit for this in real life. Even simple things can be challenging, like friends asking you what you have been up to (at some point “messing with my NAS / homelab” gets old).
        • mas o menos lo que explicaba arriba.
    • spread through torrent
      • de esto se encarga la comunidad, ya pasa de ser una responsabilidad propia y secreta, si no que se abre hacia todos y cada uno puede aportar

Notas sobre Crawl

Que es crawl o crawling?
Un crawler, web crawler o spider es un bot o robot que de forma sistematica y automatica recorre un página web y obtiene información sobre la misma.

Un crawler puede ser programado para obtener información especifica que una web esta exponiendo, o puede obtener información acerca de tecnologías o metadatos sobre una página web.

Google es conocido por tener crawlers / spiders que recorren continuamente todas las páginas disponibles en internet e indexan su contenido para luego poder ser mostrado en sus resultados de búsqueda.

La idea de los spiders es fundamental si queremos obtener información que un página web esta exponiendo de forma programática. Un crawler nos puede ayudar a archivar información que creemos que pueda estar en peligro de desaparecer.

Existen varias herramientas que nos permiten crear spiders para acceder a páginas web y obtener su información.

Para hacer un spider sobre un dominio y obtener todos los links o urls que existen hay un par de cosas a tener en cuenta:

  • es muy probable que no se llegue nunca a obtener todos los links, es probable que se entre en un loop infinito, del cual es difícil saber como salir.
  • también es complejo saber cuando terminamos de obtener toda la información de una web. Son limites que no sabemos muy bien donde están.
  • con {{scrapy}} son 10 lineas de código y hace todo solo, pero como dije arriba puede entrar en un loop y al final hacer crawl sobre las mismas urls
  • hay que tener cuidado con la configuración por default, ya que se ejecutan 8 spiders en paralelo y puede floodear el server
  • {{scrapy}} tiene algo que se llama LinkExtractor se le pueden configurar varias cosas, entre ellas que solo haga crawl del dominio que queremos (esto es para no irnos por ejemplo a facebook y que se vuelva infinito el asunto) y el unique para que trate de filtrar las urls, no funciona tan bien por lo que estuve probando.

Acá va un ejemplo muy simple que guarda las url’s en un archivo links.txt.

import scrapy
from pathlib import Path
from scrapy.linkextractors import LinkExtractor
from scrapy.http import Request
import os

class SpiderAll(scrapy.Spider):
	name = 'spiderall'
	start_urls = ['https://www.example.com']
	allowed_domains = ['example.com']

# custom_settings = {
# ''
# }

def parse(self, response):
	self.logger.info("Now crawling: %s", response.url)
	le = LinkExtractor(unique=True, allow_domains=['example.com'])
	for link in le.extract_links(response):
		with open('links.txt', 'a+') as f:
		f.write(f"\n{str(link.url)}")
	yield Request(link.url, callback=self.parse)

Searching

Decentralization

Para descentralizar los servicios de archivismo creo que hay varios puntos que se pueden tocar, por un lado esta el proceso de archivado, donde hay varias herramientas hoy en día que permiten que sus procesos corran de manera descentralizada y por otro lado esta el storage, donde guardamos los archivos (warcz, backups, videos, imagenes, pdf’s) donde se pueden usar servicios como {{IPFS}} y {{Tor}} para la parte de anonimizar