tag:blogger.com,1999:blog-87229342008-07-22T06:33:15.273-07:00GaRaGeD Stylegaragedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comBlogger198125tag:blogger.com,1999:blog-8722934.post-41733156817053250172008-07-18T12:05:00.000-07:002008-07-18T12:27:33.732-07:00Vulnerabilidad de Firefox (no grave?)En la navegación acostumbrada de todos los días me encontré con una página muy interesante, desde su url http://0x000000.com, y casualmente hoy tiene en su portada un artículo sobre <a href="http://0x000000.com/index.php?i=615">como esconder extensiones en firefox</a>, que si no suena suficientemente malo, puedes pasar a ver un <a href="http://azurit.elbiahosting.sk/ffsniff/">ejemplo práctico de esto</a>.<br /><br />No soy un experto en la materia como para ponerme a hablar al respecto, pero cada vez estamos adentrandonos más a un terreno en el que con el fin de avanzar y hacer las aplicaciones amigables, abrimos una gran puerta de acceso para ser usada en ataques (maliciosos) contra nuestros datos y lo que esté disponible al navegador (y algunas otras aplicaciones, virtualización viene a la mente).<br /><br />Como le comenté a gnuget hace unos días, soy totalmente web 2.0, pero en general trato de dejarle el menor número de variables de mi vida al internet, es algo muy recomendable para todos, entre más tengas más puedes llegar a peder.<br /><br />En otras palabras, si me roban mi información, no se llevan nada de valor :), prácticamente todo es transparente.garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-77298443305656108072008-07-18T09:33:00.000-07:002008-07-18T12:02:56.604-07:00Undercover non-economistAntes de hablar del tema de este post, recomiendo ampliamente la lectura del libre "The Undercover Ecnomist", además el autor tiene un <a href="http://blogs.ft.com/undercover/">blog realcionado</a>.<br /><br />Pero no voy a hablar del libro, ni del autor, aunque a lo mejor debería.<br /><br />Quiero desahogar un poco mis ideas Richard Stallmanescas, a pesar de que no me cae muy bien RMS, cuando una persona tiene la razon, tiene la razon ! (yo como digo una cosa digo otra).<br /><br />En todos lados vemos desde hace años propaganda anti-piratería, y bueno, todos sabemos que ha servido para 3 cosas, lo que me preocupa un poco más es la hipocresía en estas campañas, que no son más hipócritas que cualquier campaña política escogida al azar.<br /><br />Aquí, mi punto principal de ataque es: cómo puede hablarse de pérdidas, cuando una compañía es rentable, y por dios, las compañías de música son muy rentables, pregúntense por qué los cantantes tienen que pasarsela en tours para poder hacerse ricos, y no es que sepa demasiado del tema, pero es muy obvio que no solo por amor al arte andan de gira los Rolling Stones por ejemplo.<br /><br />Este tipo de detalles del capitalismo, es lo que realmente no entiendo, porque es moralmente correcto hacer fortuna con precios sobrevaluados de los productos, y no es legal rehacer el producto con precios por demás bajos y venderlos como alternativa.<br /><br />Entiendo el royo de la propiedad intelectual, pero algo que las leyes también deberían tener en cuenta es el gandallismo, si alguien trata de agandallarse vendiendo a 150 pesos algo que le costó hacerlo 5 pesos (no me digan que cuesta mucho más un disco) pues automáticamente es gandalla y todos los demás tenemos derecho a piratearlo por gandalla.<br /><br />Al menos eso pienso yo. Estoy de acuerdo en pagar 100 pesos por ir al cine, me estan ofreciendo una experiencia diferente, con toda una infraestructura, tal y como lo ofrecen los cantantes y grupos musicales (por mucho más, y tambien lo veo bastante justo), pero gastarme más de 100 pesos por comprar un disco si es excesivo, así como pagar sumas similares por comprar una pelicula, vamos, si ya ganaron una lanísima en el cine, que les cuesta hacerles accesible la peli a los que no pudieron ir al cine, o simplemente no tienen suficiente. Que no es cosa de arte ? y el arte se hace para compartirlo ??<br /><br />No se trata de regalar las cosas, pero si ya le sacaste a un producto varios millones, por qué la obsesión de seguir exprimiendole dinero aunque restrinja el consumo a un grupo selecto ??<br /><br />En fin, yo si estoy totalmente a favor de la piratería, así como estoy en contra de la explotación de los trabajadores, para mi es una discriminación terrible lo que hacen las productoras de cine y música avalados por cosas como la RIAA, y me dá gusto que cualquiera pueda ver una pelicula por 15 pesos. Ahora resulta que por ser pobre no puedes divertirte como lo hacen los demás ?garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-47851462956369212892008-07-15T16:21:00.000-07:002008-07-16T08:25:59.732-07:00amor geekTambién los geeks amamos, no como los demas, pero amamos :P<br /><br />Hay muchas cosas que amo, casi todas relacionadas con mi familia, pero una pequeña parte de mi amor también está repartido entre otra cosas menos importantes como las computadoras, el software libre, y por ejemplo Firefox !<br /><br />Por mucho tiempo estuve algo decepcionado con la zorra fogosa, mi amor por KDE (ya muchas veces mencionado) realmente me tuvo por mucho tiempo bastante descontento con el desempeño de Firefox, en general Konqueror hace prácticamente todo lo que hace el otro, con pequeños detalles como gmail, y lo hace con un desempeño muy decente (no memory leaks !).<br /><br />Y bueno, cuando empezaron a salir los betas de Firefox 3 empecé a probarlos, y rápidamente estaba usando los betas de tiempo completo y no la versión estable (2), y bueno, mi anunciada migración a awesome me hizo recuperar el uso masivo de Firefox (ya no uso KDE ni Konqueror).<br /><br />Uno de los detalles importantes en el uso de la zorra es que normalmente para actividades importantes, siempre hay una manera de hacerlas más agradables, y por tanto por ejemplo uso extensiones para twitter, plurk, tinyurl, así como no-script, foxyproxy, web developer, etc.<br /><br />Nunca está demás recomendar el uso de Firefox, tiene sus detalles, y nunca ha sido perfecto, pero es de lo mejorcito que se puede usar para navegar.<br /><br />Buen díagaragedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-31732988525523167492008-07-11T14:34:00.001-07:002008-07-11T14:45:07.960-07:00que hay de malo con la simplicidad ?Viendo el blog de gnuget me encontré con <a href="http://gnuget.org/blog/view/174/cambiar-una-palabra-en-muchos-archivos">algo chistoso</a>.<br /><pre><br />for i in $(find . | grep -v svn );<br />do<br /> if test -f <font color="#2040a0">$i</font><br /> then<br /> sed s/word1/word2/g <font color="#2040a0">$i</font> > <font color="#2040a0">$i</font>.tmp && mv <font color="#2040a0">$i</font>.tmp <font color="#2040a0">$i</font><br /> fi<br />done<br /></pre><br /><br />Gunnar lo "simplifica" (con todo respeto para alguien a quien admiro mucho) con:<br />find . |grep -v svn |xargs perl -p -i -e 's/word1/word2/g'<br /><br />Pero seria tan sencillo como:<br />find . -type file -exec sed s/word1/word2/g {} \;<br /><br />No necesitas mas que find, no es necesario xargs, y mucho menos meterle perl.<br /><br />Posteo en mi blog, pq traté de poner el comentario en el blog de gnuget y me dá un error (segundo blog en el mismo día en el que pasa lo mismo).<br /><br />A veces vale la pena leer el man con un poco de detalle para no tener que hacer complejo algo que no es necesario que lo sea.<br /><br />Lo dice alguien que es bastante malo para hacer las cosas bien.garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-72614653137964563922008-07-11T14:21:00.000-07:002008-07-11T14:25:35.721-07:00wordlePues clásico, si no tienes nada que hacer, imita a los demás :P<br /><br />Viendo la página de Gunnar me encontré <a href="http://gwolf.org/node/1839">con esto</a> que vió a su vez en la página de <a href="http://www.riveonline.com/index.php/blog/show/Wordle-nube-de-palabras.html">Cesar Espino</a>.<br /><br />Pues aquí está el mio generado con el contenido de este blog hoy.<br /><br /><a href="http://wordle.net/gallery/wrdl/63633/garaged_style" title="Wordle: garaged style"><img src="http://wordle.net/thumb/wrdl/63633/garaged_style" style="padding:4px;border:1px solid #ddd"></a><br /><br />Curiosamente no aparece linux, por lo que veo ultimamente no he hablado mucho de linux, a pesar de que es prácticamente el unico tema del que hablo mucho :P, realmente no tengo mucha plática.<br /><br />Bueno fin de semana !garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-14168614983573692392008-07-08T14:46:00.000-07:002008-07-14T10:29:17.632-07:00RMS vs GatesDespues de otro día más friendo mi cabeza con un script para analizar los logs de correo, y con la tercera o cuarta idea diferente (e igualmente aburrida) de que bloguear, quiero desahogarme un poco con un tema controversial, importante, poco tomado en cuenta, etc.<br /><br />El <a href="http://news.bbc.co.uk/2/hi/technology/7487060.stm">más reciente rant</a> de Richard Stallman como siempre causa <a href="http://neosmart.net/blog/2008/richard-stallman-expert-in-the-art-of-fud/">reacciones</a> esperadas, y <a href="http://news.slashdot.org/article.pl?sid=08/07/05/1153253&from=rss">variadas</a>.<br /><br />Yo no soy tan radical como RMS, pero no puedo dejar de ver la razon en sus palabras, perdemos el enfoque en lo correcto por nuestra obsesión por obtener más (ka-ching!), de la misma manera en la que por ejemplo hacemos daño a la gente (incluso que nos importa) por seguir nuestros impulsos vanidosos.<br /><br />En el esquema actual de México y la mayoría del mundo, el que nos enseñaron a respetar desde niños, no importa hacer lo que es moralmente correcto, sino lo que la ley te permite.<br /><br />Es fácil condenar a alguien por robar para comer, y es fácil justificar cobros excesivos de las empresas de Slim al mismo tiempo. Robar es malo, cobrar es capitalista, si no hay nadie que pueda cobrar menos, no es mi culpa.<br /><br />Hay tanto que se podría hablar del tema, y seguramente las opiniones son muy variadas, pero no debería ser así, no deberíamos tener que ponernos a meditar con mucho empeño para darnos cuenta de que hacemos las cosas mal, que estamos dañando a mucha gente haciéndolas mal...<br /><br />Por qué será que nos gusta tanto encontrarle el lado flaco a las reglas ?garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-75511794473293153572008-06-27T12:00:00.001-07:002008-06-27T12:12:57.388-07:00el recuento de los dañosYa hace raton que no blogueo, han pasado pocas cosas, pero vale la pena mencionarlas.<br /><br />Ya muchos hablaron del google developers day, estuvo bastante bien realmente, como dijo el betongo nos quedamos sin ver un par de las que mas nos interesaban por que se llenaron las salas !!, eso no se hace en Mexico !!, aqui no respetamos esas reglas.<br /><br />En general se ve muy bueno el panorama, a partir de lo que comenta la gente de google podemos esperar mucho de android, en una de esas para fin de año tengo un telefono con android en vez de un iphone !!<br /><br />Y bueno, lo obvio para los que hace web, ajax va a estar en todo, lo mejor es usar bibliotecas chidas de javascript, hay incorporar gears para poder hacer movimientos offline en las aplicaciones que lo ameritan, etc :)<br /><br />Cambiando de tema, he seguido con awesome, he ido haciendo el "tunning" para que me acomode mejor a esta cosa, y hasta ahorita voy bien, sigo con ciertos detalles, por ejemplo hace rato, por alguna razon openoffice me cambiaba de "tag" (escritorio) con solo mover el mouse, o teclear algo, y de repente si hacer nada, se corrigio cerrando y abriendo el openoffice, en particular era con el oocalc.<br /><br />Otro de los eventos importantes en mi vida es que pase de los 1000 updates en twitter !!<br /><br />Plurk no me pega mucho, ahora estoy usando una barra de plurk en firefox, que hace que se vea mas como twitter, y me es mas sencillo seguirle la pista, en general la interface de plurk no me agrada mucho, y es demasiado demandante.<br /><br />Trate de comprar algo en thinkgeek y no pude !! ya no mandan a mexico :(, eso me tuvo triste un dia completo.<br /><br />Otra cosa que me tiene algo molesto es que para usar paypal en muchos sitios es necesario asociar una tarjeta de credito o debito, que babosada !!<br /><br />En fin, por ahi van las cosasgaragedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-27033486603060293992008-06-20T12:21:00.000-07:002008-07-02T07:58:06.627-07:00awesomePues finalmente me puse a experimentar con otra cosa que no sea KDE en mi escritorio, a ver si gano puntos con mi cuate <a href="http://kwame.informatux.net/">kwame</a>.<br /><br />Ya he visto otras opciones, y nunca me he acomodado completamente con ninguna como con KDE, pero pues ahora estoy tratando de minimizar el uso de memoria en mi escritorio bajandole el tono a las aplicaciones que corro.<br /><br />Que mejor manera de bajar el uso de memoria que no-usar-un-desktop-manager-tan-grande-como-KDE !!<br /><br />Mi apuesta va por <a href="http://awesome.naquadah.org/">awesome</a>, que es una reescritura de "DWM", y en general creo que trata de hacer mejor las cosas que ion.<br /><br />En Debian unstable esta el paquete 2.3 de awesome, que no esta mal, pero la version de desarrollo tiene muchas mejoras, entre ellas es mucho mas robusta la configuracion, usa "lua", lo que sea que eso singnifica.<br /><br />Para instalar la version de desarrollo hay que bajarla por git (yeah baby!) y compilarla, tiene un buen de dependencias que hay que instalar libxcb*-dev, y varias cosas mas, me da flojerota ir a ver cada una.<br /><br />El royo mas grande que tuve que decifrar es como mapear una tecla no muy util a la tecla de windows, la lap que uso no tiene tecla de windows (nunca pense que pudiera ser una desventaja), asi que tuve que chutarme todo un round con xmodmap, hasta que me di cuenta que la tecla que estaba tratando de mapear (Fn en un teclado de IBM) es atrapada por BIOS cuando tratas de combinarla !! YAI!!, asi que cuando me di cuenta del detalle, ya habia pasado 1 dia, y muchos intentos de hacerla funcionar, asi que tuve que mapear el control de la derecha como tecla de windows para poder usar awesome en su esplendor.<br /><br />Estoy escribiendo esto desde awesome corriendo firefox, pidgin, y una terminal<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Y3K-K3sI5xg/SFwHZ61BxjI/AAAAAAAAAF0/mBqQxDCDW20/s1600-h/awesome.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_Y3K-K3sI5xg/SFwHZ61BxjI/AAAAAAAAAF0/mBqQxDCDW20/s400/awesome.png" alt="" id="BLOGGER_PHOTO_ID_5214050610457986610" border="0" /></a>Para eliminar KDE tengo que substituir varias aplicaciones importantes:<br /><ul><li>kmail => esa estuvo relativamente sencilla, configure mutt con imaps y pa' mandar los correos usa nbsmtp (no-brainer smtp)</li><li>konqueror => pues igual, en vez de tratar de usar lo minimo firefox, ahora es el unico que uso</li><li>konsole => tuve que aprender a usar screen, tiene sus detalles, pero me agrada, ya era hora que aprendiera a usarlo realmente</li><li>amarok => ese si no lo he sustituido, realmente me cuesta, me gusta christine, ya lo he blogueado, pero hay varias cosas de amarok que adoro</li><li>KDM => todavia no lo quito, me agrada loguearme a traves de una cosa bonita, pero no se que voy a hacer al respecto, de cualquier manera es muy ligero, no afecta</li><li>widgets => pues el reloj de awesome no me funciona, me esta dando el timestamp, el system tray funciona pero no es tan completo como en un DM de verdad</li><li>funcionalidad => hago todo lo normal, curiosamente nunca me ha gustado tener todo maximizado, y ahorita lo estoy haciendo, cambio de habitos y nada mas</li></ul>Todavia hay detalles, como el layout del teclado, que no es "exactamente" lo que necesito, en KDE era sencillo escoger el latinoamericano, y todas las teclas funcionaban correctamente, ahora no se como hacerlo directamente en xorg, porque las alternativas que he probado estan peor que el que tengo ahora, que no pone acentos correctamente (por eso no hay acentos en este post !! si claro).<br /><br />En fin, la cosa se ve bien, mucho ahorro de recursos, espero que sirva pa que la bateria me dure mas de las 2 horas y media que me estaba durando.garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-56632097115625626552008-06-17T10:00:00.001-07:002008-07-02T07:58:22.331-07:00Firefox 3http://www.spreadfirefox.com/worldrecord<br /><br />Que esperas ?? ya bajaste hoy, en este momento FF3 ??<br /><br /><a href="http://www.spreadfirefox.com/worldrecord">Adelante</a>garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-39937584016755105232008-06-06T11:29:00.000-07:002008-07-02T07:58:49.704-07:00so much for microblogingPues como dicen, el mundo ya se va a acabar, twitter estuvo sufriendo un rato hoy, hasta que finalmente se cayo (por mantenimiento), y acto seguido todo mundo se va a plurk para tumbarlo tambien !!<br /><br />Excelente no ?<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Y3K-K3sI5xg/SEmChIMcrII/AAAAAAAAAFs/EzYihDyRfwQ/s1600-h/twitter-plurk-offline.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_Y3K-K3sI5xg/SEmChIMcrII/AAAAAAAAAFs/EzYihDyRfwQ/s400/twitter-plurk-offline.png" alt="" id="BLOGGER_PHOTO_ID_5208837949677677698" border="0" /></a>garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-53573616196825809082008-06-04T10:19:00.000-07:002008-06-05T08:48:01.103-07:00bash history meme reloaded<pre><br />$ history|awk '{a[$2]++} END{for(i in a){printf "%5d\t%s\n",a[i],i}}'|sort -rn|head<br /> 90 vi<br /> 50 cd<br /> 40 ls<br /> 34 python<br /> 33 sudo<br /> 21 ll<br /> 14 man<br /> 14 apt-cache<br /> 13 perl<br /> 12 mv<br /></pre><br /><br />No había notado que ahora estoy editando tanto, vim siempre ha sido mi editor favorito, pero la <a href="http://garaged.blogspot.com/2007/05/los-mas-usados.html">vez anterior</a> estaba en tercer lugar, por lo demás parece que ahora estoy haciendo más cosas "administrativas", seguro la mayoría de los sudos son "sudo apt-get ...", python aparece en los primeros lugares !! eso si es sorpresa, perl también aparece!!, konqueror desapareció, ahora lo uso casi exclusivamente a traves de "alt-F2". Otra cosa es que ya no bajo tanta cosa, ultimamente solo he usado el bittorrent para bajar algun disco que le hace falta a mi aipo.garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-45252438387624331792008-06-03T15:15:00.000-07:002008-06-05T08:48:20.064-07:00Python y (mp3info) ID3V2Siguiendo con la ardua tarea de modificar los metatags de mp3 para que al meterlos al aipo no me creen una denegación de servicio por hueva.<br /><br />Como estoy metiendo un par de colecciones que usan múltiples artistas, pues como que no es agradable que ahora las listas categorizadas por artista o por disco tengan en vez de unas 20 entradas, como 200, en 200 artistas o discos es prácticamente imposible encontrar rápidamente lo que a uno se le antoja oír.<br /><br />Pero resulta ser que por alguna sospechoza razón el gtkpod prefiere los tags ID3v2 que los ID3v1, y pues resulta que el modulito de perl no sabe escribir correctamente los de la versión 2, así que rápidamente dí un googlaso a un modulo similar en python, y taraaaaaaaaaaaaan, así me quedó el script en python<br /><pre><tt><b><span style="color:#000080;">from</span></b> mutagen<span style="color:#990000;">.</span>easyid3 <b><span style="color:#000080;">import</span></b> <span style="color:#009900;">EasyID3</span> <br /><b><span style="color:#000080;">from</span></b> string <b><span style="color:#000080;">import</span></b> strip <br /><b><span style="color:#000080;">import</span></b> re <br /><br />file <span style="color:#990000;">=</span> <b><span style="color:#000000;">open</span></b><span style="color:#990000;">(</span><span style="color:#FF0000;">"tt.txt"</span><span style="color:#990000;">)</span> <br /><b><span style="color:#0000FF;">for</span></b> line <b><span style="color:#0000FF;">in</span></b> file<span style="color:#990000;">:</span> <br /> line <span style="color:#990000;">=</span> line<span style="color:#990000;">[:-</span><span style="color:#993399;">1</span><span style="color:#990000;">]</span> <br /> ch <span style="color:#990000;">=</span> <b><span style="color:#000000;">EasyID3</span></b><span style="color:#990000;">(</span>line<span style="color:#990000;">)</span> <br /> p <span style="color:#990000;">=</span> re<span style="color:#990000;">.</span><b><span style="color:#000000;">compile</span></b><span style="color:#990000;">(</span><span style="color:#FF0000;">'\(|\)'</span><span style="color:#990000;">)</span> <br /> line <span style="color:#990000;">=</span> p<span style="color:#990000;">.</span><b><span style="color:#000000;">sub</span></b><span style="color:#990000;">(</span><span style="color:#FF0000;">'-'</span><span style="color:#990000;">,</span> line<span style="color:#990000;">)</span> <br /> p <span style="color:#990000;">=</span> re<span style="color:#990000;">.</span><b><span style="color:#000000;">compile</span></b><span style="color:#990000;">(</span>r<span style="color:#FF0000;">'\-'</span><span style="color:#990000;">)</span> <br /> x <span style="color:#990000;">=</span> p<span style="color:#990000;">.</span><b><span style="color:#000000;">split</span></b><span style="color:#990000;">(</span>line<span style="color:#990000;">)</span> <br /> n <span style="color:#990000;">=</span> <b><span style="color:#000000;">strip</span></b><span style="color:#990000;">(</span>x<span style="color:#990000;">[</span><span style="color:#993399;">0</span><span style="color:#990000;">])</span> <br /> a <span style="color:#990000;">=</span> <b><span style="color:#000000;">strip</span></b><span style="color:#990000;">(</span>x<span style="color:#990000;">[</span><span style="color:#993399;">1</span><span style="color:#990000;">])</span> <br /> t <span style="color:#990000;">=</span> <b><span style="color:#000000;">strip</span></b><span style="color:#990000;">(</span>x<span style="color:#990000;">[</span><span style="color:#993399;">2</span><span style="color:#990000;">])</span><br /> y <span style="color:#990000;">=</span> <b><span style="color:#000000;">strip</span></b><span style="color:#990000;">(</span>x<span style="color:#990000;">[</span><span style="color:#993399;">3</span><span style="color:#990000;">])</span><br /> ch<span style="color:#990000;">[</span><span style="color:#FF0000;">"title"</span><span style="color:#990000;">]</span> <span style="color:#990000;">=</span> a <span style="color:#990000;">+</span> <span style="color:#FF0000;">" - "</span> <span style="color:#990000;">+</span> t<br /> ch<span style="color:#990000;">[</span><span style="color:#FF0000;">"album"</span><span style="color:#990000;">]</span> <span style="color:#990000;">=</span> <span style="color:#FF0000;">"100 Gratest Dance Hits of the 90's"</span><br /> ch<span style="color:#990000;">[</span><span style="color:#FF0000;">"artist"</span><span style="color:#990000;">]</span> <span style="color:#990000;">=</span> <span style="color:#FF0000;">"100 Gratest Dance Hits of the 90's"</span><br /> ch<span style="color:#990000;">[</span><span style="color:#FF0000;">"tracknumber"</span><span style="color:#990000;">]</span> <span style="color:#990000;">=</span> n<br /> ch<span style="color:#990000;">[</span><span style="color:#FF0000;">"date"</span><span style="color:#990000;">]</span> <span style="color:#990000;">=</span> y<br /> ch<span style="color:#990000;">[</span><span style="color:#FF0000;">"genre"</span><span style="color:#990000;">]</span> <span style="color:#990000;">=</span> <span style="color:#FF0000;">"Pop"</span><br /> ch<span style="color:#990000;">.</span><b><span style="color:#000000;">save</span></b><span style="color:#990000;">()</span><br /><br /></tt></pre><br /><br />Unas cuantas líneas ahorradas porque en python existe strip, que hace el trim "bilateral".<br /><br />mmmm, pos ta chido, me pregunto cuando voy a pasar de escribir cosas de menos de 100 lineas a hacer algo que realmente valga la pena.garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-63814114389839857342008-06-02T11:55:00.000-07:002008-06-05T08:48:58.324-07:00Perl y mp3infoBajé unos mp3 de rolas de los 90's, pero sucede que no traía ninguna informacion en los metadatos, pero la información necesaria estaba en el nombre del archivo, así que me puse a hacer un script que sacara los datos del nombre de archivo para imprimir la linea necesaria para ejecutar en shell y actualizar de golpe todos los archivos, pero resulta que varias canciones tenían una comilla, y cositas por el estilo, por lo cual había que escapar los caracteres correctamente para poder ejecutar el dichoso "script", y pues lo lógico, si estas usando perl, seguro debe haber un módulo para actualizar la información de mp3, y pues lo busqué y simplemente sustituyendo una linea por otra ya pude actualizar los tags de los mp3, pa poder subirlos al aipo y que tengan sentido en el astuto sistema de organización del mismo :)<br /><br />Seguro hay una mejor manera de "sacar la información" de la cadena (nombre del archivo), pero no la conozco :P, así que esto funciona, y bien.<br /><br /><pre><tt>#<span style="color: rgb(153, 0, 0);">!/</span>usr<span style="color: rgb(153, 0, 0);">/</span>bin<span style="color: rgb(153, 0, 0);">/</span>perl<br />use <span style="color: rgb(0, 153, 0);">MP3</span><span style="color: rgb(153, 0, 0);">::</span><span style="color: rgb(0, 153, 0);">Info</span><span style="color: rgb(153, 0, 0);">;</span> <br /># <span style="color: rgb(0, 153, 0);">Declare</span> the subroutines <br />sub <b><span style="color: rgb(0, 0, 0);">trim</span></b><span style="color: rgb(153, 0, 0);">(</span>$<span style="color: rgb(153, 0, 0);">);</span> <br /><br /><b><span style="color: rgb(0, 0, 0);">open</span></b><span style="color: rgb(153, 0, 0);">(</span><span style="color: rgb(0, 153, 0);">TT</span><span style="color: rgb(153, 0, 0);">,</span> <span style="color: rgb(255, 0, 0);">"tt.txt"</span><span style="color: rgb(153, 0, 0);">);</span> <br /><b><span style="color: rgb(0, 0, 0);">while</span></b><span style="color: rgb(153, 0, 0);">(</span> $record <span style="color: rgb(153, 0, 0);">=</span> <span style="color: rgb(153, 0, 0);"><</span><span style="color: rgb(0, 153, 0);">TT</span><span style="color: rgb(153, 0, 0);">></span> <span style="color: rgb(153, 0, 0);">)</span> <span style="color: rgb(255, 0, 0);">{</span> <br /> chop $record<span style="color: rgb(153, 0, 0);">;</span> <br /> @cols <span style="color: rgb(153, 0, 0);">=</span> <b><span style="color: rgb(0, 0, 0);">split</span></b><span style="color: rgb(153, 0, 0);">(/-/,</span> $record<span style="color: rgb(153, 0, 0);">);</span> <br /> $n <span style="color: rgb(153, 0, 0);">=</span> <b><span style="color: rgb(0, 0, 0);">trim</span></b><span style="color: rgb(153, 0, 0);">(</span>$cols<span style="color: rgb(153, 0, 0);">[</span><span style="color: rgb(153, 51, 153);">0</span><span style="color: rgb(153, 0, 0);">]);</span> <br /> $a <span style="color: rgb(153, 0, 0);">=</span> <b><span style="color: rgb(0, 0, 0);">trim</span></b><span style="color: rgb(153, 0, 0);">(</span>$cols<span style="color: rgb(153, 0, 0);">[</span><span style="color: rgb(153, 51, 153);">1</span><span style="color: rgb(153, 0, 0);">]);</span> <br /> @tmp <span style="color: rgb(153, 0, 0);">=</span> <b><span style="color: rgb(0, 0, 0);">split</span></b><span style="color: rgb(153, 0, 0);">(/\(/,</span>$cols<span style="color: rgb(153, 0, 0);">[</span><span style="color: rgb(153, 51, 153);">2</span><span style="color: rgb(153, 0, 0);">]);</span> <br /> $t <span style="color: rgb(153, 0, 0);">=</span> <b><span style="color: rgb(0, 0, 0);">trim</span></b><span style="color: rgb(153, 0, 0);">(</span>$tmp<span style="color: rgb(153, 0, 0);">[</span><span style="color: rgb(153, 51, 153);">0</span><span style="color: rgb(153, 0, 0);">]);</span> <br /> @tmp2 <span style="color: rgb(153, 0, 0);">=</span> <b><span style="color: rgb(0, 0, 0);">split</span></b><span style="color: rgb(153, 0, 0);">(/\)/,</span>$tmp<span style="color: rgb(153, 0, 0);">[</span><span style="color: rgb(153, 51, 153);">1</span><span style="color: rgb(153, 0, 0);">]);</span> <br /> $y <span style="color: rgb(153, 0, 0);">=</span> $tmp2<span style="color: rgb(153, 0, 0);">[</span><span style="color: rgb(153, 51, 153);">0</span><span style="color: rgb(153, 0, 0);">];</span> <br /> <b><span style="color: rgb(0, 0, 0);">set_mp3tag</span></b><span style="color: rgb(153, 0, 0);">(</span>$record<span style="color: rgb(153, 0, 0);">,</span> $t<span style="color: rgb(153, 0, 0);">,</span> $a<span style="color: rgb(153, 0, 0);">,</span> <span style="color: rgb(255, 0, 0);">"Top 100 90's"</span><span style="color: rgb(153, 0, 0);">,</span> $y<span style="color: rgb(153, 0, 0);">,</span> <span style="color: rgb(255, 0, 0);">"GaRaGeD"</span><span style="color: rgb(153, 0, 0);">,</span> <span style="color: rgb(255, 0, 0);">"Pop"</span><span style="color: rgb(153, 0, 0);">,</span>$n<span style="color: rgb(153, 0, 0);">);</span> <br /><span style="color: rgb(255, 0, 0);">}</span> <br /><b><span style="color: rgb(0, 0, 0);">close</span></b><span style="color: rgb(153, 0, 0);">(</span><span style="color: rgb(0, 153, 0);">TT</span><span style="color: rgb(153, 0, 0);">);</span> <br />exit <span style="color: rgb(153, 51, 153);">0</span><span style="color: rgb(153, 0, 0);">;</span> <br /><br /># <span style="color: rgb(0, 153, 0);">Perl</span> trim function to remove whitespace from the start <b><span style="color: rgb(0, 0, 255);">and</span></b> end of the <span style="color: rgb(0, 153, 0);">string</span> <br />sub <b><span style="color: rgb(0, 0, 0);">trim</span></b><span style="color: rgb(153, 0, 0);">(</span>$<span style="color: rgb(153, 0, 0);">)</span><br /><span style="color: rgb(255, 0, 0);">{</span><br /> my $<span style="color: rgb(0, 153, 0);">string</span> <span style="color: rgb(153, 0, 0);">=</span> shift<span style="color: rgb(153, 0, 0);">;</span><br /> $<span style="color: rgb(0, 153, 0);">string</span> <span style="color: rgb(153, 0, 0);">=~</span> s<span style="color: rgb(153, 0, 0);">/^\</span>s<span style="color: rgb(153, 0, 0);">+//;</span><br /> $<span style="color: rgb(0, 153, 0);">string</span> <span style="color: rgb(153, 0, 0);">=~</span> s<span style="color: rgb(153, 0, 0);">/\</span>s<span style="color: rgb(153, 0, 0);">+</span>$<span style="color: rgb(153, 0, 0);">//;</span><br /> return $<span style="color: rgb(0, 153, 0);">string</span><span style="color: rgb(153, 0, 0);">;</span><br /><span style="color: rgb(255, 0, 0);">}</span><br /># <span style="color: rgb(0, 153, 0);">Files in tt.txt</span> are in <b><span style="color: rgb(0, 0, 255);">this</span></b> <b><span style="color: rgb(0, 0, 255);">format</span></b><br /># <span style="color: rgb(153, 51, 153);">001</span> <span style="color: rgb(153, 0, 0);">-</span> <span style="color: rgb(0, 153, 0);">Nirvana</span> <span style="color: rgb(153, 0, 0);">-</span> <span style="color: rgb(0, 153, 0);">Smells</span> <span style="color: rgb(0, 153, 0);">Like</span> <span style="color: rgb(0, 153, 0);">Teen</span> <b><span style="color: rgb(0, 0, 0);">Spirit </span></b><span style="color: rgb(153, 0, 0);">(</span><span style="color: rgb(153, 51, 153);">1992</span><span style="color: rgb(153, 0, 0);">).</span>mp3<br /></tt></pre>garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-90035450954599988032008-05-30T09:35:00.000-07:002008-06-05T08:49:24.232-07:00Mis aplicaciones favoritas v 2.0Pos continuando con el post anterior que se quedó muy corto, aqui van otras aplicaciones chidas y que uso con cierta frecuencia<br /><br /><a href="http://k3b.plainblack.com/">K3b</a> ! por supuesto !!, gracias por despertarme Quique !, esta es una de las aplicaciones más chidas de KDE, te permite quemar CDs o DVDs, copiarlos, sacar imágenes, etc, todo lo que necesitas hacer con un quemador lo puedes hacer con K3b, excepto crear carátulas, creo que eso no lo hace, la verdad nunca he hecho algo así ni tenido un CD que haga eso. Hasta los que odia KDE usan k3b ! :P<br /><br /><a href="http://www.kde.org" title="Sorry, no direct link">Klipper</a> es otra aplicacion de KDE que es muy extremadamente demasiado útil, el copy/paste estilo *nix es la neta, pero mantener un historial de lo que se ha copiado es simplemente chidisimo<br /><br /><a href="http://www.tcpdump.org/">TCPDump</a> entrandole a lo de redes no puedes ignorar a tcpdump, una persona normal realmente no entiende casi nada de lo que escupe tcpdump, pero con un poco de intuición es muy sencillo depurar y encontrar problemas de redes con tcpdump en vivo, y ni se diga de sniffear tráfico para analizarlo despues (no lo hagan en casa).<br /><br /><a href="http://www.wireshark.org/">Wireshark</a> antes etereal, es el complemento ideal para TCPDump cuando necesitas analizar tráfico con detalle, te permite decodificar un monton de protocolos, y analizar de manera muy flexible cualquier archivo de tráfico con formato de libpcap/tcpdump, tambien puede sniffear en vivo, y es muy recomendable para usuarios de windows por ejemplo, por su sencillez de uso.<br /><br /><a href="http://ettercap.sourceforge.net/">Ettercap</a> sigue dentro del tema, es un sniffer y decodificador de protocolos muy bueno, es relativamente sencillo de usarse, y tiene monadas como ARP poisonig, puedes hacer Man-in-the-Middle, etc, una excelente herramienta para script kiddies como yo.<br /><br /><a href="http://www.latex-project.org/">LaTex</a> es otra de esas cosas que nadie entiende, pero que son muy útiles, es el editor de textos para masoquistas, pero la verdad es muy bueno, y sobre todo usa texto plano !!, en la era de los formatos para documento que nadie puede abrir en un editor plano, LaTex sigue siendo una de las mejores opciones si quieres que tus textos mantengan un formato sin tener que hacerlo manualmente, y tambien puedes hacer presentaciones (Beamer !!), en fin, es chido, y puedes mantener los archivos de LaTex en un repositorio con todas sus ventajas (Puedes hace run diff !!).<br /><br /><a href="http://www.gnu.org/software/diffutils/diffutils.html">Diffutils</a> complementa todo lo que tiene que ver con código, texto, o similares, es un conjunto de herramientas indispensable para cualquiera que escriba código leible por humanos.<br /><br /><a href="http://www.openssh.org/">OpenSSH</a> no podía quedarse olvidado !!, no se como se me pasó, es la neta del planeta en lo que a comunicación y transferencia de archivos se refiere, que tiempos aquellos en los que podríamos ver lo que hacían todos por telnet no ??<br /><br /><a href="http://www.samba.org/ftp/rsync/rsync.html">Rsync</a> es lo que le falta a cualquier protocolo de transferencia de archivos (o copia), permite sincronizar los archivos entre 2 sitios con cierta inteligencia, y es flexible en cuanto al protocolo de transferencia, realmente una belleza.<br /><br /><a href="http://www.apache.org/">Apache</a> es otra de esas cosas que no entiendo como se me pasaron, si me acordé de mysql y no de apache !!, bueno pues es EL servidor para Web, hace todo lo imaginable, en teoría Cherokee es casi tan bueno, y con algunas características extras, pero nunca lo he usado :P<br /><br />mmm, seguro se me pasan algunas otras, lo curioso es que hasta ahorita, todas las aplicaciones que he mencionado en estos 2 post las uso prácticamente diariamente (wireshark es una de las excepciones), pero uno dá por sentado que están ahí, que ya ni se acuerda, en fin, otra que me viene a la mente ahorita es todo lo relacionado con GCC !!, el compilador de gnu, soporta un buen de lenguajes, es bastante bueno, permite desde debugueo hasta optimización a diferentes niveles,mmmm, creo que va a haber un v 3.0 de este post.garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-11546207335259054162008-05-28T14:24:00.000-07:002008-05-30T08:14:33.990-07:00Validación de HTML y dojoAntes que nada, necesito agrandar mi lista de software favorito :), Enrique y Alejandro fueron tan amables de hacerme ver que esta extremadamente corta en cuestión de herramientas importantes, espero hacerlo mañana !<br /><br />Y entrando en tema, la validación de HTML es algo que muchos valoramos !! (valga la rebusnancia cacofónica), en el principio de los días WWW-eros se creó un lenguaje para crear la forma de comunicación más importante que tenemos actualmente, la web; este lenguaje implementó los elementos necesarios para hacer tareas tales como insertar texto, títulos, columnas, imágenes, y todo tipo de material multimedia.<br /><br />Ese lenguaje era bastante burdo, pero fué mejorando relativamente rápido, uno de los grandes pasos fué la inclusión de las hojas de estilo (CSS, Cascade style sheets) para separar vista de presentación, recuerdo la famosa frase de que "el HTML violaba la definición de un documento", o algo así.<br /><br />Se empezaron a crear definiciones cada vez mas formales y robustas de lo que ahora conocemos con HTML y el nuevo y mejor XHTML, no solo tenemos definiciones muy formales de como representar los datos de una página y su estilo (HTML y CSS respectivamente), sino que ahora tenemos incluso un gran estandar de comunicacion e interacción hacia lo que se conoce como DOM (Document Object Model) a través de otro lenguaje más, el JavaScript (que dijeron ?? ActionScript ?? pues no, pero se parecen y son como hermanos).<br /><br />Pero llegó la era 2.0 de la Web !!, ahora no nos conformamos con páginas estáticas, ni siquiera con páginas dinámicas en contenido, ahora queremos que las "aplicaciones web" sean amigables, colaborativas, mashupeables (sin albur), etc.<br /><br />Que pasa, que o usamos flash para hacer aplicaciones contenidas en un archivo SWF (con herramientas propietarias, y todo lo malo que implica eso), o usar JavaScript y todo su poder para agregarle a las paginitas algo de color, belleza, y movimiento, sin dejar atras usabilidad, rapidez y flexibilidad.<br /><br />Creo que es la introducción más larga a un blogaso que he escrito en mi vida.<br /><br />Bueno, siguiendo, obviamente en cuanto apareció la dichosa nueva era del Web 2.0, aparecieron muchas herramientas (bibliotecas) para facilitar el trabajo de crear las páginas bajo la nueva tendencia.<br /><br />Uno de los más populares, probablemente no el más, es <a href="http://dojotoolkit.org/">Dojo</a>, que incluye todo lo necesario para hacer AJAX, widgets, layouts, effects, :P ya me pasé con el spanglish.<br /><br />El asunto con Dojo es que graciosamente deciden crearse todo un sistema de creación de efectos y herramientas visuales y funcionales que depende nada más ni nada menos que de la inclusión de un atributo a los tags de HTML, en concreto "dojoType". Es una forma muy sencilla de crear toda clase de cosas de manera sencilla (el parser de dojo hace el trabajo de localizar los elementos que debe transformar) pero automáticamente invalida no solo XHTML, sino tambien cualquier definición oficial de HTML.<br /><br />Pero ese no es el fin del mundo, es totalmente posible crear páginas validas (en cuanto a [X]HTML) pero implica un pequeño detalle, hay que programar la creación de todos los elementos !!, ahhhhh, ahora resulta que si tengo que saber JavaScript para hacer una página correcta.<br /><br />En realidad no es demasiado tedioso hacer la creación de elementos con programación, sobre todo si nos importa mucho crear páginas que sean válidas bajo los estándares de web, pero es un hecho que es más latoso que simplemente irte por la vía rápida y crear todo en el sencillo HTML.<br /><br />Veamos un ejemplo sencillo, vamos a crear una página con una sola sección que va a contener una tabla tipo "Grid" con todas las bondades que tiene, obviamente le vamos a meter datos, los datos vendrán de un archivo que devuelve json (al estilo django, de ahí lo saqué) que puede representar de manera sencilla la salida de cualquier consulta a una base de datos a través de django (cualquier otro método requiere modificaciones muy sencillas).<br /><br />Si tienes git, puedes correr "git clone http://garaged.homeip.net/samples/dojosample.git" para bajar el ejemplo, hay que sustituir el link en "my_media/dojo" por un directorio que tenga dojo descomprimido (debe contener dojo,dijit, dojox, util), o puedes bajar el <a href="http://garaged.homeip.net/samples/dojosample.git">zip</a>.<br /><br />Usando los atributos de dojo (extrañosa a HTML) podemos simplemente crear un layout directamente en el body:<br /><pre><br /><b><span style="color: rgb(0, 0, 255);"><body</span></b> <span style="color: rgb(0, 153, 0);">class</span><span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(255, 0, 0);">"tundra"</span><b><span style="color: rgb(0, 0, 255);">></span></b> <br /> <br /><b><span style="color: rgb(0, 0, 255);"><div</span></b> <span style="color: rgb(0, 153, 0);">dojoType</span><span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(255, 0, 0);">"dijit.layout.BorderContainer"</span> <span style="color: rgb(0, 153, 0);">design</span><span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(255, 0, 0);">"headline"</span><br /> <span style="color: rgb(0, 153, 0);">style</span><span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(255, 0, 0);">"border: 2px solid black; width: 90%; height: 90%; padding: 10px; margin: auto auto auto auto; vertical-align: center;"</span> <b><span style="color: rgb(0, 0, 255);">></span></b><br /> <b><span style="color: rgb(0, 0, 255);"><div</span></b> <span style="color: rgb(0, 153, 0);">dojoType</span><span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(255, 0, 0);">"dijit.layout.ContentPane"</span> <span style="color: rgb(0, 153, 0);">region</span><span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(255, 0, 0);">"center"</span> <span style="color: rgb(0, 153, 0);">style</span><span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(255, 0, 0);">"width: 100%; height: 100%"</span><b><span style="color: rgb(0, 0, 255);">></span></b><br /> <b><span style="color: rgb(0, 0, 255);"><div</span></b> <span style="color: rgb(0, 153, 0);">id</span><span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(255, 0, 0);">"grid"</span> <span style="color: rgb(0, 153, 0);">dojoType</span><span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(255, 0, 0);">"dojox.Grid"</span> <span style="color: rgb(0, 153, 0);">structure<span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(255, 0, 0);">"layout"</span> <span style="color: rgb(0, 153, 0);">title</span><span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(255, 0, 0);">"Tab 2"</span><b><span style="color: rgb(0, 0, 255);">></div></span></b><br /> <b><span style="color: rgb(0, 0, 255);"></div></span></b><br /><b><span style="color: rgb(0, 0, 255);"></div></span></b><br /><br /><b><span style="color: rgb(0, 0, 255);"></body></span></b><br /></span></pre><br /><br />Dentro del contenedor ya estamos definiendo un "Grid", que va a tomar su formato de celdas de un arreglo que se llama "layout", eso lo definimos en un archivo con JavaScript que llamamos en los headers (grid.js).<br /><br /><pre><br /><b><span style="color: rgb(0, 0, 255);">var</span></b> layout <span style="color: rgb(153, 0, 0);">=</span> <span style="color: rgb(153, 0, 0);">[</span> <span style="color: rgb(255, 0, 0);">{</span><br />cells<span style="color: rgb(153, 0, 0);">:</span> <span style="color: rgb(153, 0, 0);">[[</span><br /> <span style="color: rgb(255, 0, 0);">{</span>name<span style="color: rgb(153, 0, 0);">:</span> <span style="color: rgb(255, 0, 0);">'Id'</span><span style="color: rgb(255, 0, 0);">}</span><span style="color: rgb(153, 0, 0);">,</span> <span style="color: rgb(255, 0, 0);">{</span>name<span style="color: rgb(153, 0, 0);">:</span> <span style="color: rgb(255, 0, 0);">'From'</span><span style="color: rgb(255, 0, 0);">}</span><span style="color: rgb(153, 0, 0);">,</span> <span style="color: rgb(255, 0, 0);">{</span>name<span style="color: rgb(153, 0, 0);">:</span> <span style="color: rgb(255, 0, 0);">'To'</span><span style="color: rgb(255, 0, 0);">}</span><span style="color: rgb(153, 0, 0);">,</span> <span style="color: rgb(255, 0, 0);">{</span>name<span style="color: rgb(153, 0, 0);">:</span> <span style="color: rgb(255, 0, 0);">'Spam?'</span><span style="color: rgb(255, 0, 0);">}</span><span style="color: rgb(153, 0, 0);">,</span> <span style="color: rgb(255, 0, 0);">{</span>name<span style="color: rgb(153, 0, 0);">:</span> <span style="color: rgb(255, 0, 0);">'Score'</span><span style="color: rgb(255, 0, 0);">}</span><br /> <span style="color: rgb(153, 0, 0);">]]</span><br /><span style="color: rgb(255, 0, 0);">}</span><span style="color: rgb(153, 0, 0);">];</span><br /></pre><br /><br />Con ello tenemos ya definido un esquema en el que existe un contenedor principal, que tiene un "hijo" que aloja un "grid" el cual tiene 5 columnas, los datos se cargan con el resto del JavaScript en "grid.js".<br /><pre><br /><tt>dojo<span style="color: rgb(153, 0, 0);">.</span><b><span style="color: rgb(0, 0, 0);">require</span></b><span style="color: rgb(153, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">"dijit.layout.BorderContainer"</span><span style="color: rgb(153, 0, 0);">);</span> <br />dojo<span style="color: rgb(153, 0, 0);">.</span><b><span style="color: rgb(0, 0, 0);">require</span></b><span style="color: rgb(153, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">"dijit.layout.ContentPane"</span><span style="color: rgb(153, 0, 0);">);</span> <br />dojo<span style="color: rgb(153, 0, 0);">.</span><b><span style="color: rgb(0, 0, 0);">require</span></b><span style="color: rgb(153, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">"dojox.grid.Grid"</span><span style="color: rgb(153, 0, 0);">);</span> <br />dojo<span style="color: rgb(153, 0, 0);">.</span><b><span style="color: rgb(0, 0, 0);">require</span></b><span style="color: rgb(153, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">"dojo.parser"</span><span style="color: rgb(153, 0, 0);">);</span> <i><span style="color: rgb(154, 25, 0);">// scan page for widgets and instantiate them</span></i> <br /><br /><b><span style="color: rgb(0, 0, 255);">var</span></b> data_json <span style="color: rgb(153, 0, 0);">=</span> <b><span style="color: rgb(0, 0, 255);">new</span></b> <b><span style="color: rgb(0, 0, 0);">Array</span></b><span style="color: rgb(153, 0, 0);">();</span> <br /><b><span style="color: rgb(0, 0, 255);">function</span></b> <b><span style="color: rgb(0, 0, 0);">getData</span></b><span style="color: rgb(153, 0, 0);">(</span>url<span style="color: rgb(153, 0, 0);">)</span><span style="color: rgb(255, 0, 0);">{</span> <br /> dojo<span style="color: rgb(153, 0, 0);">.</span><b><span style="color: rgb(0, 0, 0);">xhrGet</span></b><span style="color: rgb(153, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">{</span> <br /> url<span style="color: rgb(153, 0, 0);">:</span> url<span style="color: rgb(153, 0, 0);">,</span> <br /> handleAs<span style="color: rgb(153, 0, 0);">:</span> <span style="color: rgb(255, 0, 0);">"json"</span><span style="color: rgb(153, 0, 0);">,</span> <br /> load<span style="color: rgb(153, 0, 0);">:</span> makeGrid <i><span style="color: rgb(154, 25, 0);">// smart function call !</span></i> <br /> <span style="color: rgb(255, 0, 0);">}</span><span style="color: rgb(153, 0, 0);">);</span> <br /><span style="color: rgb(255, 0, 0);">}</span> <br /><br />dojo<span style="color: rgb(153, 0, 0);">.</span><b><span style="color: rgb(0, 0, 0);">addOnLoad</span></b><span style="color: rgb(153, 0, 0);">(</span><b><span style="color: rgb(0, 0, 255);">function</span></b><span style="color: rgb(153, 0, 0);">()</span><span style="color: rgb(255, 0, 0);">{</span> <br /> <b><span style="color: rgb(0, 0, 0);">getData</span></b><span style="color: rgb(153, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">"./data.json"</span><span style="color: rgb(153, 0, 0);">);</span> <br /> <span style="color: rgb(255, 0, 0);">}</span><span style="color: rgb(153, 0, 0);">);</span> <br /><br /><b><span style="color: rgb(0, 0, 255);">function</span></b> <b><span style="color: rgb(0, 0, 0);">makeGrid</span></b><span style="color: rgb(153, 0, 0);">(</span>data<span style="color: rgb(153, 0, 0);">,</span> ioArgs<span style="color: rgb(153, 0, 0);">)</span> <span style="color: rgb(255, 0, 0);">{</span> <br /> <b><span style="color: rgb(0, 0, 255);">var</span></b> i<span style="color: rgb(153, 0, 0);">;</span> <br /> <b><span style="color: rgb(0, 0, 255);">for</span></b> <span style="color: rgb(153, 0, 0);">(</span>i<span style="color: rgb(153, 0, 0);">=</span><span style="color: rgb(153, 51, 153);">0</span> <span style="color: rgb(153, 0, 0);">;</span> i<span style="color: rgb(153, 0, 0);"><</span>data<span style="color: rgb(153, 0, 0);">.</span>length<span style="color: rgb(153, 0, 0);">-</span><span style="color: rgb(153, 51, 153);">1</span><span style="color: rgb(153, 0, 0);">;</span> i<span style="color: rgb(153, 0, 0);">++</span> <span style="color: rgb(153, 0, 0);">)</span> <span style="color: rgb(255, 0, 0);">{</span> <br /> data_json<span style="color: rgb(153, 0, 0);">[</span>i<span style="color: rgb(153, 0, 0);">]</span> <span style="color: rgb(153, 0, 0);">=</span> <span style="color: rgb(153, 0, 0);">[</span> <br /> data<span style="color: rgb(153, 0, 0);">[</span>i<span style="color: rgb(153, 0, 0);">].</span>pk<span style="color: rgb(153, 0, 0);">,</span> <br /> data<span style="color: rgb(153, 0, 0);">[</span>i<span style="color: rgb(153, 0, 0);">].</span>fields<span style="color: rgb(153, 0, 0);">.</span>from_add<span style="color: rgb(153, 0, 0);">,</span> <br /> data<span style="color: rgb(153, 0, 0);">[</span>i<span style="color: rgb(153, 0, 0);">].</span>fields<span style="color: rgb(153, 0, 0);">.</span>to_add<span style="color: rgb(153, 0, 0);">,</span> <br /> data<span style="color: rgb(153, 0, 0);">[</span>i<span style="color: rgb(153, 0, 0);">].</span>fields<span style="color: rgb(153, 0, 0);">.</span>spam<span style="color: rgb(153, 0, 0);">,</span> <br /> data<span style="color: rgb(153, 0, 0);">[</span>i<span style="color: rgb(153, 0, 0);">].</span>fields<span style="color: rgb(153, 0, 0);">.</span>score <br /> <span style="color: rgb(153, 0, 0);">]</span> <br /> <span style="color: rgb(255, 0, 0);">}</span> <br /> <b><span style="color: rgb(0, 0, 255);">var</span></b> Model <span style="color: rgb(153, 0, 0);">=</span> <b><span style="color: rgb(0, 0, 255);">new</span></b> dojox<span style="color: rgb(153, 0, 0);">.</span>grid<span style="color: rgb(153, 0, 0);">.</span>data<span style="color: rgb(153, 0, 0);">.</span><b><span style="color: rgb(0, 0, 0);">Objects</span></b><span style="color: rgb(153, 0, 0);">(</span><b><span style="color: rgb(0, 0, 255);">null</span></b><span style="color: rgb(153, 0, 0);">,</span> data_json<span style="color: rgb(153, 0, 0);">);</span> <br /> dijit<span style="color: rgb(153, 0, 0);">.</span><b><span style="color: rgb(0, 0, 0);">byId</span></b><span style="color: rgb(153, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">"grid"</span><span style="color: rgb(153, 0, 0);">).</span><b><span style="color: rgb(0, 0, 0);">setModel</span></b><span style="color: rgb(153, 0, 0);">(</span>Model<span style="color: rgb(153, 0, 0);">);</span><br /><span style="color: rgb(255, 0, 0);">}</span><br /></tt></pre><tt><br /><br />que entre otras cosas hace lo necesario para que se cargue dojo, y se haga el "parseo" del HTML para cambiar todos los tags que tengan un "dojoType" por el correspondiente "widget". Luego por medio de "dojo.addOnLoad" desencadenamos el proceso que trae el archivo data.json y con un tratamiento nada cesudo se convierte en datos que son procesados para ser incluidos en el "Grid".<br /><br />En el archivo index.html completo puedes ver que tambien se cargan varios archivos CSS que son indispensables para general la tabla en el formato correcto, y muchoas otras monadas que se hacen por debajo del agua automáticamente.<br /><br />Este ejemplo fué hecho rompiendo el estandar de HTML, insertamos tags que tienen el atributo "dojoType", el cual no es aceptado, y por tanto la página no es válida segun el estandar.<br /><br />Ahora veamos un diff de la página creando todo "programaticamente" con JavaScript.<br /></tt><pre><tt><br /><tt><span style="color: rgb(255, 102, 0);">--- index.html 2008-05-29 17:26:00.000000000 -0500</span><br /><span style="color: rgb(0, 153, 0);">+++ index-programatic.html 2008-05-29 17:25:31.000000000 -0500</span><br /><span style="color: rgb(0, 0, 255);">@@ -9,23 +9,20 @@</span> <br /> @import "./my_media/dojo/dojo/resources/dojo.css"; <br /> @import "./my_media/dojo/dijit/themes/tundra/tundra.css"; <br /> html, body { height: 100%; width: 100%; margin: 0; padding: 0; } <br /><span style="color: rgb(0, 153, 0);">+ #grid { width: 100%; height: 100%; } </span> <br /><span style="color: rgb(0, 153, 0);">+ #container { border: 2px solid black; width: 90%; height: 90%; margin: auto auto auto auto; vertical-align: center;}</span> <br /> </style> <br /> <br /> <script type="text/javascript" src="./my_media/dojo/dojo/dojo.js" <br /><span style="color: rgb(255, 102, 0);">- djConfig="parseOnLoad: true" ></script></span> <br /><span style="color: rgb(255, 102, 0);">- <script type="text/javascript" src="./my_media/js/grid.js"></script></span> <br /><span style="color: rgb(0, 153, 0);">+ ></span> <br /><span style="color: rgb(0, 153, 0);">+ </script></span> <br /><span style="color: rgb(0, 153, 0);">+ <script type="text/javascript" src="./my_media/js/grid-programatic.js"></script></span> <br /> <br /><br /><br /></head><br /><span style="color: rgb(255, 102, 0);">-<body class="tundra"></span><br /><span style="color: rgb(0, 153, 0);">+<body></span><br /><br /><span style="color: rgb(255, 102, 0);">-<div dojoType="dijit.layout.BorderContainer" design="headline"</span><br /><span style="color: rgb(255, 102, 0);">- style="border: 2px solid black; width: 90%; height: 90%; padding: 10px; margin: auto auto auto auto; vertical-align: center;" ></span><br /><span style="color: rgb(255, 102, 0);">- <div dojoType="dijit.layout.ContentPane" region="center" style="width: 100%; height: 100%"></span><br /><span style="color: rgb(255, 102, 0);">- <div id="grid" dojoType="dojox.Grid" structure="layout" title="Tab 2"></div></span><br /><span style="color: rgb(255, 102, 0);">- </div></span><br /><span style="color: rgb(255, 102, 0);">-</div></span><br /><br /></body><br /></html><br /></tt><br /></tt></pre><tt><br /><br />Notablemente ya no necesitamos el "parseOnLoad" y además el body quedó vacío!<br /><br />Es porque vamos a hacer todo con JavaScript (mmm, sin palabras). Veamos el diff para grid.js<br /></tt><pre><tt><tt><span style="color: rgb(255, 102, 0);">--- grid.js 2008-05-29 16:55:02.000000000 -0500</span> <br /><span style="color: rgb(0, 153, 0);">+++ grid-programatic.js 2008-05-29 16:54:15.000000000 -0500</span> <br /><span style="color: rgb(0, 0, 255);">@@ -1,7 +1,5 @@</span> <br />dojo.require("dijit.layout.BorderContainer"); <br /><span style="color: rgb(255, 102, 0);">-dojo.require("dijit.layout.ContentPane");</span> <br />dojo.require("dojox.grid.Grid"); <br /><span style="color: rgb(255, 102, 0);">-dojo.require("dojo.parser"); // scan page for widgets and instantiate them</span> <br /> <br />var data_json = new Array(); <br />function getData(url){ <br /><span style="color: rgb(0, 0, 255);">@@ -17,6 +15,11 @@</span> <br /> }); <br /> <br />function makeGrid(data, ioArgs) { <br /><span style="color: rgb(0, 153, 0);">+ var layout = [ {</span> <br /><span style="color: rgb(0, 153, 0);">+cells: [[</span> <br /><span style="color: rgb(0, 153, 0);">+ {name: 'Id'}, {name: 'From'}, {name: 'To'}, {name: 'Spam?'}, {name: 'Score'}</span> <br /><span style="color: rgb(0, 153, 0);">+ ]]</span> <br /><span style="color: rgb(0, 153, 0);">+ }];</span> <br /> var i; <br /> for (i=0 ; i<data.length-1; i++ ) { <br /> data_json[i] = [ <br /><span style="color: rgb(0, 0, 255);">@@ -27,13 +30,23 @@</span> <br /> data[i].fields.score <br /> ] <br /> } <br /><span style="color: rgb(255, 102, 0);">- var Model = new dojox.grid.data.Objects(null, data_json);</span> <br /><span style="color: rgb(255, 102, 0);">- dijit.byId("grid").setModel(Model);</span> <br /><span style="color: rgb(0, 153, 0);">+ var cont = new dijit.layout.BorderContainer(</span> <br /><span style="color: rgb(0, 153, 0);">+ { "design": "headline",</span> <br /><span style="color: rgb(0, 153, 0);">+ "id": "container"</span> <br /><span style="color: rgb(0, 153, 0);">+ }</span> <br /><span style="color: rgb(0, 153, 0);">+ );</span> <br /><span style="color: rgb(0, 153, 0);">+ document.body.appendChild(cont.domNode);</span> <br /><span style="color: rgb(0, 153, 0);">+ var newGrid = new dojox.Grid(</span> <br /><span style="color: rgb(0, 153, 0);">+ { "id": "grid",</span> <br /><span style="color: rgb(0, 153, 0);">+ "structure": layout,</span> <br /><span style="color: rgb(0, 153, 0);">+ "region": "center"</span><br /><span style="color: rgb(0, 153, 0);">+ }</span><br /><span style="color: rgb(0, 153, 0);">+ );</span><br /><span style="color: rgb(0, 153, 0);">+ dijit.byId("container").addChild(newGrid);</span><br /><span style="color: rgb(0, 153, 0);">+ Model = new dojox.grid.data.Table(null, data_json);</span><br /><span style="color: rgb(0, 153, 0);">+ dijit.byId('grid').setModel(Model);</span><br /><span style="color: rgb(0, 153, 0);">+ newGrid.render();</span><br /><span style="color: rgb(0, 153, 0);">+</span><br />}<br /><br /><span style="color: rgb(255, 102, 0);">-var layout = [ {</span><br /><span style="color: rgb(255, 102, 0);">-cells: [[</span><br /><span style="color: rgb(255, 102, 0);">- {name: 'Id'}, {name: 'From'}, {name: 'To'}, {name: 'Spam?'}, {name: 'Score'}</span><br /><span style="color: rgb(255, 102, 0);">- ]]</span><br /><span style="color: rgb(255, 102, 0);">-}];</span><br /><br /></tt></tt></pre><tt><br /><br />Ahora el arreglo "layout" que define las columnas del "Grid" está en la funcion que lo hace, ya no necesitamos que sea accesible desde fuera de esta función.<br /><br />Secuencialmente en la función "makeGrid" creamos un contenedor (ya no se hace en HTML), y le insertamos un hijo que va a ser el Grid, luego alimentamos ese Grid con los datos que traemos por medio de AJAX (por si no se notó) y finalmente llamamos al "render" de la tabla.<br /><br />Con estos cambios, que aunque no son demasiado complicados, si requieren de más cesos, principalmente porque NO HAY DOCUMENTACIÓN de como hacer BorderContainer programacionalmente todavía en dojo, así que uno se tiene que chutar amablemente el código en JavaScript y entenderlo lo suficiente como para aprender a hacer lo que hace el parseador de los BorderContainer en dojo.<br /><br />Con esto doy por terminado el día, y como nota hay que poner un <p></p> en el body para que valide, aparentemente un body vacío no es válido !! aún así no se logra validar 100% !! jajajaja<br /><br />Cabe mencionar que herramientas como scriptaculous y meteora hacen todo programáticamente, por lo que en una de esas es preferible usarlas, pero a mi me gusta dojo :P<br /></tt>garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-65099511000860230682008-05-26T13:24:00.000-07:002008-05-26T13:43:17.095-07:00Axis of JusticeEsto es algo que me hace sentir muy mal, porque soy un hipócrita como muchos, me parece que las cosas estan muy mal, pero no hago nada.<br /><br /><a href="http://www.axisofjustice.org/">Axis of Justices</a> es un sitio que mantienen Serj Tankian (vocalista de System of a Down) y Tom Morello (Guitarrista de Rage Against the Machine y Audioslave) dedicado a hacer conciencia sobre un monton de injusticias que se dan contra gente que poco puede hacer para defenderse.<br /><br />Yo siempre he tenido ese sentimiento de que las cosas están tan mall porque no hacemos nada para mejorarlas, y este tipo de actividades es de lo poco que se puede hacer sin violencia, pero desgraciadamente tambien muy pocas personas lo hacen. Michael Moore por ejemplo es de los pocos que ha hecho "popular" el activismo, y bueno, claro está geenpeace.<br /><br />Obviamente he sido testigo de la molestia que es el simple hecho de pedir un sueldo justo, y sobre todo hablar del tema con compañeros de trabajo, con lo cual me queda claro porque la mayoría no hacemos nada por mejorar la vida de los demás, porque la nuestra puede acabar peor :)<br /><br />En fin, ojalá que algun día encuentre la fuerza para ser mas activo, y tratar por lo menos de hacer ruido, la fé es lo último que se pierde, y tengo fe en que el mundo puede cambiar.<br /><br />p.d. Todo esto resultado de una sencilla plática sobre músicagaragedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-65244004785658949812008-05-23T10:44:00.001-07:002008-06-05T08:49:34.564-07:00Mis aplicaciones favoritasObviamente son libres (como en la cerveza de europa y otros lugares donde si es libre)<br /><br />Soy un gran admirador del Software Libre (SL) (chequen que voy a tratar de escribir lo más correctamente que puedo) y afortunadamente pocas veces tengo que enfrentarme al mundo propietario, con excepción de cuando me piden ayuda para algo de windows (por qué las personas pensaran que si te dedicas a las compus debes saber todo sobre cualquier aplicación de windows?) y el diario uso de mi "aipo touch", porque no solo "odio" (en realidad si lo odio, las comillas están demas) tambien a la mac la odio, y el aipo es chidisimo, y en general el sistema puede ser decente si lo ves de un punto de vista positivo, pero no me gusta, y odio las políticas de esa empresa para crear aplicaciones (lástima que todavia no hay un linux instalable pal aipo).<br /><br />Mi vida diaria gira en torno a linux y *nix en general, aunque el 99% del tiempo gira en torno a Linux realmente. En los como 8 años que tengo de usarlo he aprendido un monton de cosas, probablemente la más importante en mi vida es vivir usando Linux, solo tengo que usar otros sistemas operativos cuando de plano linux no está accesible o no puede hacer lo que quiero en ese momento (itunes y juegos prácticamente).<br /><br />Y bueno, entre lo que más me gusta del SL, normalmente sobre Linux, están:<br /><br /><a href="http://www.kde.org">KDE !!</a> que maravilla de cosa, adoro el eyecandy, yo no soy de los que andan haciendo trucos con screen todo el día, yo prefiero un escritorio con muchas aplicaciones para lo que sea, y que se pueda modificar a mi gusto y que se vea bonito incluso si no lo modifico.<br /><br /><a href="http://www.mozilla.com/firefox/">Firefox</a> es otra de esas cosas que agradezco en el mundo, es bastante bueno, sobre todo si usas windows, lo primero que hago cuando estoy usando una máquina con windows es instalarle el firefox.<br /><br /><a href="http://www.konqueror.org/">Konqueror !!</a> está incluido en KDE, pero es un mundo por si solo, es mi navegador favorito, realmente firefox lo uso para acceder a las aplicaciones de google que uso (blogger, gmail, reader, etc). Es un navegador muy bueno, por ejemplo su soporte del estandar de CSS es mejor que el de FF, pero en javascript se queda un poco abajo, aunque no mucho realmente.<br /><br /><a href="http://www.pidgin.im/">Pidgin</a> es mi mensajero multi protocolo, he usado otros, pero es el que más me gusta, y el que he usado desde hace bastantes años. Tiene ciertas deficiencias contra otros mensajeros (no soporta voz ni video) pero nunca uso esas características realmente.<br /><br /><a href="http://www.vim.org">Vim</a> es mi editor favorito, prefiero un editor robusto a un sistema operativo que carezca de editor :P, la verdad es que es una maravilla, estoy seguro que emacs es una maravilla tambien, pero nunca lo usé realmente, empecé con vim y así sigo, tiene tantas cosas que cuando aprendes lo suficiente, no quieres volver atras.<br /><br /><a href="http://subversion.tigris.org/">Subversion</a> y <a href="http://git.or.cz/">Git</a> son los 2 sistemas para manejo de versiones que uso, realmente empecé a usar Git hace como 1 mes si acaso, por que ya había visto demasiados comentarios buenos, y la famosa plática de Linus en google al respecto, y la verdad es que si es una maravilla, todavía uso SVN y me sigue gustando, pero es muy obvia la superioridad de Git.<br /><br /><a href="http://www.php.net/">PHP</a> es el primer lenguaje decente que aprendí a usar realmente, antes que PHP había usado otros lenguajes "viejitos", y el que mejor sabía era fortran, pero realmente aprendía programar como gente decente con PHP (que paradoja no ?), gracias a PHP aprendí mucho de la lógica de programación y despues pude entender mucho mejor lenguajes como Perl y Python, y bueno, con la introducción a la POO que tuve con PHP (es obvia la deficiencia en profundidad) aprendí a entender C++ por ejemplo, o Java, aunque no podría hacer ni el hello world en ellos, los puedo leer y entender, e incluso modificar :) a pesar de que no se ni la introduccion de ellos.<br /><br /><a href="http://www.mysql.com/">MySQL</a> aunque no es un verdadero RDBS segun los expertos, es como PHP para mi, me enseñó muchisimo, y con MySQL he podido hacer todo lo que he necesitado de una base de datos hasta ahora.<br /><br /><a href="http://www.gtkpod.org/">GTKPod</a> este es un salva vidas, gracias a libgpod y gtkpod no tengo que reiniciar la compu en windows para poder hecharle archivos al aipo, hagame el refabron cabor !! pq tiene que ser necesario ??? por qué ???<br /><br /><a href="http://amarok.kde.org/">Amarok</a> este es el claro ejemplo de que la lista no es por algun orden en particular, Amarok es definitivamente mi aplicación favorita para oír música, tambien me gusta <a href="http://www.christine-project.org/html/index.php">Christine</a> pero si hay varias características que no tienen y que encuentro demasiado atractivas en Amarok.<br /><br /><a href="http://www.gnu.org/software/bash/">Bash</a> es mi "shell" favorito, no es que conozca demasiados realmente, empecé con el histórico "sh" en unix, luego el csh, tcsh, y luego en linux con bash, y ahí me quedé, probablemente si me pusiera a explorar zsh me gustaría igual o más, pero nunca me he dado el tiempo.<br /><br /><a href="http://www.python.org/">Python</a> definitivamente mi lenguaje favorito, soy fanatico de las cosas sencillas, prefiero dedicarle 1 día a programar una rutina que pueda reusar en todo lo que se aplique, a programar un monton de lineas que funcionan pero que no van a ser genéricas, python me permite hacer eso, todavía me falta muchisimo por aprenderle, pero es una maravilla.<br /><br /><a href="http://www.djangoproject.com/">Django</a> está hecho en Python, y está bien hecho !!, es mi ambiente favorito para desarrollo web, lástima que ya no me dedico a eso, pero sigo aprendiendo a usarlo.<br /><br /><a href="http://dojotoolkit.org/">Dojo</a> es otra de esas herramientas que uno aprende a adorar, es una biblioteca de JavaScript que sirve casi para lo que sea, desde embellecer una página, ponerle "widgets", AJAX, etc. Es una verdadera belleza para desarrollo web, hay cosas similares, pero a mi me gusta dojo.<br /><br /><a href="http://www.smarty.net/">Smarty</a> es la neta si se trata de algo más que plantillas en web con PHP, es una herramienta muy amigable y flexible, nunca he visto algo que me acomode mejor para desarrollo web con PHP.<br /><br /><a href="http://adodb.sourceforge.net/">ADOdb</a> es otra herramienta muy útil para PHP, tambien hay un port para Python, pero en Python hay cosas mejores realmente.<br /><br /><a href="http://kontact.kde.org/kmail/">Kmail</a> no puede quedarse sin mención, es mi cliente de correo favorito, por supuesto la integración con KDE tiene mucho que ver, pero no solo es eso, es su rapidez, funcionalidad, flexibilidad, etc, es una aplicación realmente muy completa para manejar correo electrónico.<br /><br />Estoy seguro que se me pasan varias importantes, luego actualizo este post si recuerdo algo que valga la pena :Pgaragedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-47554703691507792522008-05-16T10:31:00.000-07:002008-05-16T11:06:20.486-07:00Ipod touch y LinuxA falta de que decir, y en vista de que este viernes es un dia bello y con rico clima, me voy a poner a despotricar sobre el Ipod Touch<br /><br />Maldita porqueria !!!!!!!!!!<br /><br />Ok, supongo que todos los interesados en los royos del iphone y ipod touch (los itouch) ya saben que por naturaleza misma de la marca el hardware que tienen es la neta, incluso el sistema operativo es bastante bueno, pero las aplicaciones son muy pocas, puedo decir que son decentes, pero muy pocas, poquitas.<br /><br />En general yo no tengo una buena opinion de Apple (la BSD es filosificamente buena, pero es feo cuando la gente la usa vilmente para ganar dinero y no dar nada a cambio), pero nadie puede dejar de notar que la comunidad ha hecho un montonsote de aplicaciones (con el itouch crakeado claro) y muchas de ellas son bastante impresionantes, y no puede uno dejar de preguntarse como es que Apple no ha hecho más por sus clientes.<br /><br />Yo se que el desarrollo cuesta, pero hubiera sido mucho más decente de parte de la compañia liberar más las APIs de todo, y no requerir "firmas" en los paquetes para alentar a todo mundo a desarrollar sobre estas.<br /><br />No sería mucho más sencillo liberar el código de las aplicaciones y permitir que TODOS los que estan haciendo desarrollo lateral sobre los itouchs lo hicieran no solo respetando las reglas, sino colaborando con Apple.<br /><br />En fin.<br /><br />Entre ayer y hoy estuve intentando meterle un Video al condenado aipo, y por más intentos que hice nunca se subió correctamente, pero me parece que ya encontré la verdadera razón !!, por menso se me ocurrió borrar el "ipod-convenience" (google es tu amigo si no sabes que es) y luego lo reinstalé sin acordarme que había que cambiar una linea para el firmware 1.1.4 :(, y creo que varios de los intentos (si no es que todos) fueron mal hechos, así que hoy voy a intentar de nuevo :)<br /><br />Para poder subir videos tuve que instalar a mano el libgpod y gtkpod (en /usr/local) y ya con eso logré subir un video, pero pues lo estaba subiendo mal, al directorio incorrecto. Ahora lo que me gustaría lograr es crearme los paquetes .deb de ambos e instalarlos como se debe.<br /><br />Si lo logro pongo un update y los paquetes (acueductamente backdoreados) despueś.<br /><br />Feliz día del interneis !! y buen fin de semanagaragedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-38074328221187681832008-05-08T09:41:00.000-07:002008-05-08T09:46:31.693-07:00Me chocaron !!Ya me estaba tardando, pero no voy a dejar pasar la oportunidad de tratar de que hacer reír un poquito a mi buen amigo Turbo<br /><br />Gracias a dios que <a href="http://hdaniel67.blogspot.com/2008/05/no-me-digas-y-cmo-te-chocaron-el-auto.html">no te pasó nada</a> grave, solo el golpe a tu ánimo y a tu bolsillo, esperemos que ese inche taxista te pague completo y pronto.<br /><br />No choqué !! Me chocaron !!<br /><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/y3DKmlF77LA&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/y3DKmlF77LA&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-52943880311600429472008-05-07T13:06:00.001-07:002008-05-07T13:13:02.199-07:00estatus del acid3 en los browser que importanNo aporto gran cosa, solo una versión muy reciente de KDE4, el FF3b5 ya tiene rato :)<br /><br /><br />Firefox 3 beta 5, va bien, todavia falta pero parece que va a cumplir al 100% en la version final<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Y3K-K3sI5xg/SCIMC8Wq_4I/AAAAAAAAAFE/jtTkPq2OJRQ/s1600-h/acid3-ff3b5.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_Y3K-K3sI5xg/SCIMC8Wq_4I/AAAAAAAAAFE/jtTkPq2OJRQ/s320/acid3-ff3b5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5197730164639465346" /></a><br /><br />Konqueror 4.0.72, va mejorcito que firefox, es probable que sea más problemático llegar al 100% porque acid3 depende mucho de JavaScript, y Konqueror no tiene la mejor implementación, aunque debo decir que ha mejorado mucho en el último año, creo que incluso gmail puede leerse decente con konqueror (truqueando el "Browser Ident" que se manda)<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Y3K-K3sI5xg/SCIMDMWq_5I/AAAAAAAAAFM/L5YPMoYSViI/s1600-h/acid3-konq-4_0_72.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_Y3K-K3sI5xg/SCIMDMWq_5I/AAAAAAAAAFM/L5YPMoYSViI/s320/acid3-konq-4_0_72.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5197730168934432658" /></a>garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-11574308582213533382008-05-07T11:27:00.000-07:002008-05-07T11:31:00.046-07:00MTBF !!Si si si si !!<br /><br />No tenía ninguna idea de que bloguear, y sigo sin tenerla, pero tengo una frase del día !!<br /><br /><a href="http://linux.slashdot.org/comments.pl?sid=544724&cid=23324330">Original aqui</a><br /><br />"After you have kids, you aren't so much interested in how long it lasts, but the MTBF. (Mean Time Between Fscks)"<br /><br />Ok cuanta verdad tienen esas palabras.<br /><br />Me pregunto cuantos lectores de slashdot han vivido lo necesario para entender la frase :Pgaragedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-4890194106632734742008-04-30T05:46:00.000-07:002008-04-30T05:52:36.127-07:00Automotivator !Excelente página la de <a href="http://wigflip.com/automotivator/">Automotivator</a><br /><br />Puedes hacer tus posters (des)motivacionales y grabarlos para impresión o cualquier otra cosa<br /><br />Me hice este poster<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Y3K-K3sI5xg/SBhrd7d5FzI/AAAAAAAAAE8/mfHkMKd1gJI/s1600-h/automotivator.jpg"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_Y3K-K3sI5xg/SBhrd7d5FzI/AAAAAAAAAE8/mfHkMKd1gJI/s320/automotivator.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5195020332095313714" /></a>garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-15226038922064552882008-04-29T06:08:00.002-07:002008-04-29T06:22:09.198-07:00Hans ReiserEsta va a ser la noticia del día, seguramente la vamos a olvidar mañana o pasado, pero hoy suena bastante feo que Hans Reiser haya sido encontrado culpable.<br /><br />Supongo que la sentencia todavía no se dicta (no encontré nada al respecto en las noticias) pero muy probablemente va a pasar el resto de su vida en la carcel.<br /><br />Leyendo sus declaraciones, y las acusaciones, yo si me quedo con una gran duda, no puedo fijar mi opinion en ninguno de los 2 extremos, pero una cosa es muy clara, no me suena coherente que haya logrado esconder toda clase de evidencia, pero no haya logrado manejar el jurado de tal manera que lo encontraran inocente.<br /><br />Se que cabe la posibilidad de que haya tratado de parecer mas "loco" de lo que está para ver si le funcionaba, y finalmente no le funcionó, pero por alguna razón creo que no es lo que pasó en realidad.<br /><br />Desgraciadamente había motivos suficientes para que tomara una decisión así, y creo que fué lo que el jurado tomó en cuenta, junto con su comportamiento "fuera de lo común", el problema es que es el primero de muchos geeks famosos que van a estar involucrados en el futuro en problemas similares, es muy claro que en general los geeks tenemos bastantes problemas para sociabilizar (algunos no tan geeks como yo logramos interaccionar exitosamente) y sobre todo hay un problema bastante fuerte para encontrar una pareja estable, así que esperemos ver mas de esto en los siguientes años, triste pero cierto.garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-77375627653487839242008-04-28T13:41:00.000-07:002008-04-28T13:44:55.893-07:00KDE rules !Un post <a href="http://www.cutawaysecurity.com/blog/archives/239">interesante por si mismo</a> me hizo saber que no soy el unico que usa KDE!! tambien gente importante lo usa !!<br /><br />En la traza de procesos se puede ver claramente que el tutor (del minitutorial ! duh) está usando KDE !! excelente !!garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.comtag:blogger.com,1999:blog-8722934.post-21573009717732638512008-04-28T06:49:00.001-07:002008-04-28T06:59:10.623-07:00Metallica va a sacar un disco a precio de "lo que quieras pagar"Muchos hablan de que NIN y Radiohead lo hicieron, pero por mucho no son los primeros con experimentar ese royo de liberar su música, y aceptar cooperación voluntaria, probablemente si son los mas notorios.<br /><br />Pues ahora resulta que "la banda que mató Napster" (Metallica por si no lo sabías) (y de la cual soy gran fan a pesar de ese detalle y que los últimos discos han ido casi invariablemente de caída (s&m fue un gran salto para arriba en mi opinion, tambien el garaged inc fue bueno :) quiere seguirle los pasos a los que andan experimentando en la nueva ola de discografía 2.0<br /><br />Yo en particular ni siquiera compré el último disco (saint anger ?), lo oí en el estereo de un cuate, bien lo recuerdo, hace años, y me pareció una porquería, parece que está mal mezclado, la bateria suena horrible, no tiene melidías que yo pueda recordar, etc.<br /><br />Entonces que tiene de interesante que liberen su disco?? pues que todavia no pierdo la esperanza de que retomen algo de lo que hacían en los 80's, que hagan algo parecido a lo que hizo Megadeth, que a pesar de que no es el mejor disco, su último fué decente, de los pocos discos metaleros que valen la pena en los últimos años (el dante de sepultura califica ahi tambien :)<br /><br />Ojalá que logren sacar inspiración, y que la inspiración que saquen me agrade, yo sigo oyendo a Metallica casi diariamente, obviamente oigo los discos que me gustan, rara vez oigo el load o reload, pero de vez en cuando se atraviesan por mi humor, pero ya hace bastante tiempo que he querido encontrar nuevas bandas, o por lo menos viejas bandas con disco nuevos que valgan la pena, y por lo pronto Megadeth y Sepultura han logrado mantener mi esperansa, esperemos que Metallica la reviva aun más!<br /><br />Bueno, y para no dejar a la comunidad sin mención, <a href="http://news.slashdot.org/article.pl?sid=08/04/27/1458228&from=rss">en slashdot hay una gran cantidad de comentarios</a> al respecto,tanto buenos como malos, por ahí creo que mandé un par de respuestas yo tambien.garagedhttp://www.blogger.com/profile/03572564429315732422noreply@blogger.com