Anatomía de un Correo Cadena

July 30, 2008

No lo podía creer. Mi cuenta de Gmail siempre ha estado limpia de las ridículas cadenas… hasta que hoy… ¡aparecieron!

Es increíble ver como todavía existen personas que se creen esas mentiras sin razón ni fundamento. Solo hay que mencionar algunos títulos que suelen ser pan de cada día en los correos estudiantiles:

  • Da miedo pero es real…
  • 11 formas de besar…
  • Conversación en el MSN… ¡da miedo!
  • Niña con cancer…
  • Criaturita de Dios necesita ayuda…
  • ¡Si suprime esto, no tiene un corazón!

Y los temas son los mismos… la niña de 4 meses (Y sin embargo el correo tiene ya 8 años circulando) con cáncer en el cerebro, el estudiante que antes de morir quiere graduarse, la historia de las hermanas Smith asesinadas por MSN (En realidad, parece una cadena del IRC) y demás tonterías.

Ya que existen productos como SpamAssain, un filtro de Spam producido por la Fundación Apache, he decidido analizar varios correos cadena y dar su "anatomía" para que de una vez sean añadidos a las listas anti-spam de la mayoría de servicios. Por cada "sospecha" de cadena, regalaremos un "crédito".

Estructura de un Correo Cadena

1. Cabecera: Los correos cadena se caracterizan porque tienen demasiados destinatarios. Si aparecieran más de 10 destinatarios en el campo, podemos comenzar a dar un crédito por e-mail. Puede suceder de que la mayoría de correos sean @hotmail.com. Esto también es un indicador poderoso de que estamos ante una cadena. Si encontramos más de 10 direcciones @hotmail… también comenzemos a sospechar. Un crédito por cada direccion de más. Si se pudiera poner como fórmula… tendríamos:

N_Creditos_Cabecera = (Total Remitentes - 10) + (contar_correo_hotmail(Total Remitentes) - 10)

Nos falta el campo del asunto. Prestar atención a estos patrones:

  • FWD:
  • FW:
  • Reenvíalo
  • Pobrecita
  • criatura de Dios
  • pásalo
Tres (3) créditos por estas frases.  Esto se añade a la fórmula de arriba.

2. Cuerpo: Si recorremos sitios como Rompecadenas o VSA Antivirus - Sección Hoaxes, podremos encontrar muchas coincidencias de texto para las cadenas. Aquí entran los fans de las expresiones regulares. Si seguimos el ejemplo de estas dos páginas, podremos detectar patrones como:

 

  • Si recibes un [correo / e-mail] con [algo_variable] ¡ELIMINELO INMEDIATAMENTE! ¡Es un [virus/troyano] que [formatea / quema / destruye] su disco duro C.
  • [Microsoft / Symantec/ MCAfee / CNN] han detectado el [peor / invencible / indetectable] [virus / gusano] que no tiene cura.
  • Soy [Rachel Artson / Rachel Arrow / Amy Bruce / etc] y soy de [algun_lugar_de_USA]. Mi [hija / hijo] de [n] años tiene [cáncer / síndrome de xyz / alguna_enfermedad_rara] y sólo tiene [n] meses de vida si no se le trata. [Yahoo / Google / ZDNET / Microsoft / AOL] nos donarán 0.5 centavos de dólar por cada mail que sea reenviado.
  • Hola soy [xyz], abogada y le voy a decir algo. Bill Gates está compartiendo su fortuna…
  • Habrá que pagar MSN / MSN se hará pago.
  • cadena de [muerte / solidaridad / amor]
  • Esta [foto / virgen / santo] es [milagrosa / poderosa] […] El presiente de [Argentina / Brasil] la llamó basura y a los [n] dias murió su hijo…

Por cada uno de estos patrones se deben asignar 10 créditos, ya que son extraídos de cadenas casi en su totalidad. Nadie se comunicaría usando estas frases. También hay que prestar atención a los siguientes términos:

  • Fundación Pide-un-deseo / Fundación Make-a-wish
  • Forward / Reenvía
  • [n] años de mala suerte / [n] años de maldición
  • No tiene corazón / no comprende el dolor
  • Progesterex
  • Burundanga
  • Droga de los Violadores
  • Te amo…
  • Formas de Besar
  • Etc

Un crédito por cada una de estas apariciones. Si se encuentra la palabra ‘progesterex’ podría concluir de que es una cadena inmediatamente, pero… es preferible el beneficio de la duda.

