Pirate Amazon: Extensión Firefox Controvertida

December 6, 2008

La descarga de materiales digitales sin la autorización de los derechos de autor, es considerada en muchos países como un delito, partiendo de la idea de que es el autor el que debe decidir como debe distribuirse su trabajo y si debe obtener algún beneficio económico.

Esto choca con la idea de que las constituciones o las leyes de cada país definen como el acceso universal de los ciudadanos a la cultura. Al ser la Cultura el conjunto de todas las expresiones y formas de una sociedad, podemos decir que casi todo lo que pensamos viene a ser cultura. A su vez, el acceso a la misma permitirá a una sociedad enriquecerse de ideas y progresar. Ahí viene un dilema… ¿Podemos tener acceso a la cultura, aún saltándonos las restricciones que el autor puso en su creación? Suponiendo que el estado está por encima, diríamos que sí podríamos.

Decir que en lo personal estoy a favor del acceso irrestricto a la cultura, ya que esta representa una forma de intercambio de ideas entre los seres humanos.

Dejando las disertaciones, el tema del post era una controvertida Extensión para Firefox llamada: Pirates of the Amazon, que en esencia comprueba si hay algún material "pirata" o descargable de algún producto que consultemos en Amazon.com. De existir nos lo reportará y podremos, "bajarlo" en lugar de comprarlo.

La extensión tuvo vida efimera, ya que actualmente el sitio indica que se trataba de una parodia y no de algo real. No obstante la extensión existe y puede descargarse de TorrentFreak, quienes han realizado un backup de la misma. Supondremos que el miedo a las demandas provocó que se retirara la extensión del sitio original. Otro mirror en: Cavallete.

El modus operandi es sencillo. Dado un producto que consultemos en Amazon, por ejemplo la versión Widescreen de la Película Kung-Fu Panda, nos mostrará lo siguiente:

Extensión Amazon 

Podemos hacer click en el "Download 4 Free" y nos dará un torrent para descargar la citada película, siempre y cuando esté indexada en el Tracker The Pirate Bay. A su vez, nos ahorramos el precio del DVD (Aproximadamente entre 30 y 14 dólares)

Aquí viene el quid del asunto: Técnicamente es posible (Lo explicaremos luego), pero ¿es justo esto para los autores? En algunos sitios donde he leído opiniones se dice que esto es un "robo a mano armada a los autores", "un cinismo", "una incitación a lo ilegal" y en otros "excelente extensión", "hacía falta hace tiempo", "totalmente necesaria para acceder a la cultura".

Lo vuelvo a decir. Personalmente estoy a favor del acceso irrestricto a la cultura, por dos cosas: La primera es porque aumentamos el intercambio de ideas entre personas y además porque lo copiarían de igual forma. Además… mientras no vendamos nada de lo que nos bajemos… no estamos perjudicando al autor directamente.

Pero, veamos el lado de quienes consideran que esta extensión es presagio del Apocalipsis: Sostienen que la gente dejará de comprar material multimedia, las empresas se arruinarán y desaparecerá la producción de cultura. Un escenario distópico muy difícil de lograr realmente.

Modus Operandi:

Ahora a lo prometido, vamos a detallar como trabaja la extensión y como podríamos mejorarla. Tenemos la página de Kung Fu Panda, es decir:

http://www.amazon.com/Kung-Panda-Widescreen-Jack-Black/dp/B001ECQ75A/ref=pd_sim_d_4

Notemos la estructura:

  1. Dominio Amazon.com
  2. Nombre del Producto (Kung-Panda-Widescreen…)
  3. Datos específicos

El título de la página será parecido a la sección Nombre del Producto, por lo que fácilmente podemos aislar las etiquetas <title> del HTML y con eso tendremos el título del producto que querramos descargar.

Acto seguido debemos localizarlo en algún sitio. En este caso en Pirate Bay, que es uno de los trackers de Torrents más completos de la red.

En este caso, la cadena de búsqueda sería:

http://thepiratebay.org/search/Kung%20Fu%20Panda/0/99/0

Notemos la estructura:
  1. Dominio (thepiratebay.org)
  2. /search/
  3. Cadena de búsqueda (Kung Fu Panda)
  4. Detalles

Y devolvemos el primer .torrent que nos devuelva el buscador. Aquí la eficiencia depende de como se extraigan las palabras clave de la web origen.

