Gnuget http://gnuget.underlife.org/ Gnuget Creative Commons Atribución-Licenciamiento Recíproco 2.5 México Sat, 04 Oct 2008 00:11:00 -0700 http://www.textmotion.org Caso de estudio: Galaxia Linux y por que no basar un rank en impresiones. http://gnuget.underlife.org/blog/view/193/caso-de-estudio-galaxia-linux-y-por-que-no-basar-un-rank-en-impresiones http://gnuget.underlife.org/blog/view/193/caso-de-estudio-galaxia-linux-y-por-que-no-basar-un-rank-en-impresiones <p>Si leyeron el post anterior vieron el conflicto que causo <a href="http://www.tecnologiaslibres.net/">Eduardo</a> por  que <a href="http://log.damog.net/">damog</a>  rompió la credibilidad del rank de  Galaxia Linux.</p> <p>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.</p> <p>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 <b><i>“meter gol”</i></b>  les iba a programar filtros para que no puedan quitarle fidelidad al rank.</p> <p>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.</p> <p>Así que hoy deje de ver mi episodio Sara Connors Chronicles  y prepare  un pequeño caso de estudio.</p> <p>Primero,  pensemos un poco acerca de como funciona  su sistema de ranking  de galaxialinux.com</p> <p>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)</p> <p>2. Contar  estas impresiones, pero para darle mas fidelidad tenemos que considerar algunas cosas:</p> <p>-  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</p> <p>-  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</p> <p></p> <p>Oks ahora describamos un poco de lo que vamos a escribir:</p> <p>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.</p> <p>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.</p> <p>Una vez  teniendo mi lista de proxies escribí el siguiente script:</p> <p><span class="code"><div class="python"> <span style="color: #808080; font-style: italic;">#! /usr/bin/evn python</span><br /> <span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span><br /> <br /> <span style="color: #808080; font-style: italic;">#Caso de Estudio &nbsp;Galaxia Linux</span><br /> <span style="color: #808080; font-style: italic;">#Autor David Valdez </span><br /> <br /> <br /> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib</span><br /> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib2</span><br /> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span><br /> <br /> <br /> <br /> <span style="color: #ff7700;font-weight:bold;">class</span> anti_rank:<br /> &nbsp; &nbsp; <span style="color: #483d8b;">&quot;&quot;</span><span style="color: #483d8b;">&quot;testing&quot;</span><span style="color: #483d8b;">&quot;&quot;</span><br /> &nbsp; &nbsp; <br /> &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">pass</span><br /> <br /> <br /> &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">#request (aquí podemos meter diferentes combinaciones de headers e irlas intercambiando)</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">#además podemos poner la pagina que queremos que suba en el rank</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; headers = <span style="color: black;">&#123;</span><span style="color: #483d8b;">'User-Agent'</span>:<span style="color: #483d8b;">'Firefox'</span>,<span style="color: #483d8b;">'Referer'</span>:<span style="color: #483d8b;">'http://www.tecnologiaslibres.net/'</span><span style="color: black;">&#125;</span> &nbsp; &nbsp; &nbsp; &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">#esta función devuelve una lista de proxies</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; ips = <span style="color: #008000;">self</span>.<span style="color: black;">get_ips</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp;<br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">#por cada proxy intentamos hacer una petición</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> ip <span style="color: #ff7700;font-weight:bold;">in</span> ips:<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">try</span>: <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy = <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">ProxyHandler</span><span style="color: black;">&#40;</span><span style="color: black;">&#123;</span><span style="color: #483d8b;">'http'</span>: ip<span style="color: black;">&#125;</span><span style="color: black;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opener = <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">build_opener</span><span style="color: black;">&#40;</span>proxy,<span style="color: #dc143c;">urllib2</span>.<span style="color: black;">HTTPHandler</span><span style="color: black;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">install_opener</span><span style="color: black;">&#40;</span>opener<span style="color: black;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response = <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">Request</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;http://www.galaxialinux.com/rank/banners/banner.php&quot;</span>,<span style="color: #008000;">None</span>,headers<span style="color: black;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response = <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">urlopen</span><span style="color: black;">&#40;</span>response<span style="color: black;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">#un poco de verbose</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Visitado con la siguiente ip: &quot;</span>+ ip + <span style="color: #483d8b;">&quot; al sitio:tecnologiaslibres.net&quot;</span> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">except</span>:<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Error usando este proxy: &quot;</span>+ ip<br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;numero de visitas realizadas: %d&quot;</span> % visitas<br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">#lista de proxies &nbsp; &nbsp;</span><br /> &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> get_ips<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">#lo único que necesitamos esa esta expresión regular que extrae las puras ips </span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">#de toda la basura que tenemos de texto</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; get_ip &nbsp;= <span style="color: #dc143c;">re</span>.<span style="color: #008000;">compile</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\d</span>{1,3}<span style="color: #000099; font-weight: bold;">\.</span><span style="color: #000099; font-weight: bold;">\d</span>{1,3}<span style="color: #000099; font-weight: bold;">\.</span><span style="color: #000099; font-weight: bold;">\d</span>{1,3}<span style="color: #000099; font-weight: bold;">\.</span><span style="color: #000099; font-weight: bold;">\d</span>{1,3}<span style="color: #000099; font-weight: bold;">\:</span><span style="color: #000099; font-weight: bold;">\d</span>{0,4}&quot;</span><span style="color: black;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">file</span> = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;proxies.txt&quot;</span>,<span style="color: #483d8b;">&quot;r&quot;</span><span style="color: black;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; &nbsp; cadena = <span style="color: #483d8b;">&quot;&quot;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">file</span>.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cadena = &nbsp;cadena + line<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; &nbsp; ips = get_ip.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>cadena<span style="color: black;">&#41;</span> &nbsp; &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">file</span>.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> ips <span style="color: #808080; font-style: italic;">#regresamos una gran lista de &nbsp;direcciones de proxies</span><br /> <br /> <br /> <span style="color: #ff7700;font-weight:bold;">if</span> __name__ == &nbsp;<span style="color: #483d8b;">&quot;__main__&quot;</span>:<br /> &nbsp; &nbsp; text = &nbsp;anti_rank<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br /> &nbsp; &nbsp; text.<span style="color: black;">main</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></span></p> <p>EN base a esto, poniéndome en los zapatos de Eduardo, consideraría lo siguiente:</p> <p>- Siempre cada petición será  una ip diferente.</p> <p>- 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.</p> <p>- 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.</p> <p>- 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.</p> <p>Concluyendo,  <b>NO</b> hay forma de saber si una impresión es real o es generada por un script como el arriba escrito entonces <b>TAMPOCO</b> hay forma de Programar un  filtro para evitar las impresiones falsas.  así que la única forma de tener un rank viable es <b>REPLANTEAR</b> la forma de generar el rank que este no se base en vistas. <img src="http://gnuget.underlife.org/media/emoticons/ichat/happy.png" width="18" height="18" /></p> <p>[UPDATE] SI no alcanzan a apreciar el código, <a href="http://gnuget.mechulk.com/devel/ejemplos/galaxialinux.html">aquí se ve mucho mas claro </a></p> david.valdez210@gmail.com (David Valdez) Sat, 04 Oct 2008 00:11:00 -0700 ¿Quieres promocionar planeta linux? http://gnuget.underlife.org/blog/view/173/quieres-promocionar-planeta-linux http://gnuget.underlife.org/blog/view/173/quieres-promocionar-planeta-linux <p>Había olvidado postearlo, pero  hace un par de semanas  por fin pudimos subir los banners que <a href="http://blacknash.com.mx/"><span>blacknash</span></a> había hecho para <a href="http://planetalinux.org/"><span>planeta linux</span></a>.</p> <p>Si quieres agregar un banner a tu blog,  entra aquí:</p> <p><a href="http://planetalinux.org/banners.php"><span><a href="http://planetalinux.org/banners.php">http://planetalinux.org/banners.php</a></span></a></p> david.valdez210@gmail.com (David Valdez) Thu, 03 Jul 2008 00:44:07 -0700 Nuevas instancias en planeta linux http://gnuget.underlife.org/blog/view/169/nuevas-instancias-en-planeta-linux http://gnuget.underlife.org/blog/view/169/nuevas-instancias-en-planeta-linux <p><!-- begin photo --> <div class="photo block-center"><a href="http://gnuget.underlife.org/data/uploads//planetalinux.png"><img alt="170_aafe58730c98949626eb34f7f44c554c_planetalinux.png" src="http://gnuget.underlife.org/data/thumbs/170_aafe58730c98949626eb34f7f44c554c_planetalinux.png" height="73" width="170" /></a></p> <p><span class="photo-description">planetalinux.png</span></div> <!-- end photo --></p> <p>Después de un par de semanas de trabajo intermitente en el planeta (casi solo puedo  dedicarle los fines de semana)  hemos  levantado las instancias que nos quedaban pendientes.</p> <p>Nicaragua:  <a href="http://ni.planetalinux.org/"><span><a href="http://ni.planetalinux.org/">http://ni.planetalinux.org/</a></span></a></p> <p>Panamá:  <a href="http://pa.planetalinux.org/"><span><a href="http://pa.planetalinux.org/">http://pa.planetalinux.org/</a></span></a></p> <p>Costa Rica:  <a href="http://cr.planetalinux.org/"><span><a href="http://cr.planetalinux.org/">http://cr.planetalinux.org/</a></span></a></p> <p>El Salvador: <a href="http://sv.planetalinux.org/"><span><a href="http://sv.planetalinux.org/">http://sv.planetalinux.org/</a></span></a></p> <p>Aun podrían tener bugs,   y pequeños detalles sin resolver,  pero al parecer ya todo va sobre ruedas.</p> <p>Si notas  algo que falla puedes  mandar un correo en la lista y a la brevedad será atendido:</p> <p><a href="http://groups.google.com/group/planetalinux"><span><a href="http://groups.google.com/group/planetalinux">http://groups.google.com/group/planetalinux</a></span></a></p> david.valdez210@gmail.com (David Valdez) Sun, 08 Jun 2008 19:33:00 -0700