3. Final: Todas las cadenas suelen acabar igual. También aquí entra el fan de las expresiones regulares. Veamos algunos patrones:

  • Pásalo a todos tus contactos
  • Necesito su ayuda para que lo pasen
  • Reenvíalo a todos los que consideres [amigos / personas especiales]
  • Yo no creía en las cadenas pero ahora pueden salvarme la vida
  • Esto es [real / no es ninguna mentira]
  • No olvides enviarla…

Asignemos 3 créditos por cada patrón. Luego debemos sumar los créditos obtenidos de las 3 partes del mail y estar listos para el análisis.

4. Decidir si es o no un correo cadena: Aún no he hecho una estadística suficientemente fiable para indicar cual es el número de créditos óptimo para decir si un mail es cadena o no. Supongamos que si tenemos de 20 a 30 créditos es un correo con "posibilidades" y si tiene más de 40 créditos… es con toda seguridad una cadena.

Conforme pasen los días haré algun script que dado un archivo de texto verifique si es o no una cadena, usando las anteriores ideas.

Unicode: Arma de Doble Filo

July 19, 2008

Gracias al blog de Necudeco me llego a enterar que PHP 6 soportará Unicode. Esta es una importante evolución de este lenguaje ya que permitirá el soporte de casi todos los lenguajes y la desparición del molesto mojibake (Un término japonés que describe la visualización incorrecta de carácteres en otros idiomas).

Conforme leía las diapositivas me sorprendía de la mejora de PHP hasta que llegué a una que decía: "Identificadores Unicode permitidos", mostrando unas clases declaradas en Kanji y en caractéres árabes.

Es justo que todo programador pueda declarar variables en su idioma de origen, pero lo preocupante es que si eso se llega a masificar se llegará a un gran problema de comunicación. Antes cualquier programador escribía codigo en Inglés, ya que era la única lengua que garantizaba que en todo el mundo el lenguaje sea entendido (Cierto al menos en parte para el Software Libre).

Imaginemos que se haga software en Perú y este sea mandado a perfecionarse en China, por ejemplificar. Si es PHP podría volver con Kanjis y demás, que harán que sea muy dificil entenderlo en el país.

Obviamente este problema se soluciona con una adecuada planificación y reglas definidas en el desarrollo de Software, pero para desarrollos informales y demás… este peligro existe. Esta muy bien que se permite el correcto renderizado de todas las lenguas del mundo, pero es algo arriesgado intentar permitir la escritura de código en esos caracteres.

Si fuera un Chino, por ejemplo, me agardaría la decisión, y como Peruano que soy también me agrada, pero me gustaría advertir del peligro de esa característica si no es usada como se debe.

Finalmente insisto con que todos tenemos derecho a escribir en nuestra lenguja origen, pero en estos casos deberíamos seguir una lengua "genérica" para garantizar que todos nos entendamos.

Proyecto Pico: Idea para Tesis

July 12, 2008

Tal vez el título del post sea algo extraño. Debido a un cambio de políticas de en la USAT, es requerido proponer con antelación el tema de Tesis, justamente para evitar el tráfico de Tesis ya hechas y demás perlas.

No obstante estoy en III y IV ciclo de Ingeniería de Sistemas, por lo que pensar en una tesis es muy prematuro todavía. Sin embargo algunos profesores ya nos exigen tener una idea, por lo que pasando una noche en vela pensando, se me acaba de ocurrir una: El Proyecto Pico. (Personal Identity Comunication)

Partimos del problema de las comunicaciones celulares. Muchos jóvenes, como el que les habla, necesitan el envío de Mensajes de Texto para coordinar asuntos personales y académicos. Sin embargo, por lo general la mayoría de SMS son los siguientes:

¿Donde estás [nombre_alguien]?

¿Estás en [tal_lugar]?

Muchas veces perdemos el poco saldo del que disponemos para estos propósitos. No olvidar que los SMS son la gallina de los huevos de oro de las operadoras de telefonía, y que al menos en algunos países su cobro es arbritario.

A su vez, he visto la proliferación de dispositivos Bluetooth en teléfonos celulares de última generación. Generalmente se les usa para transferir archivos de celulares a celulares o música de celulares a PC. Algunos los usan para operar audífonos de mejor calidad que los alambrados. Según Wikipedia el Bluetooth posee alcances que van desde 1 m a 100 m. Incluso hay aparatos que aumentan el alcance a 45 km. (Aunque por lo general son aplicaciones industriales)