Acto seguido, insertamos en el código HTML una imagen que diga "Download 4 Free" [Descargalo Gratis], que apunte al torrent que acabamos de buscar.

Con eso ya tenemos la teoría para crear una extensión similar.

Mejorando la Extensión:

No todos usamos Torrent. Hay más sitios donde podamos encontrar enlaces de descarga, por ejemplo Taringa, Foros o búsquedas a materiales en Google con referencias a "Megaupload" y "Rapidshare".

Si pudiésemos construir un bot que pudiera loguearse en los foros, examinarlos, extraer los post "interesantes" e indexarlos en algún lado, podríamos obtener algo todavía más útil que Pirate Amazon. Lo malo es que muchos foros ya tienen medidas de seguridad y dudo que alguna Universidad patrocine un desarrollo destinado a la mal llamada "piratería".

Tenemos una solución. Podemos montar un sitio tipo Taringa, con la diferencia que tendríamos usuarios que en lugar de subir contenidos se dedicarían a encontrar contenidos y copiar los enlaces, creando una gran base de datos de material de descarga, ya sea Torrent o Descarga Directa. Lo malo es que no duraría mucho, porque un servidor es fácil de localizar y cerrar mediante leyes de infracción de derechos de autor.

Problema con el Script:

Un posible problema que podemos tener es que nuestro script, es que no podamos extraer la información del nombre correctamente. Si se masifica los sitios tipo Amazon, podrían ofuscar el HTML para dificultar la extracción del nombre. En este caso, en lugar de obtener "Kung Fu Panda" podríamos obtener "Kung Panda" o sólo "Kung".

Para solucionarlo, sí podemos crear una web o un archivo actualizado periódicamente con las diferentes permutaciones y "errores" de escritura del nombre de una película en particular. A vista del público sería un servidor para "corregir problemas de escritura de series y películas" y en realidad sería la columna vertebral de nuestro script.

Si me lo permite el tiempo prepararé una sencilla prueba de concepto en Python sobre un buscador parecido, pero sin las optimizaciones. Luego, dependiendo de eso podré publicar versiones más completas.

A los que les gustan las descargas… esta es una extensión muy recomendable. Lo malo es que no distinge idiomas, por lo que deberán acostumbrarse a los subtítulos.

Debbugger.exe: Idea para un cómic o una Serie

November 8, 2008

Muchas veces he visto dentro de mi Universidad como en clases de Lenguajes de Programación, como Java, C++ y .NET, surgen problemas en los programas escritos por los alumnos, profesores y demás. Este comportamiento es normal y expresa las dificultades inherentes a la programación.

Un depurador resulta ser entonces una de las herramientas más versátiles existentes, de modo que siguiendo el flujo del programa se puede determinar que es lo que salió mal. No obstante, el depurador señala la línea de error, no necesariamente el error en sí.

Para corregir ciertos errores basta con corregir las líneas resaltadas por el depurador, pero muchas veces los errores no son tan fáciles de detectar y corregir. El trabajo detectivesco suele ser enorme, considerando que sólo dispones de un par de minutos o menos para no perder el hilo de clase con tus compañeros.

Si hay una serie como House M.D, donde el citado médico se toma una carrera contra-reloj para resolver las dolencias de sus pacientes mediante un estilo analítico, al menos podría existir un modesto cómic en la red donde se muestren estos casos curiosos contra-reloj de deupraciones durante clases.

La ayuda del lenguaje en cuestión también es muy importante, al igual que su IDE y el tipo de lenguaje que es. No es lo mismo depurar un Java o .NET que depurar un C++, donde el nivel analítico es aún mayor.

Para los interesados, propongo una curiosa línea argumental para un modesto cómic en la red sobre depuradores en clase:

Debbuger.Exe: (Al estilo House M.D)

Tenemos a 5 amigos y una profesora. El cómic puede tener 3 temporadas: II Ciclo (C++), IV Ciclo (Java) y V Ciclo (.NET), que es el orden en el que enseñan lenguajes de programación en mi universidad.

Los 5 amigos (Por ahora sin nombre), empiezan una clase de lenguajes y les piden programas sencillos o de dificultad intermedia. Al inicio se ve que funcionan, pero conforme avanza la clase y las presentaciones finales, los programas fallan. Aquí se puede insertar toda clase de ironías, razonamientos y demás para que estos 5 amigos presionados por no desaprobar a manos de la Profesora (Sin nombre tampoco). Entre los problemas se pueden poner:

  • Algoritmos mal implementados
  • Errores sintácticos (Sólo como entremés)
  • Fallas Hardware
  • Uso de funciones desfasadas
  • Incompatibilidad de tipos
  • Base de Datos
  • Archivos
  • Punteros
  • Estructuras de Datos de cualquier complejidad
  • Etc

