<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" ><channel><title>unijimpe &#187; Javascript</title> <atom:link href="http://blog.unijimpe.net/category/javascript/feed/" rel="self" type="application/rss+xml" /><link>http://blog.unijimpe.net</link> <description>Desarrollo Web, SEO, Adsense</description> <lastBuildDate>Mon, 28 Nov 2011 03:18:21 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Seguimiento de descargas con Google Analytics</title><link>http://blog.unijimpe.net/seguimiento-de-descargas-con-google-analytics/</link> <comments>http://blog.unijimpe.net/seguimiento-de-descargas-con-google-analytics/#comments</comments> <pubDate>Mon, 31 Oct 2011 02:48:19 +0000</pubDate> <dc:creator>unijimpe</dc:creator> <category><![CDATA[General]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[Mootools]]></category> <category><![CDATA[Servicios Web]]></category> <category><![CDATA[analytics]]></category><guid isPermaLink="false">http://blog.unijimpe.net/?p=1299</guid> <description><![CDATA[<p>Google Analytics el popular servicio de estadísticas de visitas ofrece muchas características que permiten conocer al detalle la interacción que tiene el usuario con nuestra web. Una de ellas es hacer el seguimiento de todos los &#8230;</p>]]></description> <content:encoded><![CDATA[<p>Google Analytics el popular servicio de estadísticas de visitas ofrece muchas características que permiten conocer al detalle la interacción que tiene el usuario con nuestra web. Una de ellas es hacer el seguimiento de todos los archivos de descargas, esto no se hace de forma automática por lo que hay que agregar un código adicional.</p><p><strong>Utilizando Google Analytics</strong></p><p>El primer paso es utilizar el código de seguimiento en nuestra página, actualmente se utiliza la versión asincrona la cual se debe colocar justo antes de la etiqueta <code>&lt;/head&gt;</code></p><div class="syntax_hilite"><div id="javascript-8"><div class="javascript"><ol><li style="color:#3A6A8B;"><div style="">&lt;script type=<span style="color: #3366CC;">"text/javascript"</span>&gt;</div></li><li style="color:#26536A;"><div style="">&nbsp; <span style="color: #003366;">var</span> _gaq = _gaq || <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; _gaq.<span style="color: #006600;">push</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'_setAccount'</span>, <span style="color: #3366CC;">'UA-XXXXX-X'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style="">&nbsp; _gaq.<span style="color: #006600;">push</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'_trackPageview'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp;</div></li><li style="color:#26536A;"><div style="">&nbsp; <span style="color: #66cc66;">&#40;</span><span style="color: #003366;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; <span style="color: #003366;">var</span> ga = document.<span style="color: #006600;">createElement</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'script'</span><span style="color: #66cc66;">&#41;</span>; ga.<span style="color: #006600;">type</span> = <span style="color: #3366CC;">'text/javascript'</span>; ga.<span style="color: #006600;">async</span> = <span style="color: #003366;">true</span>;</div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; ga.<span style="color: #006600;">src</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'https:'</span> == document.<span style="color: #006600;">location</span>.<span style="color: #006600;">protocol</span> ? <span style="color: #3366CC;">'https://ssl'</span> : <span style="color: #3366CC;">'http://www'</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #3366CC;">'.google-analytics.com/ga.js'</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; <span style="color: #003366;">var</span> s = document.<span style="color: #006600;">getElementsByTagName</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'script'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#91;</span><span style="color: #CC0000;color:#800000;">0</span><span style="color: #66cc66;">&#93;</span>; s.<span style="color: #006600;">parentNode</span>.<span style="color: #006600;">insertBefore</span><span style="color: #66cc66;">&#40;</span>ga, s<span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style="">&nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style="">&lt;/script&gt;</div></li></ol></div></div></div><p></p><p>En donde <em>UA-XXXXX-X</em> es el código de seguimiento del sitio web el cual lo podemos obtener al registrar un sitio web en nuestra cuenta de Google Analytics.</p><p><strong>Seguimiento de descargas con Google Analytics</strong></p><p>Si en nuestra página tenemos archivos de descarga, en enlace de descarga es:</p><div class="syntax_hilite"><div id="html-9"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"/files/map.pdf"</span><span style="color: #000000;">&gt;</span></a></span>map<span style="color: #009900;"><span style="color: #000000;">&lt;/a&gt;</span></span></div></li></ol></div></div></div><p></p><p>Para que Google Analytics pueda registrar las descargas es necesario agregar una llamada al método <em>_gaq.push</em> en donde el segundo parámetro es un nombre con el cual se identificará la descarga.</p><div class="syntax_hilite"><div id="html-10"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"/files/map.pdf"</span> <span style="color: #000066;">onClick</span>=<span style="color: #ff0000;">"_gaq.push(['_trackPageview','/files/map.pdf']);"</span><span style="color: #000000;">&gt;</span></a></span>map<span style="color: #009900;"><span style="color: #000000;">&lt;/a&gt;</span></span></div></li></ol></div></div></div><p></p><p>El código es muy sencillo y hay que colocarlo en cada enlace de descarga que se tenga.</p><p><strong>Seguimiento de descargas con Google Analytics y Mootools</strong></p><p>Si utilizas Mootools en tu página, entonces puedes utilizarlo para agregar el código de seguimiento de manera sencilla. Para ello a todos los enlaces de descarga le agregaremos un estilo llamado <em>download</em>.</p><div class="syntax_hilite"><div id="html-11"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"/files/map.pdf"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"download"</span><span style="color: #000000;">&gt;</span></a></span>map<span style="color: #009900;"><span style="color: #000000;">&lt;/a&gt;</span></span></div></li></ol></div></div></div><p></p><p>Luego podemos agregar el siguiente código con el cual se busca todos los enlaces con el estilo <em>download</em> y le agrega la llamada al método <em>_gaq.push</em>.</p><div class="syntax_hilite"><div id="javascript-12"><div class="javascript"><ol><li style="color:#3A6A8B;"><div style="">window.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'load'</span>, <span style="color: #003366;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp;$$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'.download'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'click'</span>,<span style="color: #003366;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; &nbsp; _gaq.<span style="color: #006600;">push</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'_trackPageview'</span>, <span style="color: #000066;">this</span>.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'href'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">replace</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'http://'</span>,<span style="color: #3366CC;">''</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li></ol></div></div></div><p></p><p><strong>Seguimiento de descargas con Google Analytics y jQuery</strong></p><p>Si utilizamos jQuery podríamos modificar el código anterior el cual se convertiría en:</p><div class="syntax_hilite"><div id="javascript-13"><div class="javascript"><ol><li style="color:#3A6A8B;"><div style="">$<span style="color: #66cc66;">&#40;</span>document<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">ready</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp;$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'a.download'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">click</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; &nbsp; _gaq.<span style="color: #006600;">push</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'_trackPageview'</span>, $<span style="color: #66cc66;">&#40;</span><span style="color: #000066;">this</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">attr</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'href'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">replace</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'http://'</span>,<span style="color: #3366CC;">''</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li></ol></div></div></div><p></p><p><strong>Seguimiento de descargas automático</strong></p><p>Si todas estas formas te parecen complicadas o ya tienes un sitio con muchas páginas y resulta complejo agregar el código de seguimiento, existe una solución llamada <a href="http://techoctave.com/c7/posts/58-entourage-js-automatic-download-tracking-for-asynchronous-google-analytics">Entourage.js</a> el cual agregará de forma automática el código de seguimiento a todos los enlaces que contengan archivos: .pdf, .zip, .doc, .xls, .ppt, .exe, .dmg, .mov, .avi y .mp3.</p><p>Para utilizar este método descargan los archivos y copian el archivo <em>entourage.min.js</em> y lo adjuntan a la página donde desean hacer el seguimiento, esto justo antes de colocar el código de Google Analytics.</p><div class="syntax_hilite"><div id="html-14"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"js/entourage.min.js"</span><span style="color: #000000;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>Esta pequeña librería con un tamaño de solo 579 bytes y que nos facilita de manera muy sencilla el trabajo de hacer el seguimiento de descargas en nuestra página.</p><p><strong>Mas Información</strong></p><ul><li><a href="http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html">Google Analytics: Tracking Site Activity</a></li><li><a href="http://davidwalsh.name/track-file-downloads-google-analytics-mootools">Track File Downloads in Google Analytics Using MooTools</a></li><li><a href="http://techoctave.com/c7/posts/58-entourage-js-automatic-download-tracking-for-asynchronous-google-analytics">Entourage.js - Automatic Download Tracking for Asynchronous Google Analytics</a></li></ul><p style="font-size: 10px;border-top: 1px solid #666666;margin-top=12px;padding-top:6px;">&copy; 2006 - 2011 <a href="http://blog.unijimpe.net">unijimpe</a> - Utiliza este feed solo para uso personal, partes de este feed pueden ser utilizados mencionando al autor, no esta permitido publicar enteramente este feed para uso comercial sin permiso del autor.</p><br /> ]]></content:encoded> <wfw:commentRss>http://blog.unijimpe.net/seguimiento-de-descargas-con-google-analytics/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Como incluir el botón Google +1 en tu Web</title><link>http://blog.unijimpe.net/como-incluir-el-boton-google-1-en-tu-web/</link> <comments>http://blog.unijimpe.net/como-incluir-el-boton-google-1-en-tu-web/#comments</comments> <pubDate>Sun, 07 Aug 2011 17:22:52 +0000</pubDate> <dc:creator>unijimpe</dc:creator> <category><![CDATA[General]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[+1]]></category> <category><![CDATA[asincrono]]></category> <category><![CDATA[redes sociales]]></category><guid isPermaLink="false">http://blog.unijimpe.net/?p=1285</guid> <description><![CDATA[<p>El botón <strong>Google +1</strong> es una utilidad de Google que permite a los usuarios marcar como recomendado el contenido de un determinado web. Estas recomendaciones serán mostradas en los resultados de Google y deben ser hechas &#8230;</p>]]></description> <content:encoded><![CDATA[<p>El botón <strong>Google +1</strong> es una utilidad de Google que permite a los usuarios marcar como recomendado el contenido de un determinado web. Estas recomendaciones serán mostradas en los resultados de Google y deben ser hechas por usuarios con cuentas de Google. De esta manera nuestros visitantes recomendarán a sus amigos nuestro contenido de forma que tendremos una nueva manera de publicitar nuestra web.</p><p><a href="http://www.google.com/webmasters/+1/button/"><img src="http://blog.unijimpe.net/wp-content/uploads/2011/08/google-plus1.jpg" alt="" title="google-plus1" width="500" height="244" /></a></p><p><strong>Generador de Google +1</strong></p><p>Google ofrece una página donde puedes configurar rápidamente el botón +1, obtener el código javascript para colocarlo en tu web. Para ello primero ingresamos a <a href="http://www.google.com/webmasters/+1/button/">http://www.google.com/webmasters/+1/button/</a> donde seleccionamos el tamaño del botón (Small, Medium, Standard, Tall) y el idioma para obtener el código javascript.</p><p>El primer código lo ubican en donde desean se muestre en botón Google +1, pueden ubicar el varios lugares el código para mostrar varias veces el botón.</p><div class="syntax_hilite"><div id="html-18"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;">&lt;g:plusone&gt;</span><span style="color: #009900;"><span style="color: #000000;">&lt;</span></a>/g:plusone&gt;</span></div></li></ol></div></div></div><p></p><p>El siguiente código se pone una sola vez y hay que colocarlo justo antes de la etiqueta <em>&lt;/body&gt;</em>. Este código es la forma asincrona de insertar javascript externo en una web, lo cual hace que primero cargue todos los elementos de la pagina y al final recién se carga el javascript necesario para el funcionamiento del botón +1.</p><div class="syntax_hilite"><div id="html-19"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">&nbsp; (function() {</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;</div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; po.src = 'https://apis.google.com/js/plusone.js';</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);</div></li><li style="color:#26536A;"><div style="">&nbsp; })();</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>También es posible utilizar la forma tradicional para llamar al javascript externo, para ello en lugar del código anterior colocaremos el siguiente código en el header de tu HTML.</p><div class="syntax_hilite"><div id="html-20"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"https://apis.google.com/js/plusone.js"</span><span style="color: #000000;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>Con lo cual obtenemos el siguiente resultado en nuestra página:</p><p><g:plusone></g:plusone></p><p>Estas son las configuraciones básicas, ahora si necesitas personalizar o integrar aún mas el botón Google +1, puedes leer la documentación en <a href="http://code.google.com/apis/+1button/">Adding the +1 button to your site</a>.</p><p>Como pueden ver utilizar este nuevo botón es sencillo y ayudará a obtener mas visitas a nuestras paginas mediante las recomendaciones de nuestros visitantes a sus contactos.</p><p style="font-size: 10px;border-top: 1px solid #666666;margin-top=12px;padding-top:6px;">&copy; 2006 - 2011 <a href="http://blog.unijimpe.net">unijimpe</a> - Utiliza este feed solo para uso personal, partes de este feed pueden ser utilizados mencionando al autor, no esta permitido publicar enteramente este feed para uso comercial sin permiso del autor.</p><br /> ]]></content:encoded> <wfw:commentRss>http://blog.unijimpe.net/como-incluir-el-boton-google-1-en-tu-web/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Smaller: Interfaz Gráfica para YUI Compressor en MAC</title><link>http://blog.unijimpe.net/smaller-interfaz-grafica-para-yui-compressor-en-mac/</link> <comments>http://blog.unijimpe.net/smaller-interfaz-grafica-para-yui-compressor-en-mac/#comments</comments> <pubDate>Wed, 22 Jun 2011 04:57:46 +0000</pubDate> <dc:creator>unijimpe</dc:creator> <category><![CDATA[CSS]]></category> <category><![CDATA[General]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[Tools]]></category> <category><![CDATA[descuento]]></category> <category><![CDATA[mac]]></category> <category><![CDATA[minificar]]></category> <category><![CDATA[YUI compressor]]></category><guid isPermaLink="false">http://blog.unijimpe.net/?p=1277</guid> <description><![CDATA[<p><a href="http://www.smallerapp.com/">Smaller</a> es una interfaz gráfica para YUI Compressor en Mac, con esta herramienta podremos <strong>minificar</strong> múltiples archivos Javascript y CSS sin necesidad de utilizar línea de comandos. Es ideal para diseñadores que no necesitan aprender línea &#8230;</p>]]></description> <content:encoded><![CDATA[<p><a href="http://www.smallerapp.com/">Smaller</a> es una interfaz gráfica para YUI Compressor en Mac, con esta herramienta podremos <strong>minificar</strong> múltiples archivos Javascript y CSS sin necesidad de utilizar línea de comandos. Es ideal para diseñadores que no necesitan aprender línea de comandos para minificar los archivos.</p><p><a href="http://www.smallerapp.com/"><img src="http://blog.unijimpe.net/wp-content/uploads/2011/06/smaller-yui-interface.jpg" alt="" title="smaller-yui-interface" width="214" height="100" /></a></p><p><strong>YUI Compressor</strong></p><p><a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a> el una herramienta desarrollada en Java que permite minificar (Elimina espacios en blanco, saltos de linea, reemplaza los nombres de variables por otras mas cortas) archivos Javascript y CSS para de esta forma acelerar la carga de nuestras páginas. Para comprimir o minificar un archivo con YUI Compressor se utiliza la siguiente sintaxis en linea de comandos:</p><div class="syntax_hilite"><div id="code-22"><div class="code"><ol><li style="color:#3A6A8B;"><div style="">java -jar yuicompressor-<span style="color:#800000;color:#800000;">2</span>.<span style="color:#800000;color:#800000;">1</span>.<span style="color:#800000;color:#800000;">1</span>.<span style="">jar</span> myfile.<span style="">js</span> -o myfile-min.<span style="">js</span></div></li></ol></div></div></div><p></p><p>En donde <em>myfile.js</em> es el archivo que deseamos comprimir. De forma semejante se puede minificar archivos CSS.</p><p><strong>Smaller</strong></p><p>Si eres diseñador y te es complicado aprender la sintaxis en línea de comandos o deseas acelerar el proceso de minificar archivos, entonces <a href="http://www.smallerapp.com/">Smaller</a> te sacará de apuros pues es una interfaz gráfica para utilizar YUI Compressor en MAC. Con Smaller puedes arrastrar directamente los archivos hasta la ventana de Smaller y minificarlos rápidamente.</p><p><img src="http://blog.unijimpe.net/wp-content/uploads/2011/06/smaller-screen.png" alt="" title="smaller-screen" width="443" height="304" /></p><p>Puedes arrastrar varios archivos a la vez o incluso carpetas completas, además de ello tiene un panel de configuración para controlar al detalle el proceso de minificar archivos. En mi caso el proceso de minificar archivos que me demoraba 5 minutos ahora se ha reducido a 30 segundos!!!</p><p><strong>Smaller</strong> tiene un costo de US$ 20.00 pero tiene una versión de prueba por 30 días. Adicionalmente se puede obtener un descuento del 25% en el precio para ello solo tienen que seguir en Twitter al creador <a href="http://twitter.com/chenluois">@chenluois</a> y publicar un tweet con el siguiente texto: <em>Smaller - Batch Minify CSS and JavaScript on the Mac http://smallerapp.com</em>.</p><p><strong>Más Información</strong></p><ul><li><a href="http://www.smallerapp.com/">Smaller</a></li><li><a href="http://www.smallerapp.com/free/">Smaller: Can I get a 25% discount?</a></li><li><a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a></li><li><a href="http://www.youtube.com/watch?v=kl7qc_JQIqE">http://www.youtube.com/watch?v=kl7qc_JQIqE</a></li></ul><p style="font-size: 10px;border-top: 1px solid #666666;margin-top=12px;padding-top:6px;">&copy; 2006 - 2011 <a href="http://blog.unijimpe.net">unijimpe</a> - Utiliza este feed solo para uso personal, partes de este feed pueden ser utilizados mencionando al autor, no esta permitido publicar enteramente este feed para uso comercial sin permiso del autor.</p><br /> ]]></content:encoded> <wfw:commentRss>http://blog.unijimpe.net/smaller-interfaz-grafica-para-yui-compressor-en-mac/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Depurar Javascript utilizando console.log()</title><link>http://blog.unijimpe.net/depurar-javascript-utilizando-console-log/</link> <comments>http://blog.unijimpe.net/depurar-javascript-utilizando-console-log/#comments</comments> <pubDate>Fri, 13 May 2011 05:14:59 +0000</pubDate> <dc:creator>unijimpe</dc:creator> <category><![CDATA[Firefox]]></category> <category><![CDATA[General]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[alert]]></category> <category><![CDATA[console]]></category> <category><![CDATA[debug]]></category> <category><![CDATA[firebug]]></category> <category><![CDATA[log]]></category> <category><![CDATA[opera]]></category> <category><![CDATA[Safari]]></category><guid isPermaLink="false">http://blog.unijimpe.net/?p=1266</guid> <description><![CDATA[<p>Tradicionalmente para depurar Javascript se hace uso de la función <em>alert</em> con la cual muestra un texto que contiene el valor de una determinada variable. Pero este método tiene un inconveniente: detiene la ejecución del script &#8230;</p>]]></description> <content:encoded><![CDATA[<p>Tradicionalmente para depurar Javascript se hace uso de la función <em>alert</em> con la cual muestra un texto que contiene el valor de una determinada variable. Pero este método tiene un inconveniente: detiene la ejecución del script hasta que el usuario acepte esta alerta.</p><p><img src="http://blog.unijimpe.net/wp-content/uploads/2011/05/console.gif" alt="" title="console" width="520" height="191" class="alignnone size-full wp-image-1267" /></p><p><strong>Javascript Console</strong></p><p><a href="http://www.apple.com/es/safari/">Safari</a> y <a href="http://www.getfirefox.com">Firefox</a> con <a href="http://getfirebug.com">Firebug</a> instalado ofrecen un comando para facilitar la depuración de Javascript, se trata de console el cual imprime el mensaje en el panel de <strong>console</strong> como se muestra en la imagen que acompaña este artículo.</p><p>Existen varios tipos de mensajes que se pueden mostrar:</p><ul><li><code>console.log()</code> muestra un mensaje en la consola.</li><li><code>console.debug()</code> muestra un mensaje y ademas nuestra el número de línea donde se encuentra.</li><li><code>console.warn()</code> muestra un mensaje de alerta con un icono y fondo amarillo para identificarlo.</li><li><code>console.error()</code> muestra un mensaje de error con un icono y fondo en color rojo.</li></ul><p>Para mostrar un mensaje se le pasa la cadena de texto que deseamos imprimir:</p><div class="syntax_hilite"><div id="javascript-26"><div class="javascript"><ol><li style="color:#3A6A8B;"><div style="">console.<span style="color: #006600;">log</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"-&gt; log"</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style="">console.<span style="color: #006600;">debug</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'-&gt; debug'</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style="">console.<span style="color: #006600;">warn</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'-&gt; warm'</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style="">console.<span style="color: #006600;">error</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'-&gt; error'</span><span style="color: #66cc66;">&#41;</span>;</div></li></ol></div></div></div><p></p><p>También se pueden pasar mas parámetros al estilo de <em>printf</em> y <em>sprintf</em> de PHP, por ejemplo:</p><div class="syntax_hilite"><div id="javascript-27"><div class="javascript"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #003366;">var</span> total = <span style="color: #CC0000;color:#800000;">12</span>;</div></li><li style="color:#26536A;"><div style=""><span style="color: #003366;">var</span> consulta&nbsp; = <span style="color: #3366CC;">"Google"</span>;</div></li><li style="color:#3A6A8B;"><div style="">console.<span style="color: #006600;">log</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"Total: %s para '%s'"</span>, total, consulta<span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style=""><span style="color: #009900; font-style: italic;">// Total: 12 para 'Google' </span></div></li></ol></div></div></div><p></p><p><strong>Utilizando console.log() en otros Navegadores</strong></p><p>Ya que console solo esta disponible para <em>Safari</em> y <em>Firefox</em> con Firebug, si pruebas tu desarrollo en <em>Internet Explorer</em> u <em>Opera</em> te generará un error puesta la sentencia <code>console.log()</code> no existe. Para ello se ha propuesto en <a href="http://keekimheng.com/2010/09/06/cross-browser-console-logging/">KeeKim</a> un script para reemplazarlo por <code>opera.portError()</code> en el caso de Opera y <code>alert()</code> en el caso de Internet Explorer.</p><div class="syntax_hilite"><div id="javascript-28"><div class="javascript"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #000066;">if</span> <span style="color: #66cc66;">&#40;</span>!window.<span style="color: #006600;">console</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#26536A;"><div style="">&nbsp; <span style="color: #003366;">var</span> log = window.<span style="color: #006600;">opera</span> ? window.<span style="color: #006600;">opera</span>.<span style="color: #006600;">postError</span> : <span style="color: #000066;">alert</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; window.<span style="color: #006600;">console</span> = <span style="color: #66cc66;">&#123;</span> log: <span style="color: #003366;">function</span><span style="color: #66cc66;">&#40;</span>str<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> log<span style="color: #66cc66;">&#40;</span>str<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#125;</span>;</div></li><li style="color:#26536A;"><div style=""><span style="color: #66cc66;">&#125;</span></div></li></ol></div></div></div><p></p><p><strong>Más Información</strong></p><ul><li><a href="http://getfirebug.com/wiki/index.php/Console_API">Firebug: Console API</a></li><li><a href="http://getfirebug.com/logging">Firebug and Logging</a></li><li><a href="http://keekimheng.com/2010/09/06/cross-browser-console-logging/">Cross-browser Console Logging</a></li><li><a href="http://davidwalsh.name/firebug-console-log">Logging Information to the Firebug JavaScript Console</a></li></ul><p style="font-size: 10px;border-top: 1px solid #666666;margin-top=12px;padding-top:6px;">&copy; 2006 - 2011 <a href="http://blog.unijimpe.net">unijimpe</a> - Utiliza este feed solo para uso personal, partes de este feed pueden ser utilizados mencionando al autor, no esta permitido publicar enteramente este feed para uso comercial sin permiso del autor.</p><br /> ]]></content:encoded> <wfw:commentRss>http://blog.unijimpe.net/depurar-javascript-utilizando-console-log/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Cached Commons: Librerías Javascript Online para tus Proyectos</title><link>http://blog.unijimpe.net/cached-commons-librerias-javascript-online-para-tus-proyectos/</link> <comments>http://blog.unijimpe.net/cached-commons-librerias-javascript-online-para-tus-proyectos/#comments</comments> <pubDate>Wed, 01 Sep 2010 04:46:36 +0000</pubDate> <dc:creator>unijimpe</dc:creator> <category><![CDATA[General]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[Optimización Web]]></category> <category><![CDATA[Servicios Web]]></category> <category><![CDATA[Tools]]></category> <category><![CDATA[cdn]]></category> <category><![CDATA[github]]></category> <category><![CDATA[gzip]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[minificar]]></category> <category><![CDATA[SWFObject]]></category><guid isPermaLink="false">http://blog.unijimpe.net/?p=1234</guid> <description><![CDATA[<p><strong>Cached Commons</strong> es una colección de librerías Javascript que han sido cacheadas, optimizadas y alojadas en el CDN de Github las cuales podemos incluir directamente en nuestros proyectos. Están disponibles librerías como: <em>jQuery</em>, <em>SWFObject</em>, &#8230;</p>]]></description> <content:encoded><![CDATA[<p><strong>Cached Commons</strong> es una colección de librerías Javascript que han sido cacheadas, optimizadas y alojadas en el CDN de Github las cuales podemos incluir directamente en nuestros proyectos. Están disponibles librerías como: <em>jQuery</em>, <em>SWFObject</em>, <em>SWFAddress</em>, <em>SyntaxHighlighter</em>, <em>jqPlot</em> entre otros.</p><p><a href="http://cachedcommons.org/"><img src="http://blog.unijimpe.net/wp-content/uploads/2010/08/cached-commons.jpg" alt="" title="cached-commons" width="400" height="231" /></a></p><p>Cada librería incluida ha sido <em>minificada</em>, luego se la envía al usuario utilizando compresión <em>GZIP</em> y además con los headers necesarios para ser guardados en el cache del usuario. Esto significa que han sido correctamente optimizados para cargarse rápidamente y por consiguiente acelerar la carga de nuestra web.</p><p><strong>Como utilizar Cached Commons</strong></p><p>Para utilizar cualquier librería alojada en <em>Cached Commons</em> solo debes copiar la ruta de la librería e incluirla directamente en tu proyecto.</p><p>Por ejemplo si deseamos utilizar la librería SWFObject podemos hacerlo mediante:</p><div class="syntax_hilite"><div id="html-31"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"http://cachedcommons.org/javascripts/swf/swfobject-2.2.js"</span><span style="color: #000000;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>También podemos utilizar la versión minificada:</p><div class="syntax_hilite"><div id="html-32"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"http://cachedcommons.org/javascripts/swf/swfobject-2.2-min.js"</span><span style="color: #000000;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>Este proyecto es semejante al <a href="http://blog.unijimpe.net/google-ajax-libraries-api/">Google Ajax Libraries API</a> el cual también aloja a las principales librerías javascript, pero tiene la ventaja que aloja a muchas mas librerías y plugins más populares. Si aún así no encuentras la librería que necesitas puedes solicitar qu la agreguen al directorio.</p><p style="font-size: 10px;border-top: 1px solid #666666;margin-top=12px;padding-top:6px;">&copy; 2006 - 2011 <a href="http://blog.unijimpe.net">unijimpe</a> - Utiliza este feed solo para uso personal, partes de este feed pueden ser utilizados mencionando al autor, no esta permitido publicar enteramente este feed para uso comercial sin permiso del autor.</p><br /> ]]></content:encoded> <wfw:commentRss>http://blog.unijimpe.net/cached-commons-librerias-javascript-online-para-tus-proyectos/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Prevenir el clickjacking con Javascript</title><link>http://blog.unijimpe.net/prevenir-el-clickjacking-con-javascript/</link> <comments>http://blog.unijimpe.net/prevenir-el-clickjacking-con-javascript/#comments</comments> <pubDate>Sun, 22 Aug 2010 21:20:54 +0000</pubDate> <dc:creator>unijimpe</dc:creator> <category><![CDATA[General]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[Seguridad]]></category> <category><![CDATA[clickjacking]]></category> <category><![CDATA[frame]]></category> <category><![CDATA[iframe]]></category> <category><![CDATA[seguridad]]></category><guid isPermaLink="false">http://blog.unijimpe.net/?p=1226</guid> <description><![CDATA[<p>Prevenir el <em>clickjacking</em> consiste en evitar que nuestra página sea cargada dentro de otra mediante un <em>frame</em> o <em>iframe</em>, esto para prevenir el robo de contenido así como evitar el uso de nuestra página para &#8230;</p>]]></description> <content:encoded><![CDATA[<p>Prevenir el <em>clickjacking</em> consiste en evitar que nuestra página sea cargada dentro de otra mediante un <em>frame</em> o <em>iframe</em>, esto para prevenir el robo de contenido así como evitar el uso de nuestra página para forzar a los visitantes a realizar clicks maliciosos. Entonces el objetivo es evitar que nuestra página pueda ser cargada dentro de otra utilizando frames o iframes.</p><p><img src="http://blog.unijimpe.net/wp-content/uploads/2010/08/clickjacking.jpg" alt="" title="clickjacking" width="336" height="192" /></p><p><strong>Que es Clickjacking?</strong></p><p>El clickjacking consiste en cargar una página dentro de otra utilizando un <em>iframe</em> y sobre ella mostrar otra página oculta con transparencia, de forma tal que si hacemos click en un botón para buscar estaremos indirectamente haciendo click sobre otra página para propósitos maliciosos.</p><p><strong>Prevenir Clickjacking - Primer Método</strong></p><p>La idea básica para prevenir que nuestra página sea cargada dentro de otra con frames o iframes es verificar la propiedad <em>location</em> del frame actual es igual al del frame superior. Si no son iguales estas propiedades es síntoma que nuestra página se esta cargando dentro de otra por lo tanto redireccionamos al url de nuestra web.</p><div class="syntax_hilite"><div id="html-36"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">if (top.location != location) top.location = self.location;</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>El método anterior por lo general es suficiente en la mayoría de los casos, pero existen técnicas para saltarse esta verificación, por ejemplo utilizar iframes anidados o generar errores de Javascript con lo cual se detiene cualquier verificación con javascript adicional. En el artículo <a href="http://seclab.stanford.edu/websec/framebusting/">Busting frame busting: a study of clickjacking vulnerabilities at popular sites</a> se explica las múltiples formas de evitar el <em>Frame Busting</em>.</p><p><strong>Prevenir Clickjacking - Segundo Método</strong></p><p>Una forma sencilla de prevenir el uso de nuestras páginas en otros sitios es primero ocultar todo el contenido de nuestra web utilizando estilos. Luego de ello verificamos si la propiedad <em>location</em> del frame actual y el superior son iguales en cuyo caso volvemos visible todo el contenido de nuestro web en caso contrario redireccionamos a nuestra url.</p><p>Primero colocamos el siguiente código en el header para ocultar el contenido.</p><div class="syntax_hilite"><div id="html-37"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/style.html"><span style="color: #000000;">&lt;style</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/css"</span><span style="color: #000000;">&gt;</span></a></span> body { display:none; } <span style="color: #009900;"><span style="color: #000000;">&lt;/style&gt;</span></span></div></li></ol></div></div></div><p> Al final del contenido colocamos el siguiente código, el cual verifica si el frame actual es igual al frame superior para volver visible el contenido.</p><div class="syntax_hilite"><div id="html-38"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">if (self == top) {</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp;document.getElementsByTagName(&quot;body&quot;)[0].style.display = 'block';</div></li><li style="color:#26536A;"><div style="">} else {</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp;top.location = self.location;</div></li><li style="color:#26536A;"><div style="">}</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>De esta forma si el atacante de alguna forma genera un error de javascript o utiliza frames anidados solo se mostrará una página en blanco, una validación sencilla pero muy eficiente para evitar que nuestra web sea utilizada por terceros.</p><p><strong>Mas Información</strong></p><ul><li><a href="http://seclab.stanford.edu/websec/framebusting/">Busting frame busting: a study of clickjacking vulnerabilities at popular sites</a></li><li><a href="http://crypto.stanford.edu/framebust/">Defeating Frame Busting Techniques</a></li><li><a href="http://coderrr.wordpress.com/2009/02/13/preventing-frame-busting-and-click-jacking-ui-redressing/">Preventing Frame Busting and Click Jacking (UI Redressing)</a></li></ul><p style="font-size: 10px;border-top: 1px solid #666666;margin-top=12px;padding-top:6px;">&copy; 2006 - 2011 <a href="http://blog.unijimpe.net">unijimpe</a> - Utiliza este feed solo para uso personal, partes de este feed pueden ser utilizados mencionando al autor, no esta permitido publicar enteramente este feed para uso comercial sin permiso del autor.</p><br /> ]]></content:encoded> <wfw:commentRss>http://blog.unijimpe.net/prevenir-el-clickjacking-con-javascript/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Técnicas para Ofuscar Email</title><link>http://blog.unijimpe.net/tecnicas-para-ofuscar-email/</link> <comments>http://blog.unijimpe.net/tecnicas-para-ofuscar-email/#comments</comments> <pubDate>Mon, 09 Aug 2010 07:13:38 +0000</pubDate> <dc:creator>unijimpe</dc:creator> <category><![CDATA[General]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Seguridad]]></category> <category><![CDATA[codificar]]></category> <category><![CDATA[email]]></category> <category><![CDATA[ofuscar]]></category> <category><![CDATA[seguridad]]></category> <category><![CDATA[spam]]></category><guid isPermaLink="false">http://blog.unijimpe.net/?p=1209</guid> <description><![CDATA[<p>El SPAM es uno de los problemas por la que todo usuario a perdido mucho tiempo, siempre nos envían correos no solicitados con publicidad. Una de las técnicas utilizadas por los Spammers para obtener dirección email &#8230;</p>]]></description> <content:encoded><![CDATA[<p>El SPAM es uno de los problemas por la que todo usuario a perdido mucho tiempo, siempre nos envían correos no solicitados con publicidad. Una de las técnicas utilizadas por los Spammers para obtener dirección email es crear <em>robots</em> que van por todas las páginas leyendo y guardando las direcciones email publicadas. Basado en este método para obtener nuestras direcciones tenemos una regla para evitar el spam.</p><blockquote><p>Nunca publicar directamente direcciones <strong>email</strong> en una página web.</p></blockquote><p>Veamos algunas técnicas para mostrar direcciones de correo en nuestras páginas sin exponernos a un ataque de spam a estas cuentas de email.</p><p><a href="http://samples.unijimpe.net/ofuscar-email.php"><img src="http://blog.unijimpe.net/wp-content/uploads/2010/08/obuscate-email.jpg" alt="" title="obuscate-email" width="500" height="190" /></a></p><p><strong>Utilizando CSS: Método #1</strong></p><p>Una técnica sencilla pero que da buenos resultados es escribir la dirección email al revés y luego con estilos mostrarlo en la dirección correcta utilizando la propiedad <em>direction</em>, por ejemplo:</p><div class="syntax_hilite"><div id="html-45"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/span.html"><span style="color: #000000;">&lt;span</span></a> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">"direction:rtl; unicode-bidi:bidi-override;"</span><span style="color: #000000;">&gt;</span></a></span>moc.oinimod@otcatnoc<span style="color: #009900;"><span style="color: #000000;">&lt;/span&gt;</span></span></div></li></ol></div></div></div><p></p><p>Entonces creamos una función que se encargue de utilizar este método para mostrar los emails en nuestra web:</p><div class="syntax_hilite"><div id="php-46"><div class="php"><ol><li style="color:#3A6A8B;"><div style=""><span style="color:#000000;">function</span> hideEmail<span style="color:#006600;">&#40;</span><span style="color:#0000FF;">$mail</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; <span style="color:#0000FF;">$mail</span> = <a href="http://www.php.net/strrev"><span style="color:#000066;">strrev</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000FF;">$mail</span><span style="color:#006600;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; <span style="color:#616100;">return</span> <span style="color:#FF0000;">"&lt;span style=<span style="color:#000099;">\"</span>direction:rtl; unicode-bidi:bidi-override;<span style="color:#000099;">\"</span>&gt;"</span>.<span style="color:#0000FF;">$mail</span>.<span style="color:#FF0000;">"&lt;/span&gt;"</span>;</div></li><li style="color:#26536A;"><div style=""><span style="color:#006600;">&#125;</span></div></li></ol></div></div></div><p></p><p><strong>Utilizando CSS: Método #2</strong></p><p>Otró método consiste en agregarle un texto oculto dentro de la dirección email, de esta forma la dirección se visualizará correctamente pero si un spammer copia el email esta contendrá un dirección inválida. Este texto se oculta con estilos utilizando la propiedad <em>display</em>.</p><div class="syntax_hilite"><div id="html-47"><div class="html"><ol><li style="color:#3A6A8B;"><div style="">contacto@<span style="color: #009900;"><a href="http://december.com/html/4/element/span.html"><span style="color: #000000;">&lt;span</span></a> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">"display:none"</span><span style="color: #000000;">&gt;</span></a></span>null<span style="color: #009900;"><span style="color: #000000;">&lt;/span&gt;</span></span>dominio.com</div></li></ol></div></div></div><p></p><p>Luego creamos la función en PHP para ofuscar los emails:</p><div class="syntax_hilite"><div id="php-48"><div class="php"><ol><li style="color:#3A6A8B;"><div style=""><span style="color:#000000;">function</span> hideEmail<span style="color:#006600;">&#40;</span><span style="color:#0000FF;">$mail</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; <span style="color:#0000FF;">$temp</span> = <a href="http://www.php.net/explode"><span style="color:#000066;">explode</span></a><span style="color:#006600;">&#40;</span><span style="color:#FF0000;">"@"</span>, <span style="color:#0000FF;">$mail</span><span style="color:#006600;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; <span style="color:#616100;">return</span> <span style="color:#0000FF;">$temp</span><span style="color:#006600;">&#91;</span><span style="color:#CC66CC;color:#800000;">0</span><span style="color:#006600;">&#93;</span>.<span style="color:#FF0000;">"@&lt;span style=<span style="color:#000099;">\"</span>display:none;<span style="color:#000099;">\"</span>&gt;null&lt;/span&gt;"</span>.<span style="color:#0000FF;">$temp</span><span style="color:#006600;">&#91;</span><span style="color:#CC66CC;color:#800000;">1</span><span style="color:#006600;">&#93;</span>;</div></li><li style="color:#26536A;"><div style=""><span style="color:#006600;">&#125;</span></div></li></ol></div></div></div><p></p><p><strong>Utilizando codificación ROT13</strong></p><p>Este método consiste en codificar la dirección email con el algoritmo ROT13 que consiste en trasladar 13 posiciones las letras del alfabeto, dejando los caracteres no-alfabéticos sin modificar. Para ello escribimos el email codificado y lo mostramos correctamente con una función Javascript <a href="http://phpjs.org/functions/str_rot13:528">str_rot13</a>.</p><div class="syntax_hilite"><div id="html-49"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">document.write((&quot;pbagnpgb@qbzvavb.pbz&quot;).replace(/[a-z]/gi, function(s){</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; return String.fromCharCode(s.charCodeAt(0)+(s.toLowerCase()<span style="color: #009900;"><span style="color: #000000;">&lt;</span></a><span style="color: #ff0000;">'n'</span>?<span style="color: #cc66cc;color:#800000;">13</span>:-<span style="color: #cc66cc;color:#800000;">13</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style=""><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>Luego escribimos una función en PHP que se encargue de codificar la dirección email y que imprima el código javascript para decodificarlo:</p><div class="syntax_hilite"><div id="php-50"><div class="php"><ol><li style="color:#3A6A8B;"><div style=""><span style="color:#000000;">function</span> hideEmail<span style="color:#006600;">&#40;</span><span style="color:#0000FF;">$mail</span><span style="color:#006600;">&#41;</span> <span style="color:#006600;">&#123;</span></div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; <span style="color:#0000FF;">$temp</span> = <span style="color:#FF0000;">"&lt;script type=<span style="color:#000099;">\"</span>text/javascript<span style="color:#000099;">\"</span>&gt;<span style="color:#000099;">\n</span>"</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; <span style="color:#0000FF;">$temp</span>.= <span style="color:#FF0000;">"document.write((<span style="color:#000099;">\"</span>"</span>.<a href="http://www.php.net/str_rot13"><span style="color:#000066;">str_rot13</span></a><span style="color:#006600;">&#40;</span><span style="color:#0000FF;">$mail</span><span style="color:#006600;">&#41;</span>.<span style="color:#FF0000;">"<span style="color:#000099;">\"</span>).replace(/[a-z]/gi, function(s){ <span style="color:#000099;">\n</span>"</span>;</div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; <span style="color:#0000FF;">$temp</span>.= <span style="color:#FF0000;">"&nbsp; &nbsp;return String.fromCharCode(s.charCodeAt(0)+(s.toLowerCase()&lt;'n'?13:-13));<span style="color:#000099;">\n</span>"</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; <span style="color:#0000FF;">$temp</span>.= <span style="color:#FF0000;">"}));<span style="color:#000099;">\n</span>"</span>;</div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; <span style="color:#0000FF;">$temp</span>.= <span style="color:#FF0000;">"&lt;/script&gt;"</span>;&nbsp; &nbsp;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; <span style="color:#616100;">return</span> <span style="color:#0000FF;">$temp</span>;</div></li><li style="color:#26536A;"><div style=""><span style="color:#006600;">&#125;</span></div></li></ol></div></div></div><p></p><p>Puedes escoger cualquiera de estar técnicas y utilizarlo rápidamente para mostrar tu dirección de email sin temor a ataques de SPAM. Puedes descargar el código fuente con estas funciones asi como el ejemplo de uso para que puedan hacer sus pruebas.</p><p style="text-align:left;"><a href="http://blog.unijimpe.net/download/ofuscar-email.zip" title="Email  Obfuscate"><img src="http://blog.unijimpe.net/btdown.png" border="0"></a></p><p><strong>Mas Información</strong></p><ul><li><a href="http://techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared/">Nine ways to obfuscate e-mail addresses compared</a></li><li><a href="http://ch2.php.net/str_rot13">PHP: str_rot13 - Manual</a></li><li><a href="http://phpjs.org/functions/str_rot13:528">JavaScript str_rot13</a></li><li><a href="http://www.maurits.vdschee.nl/php_hide_email/">PHP hide_email()</a></li></ul><p style="font-size: 10px;border-top: 1px solid #666666;margin-top=12px;padding-top:6px;">&copy; 2006 - 2011 <a href="http://blog.unijimpe.net">unijimpe</a> - Utiliza este feed solo para uso personal, partes de este feed pueden ser utilizados mencionando al autor, no esta permitido publicar enteramente este feed para uso comercial sin permiso del autor.</p><br /> ]]></content:encoded> <wfw:commentRss>http://blog.unijimpe.net/tecnicas-para-ofuscar-email/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Utilizar Eventos en Javascript</title><link>http://blog.unijimpe.net/utilizar-eventos-en-javascript/</link> <comments>http://blog.unijimpe.net/utilizar-eventos-en-javascript/#comments</comments> <pubDate>Sun, 27 Jun 2010 23:07:28 +0000</pubDate> <dc:creator>unijimpe</dc:creator> <category><![CDATA[General]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[alert]]></category> <category><![CDATA[eventos]]></category> <category><![CDATA[formulario]]></category> <category><![CDATA[funciones]]></category><guid isPermaLink="false">http://blog.unijimpe.net/?p=1200</guid> <description><![CDATA[<p>Un evento es un proceso que se realiza en respuesta a determinada acción realizada por el usuario, por ejemplo si el usuario presiona un botón, entonces en respuesta al evento '<em>onclick</em>' que representa el &#8230;</p>]]></description> <content:encoded><![CDATA[<p>Un evento es un proceso que se realiza en respuesta a determinada acción realizada por el usuario, por ejemplo si el usuario presiona un botón, entonces en respuesta al evento '<em>onclick</em>' que representa el presionar el botón realizamos una acción. Para poder interactuar con los eventos se utilizan los Detectores de Eventos lo cuales detectan los eventos y permiten llamar a funciones en respuesta al evento.</p><h3>Cuales son los Detectores de Eventos Disponibles?</h3><p>Existen eventos para los diferentes elementos de la página, los mas importantes son los siguientes:</p><p><strong>Eventos de Formularios</strong></p><ul><li><strong>onblur</strong> - el campo pierde el foco.</li><li><strong>onchange</strong> - el elemento que tiene el foco ha cambiado su valor.</li><li><strong>onfocus</strong> -  cuando el campo recibe el foco.</li><li><strong>onreset</strong> - sucede cuando el usuario ha reseteado el formulario.</li><li><strong>onselect</strong> - cuando un texto ha sido seleccionado.</li><li><strong>onsubmit</strong> - el usuario ha seleccionado enviar el formulario.</li></ul><p><strong>Eventos de Enlaces</strong></p><ul><li><strong>onclick</strong> - Cuando se hace click en el elemento seleccionado.</li><li><strong>onmouseout</strong> - Cuando el mouse se mueve encima del enlace o botón.</li><li><strong>onmouseover</strong> - Cuando el mouse se mueve fuera del enlace o botón.</li></ul><p><strong>Eventos del Teclado</strong></p><ul><li><strong>onkeydown</strong> El usuario presiona una tecla.</li><li><strong>onkeypress</strong> El usuario mantiene presionada una tecla.</li><li><strong>onkeyup</strong> El usuario suelta la tecla.</li></ul><p><strong>Eventos en Ventanas</strong></p><ul><li><strong>onblur</strong> - Sucede cuando la ventana o frame pierde el foco.</li><li><strong>onerror</strong> - Cuando ocurre un error.</li><li><strong>onfocus</strong> -  La ventana o frame recibe el foco.</li><li><strong>onload</strong> - Si el objeto se ha cargado completamente.</li><li><strong>onunload</strong> - Cuando la venta se cierra.</li><li><strong>onresize</strong> - Cuando se redimensiona la ventana o frame.</li></ul><p><strong>Nota</strong><br /> Si bien es cierto HTML es <em>case-insensitive</em> es decir no distingue entre altas y bajas, para lograr que los documentos  html validen es necesario redactar los detectores de eventos en minúsculas.</p><h3>Como se utilizan los Detectores de Eventos?</h3><p>Los detectores de eventos se puedes asociar directamente a cada elemento como si fuera una propiedad adicional, además debemos colocar que acción realizar cuando se detecte el evento.</p><p><strong>Primera Forma</strong></p><p>Se puede hacer que ejecute una serie de acciones en Javacript:</p><div class="syntax_hilite"><div id="html-57"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"link.html"</span> <span style="color: #000066;">onclick</span>=<span style="color: #ff0000;">"alert('Bienvenido!!');"</span><span style="color: #000000;">&gt;</span></a></span>Entrar<span style="color: #009900;"><span style="color: #000000;">&lt;/a&gt;</span></span></div></li></ol></div></div></div><p></p><p><strong>Segunda Forma</strong></p><p>También podemos hacer que llame a una función definida por el usuario:</p><div class="syntax_hilite"><div id="html-58"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"link.html"</span> <span style="color: #000066;">onclick</span>=<span style="color: #ff0000;">"welcome();"</span><span style="color: #000000;">&gt;</span></a></span>Entrar<span style="color: #009900;"><span style="color: #000000;">&lt;/a&gt;</span></span></div></li></ol></div></div></div><p></p><p>En este caso estamos llamando a una función llamada <em>welcome</em> la cual debemos definir:</p><div class="syntax_hilite"><div id="html-59"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">function welcome() {</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp;alert('Welcome!!!');</div></li><li style="color:#26536A;"><div style="">}</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>En el ejemplo solo hemos mostrado un mensaje de alerta dando la bienvenida al usuario. Obviamente podríamos realizar múltiples acciones como validación de formulario, formateo de datos o llamar a datos AJAX.</p><p><strong>Tercera Forma</strong></p><p>Otra forma es asignar los eventos como métodos de los elementos Javascript. Para ello necesitamos asignar identificadores a los elementos que deseamos.</p><div class="syntax_hilite"><div id="html-60"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"link.html"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"bt"</span><span style="color: #000000;">&gt;</span></a></span>Entrar<span style="color: #009900;"><span style="color: #000000;">&lt;/a&gt;</span></span></div></li></ol></div></div></div><p></p><p>Luego podemos agregar los eventos como propiedades del elemento Javascript (Hay que tener en cuenta que en esta forma los nombres de los detectores de eventos deben estar todos en minúsculas.</p><div class="syntax_hilite"><div id="html-61"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">document.getElementById(&quot;bt&quot;).onclick = function () {</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; alert(&quot;Welcome!!!&quot;);&nbsp; &nbsp;</div></li><li style="color:#26536A;"><div style="">}</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p><strong>Cuarta Forma</strong></p><p>Otra forma de crear los detectores de eventos es haciendo uso de listeners, para ello se utiliza la función <em>addEventListener</em> de Javascript, el cual recibe como parámetros el nombre del evento (Sin en prefijo <em>on</em>) y la función a ejecutar. Para nuestro ejemplo se tendría:</p><div class="syntax_hilite"><div id="html-62"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">document.getElementById(&quot;bt&quot;).addEventListener('click', welcome, false);</div></li><li style="color:#3A6A8B;"><div style="">function welcome() {</div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; alert(&quot;Welcome!!!&quot;);&nbsp; &nbsp;</div></li><li style="color:#3A6A8B;"><div style="">}</div></li><li style="color:#26536A;"><div style=""><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>Como se puede ver utilizamos el evento <em>onclick</em> pero sin el prefijo lo que significa utilizar la palabra '<em>click</em>'.</p><p>Con estas dos ultimas formas de asignar los detectores de eventos podemos separar el código HTML del Javascript con lo cual es mas sencillo dar el mantenimiento a nuestro código. Incluso la asignación de los eventos lo podríamos hacer en un archivo externo.</p><p>Pueden ver los ejemplos de este post en <a href="http://samples.unijimpe.net/eventos-javascript.html">http://samples.unijimpe.net/eventos-javascript.html</a>.</p><p><strong>Mas Información</strong></p><ul><li><a href="http://www.quirksmode.org/js/introevents.html">Introduction to Events</a></li><li><a href="http://www.javascriptkit.com/jsref/event.shtml">Javascript Event Object</a></li><li><a href="http://www.quirksmode.org/js/events_advanced.html">Advanced event registration models</a></li><li><a href="http://www.comptechdoc.org/independent/web/cgi/javamanual/javaevents.html">JavaScript Events</a></li></ul><p style="font-size: 10px;border-top: 1px solid #666666;margin-top=12px;padding-top:6px;">&copy; 2006 - 2011 <a href="http://blog.unijimpe.net">unijimpe</a> - Utiliza este feed solo para uso personal, partes de este feed pueden ser utilizados mencionando al autor, no esta permitido publicar enteramente este feed para uso comercial sin permiso del autor.</p><br /> ]]></content:encoded> <wfw:commentRss>http://blog.unijimpe.net/utilizar-eventos-en-javascript/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Validar Formularios con Mootools</title><link>http://blog.unijimpe.net/validar-formularios-con-mootools/</link> <comments>http://blog.unijimpe.net/validar-formularios-con-mootools/#comments</comments> <pubDate>Mon, 31 May 2010 04:34:07 +0000</pubDate> <dc:creator>unijimpe</dc:creator> <category><![CDATA[General]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[Mootools]]></category> <category><![CDATA[estilos]]></category> <category><![CDATA[form]]></category> <category><![CDATA[validación]]></category><guid isPermaLink="false">http://blog.unijimpe.net/?p=1178</guid> <description><![CDATA[<p>En las ultimas versiones de <a href="http://mootools.net">Mootools</a> se ha comenzado a incluir la clase <a href="http://mootools.net/docs/more/Forms/Form.Validator">Form.Validator</a> la cual permite validar formularios de forma sencilla con muchas opciones predefinidas y con la posibilidad de extender con nuevas reglas de &#8230;</p>]]></description> <content:encoded><![CDATA[<p>En las ultimas versiones de <a href="http://mootools.net">Mootools</a> se ha comenzado a incluir la clase <a href="http://mootools.net/docs/more/Forms/Form.Validator">Form.Validator</a> la cual permite validar formularios de forma sencilla con muchas opciones predefinidas y con la posibilidad de extender con nuevas reglas de validación.</p><p><img src="http://blog.unijimpe.net/wp-content/uploads/2010/05/form-validate-mootools1.jpg" alt="" title="form-validate-mootools" width="200" height="286" /></p><p><strong>Preparando para Validar con Mootools</strong></p><p>Lo primero es descargar e incluir el archivo <a href="http://mootools.net/core">mootools.js</a> en nuestro documento, también se necesita descargar e incluir el archivo <a href="http://mootools.net/more">mootools-more.js</a> que debe contener las clases: <em>Form.Validator</em> y <em>Form.Validator.Inline</em>.</p><p><img src="http://blog.unijimpe.net/wp-content/uploads/2010/05/form-valid-config.jpg" alt="" title="form-valid-config" width="500" height="176" /></p><div class="syntax_hilite"><div id="html-69"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"js/mootools.js"</span><span style="color: #000000;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li><li style="color:#26536A;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"js/mootools-more.js"</span><span style="color: #000000;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>También es necesario agregar tres estilos para indicar al usuario el resultado de la validación, estos estilos los creamos en la hoja de estilos de nuestro sitio web donde obviamente los colores y estilos los haremos para que se integren con nuestra web.</p><div class="syntax_hilite"><div id="css-70"><div class="css"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #6666ff;">.validation-passed </span><span style="color: #66cc66;">&#123;</span> <span style="color: #000000;">border-color</span>: <span style="color: #000000;">blue</span>; <span style="color: #66cc66;">&#125;</span> <span style="color: #808080; font-style: italic;">/* campo valido */</span></div></li><li style="color:#26536A;"><div style=""><span style="color: #6666ff;">.validation-failed </span><span style="color: #66cc66;">&#123;</span> <span style="color: #000000;">border-color</span>: <span style="color: #993333;">red</span>; <span style="color: #66cc66;">&#125;</span> <span style="color: #808080; font-style: italic;">/* campo invalido */</span></div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #6666ff;">.validation-advice </span><span style="color: #66cc66;">&#123;</span> <span style="color: #000000;">color</span>: #C00; <span style="color: #000000;">font-size</span>: 10px; <span style="color: #66cc66;">&#125;</span> <span style="color: #808080; font-style: italic;">/* mensaje de error */</span></div></li></ol></div></div></div><p></p><p><strong>Validaciones Disponibles</strong></p><p>Lo primero es conocer todas las formas de validación disponibles</p><ul><li><strong>IsEmpty</strong>: devuelve verdadero si el campo esta vacío.</li><li><strong>required</strong>: el campo debe ser obligatorio o no debe estar vacío.</li><li><strong>minLength</strong>: verdadero si campo tiene mas de cierta cantidad de caracteres.</li><li><strong>maxLength</strong>: devuelve verdadero si el campo tiene menos de cierta cantidad de  caracteres.</li><li><strong>validate.numeric</strong>: verdadero si el campo es un número</li><li><strong>validate.integer</strong>: verdadero para números enteros, decimales no esta permitidos.</li><li><strong>validate.digits</strong>: verifica si el campo contiene números, espacios y caracteres de puntuación.</li><li><strong>validate.alpha</strong>: verdadero si el campo solo contiene letras.</li><li><strong>validate.alphanum</strong>: el campo es verdadero si contiene unicamente letras y números.</li><li><strong>validate.date</strong>: es verdadero si el campo contiene una fecha (<em>mm/dd/yyyy</em>).</li><li><strong>validate.email</strong>: verifica que el campo contenga un dirección de email.</li><li><strong>validate.url</strong>: verifica que el campo contenga una dirección URL.</li></ul><p><strong>Utilizando Form.Validator</strong></p><p>Para utilizar las formas de validación antes mencionadas estas se deben agregar como si fueran estilos. Si deseamos aplicar mas de una regla podemos hacerlo dejando un espacio en blanco. Veamos un ejemplo de un formulario de registro.</p><div class="syntax_hilite"><div id="html-71"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/form.html"><span style="color: #000000;">&lt;form</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"frRegister"</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">"post"</span> <span style="color: #000066;">action</span>=<span style="color: #ff0000;">""</span><span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">Name:</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000;">&lt;input</span></a> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"name"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"name"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"required"</span> /<span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">Username:</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000;">&lt;input</span></a> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"user"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"user"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"required validate-alphanum minLength:5"</span> /<span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">Password:</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000;">&lt;input</span></a> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"pass"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"pass"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"required validate-alphanum"</span> /<span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">Email:</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000;">&lt;input</span></a> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"email"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"email"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"required validate-email"</span> /<span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">Phone:</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000;">&lt;input</span></a> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"phone"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"phone"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"validate-digits"</span> /<span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000;">&lt;input</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"button"</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"btsend"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"btsend"</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">"Registro"</span> /<span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><span style="color: #000000;">&lt;/form&gt;</span></span></div></li></ol></div></div></div><p></p><p>En el código mostrado hemos creado un formulario con 5 campos, a los cuales hemos aplicado las siguientes reglas:</p><p>- <em>name</em>: debe ser obligatorio y se acepta todos los caracteres.<br /> - <em>user</em>: es obligatorio, solo se aceptan letras y números y deber de 5 caracteres como mínimo.<br /> - <em>pass</em>: es obligatorio y solo se aceptan letras y números.<br /> - <em>email</em>: el texto ingresado debe ser una dirección de email válida y no puede ser vacía.<br /> - <em>phone</em>: campo opcional, pero si se llena solo acepta números, espacios y caracteres de puntuación.</p><p>Luego creamos una instancia del objeto <em>Form.Validator</em> que recibe como parámetro el identificador del formulario que deseamos validar, en seguida agregamos un evento al botón '<em>btsend</em>' el cual procederá a la validación cuando se haga click para enviar el formulario.</p><div class="syntax_hilite"><div id="javascript-72"><div class="javascript"><ol><li style="color:#3A6A8B;"><div style="">window.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'domready'</span>, <span style="color: #003366;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; <span style="color: #003366;">var</span> validate = <span style="color: #003366;">new</span> Form.<span style="color: #006600;">Validator</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"frRegister"</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'btsend'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'click'</span>, <span style="color: #003366;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; &nbsp; &nbsp; validate.<span style="color: #006600;">validate</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style=""><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li></ol></div></div></div><p></p><p>Uniendo estos bloques de código tenemos nuestro primer ejemplo de validación con Mootools, podemos ver el resultado en <a href="http://samples.unijimpe.net/mootools-validate/basic.html">Mootools: Form.Validator - Basic</a>.</p><p><strong>Utilizando Form.Validator.Inline</strong></p><p>Si deseamos que al validar el formulario este muestre los mensajes de error junto a cada campo, de esta forma el usuario sabra exactamente cual es el error que tiene en el formulario. Para ello utilizaremos la clase Forma.Validator.Inline la cual tiene la misma sintaxis que el ejemplo anterior:</p><div class="syntax_hilite"><div id="javascript-73"><div class="javascript"><ol><li style="color:#3A6A8B;"><div style="">window.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'domready'</span>, <span style="color: #003366;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; <span style="color: #003366;">var</span> validate = <span style="color: #003366;">new</span> Form.<span style="color: #006600;">Validator</span>.<span style="color: #006600;">Inline</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"frRegister"</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'btsend'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'click'</span>, <span style="color: #003366;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; &nbsp; &nbsp; validate.<span style="color: #006600;">validate</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style=""><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li></ol></div></div></div><p></p><p>Pueden ver el ejemplo funcionando en <a href="http://samples.unijimpe.net/mootools-validate/inline.html">Mootools: Form.Validator.Inline</a> y como se puede apreciar esta validación es mucho mas intuitiva para el usuario.</p><p><strong>Mostrando la validación en nuestro Idioma</strong></p><p>Por defecto los mensajes de la validación se muestran en Ingles, si deseamos cambiar de idioma por ejemplo a Español a estos mensajes entonces debemos incluir la clase <em>Form.Validator.Spanish</em> y luego inicializar en Mootools de la siguiente forma:</p><div class="syntax_hilite"><div id="javascript-74"><div class="javascript"><ol><li style="color:#3A6A8B;"><div style="">window.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'domready'</span>, <span style="color: #003366;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; MooTools.<span style="color: #006600;">lang</span>.<span style="color: #006600;">setLanguage</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"es-ES"</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; validate = <span style="color: #003366;">new</span> Form.<span style="color: #006600;">Validator</span>.<span style="color: #006600;">Inline</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"frRegister"</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'btsend'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'click'</span>, <span style="color: #003366;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; &nbsp; &nbsp; validate.<span style="color: #006600;">validate</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></li></ol></div></div></div><p></p><p>Pueden ver el resultado del ultimo ejemplo en <a href="http://samples.unijimpe.net/mootools-validate/language.html">Mootools: Form.Validator.Spanish</a> en donde las validaciones se muestran en Español.</p><p>Si estas opciones de validación no son suficientes puedes utilizar una clase adicionar con mas opciones de validación las cuales están documentadas en <a href="http://mootools.net/docs/more/Forms/Form.Validator.Extras">Additional InputValidators</a>.</p><p><strong>Resumiendo:</strong> para validar formularios con Mootools se deben descargar las clases adicionales <em>Form.Validator</em> y <em>Form.Validator.Inline</em>, crear los tres estilos para mostrar las validaciones, aplicar las reglas de validación como si se trataran de estilos. Finalmente se agrega una instancia de la clase <em>Form.Validator</em> para realizar las validaciones.</p><p style="text-align:left;"><a href="http://blog.unijimpe.net/download/mootools-validate.zip" title="Mootools Form.Validate"><img src="http://blog.unijimpe.net/btdown.png" border="0"></a></p><p><strong>Mas Información</strong></p><ul><li><a href="http://mootools.net/docs/more/Forms/Form.Validator">Mootools - Class: Form.Validator</a></li><li><a href="http://mootools.net/docs/more/Forms/Form.Validator.Extras">Mootools - Additional InputValidators</a></li><li><a href="http://mootools.net/docs/more/Core/Lang">Mootools - Class Instance: MooTools.lang</a></li><li><a href="http://mootools.net/blog/2010/04/30/more-than-meets-the-eye-form-validator/">More than Meets the Eye: Form Validator</a></li><li><a href="http://www.chipwreck.de/blog/2009/12/14/mootools-formvalidator-how-to-use-part-1/">Mootools FormValidator – How to use</a></li></ul><p style="font-size: 10px;border-top: 1px solid #666666;margin-top=12px;padding-top:6px;">&copy; 2006 - 2011 <a href="http://blog.unijimpe.net">unijimpe</a> - Utiliza este feed solo para uso personal, partes de este feed pueden ser utilizados mencionando al autor, no esta permitido publicar enteramente este feed para uso comercial sin permiso del autor.</p><br /> ]]></content:encoded> <wfw:commentRss>http://blog.unijimpe.net/validar-formularios-con-mootools/feed/</wfw:commentRss> <slash:comments>16</slash:comments> </item> <item><title>Publicar Tweets desde tu Website o Blog</title><link>http://blog.unijimpe.net/publicar-tweets-desde-tu-website-o-blog/</link> <comments>http://blog.unijimpe.net/publicar-tweets-desde-tu-website-o-blog/#comments</comments> <pubDate>Tue, 18 May 2010 04:23:21 +0000</pubDate> <dc:creator>unijimpe</dc:creator> <category><![CDATA[General]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[Twitter]]></category> <category><![CDATA[Blogger]]></category> <category><![CDATA[widget]]></category> <category><![CDATA[WordPress]]></category><guid isPermaLink="false">http://blog.unijimpe.net/?p=1167</guid> <description><![CDATA[<p><a href="http://pongsocket.com/tweet-it/">Like it? Tweet it!</a> es un widget Javascript en jQuery que permitirá a los visitantes a tu sitio web o blog para publicar Tweets directamente sin necesidad de ir al web oficial de Twitter con lo &#8230;</p>]]></description> <content:encoded><![CDATA[<p><a href="http://pongsocket.com/tweet-it/">Like it? Tweet it!</a> es un widget Javascript en jQuery que permitirá a los visitantes a tu sitio web o blog para publicar Tweets directamente sin necesidad de ir al web oficial de Twitter con lo cual los visitantes ahorrarán tiempo al compartir contenido de su web, facilitando asi la distribución del contenido de nuestro web.</p><p><a href="http://pongsocket.com/tweet-it/"><img src="http://blog.unijimpe.net/wp-content/uploads/2010/05/tweet-plugin.jpg" alt="" title="tweet-plugin" width="496" height="215" /></a></p><p>Este widget esta basado en el nuevo API lanzado por Twitter, el cual facilita el login de los usuarios mediante el protocolo <em>OAuth</em> para luego poder publicar tweets desde webs externos.</p><p><strong>Instalación</strong></p><p>Lo primero es incluir jQuery en nuestro web, luego de ello es necesario incluir el archivo <a href="http://tweet-it.s3.amazonaws.com/tweet-it.js">tweet-is.js</a> o podemos hacerlo directamente desde el URL que ellos proveen, esto sería de la forma:</p><div class="syntax_hilite"><div id="html-78"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"</span><span style="color: #000000;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li><li style="color:#26536A;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"http://tweet-it.s3.amazonaws.com/tweet-it.js"</span><span style="color: #000000;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>El siguiente paso es crear un elemento HTML que al hacer click mostrará la ventana para publicar el tweet, por ejemplo podemos crear un enlace que tenga un estilo llamado <em>tweet-it</em>.</p><div class="syntax_hilite"><div id="html-79"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"javascript://"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"tweet-it"</span><span style="color: #000000;">&gt;</span></a></span>Publicar en Twitter<span style="color: #009900;"><span style="color: #000000;">&lt;/a&gt;</span></span></div></li></ol></div></div></div><p></p><p>Finalmente agregamos el método necesario para llamar a la ventana de Tweet It!, el cual mostrará una pantalla para escribir el tweet el cual incluye en enlace de la página que estamos visualizando.</p><div class="syntax_hilite"><div id="html-80"><div class="html"><ol><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000;">&gt;</span></a></span></div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; $(document).ready(function(){</div></li><li style="color:#3A6A8B;"><div style="">&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;.tweet-it&quot;).tweetIt();</div></li><li style="color:#26536A;"><div style="">&nbsp; &nbsp; })</div></li><li style="color:#3A6A8B;"><div style=""><span style="color: #009900;"><span style="color: #000000;">&lt;/script&gt;</span></span></div></li></ol></div></div></div><p></p><p>Pueden ver el ejemplo funcionando en <a href="http://samples.unijimpe.net/tweet-it.html">http://samples.unijimpe.net/tweet-it.html</a>, como pueden ver el resultado es de excelente calidad y los colores se integran muy bien con cualquier web.</p><p style="text-align:left;"><a href="http://blog.unijimpe.net/download/tweet-it.zip" title="tweet-it"><img src="http://blog.unijimpe.net/btdown.png" border="0"></a></p><p>Para facilitar el uso de este widget existen un plugin para <a href="http://pongsocket.com/tweet-it/guides#wordpress">WordPress</a>, también hay guías para integrarlo con <a href="http://pongsocket.com/tweet-it/guides#tumblr">Tumblr</a> y con <a href="http://pongsocket.com/tweet-it/guides#blogger">Blogger</a>. También pueden configurar parámetros adicionales, para ello pueden encontrar mas información en el web oficial de <a href="http://pongsocket.com/tweet-it/">Like it? Tweet it!</a>.</p><p style="font-size: 10px;border-top: 1px solid #666666;margin-top=12px;padding-top:6px;">&copy; 2006 - 2011 <a href="http://blog.unijimpe.net">unijimpe</a> - Utiliza este feed solo para uso personal, partes de este feed pueden ser utilizados mencionando al autor, no esta permitido publicar enteramente este feed para uso comercial sin permiso del autor.</p><br /> ]]></content:encoded> <wfw:commentRss>http://blog.unijimpe.net/publicar-tweets-desde-tu-website-o-blog/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced (User agent is rejected)
Database Caching using disk: basic

Served from: blog.unijimpe.net @ 2012-02-08 20:03:43 -->