100 metros para una Universidad es algo razonable y si usamos los equipos de aumento de señal… podemos cubrir toda una manzana. Es una forma fácil y barata de transmitir (Barata no tanto, porque gasta más batería al móvil). No obstante es de locos querer abarcar con un sólo móvil todas esas distancias. A lo máximo podremos un par de decenas de metros.

El Proyecto Pico (Personal Identity Comunication), es una idea para mi proyecto de Tesis que pretende crear un protocolo de comunicaciones que tenga todo lo que cualquier estudiante necesite para comunicarse de sus labores académicas. Se incluye: SMS y Localización de Personas (Algo así como un GPS muy básico)

Sobre el SMS, es importante la privacidad de los usuarios, pero a la vez la capacidad de procesamiento de un celular es muy baja como para usar algún Algoritmo de Cifrado fuerte como AES. Supongo que usare Base64 para encriptar en parte el SMS y luego se aplicará un cifrado simple. La información debería ir compresa para garantizar la máxima eficiencia.

Pero un móvil no puede cubrir todo un Campus. La señal se atenúa debido a la resistencia con el aire y demás fenómenos. Es aquí donde entra un concepto muy importante: El P2P. Nos basamos en la idea de que los celulares pueden emitir y transmitir señales ajenas. Antes de describirlo, llamaremos a los celulares que emiten "nodos" y a los que transmiten "super-nodos".

Todo celular tiene un identificador único dentro de la Red Pico. A este lo llamaremos "PNID" (Pico Network ID). Todo dato enviado posee una cabecera en la que indica el PNID origen y el PNID destino. Acto seguido lleva otros detalles, como tipo de encriptación, etc. Cuando un nodo emite un "paquete" de datos, este puede ser recibido por cualquier otro nodo que esté disponible. Si el nodo es el destino especificado, se muestra en pantalla del móvil. Si no lo es, ese nodo se convierte en un super-nodo y vuelve a emitir el paquete a otros celulares. Estos seguirán enviando el paquete hasta que den con el nodo destino. Si hay que responder, el paquete será envíado de regreso por todos los nodos que encuentre. (No lo hace por los mismos que envió, ya que pueden apagarse).

En el caso de la Identificación personal, se presupone que todos los móviles pueden enviar un paquete indicando su alcance. (De 1 a 100 m, por ejemplo), por lo que basta crear una lista de contactos que tenga relacionado un PNID específico por cada entrada. Luego se emite un paquete de búsqueda, que registre por donde pasó el paquete en cuestión. De esta manera el usuario buscado puede saber al menos a cuanta distancia aproximada se encuentra del que quiere buscar. Si no encuentra a nadie en un tiempo de espera… se asumirá de que el usuario está fuera de cobertura.

Finalmente, esto puede implementarse dentro de un software escrito en algún lenguaje como Java o C++ (Caso de móviles con Symbian) e usarse como programa o como un driver. Se puede usar el IMEI como PNID para evitar suplantaciones.

Propondré este proyecto a mis profesores responsables. Si es aceptado, lo llevaré a cabo cuando llegué a mis ciclos finales. A su vez prometo liberar todo lo relacionado con Pico.

El nombre de Pico viene del editor pico de UNIX y de las siglas Personal Identity Comunication.

Actualizacion (19 -  06  - 08): Gracias a Volkan Rivera y a Vicky, he visto que esta idea mía tiene puntos flojos como el alcance y la seguridad. Si no hay celulares Bluetooth, la idea se vuelve inútil y todavía este tipo de celulares son un lujo en el Perú. Me propusieron además que el móvil envíe la señal a una antena ubicada en el Campus, por si no hay receptores cerca. Seguiré perfeccionando la idea.

Python y Microsoft SQL Server

July 11, 2008

Durante mi curso de Base de Datos, mi profesor nos pidió la implementación de una Base de Datos en Microsoft SQL Server 2000. Si bien usando Erwin y la Ingeniería Directa, generé el script y lo ejecuté… no quiere decir que ahí haya terminado todo eso.

Luego usando el Administrador Corporativo (Una interfaz gráfica para el Microsoft SQL Server) me dediqué al llenado de datos. No obstante, la clase pasada del Martes el profesor nos pidió algo excéntrico:

Adjunten a su trabajo los scripts de creación y llenado de datos. Con eso los evaluaré.