Uno de los estudiantes puede ser un sarcástico sin remedio, pero un genio, el otro podría ser un eminente pragmático que no le interesa la teoría, el otro un genio teórico, el otro un personaje que abogue por la diplomacia con la profesora, otro que guste de las excusas y asi, reflejando quizá el estado de la programación en esos 5 personajes. (A decisión del que se anime al cómic). Los únicos personajes inmutables serían una autoritaria profesora (Muy perfeccionista) y un sarcástico pero genio programador en el grupo de alumnos. (Por algo dije, al estilo House M.D)

También está la posibilidad de una serie, a raíz de haber visto The I.T Crowd, aunque de ser así debe estar más enfocada en cursos de resolución de problemas complejos (Cursos de Sistémica o Dinámica de Sistemas), que en un curso de programación.

Esta idea un poco simple, puede extrapolarse a otras disciplinas, al estilo The Big Bang Theory (Aunque esta es más cómica que de resolución de problemas contra-reloj).

Espero haber dado una idea a los estudiantes de Ciencias de la Comunicación o a algún curioso de la red. Si la idea es mala, pueden sugerir cosas en los comentarios.

Richard Stallman y el Cloud Computing

October 2, 2008

Leo en Barrapunto que Richard Stallman, advirtió sobre el "peligro del Cloud Computing", al llamarlo "una trampa". El fundador del Proyecto GNU, se expresó de forma muy dura con respecto a este fenómeno, indicando que es una estupidez usar servicios como los ofrecidos por Google.

Creo que hay que definir primero que es Cloud Computing. Es algo así como acceso descentralizado a los datos, de modo que se suben a servidores específicos (Tipo Google Docs) y quedan accesibles para ser procesados y accedidos por el usuario sin importar donde esté.

Obviamente esto no es una muy buena idea desde el punto de vista de la privacidad, y es aquí donde se queja Stallman. Los datos que supuestamente deberíamos manejar o tener nosotros, pasan a estar alojados en servidores de terceros. Claro que no todo tipo de documento es susceptible de esta preocupación. No es lo mismo subir un documento con tus datos personales a un simple cuento o documento de poca monta que se escriba.

Lo atractivo de la Cloud Computing es la facilidad de obtener los datos. Cosa que también puede ser lograda usando Memorias USBs. Al menos en el Perú, el "ansia" de subir todos los archivos no es mucha, ya que poseemos poco ancho de banda y es mayor el ancho de banda que ofrece un USB transportándolo uno.

Pero en otros países o en sitios donde poner un USB puede ser inaceptable (Virus, fuga de datos, etc), el Cloud Computing podría ser todo un atractivo para los usuarios. Aquí es donde el peligro de que datos sensibles puedan ser accedidos por terceros.

Una forma de tratar con esto es mediante la encriptación, ya sea subiendo archivos encriptados o buscando servicios donde la información sea cifrada.

Un punto en el que Stallman incide es que los programas que tratan a los archivos subidos no son libres. No lo son, ya que el usuario no los baja directamente. La GPL 3 no prevee este problema, aunque la Affero License si. El software libre debería apuntar al software Cloud Computing y dar alternativas, ya que en lugar de simplemente demonizar la tecnología, se puede usar para solucionar problemas o para personas que quieran tener acceso a sus datos y la vez el máximo control sobre los mismos.

Vayamos al punto de la paranoia y digamos que esto en realidad es una trampa: Google almacena toda la información de sus usuarios, Sun se llena de dinero por venta de servidores y de repente Google cambia todos sus servicios gratuitos a servicios pagados. La mayoría pagaría y las empresas obtendrían grandes ganancias.

Este comentario leído en Barrapunto, se desmorona por 2 cosas: Si una empresa se decide por cobrar, alguna saldría ofreciendo servicios gratis, de modo que ganase cuota de usuarios. Y la segunda es que aún existe el negocio del software en escritorio.

