
<?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>mushito</title>
	<atom:link href="http://skulshit.net/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://skulshit.net/blog</link>
	<description>un pecoso programando .:@_@:.</description>
	<lastBuildDate>Sat, 23 Jan 2010 20:28:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Capitulo 3 Consejos para escribir aplicaciones crossBrowser con mootools</title>
		<link>http://skulshit.net/blog/?p=197</link>
		<comments>http://skulshit.net/blog/?p=197#comments</comments>
		<pubDate>Fri, 08 Jan 2010 22:39:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mootools]]></category>
		<category><![CDATA[crossbrowser]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[mootoo]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://skulshit.net/blog/?p=197</guid>
		<description><![CDATA[Bueno ahora toca el tema de escribir codigo mootools de la manera correcta, ya que de lo contrario obtendremos resultados diferentes del desempeño de nuetra aplicacion en los distintos navegadores que existen.
Las viejas costumbres
Bueno pues resulta que leyendo por ahi un ebook que se llama la &#8220;biblia de javascript&#8221; pues me tope con dos propiedades [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno ahora toca el tema de escribir codigo mootools de la manera correcta, ya que de lo contrario obtendremos resultados diferentes del desempeño de nuetra aplicacion en los distintos navegadores que existen.</p>
<h2>Las viejas costumbres</h2>
<p>Bueno pues resulta que leyendo por ahi un ebook que se llama la &#8220;biblia de javascript&#8221; pues me tope con dos propiedades de los elementos del dom que son: innerText y innerHTML. El caso es lei para que servian y se me hizo facil incluirlar en un codigo de mootools que estaba escribiendo.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//se me ocurrio esto, no pense que tuviera grandes consecuencias</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'un_textarea'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;mi texto&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//tambien escribia cosas como esta</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'input_text'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerText</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;algo&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//inclusive hacia esto </span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'otro_input_text'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;algo&quot;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>mm&#8230; mala idea, resulta que las lineas anteriores tienen resultados inesperados en los distintos navegadores, puede que funcionen a la perfeccion sobre algunas versiones de internet Explorer pero ni de risa jalan para mozilla y safari, algo que he notado es que si logras hacer funcionar el codigo sobre el explorer y mozilla es practicamente seguro que tambien funcione en safari.</p>
<p><span id="more-197"></span></p>
<p>Bueno pues resulta que esta leccion la he aprendido a la mala. Aqui viene la solucion a los problemas anteriores y tiene que ver con utilizar de forma correcta las funciones de las que me provee mootools.</p>
<p>De ahora en adelante olvidemos las viejas practicas y hagamos uso de los setters y getters que nos ofrece la libreria.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">&nbsp;
<span style="color: #006600; font-style: italic;">//para obtener el valor de una propiedad por ejemplo 'text'</span>
<span style="color: #003366; font-weight: bold;">var</span> propiedad <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'miElemento'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'propiedad'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//para asignar un valor a una propiedad por ejemplo 'value'</span>
<span style="color: #003366; font-weight: bold;">var</span> propiedad <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'miElemento'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">set</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'propiedad'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'valor'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Otra forma incorrecta de proceder y su implementacion es la siguiente.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
    <span style="color: #003366; font-weight: bold;">function</span> miFuncion<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>input type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;button&quot;</span> onclick<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;miFuncion()&quot;</span> id<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;miBoton&quot;</span><span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Lo anterior debemos cambiarlo por lo siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> miFuncion<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'miBoton'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addEvent</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> miFuncion <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h2>El doctype</h2>
<p>Por cuestiones de desempeño de nuestra pagina sobre el navegador siempre sin exepcion debemos especificar el tipo de documento por ejemplo un tipo de documento con xhtml strict seria asi</p>
<pre lang="html4strict" line ="1">

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en" dir="ltr"&gt;
</pre>
<p>y cito el mootools essentials:</p>
<blockquote><p>
If you don’t specify a DOCTYPE or if you use one that isn’t XHTML, you’ll get strange results when you try and use several of the classes and effects in MooTools.
</p></blockquote>
<p>En pocas palabras &#8220;Si no especificas un doctype o si usas uno que no es XHTML obtendras resultados extraños cuando trates de usar las distintas clases y efectos de mootools&#8221;. Bueno pues mas claro ni el agua.</p>
<h2>Escribiendo un condicional para cada navegador</h2>
<p>bueno ahora veamos una de las clases mas utiles de mootoools en cuanto a compatibilidad de navegadores se refiere. Esta clase nos da informacion sobre el cliente por ejemplo que navegador esta usando y el sistema operativo con el que trabaja, incluso la version del navegador que tiene instalado el ciente, es decir nos permite detectar el navegador que esta usano el usuario.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">&nbsp;
<span style="color: #006600; font-style: italic;">//numero de la version del navegador</span>
<span style="color: #003366; font-weight: bold;">var</span> version <span style="color: #339933;">=</span> Browser.<span style="color: #660066;">Engine</span>.<span style="color: #660066;">version</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//cualquier version de internet explorer</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> Browser.<span style="color: #660066;">Engine</span>.<span style="color: #660066;">trident</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'explorer '</span> <span style="color: #339933;">+</span> version<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//cualquier navegador de mozilla</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> Browser.<span style="color: #660066;">Engine</span>.<span style="color: #660066;">gecko</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'firefox '</span>  <span style="color: #339933;">+</span> version<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//safari, google chrome o konqueror</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> Browser.<span style="color: #660066;">Engine</span>.<span style="color: #660066;">webkit</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'safari '</span>  <span style="color: #339933;">+</span> version<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//algun navegador con el engine presto como Opera</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> Browser.<span style="color: #660066;">Engine</span>.<span style="color: #660066;">presto</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'opera '</span>  <span style="color: #339933;">+</span> version<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Las funciones anteriores devuelven un boolean a exepcion de la primera que devuelve un number. Tambien podemos conocer la plataforma sobre la cual se ejecuta el navegador.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">&nbsp;
<span style="color: #006600; font-style: italic;">//estas devuelven boolean y detectan el </span>
<span style="color: #006600; font-style: italic;">//Sistema operativo del usuario</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> Browser.<span style="color: #660066;">Platform</span>.<span style="color: #660066;">win</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'S.O. windows'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> Browser.<span style="color: #660066;">Platform</span>.<span style="color: #660066;">mac</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'S.O. Mac'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> Browser.<span style="color: #660066;">Platform</span>.<span style="color: #660066;">linux</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'S.O. Linux'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>Browser.<span style="color: #660066;">Platform</span>.<span style="color: #660066;">ipod</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">' S.O. iPod Touch/ iPhone '</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> Browser.<span style="color: #660066;">Platform</span>.<span style="color: #660066;">other</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'S.O. Ninguno de los anteriores'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #006600; font-style: italic;">//esta devuelve un string con el nombre del S.O.</span>
<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span> Browser.<span style="color: #660066;">Platform</span>.<span style="color: #000066;">name</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Esta parte la he dejado hasta el final porque actualmente mootools trata de implemetar la compatibilidad de sus funciones con todos los navegadores de manera interna y automatica, pero si te llegas a encontrar con un bloque de codigo bien escrito que tiene resultados diferentes de desempeño en los navegadores la unica opcion seria escribir una condicion basada en alguna de las funciones anteriores ya sea que el problema se genere a partir del navegador o del sistema operativo.</p>
]]></content:encoded>
			<wfw:commentRss>http://skulshit.net/blog/?feed=rss2&amp;p=197</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capitulo 2 mootools y el DOM</title>
		<link>http://skulshit.net/blog/?p=185</link>
		<comments>http://skulshit.net/blog/?p=185#comments</comments>
		<pubDate>Sat, 26 Dec 2009 21:42:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mootools]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[domready]]></category>
		<category><![CDATA[evento]]></category>

		<guid isPermaLink="false">http://skulshit.net/blog/?p=185</guid>
		<description><![CDATA[Tal vez este debio ser el primer capitulo de la referencia que estoy escribiendo pero bueno, el tema que manejo ahora tal vez resulte en extremo basico para aquellos grandes programadores de js, pero ni siquiero yo lo sabia hace algunos dias y tuve que aprenderlo de la forma mala.
Bueno resulta, que cuando mi navegador [...]]]></description>
			<content:encoded><![CDATA[<p>Tal vez este debio ser el primer capitulo de la referencia que estoy escribiendo pero bueno, el tema que manejo ahora tal vez resulte en extremo basico para aquellos grandes programadores de js, pero ni siquiero yo lo sabia hace algunos dias y tuve que aprenderlo de la forma mala.</p>
<p>Bueno resulta, que cuando mi navegador recibe una pagina del servidor, la carga del codigo de la pagina se carga de manera secuencial y por consiguiente todos los elementos de mi pagina como los textarea, buttons y demas tambien se cargan en memoria de forma secuencial.</p>
<p>Veamos este ejemplo</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #00bbdd;">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Untitled<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!--hojas de estilo--&gt;</span>
	<span style="color: #808080; font-style: italic;">&lt;!--scripts js--&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!--Elementos de mi pagina como divs,p,a ..etc --&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

<p>En el ejemplo anterior tendriamos que lo primero que procesa mi navegador es el doctype, despues vendria todo el contenido del sitio empezando por las hojas de estilo, el javascript, y al final la carnita de la pagina. </p>
<p><span id="more-185"></span></p>
<h2>El orden si importa </h2>
<p>Es por eso que el orden en que acomodo todos los elementos anteriores si importa y veamos algunos ejemplos.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Untitled<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
         <span style="color: #808080; font-style: italic;">&lt;!--Libreria mootools --&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;mootools.js&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
		alert( $('miTexto').get('value') );
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Text&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hola&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;miTexto&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

<p>Y tambien es por eso que si yo pongo el codigo anterior en una pagina, NO FUNCIONA, aunque el sentido comun me diga que esta correcto, no es asi simplemente porque cuando se ejecuta el codigo Js resulta que el tag input aun no ha sido cargado en memoria pues se encuentra mas abajo dentro del codigo,  el error que sucede es que no puedo referenciar un elemento del DOM que aun no se encuentra cargado en memoria.</p>
<p>Si modifco el codigo de la manera siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Untitled<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
         <span style="color: #808080; font-style: italic;">&lt;!--Libreria mootools --&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;mootools.js&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Text&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hola&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;miTexto&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
	alert( $('miTexto').get('value') );
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></td></tr></table></div>

<p>lo unico que hize fue mover el codigo js al final del documento y asi si funciona, el unico inconveniente es que este tipo de cosas resultan ser una mala practica de programacion js. Anteriormente la solucion consistia en definir el evento onload del body con una funcion de js asi</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Untitled<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
         <span style="color: #808080; font-style: italic;">&lt;!--Libreria mootools --&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;mootools.js&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
		function miFuncion(){
			alert( $('miTexto').get('value'));
		}
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>	
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span> <span style="color: #000066;">onload</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;miFuncion()&quot;</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Text&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hola&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;miTexto&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

<p>El inconveniente de lo anterior es lo siguiente: es que el evento onload del body se ejecuta cuando todos los elementos del body han sido cargados incluyendo todas las imagenes, y tal vez yo no quisiera que mi codigo js se ejecutara solamente cuando se hayan cargado todas las imagenes.</p>
<p>Lo que yo quiero es que mi codigo js se ejecute lo mas pronto posible y lo mas importante que cuando se ejecute todos los elementos del DOM a los que hace referencia este disponibles. Afortunadamente mootools me provee de un evento que solo esta disponible para el objeto window.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">window.<span style="color: #660066;">addEvent</span> <span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'domready'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   <span style="color: #006600; font-style: italic;">//aqui va todo el codigo que necesito que se </span>
   <span style="color: #006600; font-style: italic;">//ejecute tan pronto  se cargue el DOM </span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//una notacion alternativa es</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> miFuncion<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//codigo a ejecutar</span>
<span style="color: #009900;">&#125;</span>		
window.<span style="color: #660066;">addEvent</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'domready'</span><span style="color: #339933;">,</span> miFuncion<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>El evento domready del objeto window se dispara cuando los elementos del DOM estan cargados y listos en memoria para ser utilizados por mi codigo js, a diferencia del evento onload del body este evento no espera a que se complete la carga de las imagenes u otros elementos secundarios del sitio.</p>
<p>Y haciendolo de la forma anterior me aseguro de que todo el codigo que escriba dentro del evento domready esta utilizando de forma correcta los elementos del DOM. Tal vez lo anterior pueda parecer sencillo o inclusive trivial, en lo personal el conocimiento anterior me ha servido de mucho y para cualquiera que escriba mootools es indispensable el uso de evento domready.</p>
]]></content:encoded>
			<wfw:commentRss>http://skulshit.net/blog/?feed=rss2&amp;p=185</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>limoon: Galeria de imagenes con mootools usando scroll y otros efectos</title>
		<link>http://skulshit.net/blog/?p=181</link>
		<comments>http://skulshit.net/blog/?p=181#comments</comments>
		<pubDate>Sat, 26 Dec 2009 21:39:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mootools]]></category>
		<category><![CDATA[galeria]]></category>
		<category><![CDATA[imagenes]]></category>
		<category><![CDATA[morph]]></category>
		<category><![CDATA[scroll]]></category>

		<guid isPermaLink="false">http://skulshit.net/blog/?p=181</guid>
		<description><![CDATA[
limoon: ver el demo aqui
INSTRUCCIONES: Para usar la galeria solo hay que colocarse sobre la tira de imagenes y usar la ruedita del raton para navegar si das click en una miniatura la imagen se mostrara en la ventana principal en tamano mediana.
Descargar el codigo fuente aqui
Esta galeria de imagenes ha sido implementada utilizando las [...]]]></description>
			<content:encoded><![CDATA[<p><br/></p>
<h3><a href="http://skulshit.net/blog/wp-content/aplicaciones/limoon">limoon: ver el demo aqui</a></h3>
<p><strong>INSTRUCCIONES:</strong> Para usar la galeria solo hay que colocarse sobre la tira de imagenes y usar la ruedita del raton para navegar si das click en una miniatura la imagen se mostrara en la ventana principal en tamano mediana.</p>
<h3><a href="http://skulshit.net/blog/wp-content/aplicaciones/limoon/limoon.rar">Descargar el codigo fuente aqui</a></h3>
<p>Esta galeria de imagenes ha sido implementada utilizando las siguientes herramientas:</p>
<ul>
<li>php  ( muy basico )</li>
<li>html (extremadamente sencillo) </li>
<li>css</li>
<li>mootools</li>
</ul>
<p>La galeria es crossBrowser:</p>
<ul>
<li>internet explorer 6+</li>
<li>Firefox 3.5 </li>
<li>Safari 4.0 para windows</li>
</ul>
<h2>Como configurar esta galeria</h2>
<p>Lo unico que hay que hacer es colocar la carpeta de la galeria en tu servidor, dentro de la carpeta raiz debe de haber un directorio llamado galeria que debe contener las imagenes en el siguiente formato.</p>
<ul>
<li>Las imagenes deben ser del formato gif, jpg, png</li>
<li>Cada imagen sin exepcion debe tener una miniatura</li>
<li>Tamano  exacto de imagenes medianas altura:270px, tamano exacto de imagenesminiaturas altura:50px</li>
<li> Para cada imagen mediana agregar el prefijo &#8220;med_&#8221; y para cada miniatura agregar el prefijo &#8220;thumb_&#8221;  </li>
</ul>
<p>Para mas facil un ejemplo, supongamos que quieres que en tu galeria aparezca la imagen miabuelo.jpg, entonces en el directorio galeria debes poner 2 imagenes, una se llamaria med_miabuelo.jpg con altura de 270px y la otra seria thumb_miabuelo.jpg de altura 50px. Y lo mismo pasa para cualquier otra imagen que quieras agregar a la galeria. En el demo de la galeria veras que todas las miniaturas estan en blanco y negro eso lo hize solo para seguir la linea de diseño de la galeria.</p>
<p>Actualmente hay muchos programas en la red que te permiten cambiar el tamano a las imagenes de todo un directorio de forma automatica y agregarles prefijo a la nuevas imagenes, solo es cuestion de hacer una busqueda en google y listo.</p>
<p>Dentro del directorio de la galeria hay un dir llamado mootools que contiene la version completa de mootools con todos sus plugins y pesa mas o menos como 300kb, lo he dejado asi porque es la version con la que hago mis experimentos, pero tu puedes conseguir tu propia version de mootools del sitio oficial y modificarla para reducir el peso y dejar solo lo necesario para la galeria. Principalmente he usado el core y los Asset.image</p>
<h2> Implementacion </h2>
<p>pues despues de una depresion fuerte y algunos dolores de cabeza tratando de aprender mootools, he implementado una galeria de imagenes le puse &#8220;limoon&#8221; nomas porque me gusto el nombre XD.</p>
<p><img src="http://i252.photobucket.com/albums/hh20/_erendira18_/inicio.jpg"></p>
<p>Al inicio la idea que tenia era hacer todo un sistema de galeria de imagenes que tuviera un panel </p>
<p><span id="more-181"></span></p>
<p>de control en php que me permitira administrar todas las imagenes de la galeria, hacer login, hacer uploads, agregar descripciones, titulos, borrar imagenes etc.. pero luego recorde que mi objetivo principal era aprender mootools asi que deje de lado lo anterior y solo me enfoque en la galeria.</p>
<p><img src="http://i252.photobucket.com/albums/hh20/_erendira18_/azul.jpg"> </p>
<p>Sin embargo inclusive en este momento y a este nivel de codifcacion de la galeria es posible implementar el panel e integrarlo con la galeria, la unica informacion que hasta el momento recibe js del php es una cadena con los nombres de las imagenes que hay en un directorio y listo.</p>
<p>Una vez aclaro que estas son mis primeras lineas de codigo en mootools, lo primero que escribi con mootools fue el moochat estara por ahi si lo buscas en la categoria &#8220;aprendiendo mootools&#8221;, y funciona ..pero solo en internet explorer y el codigo esta bastante horrible diria yo, inclusive el codigo de esta galeria podria mejorarse, no me molesta tanto pues llevo apenas 2 semenas leyendo la referencia de mootools, y ya comienzo a ver las cualidades de mootools</p>
<p><img src="http://i252.photobucket.com/albums/hh20/_erendira18_/chinita.jpg"> </p>
<p>Al principio solo la sintaxis me parecia totalmente extraña y antinatural, ahora ya me resulta mas familiar y veo que tiene muchas funciones muy utiles, por ejemplo me llama mucho la atencion la clase Drag, estoy pensando en hacer algo con dicha clase, pero aun no se que podria ser.</p>
<p>Por el momento preparo un documento en que explicare el proceso de creacion de esta galeria, y sigo escribiendo la referencia de mootools, porque si algo he buscado si suerte en la internet es una buena referencia de mootools en español y bien documentada, pues a veces puede ser complicado aprender un lenguaje solamente tomando los documentos de la referencia oficial y aparte en ingles :S, no es que no sepa ingles.. pero carajo es mas sencillo en español.</p>
]]></content:encoded>
			<wfw:commentRss>http://skulshit.net/blog/?feed=rss2&amp;p=181</wfw:commentRss>
		<slash:comments>1589</slash:comments>
		</item>
		<item>
		<title>Aprendiendo mootools</title>
		<link>http://skulshit.net/blog/?p=170</link>
		<comments>http://skulshit.net/blog/?p=170#comments</comments>
		<pubDate>Mon, 21 Dec 2009 22:08:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mootools]]></category>
		<category><![CDATA[aprender]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://skulshit.net/blog/?p=170</guid>
		<description><![CDATA[Bueno pues al dia de hoy uno de mis objetivos es aprender todo lo que pueda sobre mootools, para esto voy a empezar a escribir una serie de documentos en los que redactare todo lo que vaya aprendiendo de mootools, y principalmente esto lo hago porque la mayoria de la referencia de mootools que he [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno pues al dia de hoy uno de mis objetivos es aprender todo lo que pueda sobre mootools, para esto voy a empezar a escribir una serie de documentos en los que redactare todo lo que vaya aprendiendo de mootools, y principalmente esto lo hago porque la mayoria de la referencia de mootools que he encontrado y leido esta en ingles y tal vez a alguien le pueda servir la documentacion que coloco aqui. Si lo anterior no sucede no importa aun asi seguire escribiendo.</p>
<p>Este es el primer post que dedico a esta nueva categoria &#8220;aprendiendo mootools&#8221; y por eso es una introduccino a esta libreria de javascript.</p>
<p>Hace tiempo (algunos años) javascript era utilizado solo para agregar pequeños efectos visuales a los sitios web, en general no se consideraba que js puediera ser usado como una herramienta para el desarrollo de un sitio pero todo cambio cuando aparecio el objeto xmlHttpRequest y se dio la posibilidad de hacer request al server sin tener que recargar la pagina, con el tiempo javascript se ha vuelto mas y mas importante simplemente por el hecho de que puede agregar a un sitio una mayor interactividad con el usuario, ademas de proveerle una interfaz mas amigable y tiempos de respues mas cortos que un sitio web tradicional que trabaja solamente con scripts del lado del server.</p>
<p>Una de las principales razones por la que yo ( en lo personal ) evitaba el javascript  era por las distintas maneras en que es interpretado por los distintos navegadores existentes (inclusive hoy en dia con mootools y todo aun existe este problema). Otra razon era porque a veces el debugear un script de js era realmente doloroso y esto es porque js nisiquiera tiene type hinting y la forma en que implemente la oop dejaba mucho que desear.</p>
<p>En realiadad las espectativas que tiene los usuarios sobre un sitio web puede forzar a los desarrolladores a programar tambien del lado del cliente y una de las opciones con las que cuenta es por supuesto mootools</p>
<h2>¿Que es mootools?</h2>
<p>Mootools es un FrameWork de javascript desarrollado por Valerio Proietti en el 2006, un framework es como un entorno de trabajo que nos facilita el desarrollo de una tarea, piensa en por ejemplo el framework de un carpintero es la carpinteria, en ese sentido mootools es una libreria que contieene una serie de funciones que me ayudan a desarrollar una aplicacion de forma mas sencilla y rapida, Las principales ideas en las que se basa este framework son las siguientes</p>
<ul>
<li>No duplicar codigo</li>
<li>Añadir funcionalidades basadas en la filosofia de diseño de javascript</li>
<li>Si hay un standar que trabaja bien y no esta implementado, entonces implementalo</li>
<li>Extiende los objetos nativos (String, Array ..etc) </li>
<li>Escribe codigo limpio, claro y entendible por cualquier programador</li>
<li>No solicites demasiados recursos del navegador ( memria, cpu, ciclos ..etc )</li>
<li>Abstrae tanto como puedas el codigo del navegador (programacodigo general) </li>
<li>Escribe programas modulares</li>
<li>Hazlo facil, hazolo divertido, hazlo inspirador</li>
</ul>
<p>En pocas palabras mootools es una herramienta que busca solventar aquellos problemas que se presentaban cuando escribias js anteiormente y ademas agregar muchas mas funcionalidades nuevas e interesantes.</p>
]]></content:encoded>
			<wfw:commentRss>http://skulshit.net/blog/?feed=rss2&amp;p=170</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>moochat Construyendo un chat usando mootools + php + mysql</title>
		<link>http://skulshit.net/blog/?p=162</link>
		<comments>http://skulshit.net/blog/?p=162#comments</comments>
		<pubDate>Mon, 21 Dec 2009 21:45:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mootools]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://skulshit.net/blog/?p=162</guid>
		<description><![CDATA[

Dale aqui para ver el demo (solo internet explorer 6+)
Descargar codigo fuente




Antes de comenzar
Resulta que tengo unos dias libres entre 25 y 30 no estoy seguro y me propuse aprender algo de javascript porque tenia muy olvidada esa area de la web, navegando por la web lei mucho sobre algunos frameworks de javascript al parecer [...]]]></description>
			<content:encoded><![CDATA[<p><br/></p>
<h3>
<a href="#">Dale aqui para ver el demo (solo internet explorer 6+)</a><br />
<a href="http://skulshit.net/blog/wp-content/themes/simpla/archivos/mochat_v1.rar">Descargar codigo fuente</a><br />
</h3>
<p><br/></p>
<p><img src="http://i252.photobucket.com/albums/hh20/_erendira18_/loginmoochat.jpg" /><br />
<br/></p>
<h2>Antes de comenzar</h2>
<p>Resulta que tengo unos dias libres entre 25 y 30 no estoy seguro y me propuse aprender algo de javascript porque tenia muy olvidada esa area de la web, navegando por la web lei mucho sobre algunos frameworks de javascript al parecer muy populares, jquery, mootools y demas, el caso es que me decidi a tomar mootools y darle, que porque elegi mootools? pues nomas porque si.</p>
<p>Tengo algunas ideas en mente para aplicar mootools, aclaro que antes hacer este chat no tenia ningun conocimiento sobre mootools y sobre javascript apenas se lo mas basico y de esto se daran cuenta si es que analizan el codigo javascript  que incluyo aqui. </p>
<p>Bueno tambien comento que algunas de las cosas que tenia pensadas no pude implementarlas por falta de manejo de javascript especialmente del DOM, pero esta aplicacion cumple el objetivo al 100%, lo que me falto implementar solo fueron adornos y algunos efectos.</p>
<p>Otra cosa que me sucedio es que no me di cuenta que este chat <strong>solo funciona en internet explorer 6+</strong>, tanto en mozilla como en safari el codigo javascript no jala. Esto fue precisamente porque son mis primeras lineas de codigo en js y no contemple esta situacion.</p>
<h2>Implementacion de la sala de chat</h2>
<p>Esta aplicacion la dividi en 3 grandes partes.</p>
<p>1. Cliente (en javascript)<br />
2. Servidor ( php y mysql )<br />
3. La interfaz ( css + html)</p>
<p>La idea general en como trabaja el chat es la siguiente, entras a la pagina del chat y te muestra un pantalla para hacer login, eliges un nombre de usuario y una sala para entrar, en caso de haber algun error en uno de los campos se despliega un error descriptivo al usuario.</p>
<p>Si lo anterior paso bien te has loguado y aparece una segunda pantalla hay un campo de texto para escribir mensajes, un textarea para visualizar los mensajes escritos  por todos lo usuarios de la sala, y textarea para ver los usuarios que se encuentran en la sala.</p>
<p>Hasta ahi todo va bien como en cualquier pagina de chat, veamos la parte tecnica, cuando un usuario hace login los datos qu introduce en la primer interfaz del login se comparan con los que hay en la base de datos, si no hay problema se registra al usuario en la bd, los mensajes que envie el usuario tambien se almacenan en la bd especificando la hora de envio y el tiempo de envio del mensaje, (si .. tiempo y hora son cosas diferentes).</p>
<p>El tiempo de envio es un entero grande que se obtiene con la funcion del php time(). Cada segundo el explorador hace peticiones al programa servidor.php solicitandole los mensajes mas recientes enviados por usuarios que se encuentran en la misma sala que yo. Mientras que el campo hora almacenara un dato tipo time. </p>
<p>El cliente recibe los mensajes nuevos (en caso de haberlos) y los despliega en el campo de texto. Algo similar sucede con el campo de texto destinado a mostrar los usuarios que se encuentran en la misma sala que yo, con el detalle de que las peticiones para obtener a los usuarios se realizan cada 3 segundos. </p>
<p>Y aqui viene una situacion especial, todo usuario que entra al chat se registra en la bd junto con su hora de entrada. Existe un tiempo de inactividad permitido para los usuarios, el tiempo de inactividad es el tiempo que ha pasado un usuario sin haber escrito al menos un mensaje.</p>
<p>Cada vez que un usuario nuevo entra al chat se revisa la bd buscando usuarios inactivos, si existen se borran de la bd. Si entro al chat y exedo el tiempo de inactividad el cliente enviara un mensaje al servidor indicandole que debo ser borrado de la bd al mismo tiempo que el cliente me redirecciona al la interfaz del login.</p>
<p>Lo anterior es con la intencion de tener la bd limpia de mensajes antiguos y garantizando que la caja de texto para mostrar a los usuarios de una sala simpre este actualizada y no me muestre usuarios que se logearon hace 20 dias al chat.</p>
<p>La verdad es que por el tercer punto que es la interfaz ocupe el codigo css y html de lo mas basico, y en realidad es muy poco el codigo que abarca esa parte.</p>
<p>En el segundo punto en la parte del servidor.php, se ocupan principalmente las operaciones basicas a la bd, sentencias select, insertar y borrar registros. A grandes rasgos el servidor recibe una peticion del cliente identificada por un numero entero y a partir de ahi ejecuta cierta funcion y devolviendo un resultado al cliente. aqui pongo un esquema de la bd muy general.</p>
<p><img src="http://i252.photobucket.com/albums/hh20/_erendira18_/bdmoochat.gif" /></p>
<p>Y por el ultimo el cliente en javascript seencarga de solicitar informacion al servidor y desplegarla en el navegador.</p>
<p>Voy a anexar una carpeta comprimida con todos los archivos y con instrucciones de configuracion por si alguien quiere hecharle un ojo, no quiero colocar el codigo entero porque son como unas 400 lineas entre php y javascript, tampoco pienso explicar el programa linea por linea pues me llevaria algunas decenas de hojas.</p>
<p>Y ya para terminar la idea no era hacer una aplicacion comercial de un chat, simplemente queria empezar a conocer mootools y como ejercico de programacion esta exelente,  y pues si a alguien le sirve el codigo pues adelante.</p>
]]></content:encoded>
			<wfw:commentRss>http://skulshit.net/blog/?feed=rss2&amp;p=162</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Listas simples ligadas en C</title>
		<link>http://skulshit.net/blog/?p=155</link>
		<comments>http://skulshit.net/blog/?p=155#comments</comments>
		<pubDate>Wed, 16 Dec 2009 21:14:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lenguaje C]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[datos]]></category>
		<category><![CDATA[enlazadas]]></category>
		<category><![CDATA[estructura]]></category>
		<category><![CDATA[ligadas]]></category>
		<category><![CDATA[listas]]></category>

		<guid isPermaLink="false">http://skulshit.net/blog/?p=155</guid>
		<description><![CDATA[Pues en esta ocasion veremos la implementacion de una lista ligada en c, solomente sera como un ejemplo ilustrativo pero las ideas desarrolladas aqui podran extenderse hacia horizontes mas amplios.
Una lista es un tipo de dato abstracto, se le llama asi porque es un tipo de dato definido por el programador a diferencia de los [...]]]></description>
			<content:encoded><![CDATA[<p>Pues en esta ocasion veremos la implementacion de una lista ligada en c, solomente sera como un ejemplo ilustrativo pero las ideas desarrolladas aqui podran extenderse hacia horizontes mas amplios.</p>
<p>Una lista es un tipo de dato abstracto, se le llama asi porque es un tipo de dato definido por el programador a diferencia de los tipos de datos que nos ofrece el lenguaje C que ya son &#8220;nativos&#8221; del lenguaje por ejemplo los tipo int, float,char..etc </p>
<p>Imaginemos a la lista como una longaniza =), la longaniza esta compuesta por muchos trozos de carne unidos uno tras otro, las longanizas tienen un fin y un inicio. Imagina que todos los trozos que forma la longaniza son iguales, pues ahora la lista es como la longaniza y esos trozos de carne de la longaniza les llamaremos los nodos de la lista. Cada uno de los nodos puede almacenar informacion para fines practicos los nodos de nuestra lista almacenaran un entero, y podemos realizar varias operaciones sobre una lista, por ejemplo ver si la lista esta vacio o dicho de otra forma si la lista no tiene nodos, tambien recorrer los nodos de la lista buscando dentro de su informacion por algun valor en especifico, podremos insertar nuevos nodos a la lista, eliminar nodos &#8230;etc</p>
<p><span id="more-155"></span></p>
<p>Hagamos una especificacion de las operaciones que definiremos sobre nuestra lista.</p>
<ul>
<li>Inicializar una lista</li>
<li>Insertar un nodo</li>
<li>Eliminar un nodo</li>
<li>consultar un nodo</li>
<li>Desplegar todos los elementos de la lista</li>
</ul>
<p>He recordado que como preparacion para un examen de la universidad implemente una lista con todas las operacion anteriores, ademas de las versiones recursivas de cada una de las operaciones. Si sabes usar punteros y puedes implementar una lista con todas sus operaciones por ti mismo, seguramente seras un buen programador de C.</p>
<p>Como habiamos dicho nuestra lista contendra nodos, entonces deberemos definir una estructura que llamaremos nodo, un nodo es como una capsula que contendra informacion en este caso cada nodo debe contener una referencia hacia el siguiente nodo de la lista y una variable de tipo entero que hara el papel de campo de informacion.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">struct</span> nodo<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> info<span style="color: #339933;">;</span>
	<span style="color: #993333;">struct</span> nodo <span style="color: #339933;">*</span>sig<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> nodo nodo<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Esa es la definicion de nuestro nodo, es una estructura que contiene dos campos info que almacenara un entero y el otro campo es sig que es un apuntador a la estructura nodo, los nodos de la lista pueden almacenar muchas cosas mas, aqui solo almacenaremos un entero, y ademas le ponemos un alias a struct nodo, que sera nodo, esto es util para no tener que teclear simpre &#8220;struct nodo&#8221;, en vez de eso solo escribiremos nodo.</p>
<p>Para la lista necesitaremos tener una operacion mas inehrente a la estructura de dato lista, es la operacion para crear un solo nodo, como habiamos dicho los nodos contienen 2 cuantos o campos de informacion, un campo es la referencia hacia el siguiente nodo y el otro es el campo informacion representada por una variable entero.</p>
<p>Cuando creamos un nuevo nodo debemos crear una variable del tipo struct nodo e inicializar sus campos, necesariamente debes asignarle en entero a su campo info y su campo sig debera apuntar a la constante NULL.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
*funcion para crear un nuevo nodo
*@param int
*@return nodo
*/</span>
nodo <span style="color: #339933;">*</span> creaNodo <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> elem<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	nodo <span style="color: #339933;">*</span>aux<span style="color: #339933;">;</span>
	aux <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>nodo <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>nodo<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	aux<span style="color: #339933;">-&gt;</span>valor <span style="color: #339933;">=</span> elem<span style="color: #339933;">;</span>
	aux<span style="color: #339933;">-&gt;</span>sig <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> aux<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>La funcion anterior no devolvera  el nuevo nodo creado con sus campos ya inicializados.</p>
<p>Las siguientes operaciones que incluyan modificaciones a la lista recibiran la lista completa como parametro y la modificaran por referencia como en el caso de la funcion para insertar un nuevo nodo. las operaciones como consultar un nodo recibiran a la lista por valor.</p>
<p>Por regla general una lista debe tener un inicio y un final, nosotros identificaremos el inicio de la lista con un simple apuntador a nodo llamado inicio que servirar para identificar el inicio de la lista, el apuntador inicio debe apuntar al primer nodo de la lista, si la lista esta vacio el apuntador inicio apuntara a null.</p>
<p>Unas de las primeras operacion a crear es la operacion para inicializar una lista, lo unico que hara esta funcion es recibir el puntero inicio y asignarle la constante NULL;</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
*inicializa una lista
*@param &amp;nodo
*@return void
*/</span>
<span style="color: #993333;">void</span> iniciaLista <span style="color: #009900;">&#40;</span>nodo <span style="color: #339933;">*</span>lista<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	lista <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Ahora vemos una funcion mas interesante, la funcion para insertar un nuevo nodo. al insertar un nuevo nodo se presentan los siguientes casos</p>
<ul>
<li>
Problema:Hay que insertar el nuevo nodo en una lista vacio<br />
Solucion:Apuntar el inicio de la lista al nuevo nodo creado.</p>
</li>
<li>
Problema:Hay que insertar el nodo al inicio de la lista posicion n =1, cuando la lista no esta vacia.<br />
Solucion:crear un nuevo nodo, apuntar el campo siguiente del nuevo nodo al inicio de la lista, apuntar el inicio de la lista al nuevo nodo creado</p>
</li>
<li>
Problema:Hay que insertar el nodo en alguna posicion n, con n distinto de 1<br />
Solucion: Apuntar el campo siguiente del nuevo nodo al nodo situado en la posicion n, el nodo en la posicion n-1 en su campo siguiente debe apuntar al nuevo nodo creado.
</li>
</ul>
<p>Aqui esta la funcion correspondiente a insertar un nuevo nodo en la lista recibiendo como parametro una posicion de insercion.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
*inserta un nuevo nodo en la lista 
*@param &amp;nodo, int, int 
*@return void
*/</span>
<span style="color: #993333;">void</span> inserta<span style="color: #009900;">&#40;</span> nodo <span style="color: #339933;">**</span>lista<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> elem<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> pos<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  nodo <span style="color: #339933;">*</span>aux<span style="color: #339933;">;</span>
  aux <span style="color: #339933;">=</span>  creaNodo<span style="color: #009900;">&#40;</span>elem<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">*</span>lista <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  	<span style="color: #339933;">*</span>lista <span style="color: #339933;">=</span> aux<span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		aux<span style="color: #339933;">-&gt;</span>sig <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>lista<span style="color: #339933;">;</span>
		<span style="color: #339933;">*</span>lista <span style="color: #339933;">=</span> aux<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
		nodo <span style="color: #339933;">*</span>contador<span style="color: #339933;">;</span>
		<span style="color: #993333;">int</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
		contador <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>lista<span style="color: #339933;">;</span>
		<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>contador <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				aux<span style="color: #339933;">-&gt;</span>sig <span style="color: #339933;">=</span> contador<span style="color: #339933;">-&gt;</span>sig<span style="color: #339933;">;</span>
				contador<span style="color: #339933;">-&gt;</span>sig <span style="color: #339933;">=</span> aux<span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			contador <span style="color: #339933;">=</span> contador<span style="color: #339933;">-&gt;</span>sig<span style="color: #339933;">;</span>
			i<span style="color: #339933;">++;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>En la funcion anterior ya se han implementado los tres casos posibles para la insercion de un elemento en una lista.</p>
<p>Ahora pasemos a la operacion que consiste en eliminar un nodo de la lista a partir de una posicion pasada como parametro. En esta situacion se presentan los siguientes casos.</p>
<ul>
<li>
Problema:Hay que eliminar el nodo en la posicion 1<br />
Solucion:apuntar el inicio de la lista al nodo en la posicion 2, eliminar el nodo en la posicion 1</p>
</li>
<li>
Problema:Hay que eliminar el nodo en la posicion n, con n>1<br />
Solucion: en nodo en la posicion n-1 debera apuntar al nodo en la posicion n+1, eliminar el nodo en la posicion n
</li>
</ul>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
*elimina un nodo de la lista
*@param int, &amp;nodo
*@return void
*/</span>
<span style="color: #993333;">void</span> borrar<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> pos<span style="color: #339933;">,</span> nodo <span style="color: #339933;">**</span>lista<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	nodo <span style="color: #339933;">*</span>aux<span style="color: #339933;">;</span>
	aux <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>lista<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #339933;">*</span>lista <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>lista<span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>sig<span style="color: #339933;">;</span>
		free<span style="color: #009900;">&#40;</span>aux<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
                <span style="color: #993333;">int</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
                <span style="color: #993333;">struct</span> nodo <span style="color: #339933;">*</span>aux2<span style="color: #339933;">;</span>
                <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> <span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    i<span style="color: #339933;">++;</span>
                    aux <span style="color: #339933;">=</span> aux<span style="color: #339933;">-&gt;</span>sig<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                aux2 <span style="color: #339933;">=</span> aux<span style="color: #339933;">-&gt;</span>sig<span style="color: #339933;">;</span>
                aux<span style="color: #339933;">-&gt;</span>sig <span style="color: #339933;">=</span> aux2<span style="color: #339933;">-&gt;</span>sig<span style="color: #339933;">;</span>
                free<span style="color: #009900;">&#40;</span>aux2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>La siguiente funcion consiste en consultar el campo informacion de algun nodo en especifico a partir de su posicion en la lista, el proceso sera el siguiente recorreremos la lista secuencialmente hasta situarnos en la posicion que se desea consultar y devolveremos el campo info del nodo en el que nos encontramos.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
*devuelve el compo info de un nodo
*@param &amp;nodo, int
*@return int
*/</span>
<span style="color: #993333;">int</span> consulta<span style="color: #009900;">&#40;</span>nodo <span style="color: #339933;">*</span>lista<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> pos<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	nodo <span style="color: #339933;">*</span>aux<span style="color: #339933;">;</span>
	aux <span style="color: #339933;">=</span> lista<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>pos<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		aux <span style="color: #339933;">=</span> aux<span style="color: #339933;">-&gt;</span>sig<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> aux<span style="color: #339933;">-&gt;</span>info<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Y por ultimo hablaremos de la funcion que despliega todos los elementos de una lista, la idea es visitar cada uno de los nodos de la lista de manera secuencial, uno tras otro e imprimir en pantalla el contenido de su campo info.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
*Despliega el contenido de la lista
*@param &amp;nodo
*@return void
*/</span>
<span style="color: #993333;">void</span> desplegar<span style="color: #009900;">&#40;</span>nodo <span style="color: #339933;">*</span>lista <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	nodo <span style="color: #339933;">*</span>aux<span style="color: #339933;">;</span>
	aux <span style="color: #339933;">=</span> pila<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>aux <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>Lista vacia<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Contenido de la lista:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> aux <span style="color: #339933;">!=</span> NULL <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> aux<span style="color: #339933;">-&gt;</span>info<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            aux <span style="color: #339933;">=</span> aux<span style="color: #339933;">-&gt;</span>sig<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Todas la funciones anteriores las he guardado en un archivo llamado lista.c y para probarlas he hecho un archivo de aplicacion llamado aplicacion.c y contiene lo siguiente.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;lista.c&quot;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    nodo <span style="color: #339933;">*</span>inicio<span style="color: #339933;">;</span>
    iniciaLista<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>inicio<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">10</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        inserta<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>inicio<span style="color: #339933;">,</span> i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    desplegar<span style="color: #009900;">&#40;</span>inicio<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>pero por si las dudas aqui dejo un archivo comprimido con los archivos creados en este documento enlace</p>
]]></content:encoded>
			<wfw:commentRss>http://skulshit.net/blog/?feed=rss2&amp;p=155</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clase para redimensionar imagenes en php</title>
		<link>http://skulshit.net/blog/?p=149</link>
		<comments>http://skulshit.net/blog/?p=149#comments</comments>
		<pubDate>Wed, 16 Dec 2009 21:08:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[programacion orientada o objetos]]></category>
		<category><![CDATA[clase]]></category>
		<category><![CDATA[gd]]></category>
		<category><![CDATA[libreria]]></category>
		<category><![CDATA[redimensionar]]></category>
		<category><![CDATA[resize]]></category>

		<guid isPermaLink="false">http://skulshit.net/blog/?p=149</guid>
		<description><![CDATA[bueno, he hecho una clase que sirve para redimensionar imagenes, es necesario tener instalada la libreria gd del php, he tratado de que se lo mas general posible, la clase tiene dos metodos utilizables que son
resizeImg() sirve para hacer un resize a un solo archivo de imagen y el otro resizeDir() que sirve que hacer [...]]]></description>
			<content:encoded><![CDATA[<p>bueno, he hecho una clase que sirve para redimensionar imagenes, es necesario tener instalada la libreria gd del php, he tratado de que se lo mas general posible, la clase tiene dos metodos utilizables que son<br />
resizeImg() sirve para hacer un resize a un solo archivo de imagen y el otro resizeDir() que sirve que hacer resize a todas las imagenes contenidas en un directorio.</p>
<p>La verdad es que me ha sido muy util, sobre todo porque algunas veces es necesario sacar miniaturas de las imagenes de un directorio el problema es que a veces pueden ser cientos de imagenes y cambiarles el tamaño a mano es una tarea pesado, pero con esta clase solo es necesario pasarle algunos parametro ejecutar el script y listo.</p>
<p>La clase tiene un metodo que verifica los parametros pasados a los metodos, si existe algun error con alguno de los parametros se genera una exepcion mostrando un mensaje describiendo el error y se termina la ejecucion del metodo sin tirar warnings ni errores fatales.</p>
<p><span id="more-149"></span></p>
<p>La clase redimensiona imagenes gif, png y jpg se le puede especificar el ancho, el alto o ambos, se puede espeficiar el directorio donde estan las imagenes a redimensionar y tambien el directorio de salida de las miniaturas. si estos ultimos 2 parametros se dejan en blanco la clase trabajara sobre el directorio donde se encuentra el script que ejecuta la clase.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
* Autor: Eduardo Guerrero
* Creacion: 14.12.2009
*
* Redimensiona una imagen individual o todas las imagenes de un directorio
* metodos publicos: 
*		resizeDir($args[]) redimensiona las imagenes de un directorio
*		resizeImg($args[]) redimensiona una imagen
*/</span>
&nbsp;
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> imageResize <span style="color: #009900;">&#123;</span>
&nbsp;
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$prefijo</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;thumb_&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$dir</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$nuevodir</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$tipos</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;gif&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;image/gif&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;jpeg&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;image/jpeg&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;png&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;image/png&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #666666; font-style: italic;">/*
*Redimensiona una imagen
*
*@param array $args[]
*@param $args['dir'] esta vacio se redimensionaran las imagenes del directorio donde se ejecuta el script que llamo a esta clase
*@param $args['prefijo'] esta vacio se usara thumb_
*@param menos $args['x'] o $args['x'] deben estar definidas con valores mayores que cero
*@param $args['nuevodir'] las copias redimensionadas se almacenaran en el directorio donde se ejecuta el script que llamo a esta clase
*/</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> resizeDir<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
		try<span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">checkArgs</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>catch <span style="color: #009900;">&#40;</span> Exception <span style="color: #000088;">$error</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$error</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valDefault</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$archivos</span> <span style="color: #339933;">=</span> <span style="color: #990000;">scandir</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dir</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #000088;">$i</span><span style="color: #339933;">&lt;</span>sizeof<span style="color: #009900;">&#40;</span><span style="color: #000088;">$archivos</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span><span style="color: #000088;">$i</span><span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">is_file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$archivos</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$tamano</span> <span style="color: #339933;">=</span> <span style="color: #990000;">getimagesize</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$archivos</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tamano</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">array_search</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">image_type_to_mime_type</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tipos</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					<span style="color: #000088;">$medidas</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">obtenerMedidas</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tamano</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$tipo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">image_type_to_mime_type</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$medidas</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">obtenerMedidas</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tamano</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$origen</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dir</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$archivos</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$destino</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nuevodir</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prefijo</span><span style="color: #339933;">.</span><span style="color: #000088;">$archivos</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resize</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$origen</span><span style="color: #339933;">,</span> <span style="color: #000088;">$destino</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tipo</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tamano</span><span style="color: #339933;">,</span> <span style="color: #000088;">$medidas</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
*Redimensiona las imagenes dentro de un directorio
*
*@param array $args[]
*@param $args['dir'] debe contener la ruta completa de la imagen a redimensionar incluyendo nombre de archivo
*@param $args['prefijo'] esta vacio se usara thumb_
*@param menos $args['x'] o $args['x'] deben estar definidas con valores mayores que cero
*@param $args['nuevodir'] la copia redimensionada se almacenara en el directorio donde se ejecuta el script que llamo a esta clase
*/</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> resizeImg<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		try<span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">checkArgs</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>catch <span style="color: #009900;">&#40;</span> Exception <span style="color: #000088;">$error</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$error</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valDefault</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$origen</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dir</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$destino</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nuevodir</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prefijo</span><span style="color: #339933;">.</span><span style="color: #990000;">basename</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dir</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$tamano</span> <span style="color: #339933;">=</span> <span style="color: #990000;">getimagesize</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dir</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$tipo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">image_type_to_mime_type</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$medidas</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">obtenerMedidas</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tamano</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resize</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$origen</span><span style="color: #339933;">,</span> <span style="color: #000088;">$destino</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tipo</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tamano</span><span style="color: #339933;">,</span> <span style="color: #000088;">$medidas</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> resize<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$origen</span><span style="color: #339933;">,</span> <span style="color: #000088;">$destino</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tipo</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tamano</span><span style="color: #339933;">,</span> <span style="color: #000088;">$medidas</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #000088;">$extension</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_search</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$tipo</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tipos</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #000088;">$imageCreateFrom</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;imagecreatefrom&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$extension</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$image</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;image&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$extension</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$contenido</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$imageCreateFrom</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$origen</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$recipiente</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatetruecolor</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #990000;">imagecopyresampled</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$recipiente</span><span style="color: #339933;">,</span> <span style="color: #000088;">$contenido</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
			<span style="color: #000088;">$image</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$recipiente</span><span style="color: #339933;">,</span> <span style="color: #000088;">$destino</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #990000;">imagedestroy</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$contenido</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #990000;">imagedestroy</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$recipiente</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> obtenerMedidas<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tamano</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000088;">$medidas</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>integer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>integer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span><span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000088;">$medidas</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>integer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>integer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span><span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #000088;">$tamano</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$medidas</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000088;">$medidas</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> valDefault<span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'prefijo'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prefijo</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'prefijo'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#40;</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dir'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dir</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dir</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dir'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#40;</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nuevodir'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nuevodir</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nuevodir</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nuevodir'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> checkArgs<span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tipo</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//verificacion de parametros</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$tipo</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;dir&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dir'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #990000;">is_dir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dir'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 
				throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dir'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; no es un directorio valido&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;dir&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
				throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hay que definir la clave dir en el array args&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">is_file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dir'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
				throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;la clave dir debe contener un archivo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">getimagesize</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dir'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
				throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;la clave dir debe contener un archivo de imagen valido&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #000088;">$info</span> <span style="color: #339933;">=</span> <span style="color: #990000;">getimagesize</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dir'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">array_search</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">image_type_to_mime_type</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tipos</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
				throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Tipo de imagen no soportado&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;x&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;y&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;Hay que definir al menos la clave x o la clave y en el array args&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;al menos x o y deben tener valores no vacios, mayores que cero&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #990000;">is_numeric</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> or <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>  <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #990000;">is_numeric</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> 
			throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;al menos x o y deben tener valores numericos validos mayores que cero&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;nuevodir&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nuevodir'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #990000;">is_dir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nuevodir'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;El directorio de salida: &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nuevodir'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; no es valido&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://skulshit.net/blog/?feed=rss2&amp;p=149</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paso de valores por referencia y por valor</title>
		<link>http://skulshit.net/blog/?p=140</link>
		<comments>http://skulshit.net/blog/?p=140#comments</comments>
		<pubDate>Sun, 13 Dec 2009 22:37:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lenguaje C]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[lenguaje]]></category>
		<category><![CDATA[referencia]]></category>
		<category><![CDATA[valor]]></category>
		<category><![CDATA[variables]]></category>

		<guid isPermaLink="false">http://skulshit.net/blog/?p=140</guid>
		<description><![CDATA[Ahora hablara sobre un tema basico en la la programacion en lenguaje C y es el paso de parametros a funciones por valor y por referencia.
Cuando se empieza a aprender el lenguaje C y se habla sobre el tema de las funciones generalmente no se habla sobre este tema pues podria confundir a la persona [...]]]></description>
			<content:encoded><![CDATA[<p>Ahora hablara sobre un tema basico en la la programacion en lenguaje C y es el paso de parametros a funciones por valor y por referencia.</p>
<p>Cuando se empieza a aprender el lenguaje C y se habla sobre el tema de las funciones generalmente no se habla sobre este tema pues podria confundir a la persona que esta aprendiendo, el solo hecho de aprender el concepto de funcion y su manejor pede costar algo de tiempo y lo digo porque lo mismo me sucedio a mi cuando recien empezaba.</p>
<p>veamos un ejemplo de uso comun de una funcion</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #993333;">void</span> porValor<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> param<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     param <span style="color: #339933;">+=</span><span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> numero<span style="color: #339933;">=</span><span style="color: #0000dd;">5</span><span style="color: #339933;">;</span>
    porValor<span style="color: #009900;">&#40;</span>numero<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;El valor de numero es %d&quot;</span><span style="color: #339933;">,</span> numero<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>La salida del programa anterior debe ser:</p>
<p><code><br />
El valor de numero es 5<br />
</code></p>
<p>En las lineas anteriores de codigo se ha pasado <i>por valor</i> la </p>
<p><span id="more-140"></span></p>
<p>variable numero a la funcion porValor(), ¿que significa esto? que cuando paso la variable numero a la funcion porValor() el sistema crea un copia de la variable numero y la funcion porValor() trabajara exclusivamente sobre la copia de la variable numero y NO sobre la variable numero declarada al inicio del codigo. La variable numero y la copia de esta variable se localizan en lugares distintos en la memoria de la computadora y por lo tanto sus valores son independientes entre si.</p>
<p>Es por eso que al modificar la copia de la variable numero dentro de la funcion porValor no afecta en ningun sentido a la verdadera variable numero.</p>
<p>Tal vez te preguntaras ¿y que tal si yo quiero modificar la original variable numero dentro de la funcion porValor()?</p>
<p>La respuesta es muy sencilla solo hay que hacer uso del paso de valores por referencia.</p>
<p>El paso de valores por referencia consiste en pasar a la una funcion la direccion real de memoria de una variable, de esta forma cuando se modifica la variable dentro de una funcion se estara modificando directamente la variable que ha sido pasada por parametro, sin hacer uso de ninguna copia de dicha variable.</p>
<p>veamos el codigo correspondiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> porRef<span style="color: #009900;">&#40;</span> <span style="color: #993333;">int</span> <span style="color: #339933;">*</span>param <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #339933;">*</span>param <span style="color: #339933;">+=</span><span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> numero <span style="color: #339933;">=</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">;</span>
    porRef<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>numero<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;El valor de numero es %d&quot;</span><span style="color: #339933;">,</span> numero<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Ahora si la salida del codigo anterior debe ser la siguiente:</p>
<p><code><br />
El valor de numero es 7<br />
</code></p>
<p>Analizemos el codigo anterior. ¿Cuales fueron las modificaciones que hizimos con respecto al codigo anterior? pues&#8230; a la funcion porRef necesitamos pasarle la direccion de la variable que queremos modificar por eso en la linea 7 usamos el operador direccion &#038; para obetner la direccion de numero y pasarla a porRef(),en la linea 1 observa como en la definicion de la funcion porRef() dentro de los parametros porRef(int *param) estamos recibiendo un puntero a entero, lo necesitamos porque hemos enviado a la funcion la direccion de una variable y sabemos que los punteros almacenan la direccion de una variable.</p>
<p>Dentro del codigo de la funcion (linea 2) seguimos usando el operador * para afectar directamente el contenido de la variable numero, lo unico que hacemos es aumentarlo en 2 unidades.</p>
<p>Esta es la forma mas sencilla en la que se ha ocurrido hablar sobre este tema, pero si aun te cuesta entender esto no te preocupes, lo unico que recomiendo es escribir pequeños trozos de codigo para hacer pruebas y tu mismo te daras cuenta al menos a nivel intuitivo sobre que es lo que esta pasando.</p>
]]></content:encoded>
			<wfw:commentRss>http://skulshit.net/blog/?feed=rss2&amp;p=140</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduccion a punteros en C (empezando desde cero)</title>
		<link>http://skulshit.net/blog/?p=135</link>
		<comments>http://skulshit.net/blog/?p=135#comments</comments>
		<pubDate>Sun, 13 Dec 2009 22:32:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lenguaje C]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[aprender]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[introduccion]]></category>
		<category><![CDATA[punteros]]></category>

		<guid isPermaLink="false">http://skulshit.net/blog/?p=135</guid>
		<description><![CDATA[ahora hablare sobre punteros en c, cualquiera que quiera programar en c debe de manejar los punteros como si fueran las tablas de multiplicar, personalmente he visto muchos casos de personas que inclusive estando a nivel universitario les cuesta trabajo entender como trabajan los punteros, es por eso que escribo esto y vamos a empezar [...]]]></description>
			<content:encoded><![CDATA[<p>ahora hablare sobre punteros en c, cualquiera que quiera programar en c debe de manejar los punteros como si fueran las tablas de multiplicar, personalmente he visto muchos casos de personas que inclusive estando a nivel universitario les cuesta trabajo entender como trabajan los punteros, es por eso que escribo esto y vamos a empezar desde cero, simpre es bueno tener unas buenas bases de punteros. En cierto sentido manejar punteros es facil, si tenemos algunos conocimientos en la forma en que se almacena la informacion en una computadora mmmm&#8230;ya empezamos mal (pensaras), pero no te preocupes no introducire demasiada jerga computacional, solo hablaremos de los conceptos en su forma mas general y digerible para cualquiera que alguna vez haya programado solo un poco.</p>
<h2>Material Previo</h2>
<p>Dentro de la computadora existe algo llamado memoria ram, es un espacio donde se almacenan todos los datos que utiliza la computadora solo cuando esta encendida, eso incluye los programas en C que escribes y ejecutas.</p>
<p>La memoria esta formada por registros cada registro tiene una direccion y el tamaño de estos registros depende de la arquitectura de la computadora, por lo general las computadoras tienen una arquitectura de 32, pero computadoras mas recientes tienen arquitecturas de 64 bits. Esto quiere decir que el tamaño de los registros de la memoria son de 32 bits para arquitecturas de 32 bits y asi para las demas arquitecturas.</p>
<p><span id="more-135"></span></p>
<p>Imaginemos a la memoria RAM como una tira enorme finita,  dividida en tantos segmentos (registros) como el tamaño de la ram lo permita, cada uno de esos segmentos o registros es de un tamaño de 32 bits o n bits dependiendo de la arquitectura, es decir cada uno de los registros tiene 32 espacios (bits) y un bit es un espacio donde se puede colocar un 1 o un 0. </p>
<p>Un grupo de 8 bits contiguos o si lo prefieres un grupo de 8 espacios contiguos en un registro se llama BYTE, por consecuencia un registro de la memoria contiene 4 bytes.</p>
<p>analizemos la siguiente imagen.</p>
<p><img src="http://i252.photobucket.com/albums/hh20/_erendira18_/memoria.gif"  /></p>
<p>Como habiamos dicho la memoria la dividimos en muchos registros, cada registro almacena 32 bits o 8 bytes y cada bit  solo puede contener 0 o 1, cada uno de los registros tienen asociada una direccion, esto es para los programas que trabajan en la computadora puedan localizar los datos que almacenan en ella, una direccion de memoria es un numero asociado con un registro de la memoria que generalmente se maneja en sistema hexadecimal.</p>
<p>Todo lo anterior es importante porque los punteros trabajan sobre direcciones de memoria. Tres cosas importantes sobre una variable son:</p>
<ul>
<li>Una variable tiene una direccion de memoria</li>
<li>Una variable tiene un tipo de dato (int,char,long..etc)</li>
<li>Una variable almacena un valor</li>
</ul>
<p>Las variables que ponemos en nuestros programas en C se guardan en la memoria ram, el tamaño del espacio que ocupa una variable depende del tipo de la variable, veamos la siguiente lista:</p>
<ul>
<li>Variables tipo Char ocupan 1 byte</li>
<li>Variables tipo int ocupan 2 bytes</li>
<li>Variables tipo long ocupan 4 bytes</li>
<li>Variables tipo double ocupan 8 bytes</li>
</ul>
<p>Los anteriores son solo algunos de los tipos que maneja C, vemos que por ejemplo un char ocupa solo 8 bits o un byte, esto implica que no llena todo un registro de la memoria pues los registros son de 32 bits o 4 bytes, mientras que el tipo long ocupa hasta 2 registros completos.</p>
<p>Bueno ahora que sabemos como es que se almacenan las variables en la computadora, pasemos a los punteros. Hay que aclarar que para tener un buen manejo de punteros hay que tener en cuenta el &#8220;material previo&#8221; de manera muy general y conceptual pues es la base de lo que sigue.</p>
<h2>¿Que es un puntero?</h2>
<p>veamos la siguiente definicion:</p>
<p><i>Un puntero es una variable que almacena la direccion de memoria de otra variable</i></p>
<p>Eso es, simplemente un puntero es una variable que se usa para guardar la direccion de memoria donde se encuentra otra variable.</p>
<p>Todos sabemos que para usar una variable en lenguaje C primero hay que declararla y las variables puntero no son la exepcion, veamos como se declara una variable puntero.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//un puntero que apunta hacia una variable tipo int</span>
<span style="color: #993333;">int</span> <span style="color: #339933;">*</span>puntero_entero<span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//un puntero que apunta hacia una variable tipo char</span>
<span style="color: #993333;">char</span> <span style="color: #339933;">*</span>puntero_char<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>veras que la declaracion de un puntero es parecida a la declaracion de una variable con la exepcion de que hay que anteponer este operador indireccion * antes del nombre de la variable. Este operador se utiliza para obtener el contenido de la variable a la que apunta un puntero.</p>
<p>Hay otro operador importante que es el operador unario &#038; y se utiliza para obtener la direccion de memoria donde se encuentra una variable.</p>
<p>Ojo hasta este punto hay que reconocer dos cosas importantes la direccion de una variable y el valor que almacena una variable son cosas distintas. Como dijimos un puntero almacena una direccion de memoria asociada a una variable veamos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">&nbsp;
<span style="color: #666666; font-style: italic;">//declaracion y uso de punteros</span>
&nbsp;
<span style="color: #993333;">int</span> <span style="color: #339933;">*</span>puntero<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> var <span style="color: #339933;">=</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">;</span>
puntero <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span>var<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;valor de var:%d, direccion de var:%x&quot;</span><span style="color: #339933;">,*</span>puntero<span style="color: #339933;">,&amp;</span>var<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Al ejecutar las lineas anteriores observaremos lo que veiamos en el material previo, declaramos un variable puntero que apunta hacia una variable de tipo entero, luego declaramos una variable llamada var y le asignamos un 5, despues a puntero le asignamos la direccion de memoria de var, finalmente desplegamos el valor de var usando el puntero pues sabemos que *puntero me devuelve el contenido de la variable a la que apunta puntero y por ultimo &#038;var me devuelve la direccion de var. La salida de las lineas anteriores debe ser.</p>
<p><code><br />
valor de var:5, direccion de var:bf0452af<br />
</code></p>
<p>podemos modificar el valor de var utilizando el puntero, veamos un ejemplo;</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">*</span>puntero <span style="color: #339933;">+=</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;nuevo valor de var %d&quot;</span><span style="color: #339933;">,</span> var<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>La salida deberia ser </p>
<p><code><br />
nuevo valor de var 10<br />
</code></p>
<p>Todo lo anterior es solo la base de los punteros y esta dedicado para aquellos que no saben nada de punteros, asi que si ya eres experto, puedes criticar este articulo en la seccion de comentarios.</p>
<h2>Aritmetica de punteros</h2>
<p>Cuando yo escribo esto:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> var <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
var<span style="color: #339933;">++;</span></pre></td></tr></table></div>

<p>Esperaria que el valor de la variable var se incrementara en una unidad. Lo anterior NO sucede asi con los punteros, veamos</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> var <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> <span style="color: #339933;">*</span>puntero <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span>var<span style="color: #339933;">;</span>
puntero<span style="color: #339933;">++;</span></pre></td></tr></table></div>

<p>La ultima instruccion no incrementa una unidad el contenido de puntero, lo que realmente hace es avanzar el puntero una cantidad especifica de bytes dada por el tipo de dato al que apunta el puntero,<br />
es decir puntero++; hara que el puntero apunte a los siguientes 2 bytes de la memoria esto es porque el tipo de dato al que apunta es un entero y los enteros ocupan 2 bytes, en el caso de los enteros imagina a la memoria como una tira larga dividida en segmentos de 2 bytes, el puntero es como un flecha que apunta hacia cierto segmento de la tira, al escribir puntero++; la flecha apuntara siguiente segmento de la tira.</p>
<h2>Un ejemplo final</h2>
<p>En este ejemplo desplegaremos un arreglo usando un puntero</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #993333;">int</span> arreglo<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> <span style="color: #339933;">*</span>puntero<span style="color: #339933;">;</span>
&nbsp;
    arreglo<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">;</span>
    arreglo<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">60</span><span style="color: #339933;">;</span>
    arreglo<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">70</span><span style="color: #339933;">;</span>
    arreglo<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">80</span><span style="color: #339933;">;</span>
&nbsp;
    puntero <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span>arreglo<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #993333;">int</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">4</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;elemento: %d valor; %d <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #339933;">*</span>puntero<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        puntero<span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>La forma en que se almacena un los elementos de un array en memoria es de manera contigua es decir se elige algun segmento de la memoria para almacenar el primer elemento del arreglo, el elemento 0 digamos, el elemento 1 se almacena inmediatamente despues del elemento 0, el elemento 2 se almacena despues del elemento 1, y asi hasta agotar los elementos del array, esto quieres decir que tendremos una sucesion de segmentos de 2 bytes uno tras otro y cada uno representa en elemento de un array de enteros.</p>
<p>Analizemos el codigo es programa simple, lineas 2 y 3 declaro un array de 4 elementos y un puntero ambos de tipo int. Lineas 8 a 11 lleno el array con algunos numeros. Linea 13 al puntero le asigno la direccion del primer elemento del array.</p>
<p>Finalmente en el ciclo for despliego el contenido al que apunta el puntero que es el valor del primer elemento de array, luego avanzo el puntero a los siguientes 2 bytes, es decir al siguiente elemento del arreglo y se repite el ciclo. la salida del programa anterior debe ser</p>
<p><code><br />
elemento: 1 valor: 50<br />
elemento: 2 valor: 60<br />
elemento: 3 valor: 70<br />
elemento: 4 valor: 80<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://skulshit.net/blog/?feed=rss2&amp;p=135</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tecnicas de concentracion en el gimnasio aka Gym</title>
		<link>http://skulshit.net/blog/?p=124</link>
		<comments>http://skulshit.net/blog/?p=124#comments</comments>
		<pubDate>Sun, 13 Dec 2009 22:27:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[entrenamiento]]></category>
		<category><![CDATA[concentracion]]></category>
		<category><![CDATA[ejercicio]]></category>
		<category><![CDATA[entreno]]></category>
		<category><![CDATA[gimnasio]]></category>
		<category><![CDATA[gym]]></category>
		<category><![CDATA[tecnicas]]></category>

		<guid isPermaLink="false">http://skulshit.net/blog/?p=124</guid>
		<description><![CDATA[pues ahora se me ha ocurrido escribir sobre mi entrenamiento en el gym, y para inaugurar esta categoria quiero hablar de un tema que me parece es de vital importancia cuando alguien de verdad quiere mejorar su cuerpo en el gimnasio. Las tenicas estan escritas en orden descendente dependiendo de su eficacia y  eficiencia.
Tecnica [...]]]></description>
			<content:encoded><![CDATA[<p>pues ahora se me ha ocurrido escribir sobre mi entrenamiento en el gym, y para inaugurar esta categoria quiero hablar de un tema que me parece es de vital importancia cuando alguien de verdad quiere mejorar su cuerpo en el gimnasio. Las tenicas estan escritas en orden descendente dependiendo de su eficacia y  eficiencia.</p>
<h2>Tecnica 1: Sugestion</h2>
<p>Aclaro que no soy entrenador ni fisicoculturista de carrera, hablo por experiencia propia y hablo de mis ideas muy personales y validas para mi, sin embargo lo que describo en las siguientes lineas de verdad me ha ayudado mucho en mis entrenos y realmente me daria mucha satisfaccion saber que lo que escribo le sirvio a alguien mas, sin embargo puedes tomar este documento como una mera platica entre compañeros de entreno.</p>
<p>Cuando una persona asiste al gimnasio con la idea de superarse solamente debe tener una idea en mente &#8230;. mejorar su cuerpo, no hay lugar para pensamientos sobre los amigos, la escuela, el trabajo, ninguna otra preocupacion debe vivir en la mente del entrenado.</p>
<p><span id="more-124"></span></p>
<p>Piensa por un momento que durante la siguiente hora (o el tiempo que entrenes) en este universo solo existen tu, las barras, discos y mancuernas, no hay nada mas.</p>
<p>En lo personal cuando estoy entrenando prefiero no platicar con alguien y solo concetrarme en mi objetivo.</p>
<p>Ahora antes de empezar tu rutina toma algunos minutos 15, 20 los que necesites, y repite para ti cuales son los objetivos que tienes en mente, mientras lo haces toma respiraciones largas y profundas, preguntate a que has venido a entrenar, preguntate porque hay tantas personas que tienen un cuerpo escultural y di para ti mismo que tu no eres diferente a toda esa gente, tu tambien puedes y lo vas a lograr.</p>
<p>Debes de sentirte realmente ofendido y enojado acerca del hecho de no haber realizado aun tus objetivos, pero tambien feliz y emocionado por la idea de saber que hoy vas a dar todo e inclusive mas por alcanzar esas metas que te has marcado.</p>
<p>Te miraras a ti mismo con el cuerpo que has soñado, te imaginaras levantando con facilidad aquellos discos que tanto trabajo te cuestan y te diras a ti mismo que son ligeros, visualizate realizando 1 repeticion con la facilidad con la que mueves un dedo, 2 repeticiones&#8230;.3,4&#8230;.10. Recuerda todo lo anterior tomando respiraciones profundas y largas, ojos cerrados y el cuerpo totalmente relajado.</p>
<p>Si lo has hecho bien realmente sentiras latir tu corazon mas rapido de lo normal, te sudan las manos, sientes como la sangre golpea con fuerza el interior de la punta de tus dedos, te has sugestionado tanto que estas en un estado de alerta y consientemente has soltado un poco de adrenalina, este es el momento preciso debes levantarte y tomar la barra con el peso maximo y hacer lo que debes.</p>
<p>La adrenalina es una sustancia natural secretada por las glandulas suprarrenales, esta sustancia generalmente se libera en situaciones de peligro y es un exelente estimulante para mejorar el rendimiento fisico.</p>
<p>Es muy preferible realizar lo anterior en antes de cada serie en la que se quiera mejorar, y tratar de mantener las ideas expuestas durante la serie es tambien una exelente idea.</p>
<p>El unico inconveniente de este tecnica es el tiempo, puedes gastar aprox. 10-15 antes de cada serie es realmente costoso  en terminos del tiempo. </p>
<h2>Tecnica 2: Enojo</h2>
<p>Como su nombre lo indica consiste en recrear en la imaginacion un evento pasado que haya sido realmente estresantes en nuestras vidas. En lo personal prefiero recordar momentos que tengan que ver con gente que me haya hecho pasar verdaderos ratos malos. Esto tecnica es mucho mas personal que la anterior pues tiene que ver con situaciones personales. </p>
<p>Por ejemplo a mi me molestaba sobremanera el comportamiento que tenia uno de mis jefes en el trabajo conmigo.. simpre vigilandome, llamandome la atencion, exagerando cualquier detalle por pequeño que fuera &#8230; me gusta pensar en el sin fin de formas en las que pude haberle contestando en alguno de sus multiples regaños, la actitud de enojo y malestar que genera recordar dichas situaciones realmente puede ser canalizado en una mejora en la calidad de los entrenamientos, el truco esta en tomar un tiempo pequeño en recordar alguna situacion desagradable, volver a vivir el momento absorber todo ese enojo que se genero, toda la ira y disgusto, cuando estes a punto de explotar en un grito de furia tomas la barra y comienzas a sacar todas las repes que puedas, el enojo sera tal que ni siquiera pensaras en que la barra de verdad esta pesada, o que tal vez ya estas cansado, el enojo es un sentimiento que puede llevar a los limites el fisico de las personas.</p>
<p>Todo lo anterior hecho en el tiempo debido y con la cantidad de enojo correcta hara maravillas en los progresos de tu entreno.</p>
<p>Esta tenica es de naturaleza similar a la anterior por tanto ha heredado las mismas ventajas y desventas.</p>
<h2>Tecnica 3: Exitacion</h2>
<p>Esta tecnica es especial. Hay que ser verdaderamente cuidadoso y discreto  para aplicarla. Se basa en uno de los sentimientos que el hombre posee de forma natural y tambien en el siguiente hecho:</p>
<p>Un musculo necesita oxigeno para funcionar, el oxigeno es el combustible de los musculos, los musculos obtienen oxigeno atraves de la sangre, la sangre es el vehiculo en donde viaja el oxigeno hacia los musculos, cuando un musculo trabaja de forma constante, el cuerpo empieza a enviar sangre en grandes cantidades al musculo que lo necesita, cuando la sangre fluye en grandes cantidades hacia un musculo se dice que esta <strong>congestionado</strong></p>
<p>EL truco de esta tecnica esta en posar la mirada en alguna de las mujeres que aden por ahi, es altamente preferible elegir a la tipa mas buena del gimnasio, observarla con detenimiento por un momento, fijar la mirada en su cuerpo y analizar la forma en que camina y hace ejercicio, aclaro que esto debe hacerse con sumo cuidado, mientras observas a la mujer es una exelente idea maquilar pensamientos de indole sexual con la mujer en cuestion. Al cabo de unos minutos sentiras el corazon latir rapidamente y tu mienbro responder al estimulo visual,  este es el momento ideal para tomar la barra y sacar todas las repes posibles, una vez que has entrada en un estado de exitacion el corazon bombea sangre a tope y eso es precisamente lo que necesitamos para aumentar la oxigenacion de los musculos, esta condicion corporal no dura mucho tiempo asi que debe aprovecharse al maximo mientras se este fisicamente exitado.</p>
<p>La eficacia de esta tecnica puede aumentar sobremanera de dos formas. Una es manteniendo en mente cualquier fantasia sexual que involucre a la mujer del gimnasio mientras hacemos las repeticiones.  La otra forma es evitar tener actividad sexual durante un largo tiempo, alrededor de un mes sin actividad sexual dara resultados muy provechosos.</p>
<p>Esta tecnica tiene grandes desventajas pues alguien podria darse cuenta de que estamos observando deliberadamente a las feminas del gym y acarrearnos serios problemas, otra es que seria bastante desagradable tener una ereccion completa en el gimnasio lo ideal es tomar la barra inmediatamente despues de que sentimos los primeros indicios de exitacion, es seguro que al acabar una serie la ereccion habra desaparecido totalmente.</p>
<p>En lo personal he practicado las tecnicas anteriores con resultados realmente buenos y como ultimo consejo hay que evitar asistir al gimnasio sin ganas, sin objetivos claros, con ideas vagas.</p>
<p>Si no tienes un objetivo bien claro y una determinacion por mejorar bien fuerte da igual que asistas o que no asistas al gym.</p>
]]></content:encoded>
			<wfw:commentRss>http://skulshit.net/blog/?feed=rss2&amp;p=124</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