Si bien tenía ya el script de creación, jamás hice un script de llenado. Todo mi llenado lo hice gráficamente. No necesito complicarme la vida usando INSERT INTO… cuando hay herramientas que lo pueden hacer por uno.

Sin embargo, el profesor pedía ese script y tenía que hacerlo, aunque decidí no llenar todo a mano nuevamente. ¿Quién puede ayudarme?

La respuesta, es nuevamente Python. Googleando un poco sobre alguna librería para conectarme a Microsoft SQL Server 2000 me topé con Pymssql, una librería que permitía ser usada para conexión con Microsoft SQL Server. La descargé y la instalé.

El plan era usar Python para recuperar todos los contenidos de los registros y crear instrucciones INSERT. Sabemos que la sintaxis de un INSERT en SQL es más o menos el siguiente:

INSERT INTO tabla VALUES (valor1, valor2, valor3, …, valorn)

Lo que haría era leer una tabla, y por cada fila ir insertando sus valores dentro de una variable del tipo String donde crearía la "instrucción" SQL. Al script que desarrollé lo llamé SQL-INSERT Creator.

El producto final pudo decirse que fue un 70% efectivo. Pueden bajarlo de aquí (Cambiar la extension a .py) y lo pongo bajo licencia MIT, porque me tomó sólo 1 hora escribirlo. Esta es un fragmento de la salida del script:

INSERT INTO GREMISION VALUES (1, 1, 1)

INSERT INTO PROFORMA VALUES (1, datetime.datetime(2008, 6, 20, 0, 0), 1, 1, Decimal("500.00"))

Aún quedan cosas por perfeccionar, como que no muestre las fechas como funciones Python, pero al menos ya es menos trabajo el arreglar eso que tener que copiar todo el código nuevamente.

Para el trabajo final pienso presentar 3 scripts: El de creación, el de inserción y este. Espero que esto le sirva a cualquier otro que se encuentre en una situación similar.

Abelia Process Manager

July 6, 2008

Habiendo terminado mi curso de Sistemas Operativos con la Profesora Karla Reyes, me dispongo a publicar para mis lectores y demás, el programa que hice para fin de ciclo: Un Administrador de Procesos para Cygwin.

Cygwin es una capa de emulación entre Windows y “POSIX” (Entre comillas lo pongo porque sigue siendo Windows), para poder correr aplicaciones escritas para sistemas operativos compatibles con esa norma.

Dado el carácter “Linux” de mi programa, decidí trabajarlo con la consola y usando las ncurses como librerías para los menúes “gráficos” de mi aplicación. Al programar descarté a C por los problemas que me daba, y finalmente opté de nuevo por Python.

Decidí que mi programa tendría 3 partes: Un Menú, un creador de procesos y un eliminador de los mismos. Sin embargo deseaba algo más original que el simple “Menú”, “Creador” y “Administrador”. Buscaba nombres originales para mis componentes.

Para los interesados en la programación, los procesos bajo Cygwin se alojan en el directorio /proc (Al igual que en Linux), leyéndose algunos archivos para obtener información de los procesos. Pueden leer un buen recurso aquí. Para matar procesos se usa el comando kill() y para crearlos fork() y execv(), todos ellos definidos en el módulo OS de Python.

En esos días de programación terminaba de ver la serie Ima soko ni Iru Boku (Ahora y entonces, aquí y ahora, en japonés) en la que el argumento principal es el horror de la guerra infantil. De esta serie me llamaron la atención un par de personajes: Abelia, una comandante muy estricta, Shu, un chico que se negaba rotundamente a las acciones militares y Tabool, un sujeto cuyo único deseo era escalar en el poder generado por la guerra.

Como pueden notar, mi título ya hacía referencia a uno de esos personajes, es decir que decidí llamar a mis componentes usando a los citados personajes. El asunto quedó así:

  • Menu Principal (Abelia Process Manager): Es el componente principal que llama a los otros dos.
  • Creador de Procesos (Shu’s Process Creator): Creador de Procesos. El nombre Shu también es un acrónimo de Shell Utility.
  • Administrador de Procesos (Tabool Process Manager): Administrador de procesos. Permite la eliminación de procesos.

Decir que al exponer este programa y al explicar los nombres me llevé algunas miradas extrañas de mis compañeros e incluso de mi profesora, no acostumbrados a estos extraños asuntos (Para ellos, del Anime)