Claro está que hay que llegar a un punto intermedio y no a querer separarnos de todo. Podemos mantener ciertas cosas en la red, mientras que datos sensibles en nuestros PCs. En el caso de necesidad, subiremos datos cifrados. Así al menos disfrutamos lo mejor de ambos mundos.

Impresiones de Google Chrome

September 3, 2008

Finalmente ya está aquí. El navegador web de Google ha hecho su aparición. Ahora tenemos a Google Chrome entre nosotros. Google ha publicado un singular comic dodne detalla las nuevas características de su navegador. Podemos leerlo, en inglés, aquí.

Google justifica la creación de su navegador, debido al interés creciente que hay en las aplicaciones web. Según la propia Google, poseen el compilador JavaScript más rápido del mercado: V8. Además, se puede considerar a Chrome como una respuesta a Microsoft por la publicación de Internet Explorer 8 (Beta).

Entre las características de Google Chrome, está que es Beta, es software libre, posee la mayor velocidad de procesamiento JavaScript, procesos independientes y modo de privacidad.

Justamente quiero hablar de 2 cosas: La que es Software Libre y las supuestas conspiraciones que se han montado (No faltan) a raíz de este navegador.

Google Chrome usa WebKit para renderizar la web. Esto lo hace "familia" de Safari y Konqueror. Sin embargo, resulta irónico que aún no esté soportado para Linux. No obstante, al ser Software Libre… ya se pueden compilar algunos módulos. El código fuente puede encontrarse aquí.

La licencia de Google Chrome es la licencia BSD. Esta es una de las licencias más liberales de todo el Software Libre, así que es posible que veamos "mods" pronto. Además… por ahora Chrome no soporta arquitecturas de 64 bits.

Pueden ver una screenshot de este navegador en mi escritorio:

Google Chrome 

(Haz click para ampliar la imagen) 

Otra novedad es que este navegador lanza un proceso independiente por pestaña utilzada. En sistemas Linux, debido al modelo de memoria, se reduce en consumo. Sin embargo bajo sistemas Windows, a menos que se llamen a funciones muy específicas… podría haber un consumo ligeramente superior. Al menos a mí, con 4 pestañas abiertas me consume 26 MB. Mucho menos que Firefox o Internet Explorer.

Justamente en esto es donde peligra Firefox. El punto fuerte de ese navegador son las extensiones. Sin embargo, para un público no muy técnico… estas son prescindibles y seguramente preferirán al navegador de Google. Esperemos que Firefox se prepare para este tipo de cosas.

Sin embargo no falta la conspiranoia en la que se afirma que Google quiera dominar el mundo. Es posible que su navegador comunique información personal a Google. No obstante se distribuye el código fuente. Cualquier paranoico podría compilarse su versión libre de "rastreos". Además podrían aparecer versiones no oficiales donde se remuevan esas características.

Finalmente terminar diciendo, que en lo personal este navegador me ha gustado y si bien no cambia que use Firefox (Por extensiones), también se ha ganado una reputación de navegador a tener en cuenta. A juzgar por el panorama… o Internet Explorer se pone las pilas o será engullido por Chrome, ya que  la mayor parte de usuarios de Internet Explorer usan Google y sus servicios.

La Ignorancia es atrevida

September 2, 2008

Esta frase de origen desconocido la suelo usar cuando veo que alguien afirma algo sin tener ninguna base en lo que dice. También me la suelen aplicar cuando cometo algún desliz. Sin embargo hoy veo algo en Televisión que me hacen pensar en el significado de esta frase.

Hoy, 02 de Septiembre de 2008, veía en América Noticias que un grupo de jóvenes peruanos participará en una final de ciberjuegos en Alemania. Los agraciados dominan con maestría los títulos Fifa 2008, Starcraft, Warcraft III e incluso el Counter Strike.

Hasta aquí una noticia como cualquier otra. Sin embargo cuando le preguntaron al padre de uno de los agraciados jugadores lo que opinaba de lo que realizaba su hijo (Jugar Starcraft), respondió con esta perla:

Me siento orgulloso de lo que hace mi hijo […] Esto es una disciplina deportiva, ya que le requiere un esfuerzo, concentración […]

¿Disciplina deportiva? ¿Jugar Starcraft podría llamarse deporte? Puedo llegar a llamar deporte al Ajedrez, por el nivel de concentración que precisa… pero a un juego de estrategia… dudaría en llamarle deporte.

Veamos la definición de Deporte:

