<?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"
	>

<channel>
	<title>Mooniverse</title>
	<atom:link href="http://lunatic.la100rra.com.mx/feed/" rel="self" type="application/rss+xml" />
	<link>http://lunatic.la100rra.com.mx</link>
	<description>Si no te gusta mi tema ptj :D</description>
	<pubDate>Tue, 01 Jul 2008 22:38:25 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Como instalar el tema Kempelton para Firefox 3 en Linux</title>
		<link>http://lunatic.la100rra.com.mx/como-instalar-el-tema-kempelton-para-firefox-3-en-linux/</link>
		<comments>http://lunatic.la100rra.com.mx/como-instalar-el-tema-kempelton-para-firefox-3-en-linux/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 22:32:52 +0000</pubDate>
		<dc:creator>Lunatic</dc:creator>
		
		<category><![CDATA[firefox]]></category>

		<category><![CDATA[fun]]></category>

		<category><![CDATA[pruebas]]></category>

		<guid isPermaLink="false">http://lunatic.la100rra.com.mx/?p=30</guid>
		<description><![CDATA[
El tema (theme) por defecto de Firefox 3, llamado Tango, tiene el &#8220;Look and Feel&#8221; del tema GTK que el usuario esté usando en el sistema, con el fin de conservar consistencia visual en las aplicaciones, y de que el sistema sea mas usable.
Por ejemplo, la siguiente imagen muestra como puede variar la apariencia del [...]]]></description>
			<content:encoded><![CDATA[<p>
El tema (theme) por defecto de <a href="http://getfirefox.com">Firefox 3</a>, llamado Tango, tiene el &#8220;Look and Feel&#8221; del tema GTK que el usuario esté usando en el sistema, con el fin de conservar consistencia visual en las aplicaciones, y de que el sistema sea mas usable.<br />
Por ejemplo, la siguiente imagen muestra como puede variar la apariencia del mismo theme:
</p>
<p>
<img src="http://img360.imageshack.us/img360/1298/temastangoaf5.png" alt="Tema Tango de Firefox 3 con distintos temas GTK" title="Tema Tango de Firefox 3 con distintos temas GTK" />
</p>
<p>
Esto puede llevar a que el estilo visual de nuestro Firefox 3 no sea el más agradable o como lo queremos. A pesar de que no me molesta el tema, decidí instalar uno de mis habituales temas de cuando uso Firefox en windows: <a href="http://arvidaxelsson.se/kempelton/">Kempelton</a>
</p>
<p>
Sin embargo, cuando segui el link al <a href="https://addons.mozilla.org/addon/5394">tema Kempleton en Mozilla.org</a>, me encontre con la siguiente sorpresa:</p>
<p>
<img title="Kempelton is not avaliable for Linux" alt="Kempelton is not avaliable for Linux" src="http://img360.imageshack.us/img360/6321/wtfkempletonvr0.png" /><br />
&#8220;Kempelton is not avaliable for Linux&#8221;
</p>
<p>
De modo que no podía instalarlo, eh? Decidí probar &#8220;por la fuerza&#8221;, es decir, buscando el archivo .jar e instalandolo directamente en Firefox. Encontré el linx facilmente en el html:
</p>
<p>
<img src="http://img389.imageshack.us/img389/6553/thereyouaredb5.png" title="Buscando el link en el codigo fuente..." />
</p>
<p>
Acto seguido, use el <a href=https://addons.mozilla.org/en-US/firefox/downloads/file/31850/kempelton-3.0.4-fx-win.jar"">link de descarga de Kempelton para windows</a>, bajé el .jar a mi escritorio y lo arrastré hasta la ventana de temas de Firefox.<br />
<img src="http://img381.imageshack.us/img381/192/installkempor8.png" alt="Pantalla de Themes" title="Pantalla de Themes" /><br />
Voilá! La pantalla de instalación de themes apareció. Era cuestion de solo instalar y reiniciar.
</p>
<p>
La razón para que no este disponible en Linux parece ser la desaparición de los menus de FF cuando les haces click o hover. Para mi este no es un problema tan grave, pues estoy acostumbrado a usar shortcuts. Por ultimo, un preview de Kempleton corriendo en Firefox 3 (Ubuntu):
</p>
<p>
<a href="http://img359.imageshack.us/img359/6249/finizkempleag1.png"><br />
<img src="http://img359.imageshack.us/img359/8300/finizkemplesmallts8.png" title="Preview final" alt="Preview final" /><br />
</a><br />
(Click para agrandar)</p>
]]></content:encoded>
			<wfw:commentRss>http://lunatic.la100rra.com.mx/como-instalar-el-tema-kempelton-para-firefox-3-en-linux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Secretos de Cristalab: Los folder de usuario</title>
		<link>http://lunatic.la100rra.com.mx/secretos-de-cristalab-los-folder-de-usuario/</link>
		<comments>http://lunatic.la100rra.com.mx/secretos-de-cristalab-los-folder-de-usuario/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 04:04:36 +0000</pubDate>
		<dc:creator>Lunatic</dc:creator>
		
		<category><![CDATA[cristalab]]></category>

		<category><![CDATA[fun]]></category>

		<category><![CDATA[secretos]]></category>

		<category><![CDATA[divertido]]></category>

		<guid isPermaLink="false">http://lunatic.la100rra.com.mx/secretos-de-cristalab-los-folder-de-usuario/</guid>
		<description><![CDATA[
Todos nos hemos preguntado como hacen algunos sujetos sospechosos para obtener hosting gratis en nuestra amada Cristalab. Qué oscuro secreto vincula al querido webmaster de la comunidad con sujetos de dudosa confiabilidad (entiendase Yaraher, XK, Auyama) y logra que estos no tengan que pedir a la100rra? ( Te queremos la100rra U_U ).


Nota para entender este [...]]]></description>
			<content:encoded><![CDATA[<p>
Todos nos hemos preguntado como hacen algunos sujetos sospechosos para obtener hosting gratis en nuestra amada <a href="http://www.cristalab.com">Cristalab</a>. Qué oscuro secreto vincula al <a href="http://www.cristalab.com/foros/profile.php?mode=viewprofile&#038;u=2"><em>querido</em> webmaster</a> de la comunidad con sujetos de dudosa confiabilidad (entiendase <a href="http://www.cristalab.com/devatwork/">Yaraher</a>, <a href="http://xklibur.cristalab.com">XK</a>, <a href="http://draoyama.cristalab.com/">Auyama</a>) y logra que estos no tengan que pedir a la100rra? ( Te queremos <a href="http://la100rra.com.mx">la100rra</a> U_U ).
</p>
<p>
<em>Nota para entender este post: Esta es una crónica real, donde relato mi quest por entender por que algunos tienen host en clab y otros pobres mortales (lease Lunatic), no&#8230;</em>
</p>
<p>
Era tarde, y los resquicios de la ultima partida de Counter Strike repercutían en mi cabeza todavía. Gritaba &#8220;Fire in the hole!!!&#8221; mientras dibujaba con emoción un rectángulo en Fireworks. De repente, sucedió. Encontré un alma que dudaba como yo de las oscuras estratagemas del hosting en Clab. Oh, pero cuanta inocencia:
</p>
<p><img src="http://img524.imageshack.us/img524/9826/elfleatsuxfl3.png" title="El hosting de clab" alt="Necesitas activar las imagenes o recargar esta!" /></p>
<p>
Con los pocos usuarios que tiene Cristalab, debe ser relativamente fácil dar hosting gratis a todos, <em> NO? </em>. <strong>Update:</strong> <em> Si, es sarcasmo ¬¬ </em>
</p>
<p>
Nota: Ya en serio, sé que estos contenidos light no suplen los posts &#8220;buenos&#8221;, con info, tutos o links interesantes. Pero de cualquier manera, puedes burlarte de elfleat y visitar tres blogs que se hospedan gratuitamente. Asi que PTJ <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />
</p>
<p>
Update: Yaraher descubrió que faltaba el link hacia XK, e intuyó que era por cobardía a su reacción. Bueno, ya construi un bunker y contraté a Teh Loro&#8217;s Tm protection. Asi que ahi está el susodicho link. *snif, mi integridad física</p>
]]></content:encoded>
			<wfw:commentRss>http://lunatic.la100rra.com.mx/secretos-de-cristalab-los-folder-de-usuario/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Coloreador de sintaxis: Chili para todos!</title>
		<link>http://lunatic.la100rra.com.mx/coloreador-de-sintaxis-chili-para-todos/</link>
		<comments>http://lunatic.la100rra.com.mx/coloreador-de-sintaxis-chili-para-todos/#comments</comments>
		<pubDate>Sat, 29 Dec 2007 08:12:46 +0000</pubDate>
		<dc:creator>Lunatic</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://lunatic.la100rra.com.mx/coloreador-de-sintaxis-chili-para-todos/</guid>
		<description><![CDATA[
En los blogs o sitios dedicados a la programacion o el desarrollo web es habitual encontrar montones de código. Y este código no se ve bien a menos de que este resaltado de manera correcta. Colorear el codigo facilita la visualización y por tanto la coomprension.


Gracias a las ventajas que trae el sh (syntax highliting) [...]]]></description>
			<content:encoded><![CDATA[<p>
En los blogs o sitios dedicados a la programacion o el desarrollo web es habitual encontrar montones de código. Y este código no se ve bien a menos de que este resaltado de manera correcta. Colorear el codigo facilita la visualización y por tanto la coomprension.
</p>
<p>
Gracias a las ventajas que trae el sh (syntax highliting) he decidido implementar una solucion basada en javascript, mas concretamente en jQuery. Es un plugin llamado chili, de uso relativamente sencillo (aunque su implementacion me costó un poco, pero más por mi culpa que por la del plugin).
</p>
<p>
<img src="http://img177.imageshack.us/img177/7431/5chilifq5.gif" alt="Chili" />
</p>
<p>
Pasate por la <a href="http://noteslog.com/category/chili/">web oficial de chili</a>, y echale un vistazo, es recomendadisimo. Luego quizá haré un buen review indicando uso, instalacion, etc.
</p>
<p>
Para dar una pequeña demostración, pondré un ejemplo de código en Flex.
</p>
<pre>
<code class="flex">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;horizontal&quot; initialize=&quot;init();&quot;&gt;
   &lt;mx:Script&gt;
        &lt;![CDATA[
      public var clabRss:XML
         public function init():void{
            var req:URLRequest = new URLRequest(&quot;http://www.cristalab.com/rss.php&quot;);
            var xmlLoader:URLLoader = new URLLoader();
            xmlLoader.load(req);
            xmlLoader.addEventListener(Event.COMPLETE,onLoadComplete)
         }
         public function onLoadComplete(event:Event):void{
               clabRss = XML(event.target.data);
               main.title=clabRss.channel.title
               posts.labelField = &quot;title&quot;;
               posts.dataProvider=clabRss.channel.item;
               posts.selectedIndex=0;
               titleTxt.text=clabRss.channel.item[0].title
               description.text=clabRss.channel.item[0].description;
         }
         public function filter(evt:Event):void{
            if(evt.target.text==&quot;&quot;){
               posts.dataProvider=clabRss.channel.item;
            }else{

               posts.dataProvider=clabRss.channel.item.(title.indexOf(evt.target.text)!=-1)
            }
         }

      ]]&gt;
   &lt;/mx:Script&gt;
   &lt;mx:Panel id=&quot;main&quot; width=&quot;100%&quot; height=&quot;100%&quot; layout=&quot;absolute&quot;&gt;
      &lt;mx:Text y=&quot;10&quot; text=&quot;Cargando&#8230;&quot; fontWeight=&quot;bold&quot; fontSize=&quot;36&quot; id=&quot;titleTxt&quot; height=&quot;168&quot; left=&quot;10&quot; right=&quot;10&quot;/&gt;
      &lt;mx:TextArea right=&quot;20&quot; left=&quot;10&quot; id=&quot;description&quot; wordWrap=&quot;true&quot; editable=&quot;false&quot; bottom=&quot;75&quot; top=&quot;150&quot;/&gt;
      &lt;mx:Button x=&quot;10&quot; label=&quot;Copy Link&quot; bottom=&quot;25&quot; toolTip=&quot;{posts.selectedItem.link}&quot; click=&quot;{System.setClipboard(posts.selectedItem.link)}&quot;/&gt;
   &lt;/mx:Panel&gt;
   &lt;mx:VBox height=&quot;100%&quot;&gt;
   &lt;mx:Label text=&quot;Filtrar:&quot; fontWeight=&quot;bold&quot;/&gt;
   &lt;mx:TextInput id=&quot;searchBox&quot; width=&quot;100%&quot; change=&quot;filter(event)&quot;/&gt;
   &lt;mx:List height=&quot;100%&quot; id=&quot;posts&quot; width=&quot;300&quot; change=&quot;{titleTxt.text=posts.selectedItem.title;description.text=posts.selectedItem.description;}&quot;&gt;&lt;/mx:List&gt;
   &lt;/mx:VBox&gt;
&lt;/mx:Application&gt;

</code>
</pre>
<p>y </p>
<pre>
<code class="actionscript">
package
{
   import flash.display.*;
   import flash.events.*;
   import flash.ui.Keyboard;
   import flash.utils.Timer; 

   public class Mario extends MovieClip
   { 

      private var enMovimiento:Boolean = false;
      private var temporizador:Timer = new Timer(10,0);
      private var teclaPulsada:uint;
      private var contendorPuntos:Sprite = new Sprite(); 

      private var contactoConCamino_Arriba:Boolean;
      private var contactoConCamino_Abajo:Boolean;
      private var contactoConCamino_Izquierda:Boolean;
      private var contactoConCamino_Derecha:Boolean; 

      public function Mario()
      {
         lineas.visible = false;
         puntos.visible = false;
         stage.addEventListener(KeyboardEvent.KEY_DOWN,tecla);
         temporizador.addEventListener(TimerEvent.TIMER,mover);
      }
      private function tecla(e:KeyboardEvent):void
      {
         if (enMovimiento == false) {
            this.contactoConCamino_Arriba= false;
            this.contactoConCamino_Abajo= false;
            this.contactoConCamino_Izquierda= false;
            this.contactoConCamino_Derecha= false; 

            teclaPulsada = e.keyCode;
            palparCaminos();
            temporizador.start();
            enMovimiento = true;
         } 

      }
      private function mover(e:TimerEvent):void
      { 

         var velocidad:uint = 2; 

         if (teclaPulsada == 39 &#038;&#038; this.contactoConCamino_Derecha == true) // 39 es RIGHT
         {
            mario.x += velocidad;
         }
         if (teclaPulsada == 37 &#038;&#038; this.contactoConCamino_Izquierda== true) // 37 es LEFT
         {
            mario.x -= velocidad;
         }
         if (teclaPulsada == 38 &#038;&#038; this.contactoConCamino_Arriba == true) // 39 es UP
         {
            mario.y -= velocidad;
         }
         if (teclaPulsada == 40 &#038;&#038; this.contactoConCamino_Abajo== true) // 40 es DOWN
         {
            mario.y += velocidad;
         } 

         for (var i:uint = 0; i <= puntos.numChildren-1; i++) {
            // En el mc llamado mario hay un MC llamado centro que sirve como detector..
            // ... de coliciones
            // Si centro coliciona con cualquier punto se detiene
            if (mario.centro.hitTestObject(puntos.getChildAt(i)) == true) {
               temporizador.stop();
               enMovimiento = false;
            }
         }
      }
      // Funcion que le indica a Mario, que caminos puede cojer
      // Mas tecnico. Dependiendo de que lineas tenga arriba, abajo, derecha o izquierda...
      // ...se podra mover en una direccion
      // En el MC llamado mario hay 4 MC que sirven como vigotes de un gato, para saber..
      // que lineas tiene cerca 

      private function palparCaminos():void
      {
         for (var i:uint = 0; i <= lineas.numChildren-1; i++) {
            if (mario.arriba.hitTestObject(lineas.getChildAt(i)) == true) {
               this.contactoConCamino_Arriba= true;
            }
            if (mario.abajo.hitTestObject(lineas.getChildAt(i)) == true) {
               this.contactoConCamino_Abajo= true;
            }
            if (mario.izquierda.hitTestObject(lineas.getChildAt(i)) == true) {
               this.contactoConCamino_Izquierda= true;
            }
            if (mario.derecha.hitTestObject(lineas.getChildAt(i)) == true) {
               this.contactoConCamino_Derecha= true;
            }
         }
      }
   }
}
</code>
</pre>
<p>No siendo más&#8230; hasta otra <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://lunatic.la100rra.com.mx/coloreador-de-sintaxis-chili-para-todos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Adobe Integrated Runtime (AIR) Beta 2</title>
		<link>http://lunatic.la100rra.com.mx/adobe-integrated-runtime-air-beta-2/</link>
		<comments>http://lunatic.la100rra.com.mx/adobe-integrated-runtime-air-beta-2/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 14:43:41 +0000</pubDate>
		<dc:creator>Lunatic</dc:creator>
		
		<category><![CDATA[air]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[geek]]></category>

		<category><![CDATA[html]]></category>

		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://lunatic.la100rra.com.mx/adobe-integrated-runtime-air-beta-2/</guid>
		<description><![CDATA[Algunos ya hemos oido hablar de AIR: La solucion para crear programas de escritorio que nos plantea Adobe. Cuando conoci la propuesta, que basicamente es poder transformar documentos html, flash, flex y javascript a aplicaciones, me llené de emocion. 
Cuando bajé el alpha (hace ya algunos meses) y compilé mis primeras aplicaciones, sentí que le [...]]]></description>
			<content:encoded><![CDATA[<p>Algunos ya hemos oido hablar de AIR: La solucion para crear programas de escritorio que nos plantea Adobe. Cuando conoci la propuesta, que basicamente es poder transformar documentos html, flash, flex y javascript a aplicaciones, me llené de emocion. </p>
<p>Cuando bajé el alpha (hace ya algunos meses) y compilé mis primeras aplicaciones, sentí que le faltaba mucho por abarcar: No habia manejo de entorno, ni de ventanas&#8230; es decir, con html y javascript podias crear una aplicacion web de escritorio, pero no usar el sistema del cliente para nada.</p>
<p>Tuve una gran sorpresa cuando descargue el SDK de AIR beta 2. Este incorpora metodos mucho mas extensos, accesibles incluso desde Javascript simple, para controlar todo lo mencionado anteriormente simplemente incluyendo un archivo .js. El método de escribir la aplicacion se simplificó con esta version, asi como se ganó estabilidad y velocidad en el compilador. Un ejemplo de lo que podemos conseguir, usando solo javascript y air, es:</p>
<pre>
<code class="javascript">
var sourceFile = air.File.documentsDirectory;
sourceFile = sourceFile.resolvePath("Apollo Test/test1.txt");
var destination = air.File.documentsDirectory;
destination = destination.resolvePath("Apollo Test/test2.txt");

if (sourceFile.copyTo(destination, true)) {
    air.trace("Done.")
}
</code>
</pre>
<p>Simple y genial. Además, hay una documentación excelente al respecto. En lo personal, le veo un gran futuro al AIR. De hecho, ya vemos muchas aplicaciones que estan hechas en este formato. ¿Long live adobe? <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Puedes descargar el ultimo SDK en el siguiente enlace, asi como la documentacion:<br />
<a href="http://labs.adobe.com/technologies/air/">Adobe AIR</a></p>
<p>PD: Como nota curiosa&#8230; has visto ya <a href="http://adobeair.com">adobeair.com</a>? XD</p>
]]></content:encoded>
			<wfw:commentRss>http://lunatic.la100rra.com.mx/adobe-integrated-runtime-air-beta-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Codificar imagenes, css o lo que quieras con Base64</title>
		<link>http://lunatic.la100rra.com.mx/codificar-imagenes-css-o-lo-que-quieras-con-base64/</link>
		<comments>http://lunatic.la100rra.com.mx/codificar-imagenes-css-o-lo-que-quieras-con-base64/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 12:37:15 +0000</pubDate>
		<dc:creator>Lunatic</dc:creator>
		
		<category><![CDATA[Web]]></category>

		<category><![CDATA[codificacion]]></category>

		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://lunatic.la100rra.com.mx/codificar-imagenes-css-o-lo-que-quieras-con-base64/</guid>
		<description><![CDATA[De que se trata?

Por medio de Base64, un sistema de codificación, podemos transformar cualquier tipo de archivo a caracteres simples ( texto plano ). Esto resulta muy útil cuando no queremos crear por ejemplo multiples archivos de imagen para adjuntarlos.


Si conocen Stylish, una extension para firefox, se preguntaran como hacen los autores de un tema [...]]]></description>
			<content:encoded><![CDATA[<h3>De que se trata?</h3>
<p>
Por medio de Base64, un sistema de codificación, podemos transformar cualquier tipo de archivo a caracteres simples ( texto plano ). Esto resulta muy útil cuando no queremos crear por ejemplo multiples archivos de imagen para adjuntarlos.
</p>
<p>
Si conocen Stylish, una extension para firefox, se preguntaran como hacen los autores de un tema para que en un archivo de css vayan incluidas las imagenes. Pues&#8230; base64 es la solucion. Además es ideal para hostings restrictivos, pues lo que estas arhcivando es simple texto.
</p>
<h3>Estructura</h3>
<p>
La estructura basica que tiene un archivo codificado en base64 es la siguiente. El ejemplo es de un archivo png:
</p>
<p><pre>
<code class="php">
data:image/png;base64,MuChasLetrasyNum3r0s
</code>
</pre>
</p>
<p>
Entonces&#8230; examinemos despacio cada uno de los componentes.</p>
<p>
<strong>data:image/png</strong><br />
Nos indica que tipo de archivo estamos enlazando. Podemos reemplazar el &#8220;image/png&#8221; por el MIME type del tipo de archivo que vamos a usar. Una <a href="http://www.w3schools.com/media/media_mimeref.asp">lista de MIME types</a> esta disponible para que no te pierdas en esa parte.
</p>
<p>
Lo siguiente, <strong>base64,</strong> simplemente indica que el texto siguiente está codificado en base64.
</p>
<p>
<strong>MuChasLetrasyNum3r0s</strong> : Compone el archivo codificado en texto plano. Eso es lo divertido, lo que te voy a enseñar a continuacion
</p>
<h3>Codificar en Base64 </h3>
<p>
Php tiene dos funciones nativas que nos pueden ser muy utiles en este aspecto: <a href="http://www.php.net/base64_encode"> base64_encode </a> y <a href="http://www.php.net/base64_decode"> base64_decode </a>
</p>
<p>
Entonces, sabiendo eso, solo nos queda crear una funcion sencilla para leer un archivo y convertirlo:</p>
<pre>
<code class="php">
&lt;?php
function codificarImagen ($imagen) {
	echo &quot;data:image/png;base64,&quot;.base64_encode(file_get_contents($imagen));
};
codificarImagen(&quot;imagen.png&quot;);
?&gt;
</code>
</pre>
<p>Lo anterior nos devuelve la imagen png convertida a base64. Fácil, no?
</p>
<h3>Usemos lo aprendido</h3>
<p>
Bueno, genial, tranforme mi linda imagen a un monton de numeros y letras raros. ¿Y?
</p>
<p>
La buena noticia es que no tienes que hacer nada mas. Simplemente usa tu supertexto para todo:</p>
<pre>
<code>
<strong> Una imagen normal </strong>
&lt;img title=&quot;Imagen en Base64&quot; src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA&#8230;.&quot; /&gt;

<strong> Una imagen de fondo en css:</strong>
&lt;style type=&quot;text/css&quot;&gt;
div.imagen{
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA&#8230;.);
}
&lt;/style&gt;

<strong> Un css completo: </strong>
&lt;link href=&quot;data:text/css;base64,iVBORw0KGgoAAAANSUhEUgA..&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;

<strong> Un js completo: </strong>
&lt;script src=&quot;data:text/javascript;base64,iVBORw0KGgoAAAANSUhEUgA&#8230;&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</code>
</pre>
<p>Y creo que ya entendieron el mensaje.  <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':razz:' class='wp-smiley' />
</p>
<h3> Problemas? </h3>
<p>
Desafortunadamente, y como sucede normalmente con lo cool, ie6 no soporta la codificacion en Base64. Sin embargo, los otros browsers (los decentes, como Firefox, Opera, Safari, etc) si, e incluso hay hacks para que funcione en el &#8220;bendito&#8221;. Uno de los mejores es el siguiente:<br />
<a href="http://dean.edwards.name/weblog/2005/06/base64-ie/">Fix para Base64 en ie6, por Dean Edwards</a>
</p>
<h3>Recomendaciones</h3>
<p>
Las imagenes y archivos aparte no son malos, de modo que usa esta tecnica cuando se justifique, no vayas a empezar a codificar todas tus imagenes XD (so, es decir que no abuses). Lo otro es que logicamente a archivos mayores, el tamaño de la cadena de texto generada es mayor. Y por ultimo, no siempre se gana tamaño al codificar una imagen: A veces (bueh, la verdad, no se si siempre) se gana tamaño al ser convertido en texto. Esperen comparativas U_U
</p>
<h3> Links </h3>
<ul>
<li>Si no tienes php en tu maquina, usa este <a href="http://www.greywyvern.com/code/php/binary2base64">Conversor a Base64</a>.</li>
<li>Si quieres que vean tus cool imagenes en ie6, usa el <a href="http://dean.edwards.name/weblog/2005/06/base64-ie/">Fix para Base64 en ie6, por Dean Edwards</a> o la version sexy de este: <a href="http://dean.edwards.name/weblog/2005/06/base64-sexy/"> Sexy Base64 fix para ie6 </a></li>
<li>Si quieres aprender de Base64, <a href="http://en.wikipedia.org/wiki/Base64">pues Base64</a></li>
</ul>
<p>Un saludo  <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_cool.gif' alt=':cool:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://lunatic.la100rra.com.mx/codificar-imagenes-css-o-lo-que-quieras-con-base64/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Introducción a jQuery</title>
		<link>http://lunatic.la100rra.com.mx/introduccion-a-jquery/</link>
		<comments>http://lunatic.la100rra.com.mx/introduccion-a-jquery/#comments</comments>
		<pubDate>Sun, 23 Sep 2007 05:47:38 +0000</pubDate>
		<dc:creator>Lunatic</dc:creator>
		
		<category><![CDATA[javascript]]></category>

		<category><![CDATA[jquery]]></category>

		<category><![CDATA[tutoriales]]></category>

		<guid isPermaLink="false">http://lunatic.la100rra.com.mx/introduccion-a-jquery/</guid>
		<description><![CDATA[Intro&#8230; o parecido

Este tutorial ya tiene algo de tiempo rondando por Internet, especificamente en Cristalab. No lo había publicado en mi blog por que&#8230; bueno, la verdad no se por que XD. Pero la idea es basicamente aprender lo basico de jQuery.


      ¿Que es jQuery?
    

  [...]]]></description>
			<content:encoded><![CDATA[<h3>Intro&#8230; o parecido</h3>
<p>
Este tutorial ya tiene algo de tiempo rondando por Internet, especificamente en Cristalab. No lo había publicado en mi blog por que&#8230; bueno, la verdad no se por que XD. Pero la idea es basicamente aprender lo basico de jQuery.
</p>
<h3>
      ¿Que es jQuery?<br />
    </h3>
<p>
      jQuery es una liviana libreria de JavaScript, pensada para interactuar con los elementos de<br />
      una web por medio del <acronym title="Document Object Model">DOM</acronym>. Lo que la hace<br />
      tan especial es su sencillez y su reducido tamaño.
    </p>
<h3>
      ¿Por que debería usarlo?<br />
    </h3>
<p>
      La sencillez de su sintaxis y la poca extension del codigo que necesitas escribir son las<br />
      caracteristicas más notables. Si hicieras lo que hace jQuery con getElementById y<br />
      window.onload no solo tendrias que escribir mucho, si no que podrian haber diversos<br />
      problemas.
    </p>
<h3>
      ¿Como empiezo a usarlo?<br />
    </h3>
<p>
	Lo primero que debes hacer, es descargarlo de la web oficial: <a href="http://www.jquery.com"> jQuery </a>. Una vez descargada la libreria (son más o menos 16k) puedes<br />
    proceder a tu primer script:
	</p>
<p>    <code class="html"><br />
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;<br />
  &lt;head&gt;<br />
    &lt;title&gt;Prueba de jQuery&lt;/title&gt;<br />
        &lt;script src="jquery.js" type="text/javascript"&gt;&lt;/script&gt;<br />
  &lt;/head&gt;<br />
  &lt;body&gt;<br />
  &lt;/body&gt;<br />
&lt;/html&gt;</code></p>
<p>
      Lo primero que hacemos es linkear el jQuery a nuestro documento. Facil, no?
    </p>
<h3>
      Ejecución y sintaxis básica<br />
    </h3>
<p>
      jQuery tiene una sintaxis muy sencilla. Los comandos se reconocen por comenzar con el simbolo<br />
	  &#8220;$&#8221;. Ahora, la forma de una sentencia es la siguiente:
	</p>
<p>	<code class="javascript"><br />
$(elemento).evento(funcion-o-parametro);</code></p>
<p>
	La manera de inicializar jQuery es muy util:
	</p>
<p>	<code class="javascript"><br />
$(document).ready(function(){<br />
	//Aqui tu codigo<br />
});</code></p>
<p>
	Ready es un método propio de jQuery, que revisa si el<br />
	<acronym title="Document Object Model">DOM</acronym> está listo para usarse. Es más util<br />
	que el window.onload, pues este debe esperar a que todos los elementos de la pagina esten cargados<br />
	(como scripts e imagenes) paa ejecutar. El &#8220;ready&#8221;, en cambio, espera solo a la estructura.
	</p>
<h3>Acceso a elementos y eventos</h3>
<p>
	Acceder a los elementos de la página es sencillo pues se usa la misma nomenclatura que en<br />
	<acronym title="Cascade Style Sheets">CSS</acronym>. Con estos metodos, seleccionaremos diferentes<br />
	elementos de la pagina, con los cuales interactuaremos:
	</p>
<table>
<tr>
<th>Tipo de elemento</th>
<th>Modo de llamado</th>
</tr>
<tr>
<td>Etiqueta</td>
<td>Nombre de la etiqueta. Ejemplos: &#8220;a&#8221;, &#8220;strong&#8221;, &#8220;div&#8221; </td>
</tr>
<tr>
<td>Elemento con un Id </td>
<td>Id precedido por el signo &#8220;#&#8221;. Ejemplos: &#8220;#principal&#8221;,&#8221;#texto&#8221; </td>
</tr>
<tr>
<td>Elemento con una clase (class)</td>
<td>Clase precedida por un punto (.). Ejemplos: &#8220;.codigo&#8221;, &#8220;.titulo&#8221; </td>
</tr>
</table>
<div class="nota">
	Nota: Tambien funcionan muchos de los selectores de CSS como &#8220;>&#8221;, &#8220;*&#8221;, etc. Un ejemplo de<br />
	su uso seria:<br />
		<code class="javascript"><br />
$("* > a").click( function(){<br />
	alert("nada");<br />
});<br />
	</code>
	</div>
<p>
	Los eventos responden a una interacci&oacute;n del usuario con la pagina o de la misma pagina de manera interna:<br />
	Por ejemplo, cuando el usuario hace click o se termina de ejecutar una funcion.
	</p>
<p>
	Los eventos que se pueden usar en jQuery son los mismos que usariamos normalmente en JavaScript. El unico cambio es la<br />
	supresión del &#8220;on&#8221; inicial: mouseover, click, focus, etc
	</p>
<h3>Veamos todo junto</h3>
<p>
	Veamos un ejemplo de lo visto hasta ahora:
	</p>
<div style="border:#069 solid 1px;">
<pre class="html">
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
  &lt;head&gt;
    &lt;title&gt;Prueba de jQuery&lt;/title&gt;
        &lt;script src="jquery.js" type="text/javascript"&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
		</pre>
<pre class="javascript">
			$(document).ready(function (){
				//Aqui asignamos el click al elemento &lt;a&gt;
				$(&quot;a&quot;).click(function (){
					alert(&quot;Presionaste un &lt;a&gt;&quot;);
				});
			});</pre>
<pre class="html">
		&lt;/script&gt;
	&lt;/head&gt;
  &lt;body&gt;
	&lt;a href="#"&gt; Presioname! &lt;/a&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
</div>
<p>
	Al presionar cualquier etiqueta &#8220;a&#8221; del documento, se ejecutaria el alert.
	</p>
<h3>A&ntilde;adir o retirar clases</h3>
<p>
		Cuando queremos que un elemento pueda interactuar con un css ya establecido, usamos las clases.<br />
		Con jQuery, estas pueden ser asignadas dinamicamente:
	</p>
<p>	<code class="javascript"><br />
$("a").addClass("boton");</code></p>
<p>
	O tambien removidas:
	</p>
<p>	<code class="javascript"><br />
$("a").removeClass("boton");</code></p>
<p>
	Ahora, podemos añadirle CSS a esa determinada clase, y ver como se comporta:
	</p>
<div style="border:#069 solid 1px;">
<pre class="html">
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
  &lt;head&gt;
    &lt;title&gt;
      Prueba de jQuery
    &lt;/title&gt;
&lt;script src=&quot;jquery.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;</pre>
<pre class="javascript">
	$(document).ready(function (){
		//Aqui asignamos el click al elemento &lt;a&gt;
		$(&quot;a&quot;).click(function (){
			alert(&quot;Presionaste un &lt;a&gt;&quot;);
			//Aqui removemos la clase!
			$(&quot;a&quot;).removeClass(&quot;boton&quot;);
		});
		//Aqui añadimos la clase a los elementos &lt;a&gt;
		$(&quot;a&quot;).addClass(&quot;boton&quot;);
	});
&lt;/script&gt;
</pre>
<pre class="html">
&lt;style type=&quot;text/css&quot;&gt;
</pre>
<pre class="css">
	.boton{
	color:#f00;
	display:block;
	width:100px;
	text-align:center;
	border:#f00 solid 1px;
	}
</pre>
<pre class="html">
&lt;/style&gt;

  &lt;/head&gt;
  &lt;body&gt;
    &lt;a href=&quot;#&quot; class=&quot;algo&quot;&gt;Presioname!&lt;/a&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
</div>
<p>
	Al ejecutarse el script, todos los &#8220;a&#8221;, tomarán la clase &#8220;boton&#8221;, que tiene propiedades de CSS.<br />
	Sin embargo, al oprimir el elemento, la clase es removida.
	</p>
<h3>Efectos especiales</h3>
<p>
	Esta librería también esta compuesta por algunos efectos, que resultan muy útiles. Son livianos<br />
	y faciles de llamar. A continuación, una breve descripcion de cuales son, que hacen y como se<br />
	usan:
	</p>
<div class="tablist">
<p>
	Organizemos los efectos de esta manera:
</p>
<div class="center">
<ul class="tablist_head">
<li>Nombre del efecto
	</li>
<li>Descripcion
	</li>
<li>Modo de llamado
	</li>
<li>Descripcion de los parámetros
	</li>
</ul>
<ul>
<li>Show (Mostrar)
	</li>
<li>Modifica los atributos alto, ancho y transparencia, partiendo de 0.
	</li>
<li>$(objeto).show(&#8221;velocidad&#8221;)
	</li>
<li>Velocidad: Determina el tiempo en el que se realizará el efecto. Puede ser &#8220;slow&#8221;<br />
	(lento), &#8220;normal&#8221;, o &#8220;fast&#8221; (rápido).
	</li>
</ul>
<ul>
<li>Hide (Ocultar)
	</li>
<li>Modifica los atributos alto, ancho y transparencia, partiendo de los valores actuales<br />
	hasta llegar a 0.
	</li>
<li>$(objeto).hide(&#8221;velocidad&#8221;)
	</li>
<li>Velocidad: Determina el tiempo en el que se realizará el efecto. Puede ser &#8220;slow&#8221;<br />
	(lento), &#8220;normal&#8221;, o &#8220;fast&#8221; (rápido).
	</li>
</ul>
<ul>
<li>Slide Down (Aparecer hacia abajo)
	</li>
<li>Modifica los atributos alto y transparencia, partiendo de 0. Es similar a &#8220;show&#8221;, salvo<br />
	que no modifica el ancho, creando un efecto de &#8220;cortinilla&#8221;.
	</li>
<li>$(objeto).slideDown(&#8221;velocidad&#8221;)
	</li>
<li>Velocidad: Determina el tiempo en el que se realizará el efecto. Puede ser &#8220;slow&#8221;<br />
	(lento), &#8220;normal&#8221;, o &#8220;fast&#8221; (rápido).
	</li>
</ul>
<ul>
<li>Slide Up (Aparecer hacia arriba)
	</li>
<li>Modifica los atributos alto y transparencia, partiendo de los actuales, hasta llegar a<br />
	0. Es similar a &#8220;show&#8221;, salvo que no modifica el ancho, creando un efecto de &#8220;cortinilla&#8221;.
	</li>
<li>$(objeto).slideUp(&#8221;velocidad&#8221;)
	</li>
<li>Velocidad: Determina el tiempo en el que se realizará el efecto. Puede ser &#8220;slow&#8221;<br />
	(lento), &#8220;normal&#8221;, o &#8220;fast&#8221; (rápido).
	</li>
</ul>
<ul>
<li>Fade In(Aparecer)
	</li>
<li>Modifica el atributo transparencia desde 0.
	</li>
<li>$(objeto).fadeIn(&#8221;velocidad&#8221;)
	</li>
<li>Velocidad: Determina el tiempo en el que se realizará el efecto. Puede ser &#8220;slow&#8221;<br />
	(lento), &#8220;normal&#8221;, o &#8220;fast&#8221; (rápido).
	</li>
</ul>
<ul>
<li>Fade Out(Desaparecer)
	</li>
<li>Modifica el atributo transparencia desde el valor actual, hasta llegar a 0
	</li>
<li>$(objeto).fadeOut(&#8221;velocidad&#8221;)
	</li>
<li>Velocidad: Determina el tiempo en el que se realizará el efecto. Puede ser &#8220;slow&#8221;<br />
	(lento), &#8220;normal&#8221;, o &#8220;fast&#8221; (rápido).
	</li>
</ul>
<ul>
<li>Fade To(Cambiar transparencia)
	</li>
<li>Modifica el atributo transparencia a un valor especifico.
	</li>
<li>$(objeto).fadeTo(&#8221;velocidad&#8221;, transparencia)
	</li>
<li>Velocidad: Determina el tiempo en el que se realizará el efecto. Puede ser &#8220;slow&#8221;<br />
	(lento), &#8220;normal&#8221;, o &#8220;fast&#8221; (rápido).</p>
<p>	Transparencia: Un numero de 0 a 100 que indica que tan visible es el elemento.
	</li>
</ul>
<ul>
<li>Animate (Animar)
	</li>
<li>Modifica un atributo especifico.
	</li>
<li>$(objeto).animate(&#8221;propiedades&#8221;,&#8221;velocidad&#8221;);
	</li>
<li>Velocidad: Determina el tiempo en el que se realizará el efecto. Puede ser &#8220;slow&#8221;<br />
	(lento), &#8220;normal&#8221;, o &#8220;fast&#8221; (rápido).</p>
<p>	Propiedades: Una o más propiedades con valor numérico en CSS, por ejemplo width y height.<br />
	La llamada seria:<br />
	<code class="javascript"><br />
$(objeto).animate({width:20,height:200}, "slow");<br />
</code>
	</li>
</ul>
<ul>
<li>Center (Centrar)
	</li>
<li>Centra un elemento con respecto a su &#8220;parent&#8221;
	</li>
<li>$(objeto).center(&#8221;velocidad&#8221;);
	</li>
<li>Velocidad: Determina el tiempo en el que se realizará el efecto. Puede ser &#8220;slow&#8221;<br />
	(lento), &#8220;normal&#8221;, o &#8220;fast&#8221; (rápido).
	</li>
</ul>
</div>
</div>
<h3>&#8220;Callbacks&#8221;, llamar funciones y pasar parametros</h3>
<p>
		Despues de un evento se pueden llamar otras funciones JavaScript y jQuery, de la forma<br />
		tradicional:<br />
		<code class="javascript"><br />
funcion();</code>
	</p>
<p>
	Hay eventos que permiten, acabada su ejecución, llamar funciones. Los efectos, por ejemplo,<br />
	permiten un parámetro opcional, el de &#8220;callback&#8221;. De modo que la sintaxis para un efecto con<br />
	callback, sería (por ejemplo) la siguiente:
	</p>
<p>	<code class="javascript"><br />
$(objeto).show("velocidad", funcion);</code></p>
<div class="nota">
	Nota: La funcion debe colocarse sin los parentesis y sin comillas
	</div>
<p>
	Como no se pueden usar parentesis en un callback, el modo de pasar los parametros seria el<br />
	siguiente:<br />
	<code class="javascript"><br />
$(objeto).show("slow", function(){<br />
	lafuncion("parametro1","parametro2");<br />
});</code></p>
<h3>Conclusiones</h3>
<p>
	Este tutorial es a modo de introduccion. Depende de ti explorar jQuery para explotar todas sus<br />
	funcionalidades. Para conocer más a fondo esta librería, puedes visitar los siguientes vinculos:
	</p>
<ul>
<li><a href="http://www.jquery.com">Página principal de jQuery</a></li>
<li><a href="http://jquery.com/docs/">Documentación de jQuery</a></li>
<li><a href="http://jquery.com/tutorials">Tutoriales de jQuery</a></li>
<li><a href="http://jquery.com/src/">Descargas de jQuery</a></li>
<li><a href="http://jquery.com/blog/">Blog de jQuery</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://lunatic.la100rra.com.mx/introduccion-a-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>jQuery UI: Creando interfaces con jQuery</title>
		<link>http://lunatic.la100rra.com.mx/jquery-ui-creando-interfaces-con-jquery/</link>
		<comments>http://lunatic.la100rra.com.mx/jquery-ui-creando-interfaces-con-jquery/#comments</comments>
		<pubDate>Sat, 22 Sep 2007 04:42:04 +0000</pubDate>
		<dc:creator>Lunatic</dc:creator>
		
		<category><![CDATA[fun]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://lunatic.la100rra.com.mx/jquery-ui-creando-interfaces-con-jquery/</guid>
		<description><![CDATA[
Soy un gran fan de jQuery, y como tal, me siento muy orgulloso (snif?) de presentarles la extensión de jQuery para crear interfaces de usuario:
jQuery UI

Que es jQuery UI? (Traducido)
jQuery UI es un set de interacciones y widgets personalizables, escritos en base a la librería jQuery, que puedes usar para construir aplicaciones web altamente interactivas.

 [...]]]></description>
			<content:encoded><![CDATA[<p>
Soy un gran fan de jQuery, y como tal, me siento muy orgulloso (snif?) de presentarles la extensión de jQuery para crear interfaces de usuario:<br />
<a href="http://ui.jquery.com" title="jQuery UI">jQuery UI</a>
</p>
<h3>Que es jQuery UI? (Traducido)</h3>
<p>jQuery UI es un set de interacciones y widgets personalizables, escritos en base a la librería <a href="http://jquery.com">jQuery</a>, que puedes usar para construir aplicaciones web altamente interactivas.</p>
<p><a href="http://ui.jquery.com"><br />
 <img src="http://img222.imageshack.us/img222/8540/jqueryuiwebdr9.png" title="jQuery ui web" /><br />
</a><br />
<em>P&aacute;gina del proyecto de jQuery ui</em></p>
<p>El n&uacute;cleo de la librer&iacute;a se centra alrededor de interacciones del mouse, soltar y agarrar (drag &amp; drop), sortear, seleccionar y redimensionar.</p>
<p>En base a esas interacciones, hay constru&iacute;dos varios &#8220;widgets&#8221; reusables y &uacute;tiles: Acordeones, calendarios, di&aacute;logos, sliders, organizadores de tablas y pestañas  <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_surprised.gif' alt=':eek:' class='wp-smiley' /> </p>
<p>Finalmente, la librer&iacute;a est&aacute; terminada por algunos efectos que puedes usar para dar vida a tu sitio, como <em>magnifier</em> (el efecto de tsunami o el del docklet de Mac) y <em>sombras</em></p>
<h3>Elementos y documentacion</h3>
<p>Hay una graaan cantidad de elementos, con muchas las opciones para probar&#8230; muy buenos:</p>
<ul>
<li>
		<a href="http://docs.jquery.com/UI/Draggables"> Draggables </a> :  Hace que items sean arrastrables por el mouse
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Droppables">Droppables</a> :  Hace que los items sean soltables por el mouse
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Sortables">Sortables</a> : Hace que una lista de items sea sorteable
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Selectables">Selectables</a> : Hace que una lista de items sea seleccionable con el mouse o el teclado
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Resizables">Resizables </a> : Hace a un elemento redimensionable
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Accordion">Accordion</a> : Un panel de contenidos colapsable
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Calendar">Calendar</a> : Un widget dinamico para escoger fechas
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Dialog">Dialog</a> : Ventanas modales y dialogos de confirmacion
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Slider">Slider</a> : Un slider deslizable con el mouse
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Table">Table</a> : Una tabla que se puede sortear
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Tabs">Tabs</a>: Un panel con pestañas.
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Shadow">Shadow</a> : Genera sombras (drop shadows) dinamicamente
	</li>
<li>
		<a href="http://docs.jquery.com/UI/Magnifier">Magnifier</a> : Aumenta o disminuye el tamaño de un elemento basandose en la proximidad
	</li>
</ul>
<h3>Demos</h3>
<p>
En el momento hay un demo bastante bueno, que muestra las posibilidades de el ui:<br />
Update: <a href="http://dev.jquery.com/view/trunk/ui/apps/gallery_advanced/">jQuery ui demo</a><br />
<img src="http://img222.imageshack.us/img222/2252/jqueryuidemonh6.png" title="jQuery ui demo" />
</p>
<p>
Adicionalmente, cada elemento del ui tiene una pagina de demo, donde podremos ver las opciones del elemento, sus combinaciones y etc. Solo buscalas en la pagina de cada elemento.
</p>
<h3>Notas de uso</h3>
<p>
Para reducir el tamaño de tu pagina y no tener que cargar todos los modulos asi no los vayas a usar, jQuery ui est&aacute; dividido en varios &#8220;compenentes&#8221;. Los nombres de estos son mas o menos <strong>ui</strong>.<em>nombre</em>.<strong>js</strong> para cada uno.Cada componente tiene sus dependencias: Por ejemplo el componente draggable depende de <strong>ui.mouse.js</strong>, que es donde se definen las interacciones con el mouse.
</p>
<p><img src="http://img72.imageshack.us/img72/4319/jqueryuifilessc7.png" title="Archivos de jQuery ui" /></p>
<p>
Así que para, por ejemplo, usar los draggables debes hacer lo siguiente:
</p>
<pre class="codigo">
&lt;script src=&quot;jquery.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;ui.mouse.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;ui.draggable.js&quot;&gt;&lt;/script&gt;

&lt;!--y si quieres tener las opciones extra:--&gt;

&lt;script src=&quot;ui.draggable.ext.js&quot;&gt;&lt;/script&gt;
</pre>
<p>
Cool, no? <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />
</p>
<h3>Desarrollo</h3>
<p>
Actualmente se están desarrollando bastantes módulos. Algunos no están totalmente listos para usar, pero si confías en el poder luminoso de la fuerza, puedes buscar algunos en <a href="http://dev.jquery.com/browser/trunk/plugins/ui">el folder &#8220;ui&#8221; de el SVN de jQuery</a>. Ahi encontrarás (o tal vez no XD) plugins indocumentados que te puedan ser útiles.
</p>
<p>
Algunos sobre los que se está trabajando son: Menu, Control de formularios, Arbol, Splitter (?), Editor de texto enriquecido y Uploader.
</p>
<h3>So&#8230;</h3>
<p>
Ya saben, todo está en experimentar. Viendo los demos realmente te inspiras: El componente modal puede ser muy bueno para reemplazar alerts, el efecto Magnify está muy bien logrado, etc. Asi que&#8230; long live jQuery ( y si era con f, ptj <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</p>
]]></content:encoded>
			<wfw:commentRss>http://lunatic.la100rra.com.mx/jquery-ui-creando-interfaces-con-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Probando nueva direccion</title>
		<link>http://lunatic.la100rra.com.mx/probando-nueva-direccion/</link>
		<comments>http://lunatic.la100rra.com.mx/probando-nueva-direccion/#comments</comments>
		<pubDate>Sun, 02 Sep 2007 06:10:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[mier*]]></category>

		<category><![CDATA[pruebas]]></category>

		<guid isPermaLink="false">http://74.86.49.188/?p=21</guid>
		<description><![CDATA[
En teoría, la instalacion de wp salió sin problemas, tal como la importacion.


Como eso es tan poco frecuente cuando yo instalo un blog&#8230; estoy probando todas las caracteristicas 


Bye
]]></description>
			<content:encoded><![CDATA[<p>
En teoría, la instalacion de wp salió sin problemas, tal como la importacion.
</p>
<p>
Como eso es tan poco frecuente cuando yo instalo un blog&#8230; estoy probando todas las caracteristicas <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />
</p>
<p>
Bye</p>
]]></content:encoded>
			<wfw:commentRss>http://lunatic.la100rra.com.mx/probando-nueva-direccion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Programación orientada a objetos (OOP) con JavaScript.</title>
		<link>http://lunatic.la100rra.com.mx/programacion-orientada-a-objetos-oop-con-javascript/</link>
		<comments>http://lunatic.la100rra.com.mx/programacion-orientada-a-objetos-oop-con-javascript/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 16:43:27 +0000</pubDate>
		<dc:creator>Lunatic</dc:creator>
		
		<category><![CDATA[Web]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[tutoriales]]></category>

		<guid isPermaLink="false">http://74.86.49.188/?p=20</guid>
		<description><![CDATA[Introduccion

JavaScript es un lenguaje de programacion/scripting ampliamente subestimado e infravalorado. La principal razón de esto es por como surgió: Fue desarrollado primero para un solo navegador (Netscape Navigator) pero pronto, al ver su potencial, fue integrado a la mayoría de navegadores web por sus fabricantes.


Como suele suceder con los lenguajes de creación web, pronto surgió [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduccion</h3>
<p>
JavaScript es un lenguaje de programacion/scripting ampliamente subestimado e infravalorado. La principal razón de esto es por como surgió: Fue desarrollado primero para un solo navegador (<a href="http://www.netscape.com">Netscape Navigator</a>) pero pronto, al ver su potencial, fue integrado a la mayoría de navegadores web por sus fabricantes.
</p>
<p>
Como suele suceder con los lenguajes de creación web, pronto surgió el caos: Extensiones, atributos o métodos no estandares fueron implementados por uno u otro navegador, causando que muchas veces se tuviera que crear un código dos veces, para que corriera en cualquier escenario. Así, gracias a esta falta de estandarización, muchos tomaron al JavaScript como una mala práctica (No les recuerda al <acronym title="Cascade Style Sheets">CSS</acronym>?).
</p>
<p>
Otra de las razones que existen para las criticas hacia JavaScript, es que no esta basado en clases, si no en prototípos (más adelante la explicacion). Para muchos <em>hardcoders</em> que programan en Java o C++ es preferible la construcción de objetos con clases, por ventajas que ya conocemos, y un lenguaje que no las posea no es tan extensible o usable. Además, la extrema simplicidad del <acronym title="JavaScript">JS</acronym> y su mal uso han originado horrores que todos hemos sufrido (popups, SnapShots, textos parpadeantes, propagandas dinamicas, etc). Y principalmente a eso le debemos el preconcepto hacia el JS.
</p>
<p>
Sin embargo, gracias a que el ECMAscript es basado en prototípos, el JavaScript tambien lo es lo que <strong>lo convierte en un lenguaje orientado a objetos</strong> (OOP, por Object Oriented Programming o POO, en español, por Programación Orientada a Objetos). Este tutorial pretende observar como se construyen los objetos en javascript, y como se pueden usar.
</p>
<h3>Clases vs prototípos</h3>
<p>
Como ya se mencionó, JS es basado en prototípos. Un prototípo es un objeto abstracto, capaz de contener otros objetos dentro, los cuales pueden ser distintos tipos de datos: variables (numeros, cadenas de texto, valores lógicos), vectores, funciones e inclusive otros grupos de objetos.
</p>
<p>
Entonces, en vez de programar una clase, para estar orientados a objetos en JS definimos un prototípo. Las variables dentro de este serán las propiedades, y las funciones serán los métodos:</p>
<pre class="codigo">
[Objeto = Prototípo]{
  [ Propiedad = Variable ]
  [ Método    = Funcion  ]
}
</pre>
</p>
<h3>Creación del objeto</h3>
<p>
Entonces, iniciemos la creación del objeto: Para este ejemplo usemos los tradicionales animales.  La creación de un objeto se hace con una funcion, que será la constructora, y a la vez la que identifique el objeto.
</p>
<p>
Creemos una &#8220;clase&#8221; Gato para empezar&#8230; por que todos aman crear las clases &#8220;gato&#8221;. (Si no me crees, revisa los tutoriales de POO. Si no hay un Gato ahi, el tutorial no vale la pena XD).
</p>
<p>
Hay dos formas de definir la funcion constructora: Definir una funcion o definir una variable cuyo contenido sea una función. Puede parecer redundante, pero lo es =_=. Veamos ambas formas:
</p>
<p><pre class="codigo">
function Gato( parametros ){
	// Codigo
};
</pre>
<p>o</p>
<pre class="codigo">
var Gato= function( parametros ){
	// Codigo
};
</pre>
<p><!--nota--><br />
Nota: Para el resto del tuto vamos a usar la segunda forma <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
<!--/nota-->
</p>
<h3> Propiedades del objeto </h3>
<p>
Como vimos anteriormente, las propiedades del objeto se definen en forma de variables. Estas variables deben estar situadas dentro de la funcion constructora, marcadas con &#8220;this&#8221;, para poder ser accesadas como parte del objeto. Las variables reciben parametros que se envian al crear una nueva instancia del objeto (para nuestros propositos, al crear un nuevo gato).
</p>
<p>
Entonces veamos el ejemplo con nuestro objeto Gato. Un gato tiene como propiedades básicas&#8230; digamos que su nombre, su color, y su edad. Entonces estas propiedades serán las que reciba la funcion constructora para ser asignadas, Veamos como:
</p>
<pre class="codigo">
var Gato= function(nombre, color, edad){
  this.nombre= nombre;
  this.color= color;
  this.edad= edad;
}
</pre>
<p>
Con lo anterior, definimos el Gato, y cómo es ese gato. Sin embargo, algunos de los que son conocedores de la OOP ya deben estar pensando&#8230; ¿Y el strict data typing?. El script data typing es lo que regula el tipo de datos que entran a un objeto, y asi mismo el cómo se comportan. Por lo general, los lenguajes basados en clases son muy estrctos con respecto a los tipos de datos que se usan.
</p>
<p>
Por fortuna, en JS podemos emular el <acronym title="Strict Data Typing">SDT</acronym>, asignando los tipos de variables de entrada y (si eres un maniaco) chequeando que los valores sean correctos:
</p>
<pre class="codigo">
var Gato= function(nombre, color, edad){
  this.nombre= new String(nombre);
  this.color= new String(color);
  this.edad= new Number(edad);
  //Por ejemplo
  if( isNaN ( this.edad ) ){
	alert("Error en el data-typing, edad no es un numero");
  }
}
</pre>
<p>
Pues perfecto. Hemos creado la definición de nuestro objeto. Sin embargo nos falta un pequeño detalle. ¡Usar el objeto! Asi que vamos a crear un gato nuevo, y a asignarle las propiedades que ya vimos arriba:
</p>
<pre class="codigo">
var Michi= new Gato("Michifu", "azul", 2);
</pre>
<p>
Con esto hemos creado una <em>instancia</em> de nuestro objeto, un simpatico &#8220;Gato&#8221; que se llama Michifu, tiene dos años y es &#8230; azul. Azul? Lo importante es que el código funcione, no? <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />
</p>
<p>
Si queremos comprobar alguna de las propiedades de nuestro objeto lo haríamos así: <em>Variable_que_define_el_objeto</em> (punto) </acronym><em>propiedad_deseada</em>. Asi que, por ejemplo, veamos el color del gato Michifu:
</p>
<pre class="codigo">
alert("El gato es de color "+Michi.color);
</pre>
<p>
Lo que nos da el resultado: &#8220;El gato es de color azul&#8221;;
</p>
<h3> Métodos </h3>
<p>
Ahora, veamos los métodos del objeto. Como mencioné arriba, un metodo es una funcion dentro del objeto. Hay varios metodos para crear un método nuevo: Extendiendo el prototípo, creando una variable tipo funcion, o vinculando una funcion externa al objeto. Veamos todos los casos, y de paso creemos un par de &#8220;acciones&#8221; para nuestro gato. En los comportamientos basicos del gato, encontramos comer y descansar, asi que:
</p>
<h4>Método 1: Vinculación externa</h4>
<p>
Con este metodo declaramos que una de las propiedades, llamará a una funcion externa:
</p>
<pre class="codigo">
  [...]

  this.comer= comerExterna;

  [...]

  function comerExterna(){
	alert(&#8221;El gato &#8220;+this.nombre+&#8221; se comió un ratón&#8221;)
  }

  [...]

  Michi.comer();

  [ Salida = "El gato Michifu se comió un ratón" ]
</pre>
<h4> Método 2: Extension del prototipo</h4>
<p>
Como los objetos estan compuestos por prototipos en JavaScript, nosotros podemos aumentarle metodos al prototipo del objeto directamente, de la siguiente manera:
</p>
<pre class="codigo">
[ No tocamos la funcion constructora ]

Gato.prototype.comer= function(){
 alert(&#8221;El gato &#8220;+this.nombre+&#8221; se comió un ratón&#8221;)
}

[...]

Michi.comer();

[ Salida = "El gato Michifu se comió un ratón" ]
</pre>
<h4> Método 3: Definicion en la funcion constructora </h4>
<p>
Con este método, asignamos una propiedad como funcion dentro de la constructora:
</p>
<pre class="codigo">
[...]

this.comer= function(){
 alert(&#8221;El gato &#8220;+this.nombre+&#8221; se comió un ratón&#8221;);
};

[...]

Michi.comer();

[ Salida = "El gato Michifu se comió un ratón" ]
</pre>
<p><!--nota--><br />
Nótese que en los tres métodos, es posible pasar parametros a la funcion de la manera normal en que cualquier funcion trabaja. Además, en cualquiera de los metodos, <em>this</em> se refiere al objeto (en este caso <em>Gato</em>)<br />
<!--/nota--></p>
<h3>Herencia</h3>
<p>
Uno de las caracteristicas más interesante de la OOP, es la herencia de métodos / propiedades. En JavaScript lo podemos lograr mediante los prototípos. Entonces, ya tenemos un Gato, verdad? Ahora, creemos una raza de gatos, la raza Siamés. Entonces creemos dos constructoras apartes para cada una, y hagamos que siamés herede de gato:
</p>
<pre class="codigo">
var Gato= function(){
	this.ojos= 2;
	this.piernas= 4;
};
var Siames= function(){
	this.color= "blanco";
	this.color_ojos= "azul";
}
//Como vemos, ambos tienen propiedades distintas.
//Ahora, heredemos:
Siames.prototype= new Gato();
//Eso hace que se copie el prototipo de Gato y se añada al de Siames.

//Probemos a ver si es cierto
var Catboy= new Siames;
alert(Catboy.ojos);
//Retorna 2! ^_^
alert(Catboy.color);
//Retorna "blanco", asi que conserva sus propiedades
</pre>
<h3>Métodos y propiedades privadas</h3>
<p>
En lo que hemos visto hasta ahora, los metodos y funciones eran totalmente publicos: Modificables y legibles desde cualquier parte. Echemos un vistazo a como &#8220;privatizar&#8221; variables:
</p>
<pre class="codigo">
var Gato= function(nombre){
	this.nombre= nombre;
	//Creamos una variable privada sin asignarle "this" a esta
	var frecuencia= "moderada";
	// Creamos un metodo privado en muchos aspectos (XD) definiendo una funcion normal
	function irAlBano(frecuencia){
		alert("El gato va al baño con frecuencia "+frecuencia);
	};
	irAlBano(frecuencia);
}
var Michin= new Gato("Michifu");
</pre>
<p>
El código anterior crea la variable privada &#8220;frecuencia&#8221;, y la funcion privada &#8220;irAlBano&#8221;. Para comprobar que la variable sea privada, ejecutemos <em>alert(Michin.frecuencia)</em>, lo que devuelve <em>undefined</em>
</p>
<p>
Sin embargo, aun podemos usar esas variables o funciones tanto en la funcion constructora, como por funciones &#8220;getter&#8221; o &#8220;setter&#8221;&#8230; las cuales no tienen un atributo &#8220;get&#8221; o &#8220;set&#8221; definido, simplemente son funciones que nos permiten leer las propiedades:
</p>
<pre class="codigo">
var Gato= function(nombre){
	this.nombre= nombre;
	//Creamos una variable privada sin asignarle "this" a esta
	var frecuencia= "moderada";
	// Creamos un metodo privado en muchos aspectos (XD) definiendo una funcion normal
	function irAlBano(frecuencia){
		alert("El gato va al baño con frecuencia "+frecuencia);
	};
	this.leerFrec= function(){
		irAlBano(frecuencia);
	};
}
var Michin= new Gato("Michifu");
Michin.leerFrec();

//Nos retorna "El gato va al baño con frecuencia moderada" <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
</pre>
<h3>Extension de objetos nativos mediante el prototípo</h3>
<p>
Como todos los objetos de JS tienen prototipo, nos podemos divertir añadiendo utilidades a nuestros objetos de siempre. Añadamole una funcion a Array, por ejemplo:
</p>
<pre class="codigo">
Array.prototype.coincidencias= function(palabra){
	coincidencias= 0;
	for(i=0; i&lt; this.length; i++){
		if( this[i] == palabra ){
			coincidencias++;
		}
	}
	alert(&#8221;Se encontraron &#8220;+coincidencias+&#8221; coincidencia(s) de la palabra&#8221;);
};
// Podemos usar el array siguiente:
clabbers= Array(&#8221;Freddie&#8221;,&#8221;Mx&#8221;,&#8221;Neo_JP&#8221;,&#8221;Zarzamora&#8221;,&#8221;Ramm&#8221;,&#8221;Fael&#8221;);
// O este
clabbers= Array(&#8221;Freddie&#8221;,&#8221;Mx&#8221;,&#8221;Neo_JP&#8221;,&#8221;Zarzamora&#8221;,&#8221;Mx&#8221;,&#8221;Mx&#8221;);

//Y luego
clabbers.coincidencias(&#8221;Mx&#8221;);
//Entonces la funcion nos notificará cuantas veces esta una palabra en un array. Cool, no?
</pre>
<h3>Conclusiones</h3>
<p>
Como vimos, entender la composición del prototipo de un objeto en JS puede ser terriblemente útil. Y entender como trabajar con clases en este lenguaje nos puede hacer más facil la vida: Reutilizar código, ganar velocidad en desarrollo, o dividir el trabajo entre varias personas se vuelve muy sencillo (como ocurre con la POO en general).
</p>
<p>
Adicionalmente a lo visto, si se quiere mayor similitud la POO clásica, se puede mandar un valor de retorno a cada funcion (como <em>Void</em> usamos <em>True</em> o <em>False</em>) y comprobar si los tipos de datos son correctos con condicionales.
</p>
<p>
Ahora, una implementacion de POO en JS combinada con jQuery u otra librería similar, puede resultar muy potente cuando de DOM se trata. A desarrollar <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://lunatic.la100rra.com.mx/programacion-orientada-a-objetos-oop-con-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ya tengo mi Harry Potter and The Deathly Hollows</title>
		<link>http://lunatic.la100rra.com.mx/ya-tengo-mi-harry-potter-and-the-deathly-hollows/</link>
		<comments>http://lunatic.la100rra.com.mx/ya-tengo-mi-harry-potter-and-the-deathly-hollows/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 20:47:49 +0000</pubDate>
		<dc:creator>Lunatic</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://74.86.49.188/?p=19</guid>
		<description><![CDATA[Acabo de ir por mi libro! Ahora puedo decir que &#8220;i ownz parry hotter&#8221; XD !!1!
Es bastante gordo, y parece que me va a dar entretenimiento varios dias 
Cuando tenga la cámara a la mano pongo las fotos de mi libro. Por ahora, un shot de la caratula de mi edicion

Como consecuencia: Me desconectaré un [...]]]></description>
			<content:encoded><![CDATA[<p>Acabo de ir por mi libro! Ahora puedo decir que &#8220;i ownz parry hotter&#8221; XD !!1!</p>
<p>Es bastante gordo, y parece que me va a dar entretenimiento varios dias <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Cuando tenga la cámara a la mano pongo las fotos de <strong>mi</strong> libro. Por ahora, un shot de la caratula de mi edicion</p>
<p><a href="http://img76.imageshack.us/img76/8189/harry20potter20and20thedk9.jpg" target="_blank"><img src="http://img76.imageshack.us/img76/8189/harry20potter20and20thedk9.th.jpg" alt="Harry Potter and The Deathly Hollows" border="0" /></a></p>
<p><strong>Como consecuencia</strong>: Me desconectaré un poco del inter-world por estos dias, pero mi Gtalk está prendido para hablar si se solicita. Tambien acepto los retos de CS que sean. Es posible que me demore un poco mas aprobando los comments&#8230; pero no se frenen de dejarlos por ello <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<strong>Update:</strong> Si anduve por ahi rondando, sepan que tuve que terminar un jodido taller (trabajo, para los no-colombianos) de física&#8230; asi que no pude leer. Hoy empiezo oficialmente <img src='http://lunatic.la100rra.com.mx/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Por cierto, el nuevo host ya sale en <a href="http://google.com">Google</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://lunatic.la100rra.com.mx/ya-tengo-mi-harry-potter-and-the-deathly-hollows/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