Los interesados en ver el código fuente, pueden obtenerlo aquí. Todo el código está licenciado bajo Licencia MIT. Debo advertir que el código tiene algunos errores aún y sólo se ejecuta en Cygwin, debido a unas “características” propias de la emulación. Si se animan a portarlo a Linux completamente les estaría muy agradecido, siempre y cuando respeten el nombre de los programas.

Podría decirse que ese fue mi otaku-trabajo del ciclo. Dado que la reacción no fue del todo desfavorable, quizá planee otra referencia en algún trabajo futuro.

PDF ya es estándar ISO

July 4, 2008

Leo en Barrapunto, que ISO ha ratificado la estandarización del formato PDF, por lo que ya posee un ISO propio, en este caso el ISO 32000-1.

Con esto, el famoso formato de Adobe ya tiene una especificación formal y definida que podrá usarse para garantizar interoperabilidad con las aplicaciones que lo manejen.

La Norma ISO publicada, cubre la versión PDF 1.7, que es la que ha sido ratificada como estándar. Si bien es cierto que ya existían versiones del PDF como estándares ISO para la conservación de documentos… no llevaban todavía el rótulo de "PDF" respectivamente. Esta publicación es un estándar ISO rotulado como "PDF", por lo que no hay más ambiguedades respecto al formato.

Los interesados pueden ver los documentos enviados a ISO por parte de Adobe aquí, o bajar la Especificación PDF 1.7, aquí. (Aproximadamente 31 MB)

Con esto aprobado, esperemos que OpenOffice.org tomo despegue ya que por el momento puede exportar PDF de forma nativa y se planea que permita la edición de PDFs en sus futuras versiones. A la vez, hay que destacar la decisión de Adobe, ya que hasta antes del ISO 32000-1, el PDF era sólo un estándar de facto.

Firefox 3 Download Day

June 17, 2008

La Fundación Mozilla ha esta preparandose para lo que sería el lanzamiento de la versión 3 del navegador libre Mozilla Firefox. Por esta razón se prepararon con una idea que era registrar tal cantidad de descargas que Firefox entrase en los Record Guiness.

Este es el llamado Firefox 3 Download Day y fue programado para el 17 de Junio del 2008. Sin embargo, hay un comunicado del blog de Mozilla en el que se ha pospuesto la fecha al 18 de Junio.

¿Pero esto a que se debe? La respuesta es sencilla. La acogida ha sido tal, que en este momento algunos sitios de Mozilla se encuentran caídos.

Se puede bajar el navegador mediante FTP o BitTorrent, pero lamentablemente estas descargas no serán contabilizadas ya que hay muchos usuarios (Con buenas intenciones) que han creado bots para bajar más copias y lograr un número mayor en el record. Sin embargo Mozilla no contabilizará esas descargas. No sería algo justo para el Record Guiness.

Resulta irónico que Mozilla haya muerto de su propio éxito. Son las 10:47 pm en el Perú del 17 de Junio y sin embargo no he podido bajar Mozilla aún debido a la sobrecarga de servidores. Los interesados de saber como va la descarga a nivel mundial pueden consultar los medidores de Mozilla o si prefieren un contador más "en vivo", este otro de Mozilla.

Y como todo buen software libre, Mozilla se preocupa por su comunidad, al tener una plataforma donde las personas que deseen organizar una celebración con respecto a este evento. Este es el caso de Mozilla Party. Lamentablemente no existe ninguna fiesta registrada para el Perú, pero ya me encargaré de hacer yo una no oficial.

Finalmente para los interesados en dejar constancia de su participación pueden imprimirse un atractivo .pdf con un certificado de participación en la propia página del evento. Y como extra, dejo un botón de Mozilla para promover el evento.

Download Day

 

 

 

 

 

 

 

 

Feliz descarga de Firefox 3. Si no lo haz usado… ¿¡Qué esperas!?

Algoritmo de Kamaleon2

May 1, 2008

Otra vez tiene que ser el Anime y las preferencias de algunos uploaders las que me hacen toparme con un programa curioso, al cual tengo a veces que "reescribirlo" por simple gusto, o por simple incompatibilidad con algún sistema operativo que uso.

En este caso, el afortunado a sido Kamaleon2, un programa de camuflaje de archivos, cuyo algoritmo estudiaremos, ya que lo necesitaba para bajar la serie Noir, que por cierto la recomiendo si les gustan las historias de sicarias y organizaciones secretas. (Noir en francés quiere decir ‘Negro’).

