Gnuget http://gnuget.underlife.org/ Gnuget Creative Commons Atribución-Licenciamiento Recíproco 2.5 México Wed, 29 Oct 2008 19:24:49 -0700 http://www.textmotion.org Proyecto pepon http://gnuget.underlife.org/blog/view/196/proyecto-pepon http://gnuget.underlife.org/blog/view/196/proyecto-pepon <p>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.</p> <p>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:</p> <p><ul><li>Generar la tinyUrl de una dirección  web  ( tinyurl http://gnuget.org)</li><li>Generar el md5 hash de una cadena  (md5 cadena_De_Texto)</li><li>Trata de descifrar la cadena  de un hash previamente dado (unmd5 d8578edf8458ce06fbc5bb76a58c5ca4 ) </li><li>Traducir en todos los lenguajes que traduce translate.google.com  (translate en-es  hello world)</li></ul></p> <p>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:</p> <!--begin photo--><div class="photo block-center"> <a href="http://gnuget.underlife.org/data/uploads/pepon.png"><img class="picbox-photo" src="http://gnuget.underlife.org/data/thumbs/305_fb33d597aaa870ef133fe0759b2ca5b6_pepon.png" width="305" height="55" /></a> </div><!--end photo--><p></p> <p>Si tienes  alguna sugerencia de alguna buena característica que te gustaría que pepon aprendiera a hacer deja un comentario  e intentaremos implementarla.</p> <p>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.</p> david.valdez210@gmail.com (David Valdez) Wed, 29 Oct 2008 19:24:49 -0700 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 Agregar rutas al load_path de emacs http://gnuget.underlife.org/blog/view/191/agregar-rutas-al-load-path-de-emacs http://gnuget.underlife.org/blog/view/191/agregar-rutas-al-load-path-de-emacs <p>Una de las ventajas de ubuntu es que hasta este momento cuando quería instalar un modo nuevo para emacs me limitaba a hacer cosas como:</p> <p><span class="code"><div class="bash">gnuget@box:~/ apt-get <span style="color: #c20cb9; font-weight: bold;">install</span> php-mode</div></span></p> <p>Pero ha muchas cosas que no vienen  en los repositorios, por ejemplo <a href="http://tapsellferrier.hapispace.com/nicferrier/200710115T225511.hapi">este maravilloso modo para twittear desde emacs</a>, así que me di a la tarea de probarlo.</p> <p>Pero ohh sorpresa, no encontraba una forma  bonita de hacerlo, primero me limite a agregarlo a donde están los modos que instala apt para emacs que es en: <b><i>/usr/share/emacs22/site-lisp/</i></b> pero esto no es muy bonito por que  acostumbro usar emacs en varios equipos entonces me di a la tarea de investigar como decirle a emacs que nos busque en un lugar  que nosotros escojamos.</p> <p>Para agregar un path donde buscar a emacs necesitamos abrir nuestro archivo de configuración <b><i>.emacs</i></b> y agregar lo siguiente hasta el principio:</p> <p><span class="code"><div class="lisp"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> load-path<br /> &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">append</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #b1b100;">nil</span> <span style="color: #ff0000;">&quot;~/.emacs-modes/&quot;</span><span style="color: #66cc66;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; load-path<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></div></span></p> <p>En este  caso  agregamos la carpeta  ~/.emacs-modes/   al load-path de emacs ya solo bastará poner ahí nuestros modos y emacs sabrá donde encontrarlos <img src="http://gnuget.underlife.org/media/emoticons/ichat/happy.png" width="18" height="18" /></p> david.valdez210@gmail.com (David Valdez) Fri, 26 Sep 2008 13:34:00 -0700 Un problema gordo con cakephp http://gnuget.underlife.org/blog/view/188/un-problema-gordo-con-cakephp http://gnuget.underlife.org/blog/view/188/un-problema-gordo-con-cakephp <p>El día de ayer estaba  revisando el consumo de memoria que generaba una aplicación en la que estoy trabajando y quede  sorprendido, el uso de memoria era excesivo, así que pensé en revisar cuanta memoria era la que consumía este framework por si solo.</p> <p>Me dispuse a bajar una copia fresca del framework y yo recordaba que cuando  teníamos el debug  mayor a cero  aparecía  hasta abajo de la pagina  consumo de memoria o al menos así era  por que ahora por alguna razón los desarrolladores les ha dado por  quitar esa linea, eso  me sonó muy raro así que me dispuse a agregarle una similar y quedo así:</p> <p><span class="code"><div class="php"><span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>Configure::<span style="color: #006600;">read</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> &gt; <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br /> &nbsp; &nbsp; <span style="color: #000066;">echo</span> <span style="color: #ff0000;">'&lt;!-- memoria usada: '</span> . <span style="color: #000066;">round</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">memory_get_usage</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> / <span style="color: #cc66cc;">1024</span>,<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> . <span style="color: #ff0000;">' KB --&gt;'</span>;<br /> <span style="color: #66cc66;">&#125;</span></div></span></p> <p>Al cargar el index.</p> <!--begin photo--><div class="photo block-center"> <a href="http://gnuget.underlife.org/data/uploads/home.png"><img alt="280_eb0e4d39f7a82fcfb4db577514840a7a_home.png" src="http://gnuget.underlife.org/data/thumbs/280_eb0e4d39f7a82fcfb4db577514840a7a_home.png" width="280" height="175" /></a> <span class="photo-description">index</span> </div><!--end photo--><p></p> <p>Me lleve una enorme y no grata sorpresa, el PURO framework  sólito así desempacado marca:</p> <p><span class="code"><div class="html4strict"><span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!-- memoria usada: 4639.7 KB --&gt;</span></span></div></span></p> <p>me dispuse a probar  cuanto gasta en una hoja con un formulario simple, tan simple como esto:</p> <p><span class="code"><div class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000066;">echo</span> <span style="color: #0000ff;">$form</span>-&gt;<span style="color: #006600;">input</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Example.username'</span>,<span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'label'</span> =&gt; <span style="color: #ff0000;">'nombre de usuario'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;?&gt;<br /> <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000066;">echo</span> <span style="color: #0000ff;">$form</span>-&gt;<span style="color: #006600;">input</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Example.comentarios'</span>,<span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'label'</span>=&gt; <span style="color: #ff0000;">'Comentario'</span>,<span style="color: #ff0000;">'cols'</span>=&gt;<span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;?&gt;</div></span></p> <p>Y la memoria gastada es:</p> <p><span class="code"><div class="html4strict"><span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!-- memoria usada: 5639 KB --&gt;</span></span></div></span></p> <p>Es decir, en imprimir dos  inputs cake ya se tomo  otro mega completo mas. :S</p> <p>Concluyendo Cuando comencé a trabajar con cake yo tenia en mente que se iba a pagar un precio en memoria por el simple hecho de ser un framework, pero si hace un año me hubieran dicho que el consumo iba a hacer tan enorme  me la hubiera pensado dos veces antes de  escoger este framework como mi herramienta de trabajo diario (a por que cabe destacar que en el alpha y beta de este release candidate el consumo no era tan exorbitante como lo es ahora, parece que entre mas se acercan al estable pagamos mas precio en memoria).</p> david.valdez210@gmail.com (David Valdez) Fri, 12 Sep 2008 16:15:00 -0700 Y si, todo fue un error http://gnuget.underlife.org/blog/view/185/y-si-todo-fue-un-error http://gnuget.underlife.org/blog/view/185/y-si-todo-fue-un-error <p>Las condiciones de Uso de google chrome era un error: <a href="http://www.diarioti.com/gate/n.php?id=19226">http://www.diarioti.com/gate/n.php?id=19226</a></p> david.valdez210@gmail.com (David Valdez) Fri, 05 Sep 2008 16:07:36 -0700 Blog sobre desarrollo de software http://gnuget.underlife.org/blog/view/170/blog-sobre-desarrollo-de-software http://gnuget.underlife.org/blog/view/170/blog-sobre-desarrollo-de-software <p>Vagando por ahí, me tope con este blog que escribe acerca de artículos y noticias referentes al desarrollo del software. Es una excelente lectura para esas horas de ocio que casi nunca uno tiene disponibles, la url es: <a href="http://www.versioncero.com/">http://www.versioncero.com/</a></p> david.valdez210@gmail.com (David Valdez) Mon, 23 Jun 2008 02:17:28 -0700 Videos en flickr http://gnuget.underlife.org/blog/view/160/videos-en-flickr http://gnuget.underlife.org/blog/view/160/videos-en-flickr <p>Me acabo de percatar que  ahora flickr  nos permite subir vídeos.</p> <p>En mi opinión esto es de lo mas nefasto que pudo ocurrir, flickr para mi ha sido siempre un sitio, agradable, limpió , divertido,  perfectamente enfocado a lo que tiene que hacer que es compartir fotos.</p> <p>Pero ahora con su función de subir vídeos esperemos no caiga en ser “una pagina mas de esas que permiten subir vídeos”.</p> <p>Siento que el querer acaparar todo eventualmente nos quitará eso que nos gustaba tanto de flickr.</p> <p>Las reglas para subir vídeos son simples, los vídeos tiene un limite de duración de 90 segundos y  el archivo debe pesar  menos de  150 megas.</p> <p>Pues veremos,  como le resulta a flickr esta movida, Sinceramente comienzo a dudar si renovar mi cuenta pro el próximo año.</p> <p><a href="http://flickr.com/help/video/"><span>Aquí el faq  acerca de los vídeos de flickr</span></a></p> <p>Y aquí un <a href="http://www.flickr.com/photos/acusticrsh/2400553426/"><span>vídeo</span></a> de muestra (subido por  <a href="http://lugardeinsanidad.blogspot.com/"><span>Shermie</span></a>)</p> david.valdez210@gmail.com (David Valdez) Tue, 08 Apr 2008 23:34:15 -0700 Twhirl http://gnuget.underlife.org/blog/view/155/twhirl http://gnuget.underlife.org/blog/view/155/twhirl <p>Aprovechando que ha salido <a href="http://labs.adobe.com/technologies/air/"><span>la versión alpha de Adobe air para linux</span></a> me he bajado twhirl</p> <p>twhirl es un cliente para twitter   increíble,  tiene bastantes características entre ellas:</p> <p><ul><li> Nos permite subir una imagen desde el mismo cliente  y postearla en  un mensaje (mediante <a href="http://twitpic.com/"><span>twitpic</span></a>)</p> <p></li><li> Nos permite conectarnos a varias cuentas twitter al mismo tiempo</p> <p></li><li> Nos permite al mismo tiempo updatear  además del twitter nuestro Pownce y Jaiku</p> <p></li><li> Entre los múltiples lenguajes que ofrece esta el español</li></ul>Definitivamente  twhirl  es el mejor cliente para twitter que yo haya probado, y a pesar de que la plataforma adobe Air esta aun en alpha para linux  no he tenido ningún problema al usarlo.</p> <p><!-- begin photo --> <div class="photo block-center"><a href="http://gnuget.underlife.org/data/uploads/twhirl.png"><img src="http://gnuget.underlife.org/data/thumbs/300_twhirl.png" alt="300_twhirl.png" height="300" width="265" /></a></p> <p><span class="photo-description">Twhirl</p> <p></span></div> <!-- end photo --></p> <p>Si quieres probar twhirl puedes bajarlo de:  <a href="http://www.twhirl.org/%20%20"><span><a href="http://www.twhirl.org/">http://www.twhirl.org/</a></span></a></p> david.valdez210@gmail.com (David Valdez) Fri, 04 Apr 2008 00:45:00 -0700