Photo meme
1. Take a picture of yourself right now.
2. Don’t change your clothes, don’t fix your hair…just take a picture.
3. Post that picture with NO editing.
4. Post these instructions with your picture.
1. Take a picture of yourself right now.
2. Don’t change your clothes, don’t fix your hair…just take a picture.
3. Post that picture with NO editing.
4. Post these instructions with your picture.
Desde hace una semana a la fecha he venido trabajando en un pequeño proyecto al cual he bautizado pepon, pepon nace de la necesidad de tener acceso a un traductor y evitarme la pereza de ir a abrir el traductor de google cada vez que lo necesite, la idea inicial era crear un pequeño script para usarlo en la terminal pero esa idea fue evolucionando hasta convertirse en lo que hoy es pepon.
Pepon es un pequeño (si es pequeño por que aun no sabe hacer muchas cosas) robot de gtalk escrito en python que actualmente sabe hacer lo siguiente:
Actualmente algunos amigos y yo estamos trabajando en implementarle mas cosas a este pequeño robot así que con el tiempo ira creciendo, si quieres tener a este robot en tu lista de contactos de google talk su dirección es esta:
Si tienes alguna sugerencia de alguna buena característica que te gustaría que pepon aprendiera a hacer deja un comentario e intentaremos implementarla.
Igualmente nos gustaría que pepon tuviera un nombre mas acorde a lo que es (un acronimo relacionado con un robot quizá) así que igual cualquier sugerencia es bien recibida.
Si leyeron el post anterior vieron el conflicto que causo Eduardo por que damog rompió la credibilidad del rank de Galaxia Linux.
Después de esa gran tragedia yo tuve la oportunidad de tener una “lluvia de ideas” para mejorar galaxia linux, bien, en lugar de ser una lluvia de ideas vimos a un Programador defendiendo su trabajo convencido que la forma en que hace las cosas es fiable.
El nos cuenta que por ahora están afinando el método y están en beta a lo que yo conteste que el script de damog demostró que tal cosa no va a ser viable y que tendría que replantear la forma en que rankea los sitios; Eduardo en ese momento me reto a que probara el script de damog para demostrar que tal script ya no funciona y que él en cuanto detecte nuevas formas de “meter gol” les iba a programar filtros para que no puedan quitarle fidelidad al rank.
La conclusión al final de la conversación era que si me daba tiempo iba a extender el ejemplo de David Moreno a algo que no se pudiera filtrar y que mostraría que usar impresiones para armar el rank era algo inviable.
Así que hoy deje de ver mi episodio Sara Connors Chronicles y prepare un pequeño caso de estudio.
Primero, pensemos un poco acerca de como funciona su sistema de ranking de galaxialinux.com
1. Crear un script que genere una imagen que a la vez cuente como impresión la pagina del blog que ha sido visitado. (osea este: http://www.galaxialinux.com/rank/banners/banner.php)
2. Contar estas impresiones, pero para darle mas fidelidad tenemos que considerar algunas cosas:
- La ip del visitante no puede ser repetida una cantidad excesiva de veces por que querría decir que el usuario esta apretando repetidamente el botón refresh con tal de subir rank
- Tampoco podemos meter su IP a una black list permanente por que quizá este usuario gusta de visitar este blog mas de una vez al díá por que este se actualiza en mas de una ocasión diariamente
Oks ahora describamos un poco de lo que vamos a escribir:
Lo primero, La ip del visitante no puede ser repetida una cantidad excesiva de veces aquí es donde actualmente YA falla el script de Damog (antes no hacían esta revisión) vamos a ver, la forma mas viable de nunca ser la misma ip sería usando un proxy ¿no? oks, aquí hay un pequeño problema, muchas paginas de proxies tiene pequeños “hacks” para que alguien no pueda usar curl y parsear las ips, vi un caso donde generaban el puerto con javascript y otro donde te exigian javascript “encendido” para poder acceder a la lista, y mejor aun uno hasta tenia un pequeño captcha.
Oks lo mas sano (para mi) fue buscar unos minutos en google y cualquier cosa que tuviera forma de una lista de proxies pegarla en un archivo de texto (aunque esta lista se pegara con pedazos de html o de la pagina no importa realmente, solo importa tener los proxies juntos en un solo texto), rápidamente tenia en un archivo de texto mucha basura junto con proxies revueltos así que parte del script iba a ser obtener esta lista de proxies.
Una vez teniendo mi lista de proxies escribí el siguiente script:
# -*- coding: utf-8 -*-
#Caso de Estudio Galaxia Linux
#Autor David Valdez
import urllib
import urllib2
import re
class anti_rank:
"""testing"""
def __init__(self):
pass
def main(self):
#request (aquí podemos meter diferentes combinaciones de headers e irlas intercambiando)
#además podemos poner la pagina que queremos que suba en el rank
headers = {'User-Agent':'Firefox','Referer':'http://www.tecnologiaslibres.net/'}
#esta función devuelve una lista de proxies
ips = self.get_ips()
#por cada proxy intentamos hacer una petición
for ip in ips:
try:
proxy = urllib2.ProxyHandler({'http': ip})
opener = urllib2.build_opener(proxy,urllib2.HTTPHandler)
urllib2.install_opener(opener)
response = urllib2.Request("http://www.galaxialinux.com/rank/banners/banner.php",None,headers)
response = urllib2.urlopen(response)
response.close()
#un poco de verbose
print "Visitado con la siguiente ip: "+ ip + " al sitio:tecnologiaslibres.net"
except:
print "Error usando este proxy: "+ ip
print "numero de visitas realizadas: %d" % visitas
#lista de proxies
def get_ips(self):
#lo único que necesitamos esa esta expresión regular que extrae las puras ips
#de toda la basura que tenemos de texto
get_ip = re.compile("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{0,4}")
file = open("proxies.txt","r")
cadena = ""
for line in file.readlines():
cadena = cadena + line
ips = get_ip.findall(cadena)
file.close()
return ips #regresamos una gran lista de direcciones de proxies
if __name__ == "__main__":
text = anti_rank()
text.main()
EN base a esto, poniéndome en los zapatos de Eduardo, consideraría lo siguiente:
- Siempre cada petición será una ip diferente.
- Suponiendo que los filtros revisen cualquier otra cosa en el header (como user Agent) puede ser fácilmente fálsificable así que no es una solución validar por alguna otra cosa del header.
- Además, banear impresiones por user Agent aumentaría dramáticamente el caso de falsos positivos y muchas impresiones genuinas serían tomados como negativos.
- Quizá banear si dos peticiones pasan muy juntas, tampoco es viable, los primeros lugares en el rank tiene muchisimas impresiones, limitar por tiempo las peticiones afectaría directamente a estos primeros lugares (además que podríamos aleatoreamente “pausar” nuestro script para que tampoco tenga peticiones juntas.
Concluyendo, NO hay forma de saber si una impresión es real o es generada por un script como el arriba escrito entonces TAMPOCO hay forma de Programar un filtro para evitar las impresiones falsas. así que la única forma de tener un rank viable es REPLANTEAR la forma de generar el rank que este no se base en vistas. ![]()
[UPDATE] SI no alcanzan a apreciar el código, aquí se ve mucho mas claro