Pues bien, instalándome las extensiones GNU para Windows, crearemos un archivo llamado prueba.bin y lo llenaremos con la cadena ‘Noir’, para poder estudiar el algoritmo. Ejecutamos el siguiente comando:

yes "Noir" > test.bin

Tras unos segundos, pulsamos Control + C y ya tenemos un archivo que pesa 5 MB. Ahora abrimos el programa con un editor hexadecimal. Fhred para los usuarios de ventanas o hexdump para los usuarios de consola (Ambos son libres). Todo el archivo dice "Noir" línea por línea.

Abrimos Kamaleon2 y cortamos el archivo. Hay que aclarar que lo que hace Kamaleon2 es crear archivos .jpg de tamaños iguales al corte y les inserta una imagen JPEG de reducido tamaño y luego inserta una parte del archivo cortado, como Hj-Split. Al menos tras analizar las partes con un editor hexadecimal me di cuenta de esa situación.

¿Pero no se supone que si pongo un JPEG y añado más cosas ya no se lee el archivo? No necesariamente. Aunque actualmente no poseo la documentación pertinente, he visto en varios JPEG los mismos 2 bytes de final: ‘FF D9′ en hexadecimal. Según Wikipedia, esos bytes indican el final del propio archivo JPEG.

Probe cortar y pegar la zona comprendida entre el inicio del archivo y los bytes ‘FF D9′. Si se genera la imagen JPEG completa, por lo que la marca de fin de imagen es correcta. Supongo que se hará por informacional adicional que se adjunta al JPEG, como cabeceras EXIF.

Pues bien, entonces simplemente para cortar y camuflar una imagen, simplemente abrimos un archivo nuevo .001, le adosamos un JPEG y justo después un "pedazo" de archivo a partir. Luego creamos otro archivo .002, le adosamos un JPEG y la siguiente parte de la imagen y así sucesivamente hasta acabar.

Para pegar los archivos lo tenemos un poco más complicado. Hay que separar el JPEG del archivo y empezar a unirlos. No estoy seguro si la cabecera de final se repite dentro del JPEG mismo, así que hay que buscar todas las aparariciones de ‘FF D9′ y elegir la última. Sin embargo en el último archivo hay cierta información de control que está "pegada" al archivo, y que debe ser eliminada antes de procesarlo, ya que de no ser así no se recrearía el fichero exacto. Eso es algo que está por verse.

Por otro lado, Kamaleon2 usa protección por contraseña en sus cortes. Sin embargo es totalmente inútil ya que la estructura es la misma que la explicada anteriormente. No se usa encriptación para proteger el archivo, de mod que la clave sea la que descifre. Así que simplemente leyendo más allá de ‘FF D9′ podemos saltarnos la contraseña.

Igual que con HJ-Split, pienso hacer una implementación en Python pronto. Ojalá en solo 24 horas, porque tengo inquietud del episodio de Noir.

FUSE: Sistema de Archivos para todo gusto

April 23, 2008

Quienes lleven tiempo en esto de la informática, muchas veces se han visto forzados a trabajar con archivos remotos, protocolos de red o grandes archivos que pueden ser .tar.gz o .iso, o hasta imágenes de máquinas virtuales.

En el caso de los FTP, SSH y demás el proceso es bajar los archivos a modificar y volver a subirlos al servidor. En el caso de trabajar mucho con hosting remoto esta solución puede ser desesperante. Hay aplicaciones que intentan paliar esto, pero o funcionan erráticamente o son costosas.

Ni que decir SMB (Protocolo de Red Windows) bajo Linux, usando Samba, hay que bajar los archivos para verlos, mientras que en Windows se pueden ver y hasta modificar "on-line" sin bajar nada al disco duro.

O también poniendo el caso de SSH en el caso de que usemos Sourceforge. Es desesperante estar modificando algo y subirlo a cada rato.

También pensemos en los .iso. No es agradable descomprimirlos para modificar algo (En el caso de querer ISOs propias de ISO ya existentes).

Y finalmente pensemos en si queremos ver un preview de esos inmensos directorios de descargas de distribuciones Linux y demás.

Alguno que me leyera pensará que estoy siendo demasiado sarcástico o burlón. En parte lo esta siendo, pero también hay buenas noticias… ¡Todos esos problemas tienen solución usando FUSE