El deporte es toda aquella actividad en la que se siguen un conjunto de reglas, con frecuencia llevada a cabo con afán competitivo. Como término solitario, el deporte se refiere normalmente a actividades en las cuales la capacidad física del competidor son la forma primordial para determinar el resultado […]

¿Starcraft sigue reglas? Claro que sí. ¿Se realiza con afán competitivo? A veces. Hay veces que se juega sólo por diversión. Sin embargo la contradicción está cuando se indica que como término solotario, deporte se entiende con actividades en las que la capacidad física del competidor influyen en el resultado.

¿Starcraft necesita disciplinas de sueño, alimentación y demás para poderlo practicar? Claro que no. Al menos no hay que dejar de comer carne o dormir menos para poderlo jugar. Entonces no es una disciplina propiamente dicha… y entonces no es un deporte.

Si vemos los registros de varios juegos online como Mu, GunBound y demás… veremos que los primeros puestos son ocupados por peruanos o lo estuvieron alguna vez así. Estos jugadores no son "olvidados" deportistas, si no simplemente personas que invierten su tiempo en jugar vía Internet. Nada que ver con deportes, cosa que el IPD debería apoyar.

En resumen… la Ignoracia es atrevida… y mucho.

Descargas de Manga con Python y Wget

August 27, 2008

Gracias a unos amigos que tengo, me entero del sitio OneManga.com, en el cual se puede leer manga online. (Para quien no sepa, manga son cómics japoneses). Entre sus múltiples títulos tienen Naruto, Bleach, Death Note, School Days, etc. Lo único malo es que está en inglés y las imágenes no son de tan buena calidad como uno espera.

Suelo leer en el sitio, pero debido a puro interés, siempre quize tener algunos mangas en local, para leer y también para enseñarselos a mis amigos. (No siempre tengo Internet disponible). Por eso decidí buscar la forma de descargarme las imágenes del sitio.

Sorprendentemente el sitio enlaza a un .jpg sin más protección adicional y tiene enlaces que llevan a las siguientes páginas de un capítulo de manga. Todo esto en legible HTML. Es por eso que conseguí algun tutorial de expresiones regulares y decidí comenzar a programar un script. De nuevo, en Python.

El programa llamado OneManga Downloader, está bajo licencia MIT y se puede descargar de aquí.

Para usarlo hay que tener un par de requisitos: Hay que tener instalado wget, ya que usará a este programa para bajar las imágenes. Bajo Linux ya viene instalado, para Windows, deberán bajarlo de aquí.

Nuestro programa tiene 4 opciones que son:

  • -gurl: Indica que se impriman las URL que se estan bajando.
  • -wget: Descarga las URL
  • -rpage: Descarga recursiva. Comienza desde una página hasta el final del capítulo.
  • -mdata: Devuelve información del Manga, como su nombre y el capítulo actual y luego cierra la aplicación.

Para usarlo, deberán anteponer alguna de las opciones y luego pondrán la URL del capítulo del manga que quieran bajar. Un ejemplo:

one-manga-dw.py -gurl -rpage -wget http://www.onemanga.com/Bokurano/1/01/

Ahora solamente deberán esperar a que se bajen todos los episodios. En realidad, cuando programé la opcion -rpage, se bajaba todos los capítulos de todo el manga. No obstante le he desactivado esas características para no sobrecargar al servidor. Si desean tenerlas de nuevo, modifiquen el código fuente que les pongo.

Un problema de este programa es que pone todos los .jpg en la carpeta actual. No los ordena ni por Manga ni por capítulo. Agradecería a alguna persona para que haga eso o lo haré con cierta demora.

Finalmente si deseas leer manga en inglés, te recomendaría los siguientes:

  • Bokurano
  • Death Note
  • Naruto (Esta de moda, aunque no me gusta… hay que ponerlo)
  • Bleach (Ídem de Naruto)
Feliz descarga y lectura.

 

Actualización (30 - 08 - 08): A raíz de las peticiones de un amigo que queria leer School Days y de un curso de compiladores, he pulido mucho más el script. Ahora soporta Descarga masiva. ¡Denle un titulo de manga y lo bajará hasta llegar al último capítulo! También le he agregado opciones de organización. Ordena los mangas en carpetas y por capítulos y fue totalmente reescrito orientado a objetos. (O casi a eso)

El nuevo OneManga Downloader puede descargarse de aqui. Al igual que el anterior, sigue bajo Licencia MIT.

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.