FUSE, es un acrónimo para "Filesystem in Userspace" (Sistema de archivos en espacio de usuario), el cual permite crear sistemas de archivos sin necesidad de ser root para montarlos.

¿Cúal es la necesidad de implementar en espacio de usuario algo que se supone que debe estar en el Kernel? se preguntarán algunos… la respuesta es muy simple. Facilita muchas cosas e instalar diferentes programas sin necesidad de cargar módulos o recompilar el Kernel, cosas que sólo puede hacer un usuario root.

Usando esta librería FUSE, muchas personas han hecho "puentes" entre servicios web y demás hacia carpetas, permitiendo que muchos usuarios puedan facilitarse la vida. FUSE es software libre y está disponible para casi todos los derivados de UNIX (Linux, Solaris, MacOS y demás). No he conseguido información sobre una versión libre para Windows. Hay un port propietario aquí

Sobre las carencias que mencioné al inicio, todas ellas son solucionables con FUSE. Vamos a mencionarlas:

  1. SshFS: Un programa que "monta" un directorio vía SSH como un directorio local. Útil si se trabaja con SourceForge y similares. (http://fuse.sourceforge.net/sshfs.html)
  2. SMB for FUSE: Un programa que "monta" las redes Microsoft como directorios locales usando Samba. Útil si se integrase con las distribuciones o con el propio código de Samba para evitar descargar manualmente archivos. (http://www.ricardis.tudelft.nl/~vincent/fusesmb/)
  3. GmailFS: Un programa que usa una cuenta de Gmail como disco duro. Hay que advertir que ese uso está prohibido por Google en sus reglas de uso, pero sirve para lo que sirve. (http://richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html)
  4. HTTPFS: Un programa que monta un directorio HTTP dando la impresión de descargar "a la velocidad de la luz" cuando realmente descarga si el usuario realiza alguna operación con el archivo o los archivos online. (http://httpfs.sourceforge.net/)
  5. HTTP-FUSE-KNOPPIX: Un proyecto Japonés muy curioso y extravagante. Es una ISO de Knoppix de muy reducido tamaño (Varía entre los 5 MB a los 290 MB) que contiene sólo el sistema base mientras que el resto lo obtiene por Internet, montando lo que descarga en la raíz. Esto es útil para no descargar la ISO completa de 3.9 GB. (http://unit.aist.go.jp/itri/knoppix/http-fuse/index-en.html)
  6. CurlFtpFS: Un programa que monta un directorio FTP como si fuera un directorio local. Muy útil si se descarga de sitios FTP o se trabaja con webs. (http://curlftpfs.sourceforge.net/)
  7. FUSEISO: Un programa que monta una imagen ISO y demás formatos de imágenes de CD como .nrg. (https://sourceforge.net/projects/fuseiso/)
  8. BtSlave: Es un proyecto que permite "bajar más rápido" de BitTorrent al dejar montada como directorio el .torrent, por lo que sube el ratio de Upload y se beneficia la descarga. Está en Alpha.  (http://btslave.sourceforge.net/)
Según la propia web de FUSE es relativamente sencillo crear los sistemas de archivos (Un sistema de ejemplo posee menos de 100 líneas) y existen bindings a varios lenguajes como C++, C#, Java, Python, etc).

Aclarar que me enteré de la existencia de FUSE através del blog de Necudeco

bxSplit: HJ-Split en Python

March 29, 2008

Habíamos hablado una vez en este blog sobre HJ-Split y su algoritmo, el cual describimos y dejamos pendiente la implementación. Pues bien, que este corto post sea para informarles que he terminado mi propia implementación del algoritmo a la que llamo: bxSplit, es decir ‘BrunoxSplit’.

bxSplit está escrito en Python y está liberado bajo la MIT License.

Pueden descargarlo aquí. Renómbren el .py.txt a .py si desean ejecutarlo. Lo pongo así para que sea más facil a algunos, leer el código antes de bajarlo.

Aquí les pongo la ayuda del archivo:

Modo de uso:
    -h: Muestra la ayuda
    -s [MB] [File]: Divide el archivo [File] en trozos de [MB]
    -j [File.000]: Une el archivo [File.000] en el archivo [File]

Ya he actualizado el post del algoritmo para que vean el código por aquí.

Tengo que finalizar mencionando que este programa lo escribi debido a que se me pedía el programa HJ-Split en algunas descargas de Captain Tsubasa. ¡Ahora podré unir los archivos!