<?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>Pablasso &#187; Tutoriales</title>
	<atom:link href="http://www.pablasso.com/category/tutoriales/feed" rel="self" type="application/rss+xml" />
	<link>http://www.pablasso.com</link>
	<description>Sobre desarrollo de software y ñoñadas</description>
	<lastBuildDate>Sun, 09 Oct 2011 19:25:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Unit Tests en PHP con SimpleTest</title>
		<link>http://www.pablasso.com/2009/05/29/unit-tests-en-php-con-simpletest</link>
		<comments>http://www.pablasso.com/2009/05/29/unit-tests-en-php-con-simpletest#comments</comments>
		<pubDate>Fri, 29 May 2009 22:20:09 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Pruebas]]></category>
		<category><![CDATA[Refactorizacion]]></category>
		<category><![CDATA[SimpleTest]]></category>
		<category><![CDATA[Unit Case]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=1818</guid>
		<description><![CDATA[Hacer pruebas automatizadas de tu código siempre es una buena costumbre, en especial cuando te llega el tiempo de tener que refactorizar.
Para este ejemplo vamos a hacer una clase que calcula las áreas de triángulos, rectángulos y cuadrados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Area
&#123;
	function triangle&#40;$base, $height&#41; &#123;
		return &#40;$base * $height&#41; / 2;
	&#125;
&#160;
	function rectangle&#40;$breadth, $height&#41; &#123;
		return $breadth * $height;
	&#125;
&#160;
	function square&#40;$side&#41; &#123;
		return [...]]]></description>
			<content:encoded><![CDATA[<p>Hacer pruebas automatizadas de tu código siempre es una buena costumbre, en especial cuando te llega el tiempo de tener que refactorizar.</p>
<p>Para este ejemplo vamos a hacer una clase que calcula las áreas de triángulos, rectángulos y cuadrados.</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="php"><span style="color: #000000; font-weight: bold;">class</span> Area
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">function</span> triangle<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$base</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000">$height</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$base</span> <span style="color: #66cc66;">*</span> <span style="color: #ff0000">$height</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> rectangle<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$breadth</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000">$height</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #ff0000">$breadth</span> <span style="color: #66cc66;">*</span> <span style="color: #ff0000">$height</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> square<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$side</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #ff0000">$side</span> <span style="color: #66cc66;">*</span> <span style="color: #ff0000">$side</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Y vamos a utilizar la herramienta <a href="http://simpletest.org">SimpleTest</a> para probar que nuestras funciones están trabajando bien. Para empezar a usarlo solo tienes que <a href="http://simpletest.org/en/download.html">bajarlo</a> y colocar la carpeta <code>simpletest</code> dentro de tu proyecto o algún directorio global de PHP.</p>
<p>Una vez instalado podemos comenzar a escribir nuestros casos de prueba.</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
</pre></td><td class="code"><pre class="php"><span style="color: #b1b100;">require_once</span> <span style="color: #ff0000;">'simpletest/autorun.php'</span><span style="color: #66cc66;">;</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #ff0000;">'area.php'</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> AreaTestCase <span style="color: #000000; font-weight: bold;">extends</span> UnitTestCase
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #ff0000">$area</span><span style="color: #66cc66;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> setUp<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #ff0000">$this</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">area</span> <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Area<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> testTriangle<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #ff0000">$result</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$this</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">area</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">triangle</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">6</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #ff0000">$this</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">assertEqual</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">30</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000">$result</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> testRectangle<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #ff0000">$result</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$this</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">area</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">rectangle</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #ff0000">$this</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">assertEqual</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000">$result</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> testSquare<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #ff0000">$result</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$this</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">area</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">square</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #ff0000">$this</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">assertTrue</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">is_numeric</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$result</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>El incluir <code>autorun.php</code> nos da la habilidad de poder extender la clase <code>UnitTestCase</code>, permitiéndonos ejecutar las aserciones. Además el <code>autorun.php</code> se encarga de correr las pruebas sin necesidad de que tu tengas que instanciar nada y también es suficientemente inteligente para darte si cuenta si estas en la consola o directamente en el navegador.</p>
<p>La funcion <code>setUp</code> se ejecuta automáticamente antes de correr cualquier prueba. Aquí como todas nuestras pruebas hacen uso de la clase <code>Area</code>, entonces aprovechamos para hacer la instancia una sola vez.</p>
<p>Finalmente SimpleTest corre todas las pruebas que note comienzan con el nombre <code>test</code> y nosotros tenemos 3 de ellas:</p>
<ul>
<li>testTriangle: Prueba que el resultado de la operación sea igual a 30.</li>
<li>testRectangle: Prueba que el resultado de la operación sea igual a 10.</li>
<li>testSquare: Prueba que el resultado de la operación sea un número.</li>
</ul>
<p>Cualquier otro resultado nos arrojaría errores. Estas pruebas ejecutadas en el navegador se verían así, pero también puedes ejecutarlas en consola sin ningún problema.</p>
<p><img src="http://www.pablasso.com/wp-content/uploads/2009/05/simpletest.png" alt="Oh si, la confirmación del código perfecto" title="Oh si, la confirmación del código perfecto" width="650" height="164" class="aligncenter size-full wp-image-1819" /></p>
<p>SimpleTest tiene muchas opciones más como el agrupar casos de prueba, escribir tus propias aserciones, mockups (simulaciones de escenarios) y pruebas web (aunque limitado). Así que no te dejes de llevar por el nombre no es simple, solo es fácil de usar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2009/05/29/unit-tests-en-php-con-simpletest/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Qué es la recursividad?</title>
		<link>http://www.pablasso.com/2009/01/16/que-es-la-recursividad</link>
		<comments>http://www.pablasso.com/2009/01/16/que-es-la-recursividad#comments</comments>
		<pubDate>Fri, 16 Jan 2009 11:00:46 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[fibonacci]]></category>
		<category><![CDATA[matrioska]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[recursividad]]></category>
		<category><![CDATA[recursivo]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=823</guid>
		<description><![CDATA[En programación la recursividad es un concepto básico que se enseña cuando das tus primeros pasos de programación, aún así siempre es un tema confuso y que suele causar problemas a los programadores mas maduros también. Ya que antes tonteamos con la definición, ahora toca tratar de explicarla.
Existen varios tipos de recursividad pero todos ocurren [...]]]></description>
			<content:encoded><![CDATA[<p>En programación la <a href="http://es.wikipedia.org/wiki/Recursividad">recursividad</a> es un concepto básico que se enseña cuando das tus primeros pasos de programación, aún así siempre es un tema confuso y que suele causar problemas a los programadores mas maduros también. Ya que antes <a href="http://www.pablasso.com/2009/01/10/la-cita-del-dia-9">tonteamos con la definición</a>, ahora toca tratar de explicarla.</p>
<p>Existen varios tipos de recursividad pero todos ocurren cuando una función se llama así misma -aunque sea indirectamente-. Al pensar en esto te preguntaras -acertadamente- si esto no provoca un bucle infinito, pero para evitar este problema se construye una &#8220;condición de escape&#8221;, cuando el número es suficiente pequeño se termina la recursión y se regresa un valor fijo.</p>
<p><a href="http://www.flickr.com/photos/mymollypop/2647004052/"><img src="http://www.pablasso.com/wp-content/uploads/2009/01/matrioska.jpg" alt="Las Matrioska son un gran ejemplo de recursividad" title="Las Matrioska son un gran ejemplo de recursividad" width="668" height="421" class="aligncenter size-full wp-image-827" /></a></p>
<h3>Fibonacci al rescate</h3>
<p>La sucesión de <a href="http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci">Fibonacci</a> (si pasaste de noche las clases, la sucesión se conforma de dos números iniciales, donde el siguiente se calcula con la suma de los dos anteriores, es decir; 0,1,1,2,3,5,8,13.. ) es un problema que se utiliza casi siempre para codificar un ejemplo de recursión, su formula sería algo así:</p>

<div class="wp_syntax"><div class="code"><pre>f(0) = 0
f(1) = 1
f(n) = f(n-1) + f(n-2)</pre></div></div>

<p>Y se puede programar casi literalmente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">function</span> fibonacci<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$n</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000">$n</span> <span style="color: #66cc66;">&lt;</span>  <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#41;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">;</span>
    <span style="color: #b1b100;">else</span>
        <span style="color: #b1b100;">return</span> fibonacci<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$n</span><span style="color: #cc66cc;">-1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">+</span> fibonacci<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$n</span><span style="color: #cc66cc;">-2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Esto no es ni de cerca la manera mas eficiente de resolver Fibonacci, pero si es un buen ejemplo de recursión. Como pueden ver la función se va llamando a si misma con cantidades cada vez mas pequeñas hasta que llegamos a la &#8220;condición de escape&#8221;, que nos permite que se termine la recursión y se devuelvan los resultados.</p>
<p>Si colocamos mensajes a la entrada y salida de la función podemos seguir paso a paso la secuencia y entenderlo mejor. Por ejemplo, para <em>n = 4</em>, esto es lo que se despliega:</p>
<blockquote><p>
entrada: 4<br />
entrada: 3<br />
entrada: 2<br />
entrada: 1<br />
salida: 1<br />
entrada: 0<br />
salida: 1<br />
salida: 2<br />
entrada: 1<br />
salida: 1<br />
salida: 3<br />
entrada: 2<br />
entrada: 1<br />
salida: 1<br />
entrada: 0<br />
salida: 1<br />
salida: 2<br />
salida: 5
</p></blockquote>
<p>¿No te queda claro? Aquí tienes una mejor explicación: <a href="http://www.pablasso.com/2009/01/16/que-es-la-recursividad">¿Qué es la recursividad?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2009/01/16/que-es-la-recursividad/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>¿Como instalar Ruby on Rails en Ubuntu?</title>
		<link>http://www.pablasso.com/2009/01/12/%c2%bfcomo-instalar-ruby-on-rails-en-ubuntu</link>
		<comments>http://www.pablasso.com/2009/01/12/%c2%bfcomo-instalar-ruby-on-rails-en-ubuntu#comments</comments>
		<pubDate>Tue, 13 Jan 2009 02:04:43 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[rubygems]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[webrick]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=770</guid>
		<description><![CDATA[Es común que nos encontremos guías que nos recomiendan la instalación de Rails por medio de Rubygems, el gestor de paquetes y librerías de Ruby. Esto causa confusión en varias distribuciones de Linux, donde ya existen gestores de paquetes que se encargan de este tipo de instalaciones.
A la manera de Debian
Debian en especial tiene políticas [...]]]></description>
			<content:encoded><![CDATA[<p>Es común que nos encontremos guías que nos recomiendan la instalación de <a href="http://rubyonrails.org/">Rails</a> por medio de <a href="http://www.rubygems.org/">Rubygems</a>, el gestor de paquetes y librerías de Ruby. Esto causa confusión en varias distribuciones de Linux, donde ya existen gestores de paquetes que se encargan de este tipo de instalaciones.</p>
<h3>A la manera de Debian</h3>
<p>Debian en especial tiene <a href="http://pkg-ruby-extras.alioth.debian.org/rubygems.html">políticas acerca de Rubygems</a>, como no cumple sus requerimientos ellos mismos se encargan de proveer el paquete para Rails y que tu lo puedas instalar directamente con apt. También proveen con un paquete de Rubygems, si quieres tener el comando gem a tu disposición.</p>
<p>Desafortunadamente para los que nos gusta tener las últimas actualizaciones pronto, si seguimos el consejo de Debian agregamos otra capa de complejidad a la distribución, y esto provoca que los paquetes que provee apt siempre vayan atrás de lo que se nos ofrece con Rubygems (que ademas nos ofrece muchas cosas mas aparte de Rails)</p>
<h3>A la manera recomendada</h3>
<p>Instalar Rubygems con los archivos fuente (aunque me moleste esto) y Ruby desde el repositorio es la mejor opción para estar bien actualizado y evitar conflictos entre los gestores de paquetes.</p>
<p>Así que manos a la obra (esa frase es de lo mas chusca n_n)</p>
<p>Lo primero es instalar <a href="http://www.ruby-lang.org/en/">Ruby</a> desde los repositorios y de paso las herramientas para compilación, que podrían ser utilizadas por Rubygems en un futuro.</p>

<div class="wp_syntax"><div class="code"><pre class="bash"><span style="color: #c20cb9; font-weight: bold;">sudo</span> apt-get <span style="color: #c20cb9; font-weight: bold;">install</span> ruby-full build-essential</pre></div></div>

<p>Enseguida podemos instalar Rubygems con sus archivos fuentes, puedes tomar la <a href="http://rubyforge.org/frs/?group_id=126">versión mas reciente desde sourceforge</a>. Aquí instalaremos la versión 1.3.1, pero no importa realmente que instales una versión un poco mas vieja, ya que Rubygems se puede actualizar a si mismo con un solo comando justo como apt.</p>

<div class="wp_syntax"><div class="code"><pre class="bash"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>rubyforge.org<span style="color: #000000; font-weight: bold;">/</span>frs<span style="color: #000000; font-weight: bold;">/</span>download.php<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">45905</span><span style="color: #000000; font-weight: bold;">/</span>rubygems<span style="color: #000000;">-1.3</span><span style="color: #000000;">.1</span>.tgz
<span style="color: #c20cb9; font-weight: bold;">tar</span> -xvzf rubygems<span style="color: #000000;">-1.3</span><span style="color: #000000;">.1</span>.tgz
<span style="color: #7a0874; font-weight: bold;">cd</span> rubygems<span style="color: #000000;">-1.3</span><span style="color: #000000;">.1</span><span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> ruby setup.rb
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">ln</span> -s <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>gem1<span style="color: #000000;">.8</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>gem
<span style="color: #c20cb9; font-weight: bold;">sudo</span> gem update --system</pre></div></div>

<p>Y entonces podemos instalar Rails con Rubygems. Voila!</p>

<div class="wp_syntax"><div class="code"><pre class="bash"><span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> rails</pre></div></div>

<h3>Probando 1,2,3</h3>
<p>Una rápida prueba para comprobar que nuestra instalación ha funcionado:</p>

<div class="wp_syntax"><div class="code"><pre class="bash">rails railstest
<span style="color: #7a0874; font-weight: bold;">cd</span> railstest
ruby script<span style="color: #000000; font-weight: bold;">/</span>server</pre></div></div>

<p>Esto ha creado un proyecto de Rails y ha puesto a correr un <a href="http://www.webrick.org/">servidor de pruebas</a> en el puerto 3000. Si entras con tu navegador a <em>http://localhost:3000</em> veras tu nuevo proyecto.</p>
<p><img src="http://www.pablasso.com/wp-content/uploads/2009/01/railstest.jpg" alt="Proyecto de prueba de Ruby on Rails" title="Proyecto de prueba de Ruby on Rails" width="474" height="187" class="aligncenter size-full wp-image-771" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2009/01/12/%c2%bfcomo-instalar-ruby-on-rails-en-ubuntu/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Depura código de PHP con Komodo IDE y Xdebug</title>
		<link>http://www.pablasso.com/2009/01/02/depura-codigo-de-php-con-komodo-ide-y-xdebug</link>
		<comments>http://www.pablasso.com/2009/01/02/depura-codigo-de-php-con-komodo-ide-y-xdebug#comments</comments>
		<pubDate>Fri, 02 Jan 2009 07:13:59 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[komodo ide]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=663</guid>
		<description><![CDATA[Tengo cerca de dos años utilizando Komodo Edit, la versión libre de Komodo IDE, para programar aplicaciones web y estoy bastante feliz con el. Cubre mis necesidades mínimas como tener un buen coloreado de código, autocompletado, marcadores, snippets y ser agradable a la vista.
Ahora (gracias a Hunk) comencé a utilizar Komodo IDE 5 que tiene [...]]]></description>
			<content:encoded><![CDATA[<p>Tengo cerca de dos años utilizando <a href="http://www.activestate.com/komodo_edit/">Komodo Edit</a>, la versión libre de <a href="http://www.activestate.com/komodo/">Komodo IDE</a>, para programar aplicaciones web y estoy bastante feliz con el. Cubre mis necesidades mínimas como tener un buen coloreado de código, autocompletado, marcadores, snippets y ser agradable a la vista.</p>
<p>Ahora (gracias a <a href="http://hunk.com.mx/">Hunk</a>) comencé a utilizar Komodo IDE 5 que tiene muchas características importantes (en serio, <a href="http://www.activestate.com/komodo/features/">muchas</a>), pero entre ellas destaca la posibilidad de integrar un depurador completo (breakpoints, watchers, etc) que se integra perfectamente con <a href="http://www.xdebug.org">Xdebug</a>.</p>
<h3>Otras opciones</h3>
<p>Esto no es nada nuevo claro, he probado otras opciones como <a href="http://2bits.com/articles/using-vim-and-xdebug-dbgp-for-debugging-drupal-or-any-php-application.html">Vim + Xdebug</a>, <a href="http://www.eclipse.org/pdt/">PDT</a> (Eclipse). Con Vim la integración no se siente natural y ademas el nerd dentro de mi no es suficientemente bueno para recordar shortcuts que no utilizo continuamente.</p>
<p>PDT no me gusta porque esta basado en <a href="http://www.eclipse.org">Eclipse</a>, contra el que no tengo nada en contra, pero es demasiado generalista y Java nunca se ha distinguido por su ligereza. <a href="http://www.zend.com/en/products/studio/">Zend Studio</a> es el IDE oficial de los creadores de PHP, pero con el puro precio no quiero ni mirarlo, no lo he probado en años y ahora parece que se mudaron también a Eclipse.</p>
<h3>¿Como funciona?</h3>
<p>La cosa es así: Xdebug es una extensión de PHP que le da la habilidad de proveer muchos mas datos para depuración, esta extensión (por medio de «depuración por remoto») se comunicará directamente con Komodo, quien crea un proceso que espera por datos todo el tiempo.</p>
<p>Tu puedes usar tu aplicación en tu navegador favorito y Komodo sabrá cuando te has topado con un breakpoint, inmediatamente iniciará una sesión de depuración y avisará por ello.</p>
<h3>Configurando Komodo IDE con Xdebug</h3>
<p>Configurar es muy sencillo (en cualquier sistema operativo), si tienes Ubuntu la instalación de Xdebug es una simple linea.</p>

<div class="wp_syntax"><div class="code"><pre class="bash"><span style="color: #c20cb9; font-weight: bold;">sudo</span> aptitude <span style="color: #c20cb9; font-weight: bold;">install</span> php5-xdebug</pre></div></div>

<p>Ubuntu habrá creado un archivo de configuración solo para Xdebug en la ruta <em>/etc/php5/apache2/conf.d/xdebug.ini</em> (si tu sistema operativo no separa las configuraciones lo meterás directo al <em>php.ini</em>), que sera cargado la próxima vez que reinicies tu servidor web.</p>
<p>En este archivo vamos a habilitar depuración por remoto agregando los siguientes parámetros:</p>

<div class="wp_syntax"><div class="code"><pre class="bash">xdebug.<span style="color: #007800;">remote_enable=</span><span style="color: #000000;">1</span>
xdebug.<span style="color: #007800;">remote_handler=</span>dbgp
xdebug.<span style="color: #007800;">remote_mode=</span>req
xdebug.<span style="color: #007800;">remote_host=</span><span style="color: #000000;">127.0</span><span style="color: #000000;">.0</span><span style="color: #000000;">.1</span>
xdebug.<span style="color: #007800;">remote_port=</span><span style="color: #000000;">9000</span></pre></div></div>

<p>Existe un parámetro llamado <em>xdebug.idekey</em> al que debes de poner atención si varias personas comparten el mismo servidor web. El parámetro <em>zend_extension</em> Ubuntu ya lo debió haber agregado.</p>
<p>El parámetro <em>xdebug.remote_port</em> manda los datos por dicho puerto a tu IDE. Para decirle a Komodo que utilice ese puerto tienes que ir a «Preferences -> Debugger -> Connection» y agregarlo manualmente. Asegúrate de aprobar también la opción de «Debug -> Listen for Debugging Connections» para que levante el proceso que espere por datos.</p>
<p>Reinicia tu servidor web para que cargue la configuración de Xdebug y listo.</p>
<h3>¡A probarlo!</h3>
<p>Para probar solo tienes que agregar este parámetro en la URL:</p>

<div class="wp_syntax"><div class="code"><pre class="bash">?<span style="color: #007800;">XDEBUG_SESSION_START=</span><span style="color: #000000;">1</span></pre></div></div>

<p>Aquí por ejemplo coloque un breakpoint en una aplicación hecha con <a href="http://cakephp.org/">CakePHP</a> (que tiene bastantes capas tan solo contando el framework) y al probar con Firefox, Komodo abrió automáticamente la sesión de debuggeo.</p>
<p><img src="http://www.pablasso.com/wp-content/uploads/2009/01/url_debug.png" alt="URL con el parametro adicional" title="URL con el parametro adicional" width="489" height="28" class="aligncenter size-full wp-image-667" /></p>
<p><img src="http://www.pablasso.com/wp-content/uploads/2009/01/komodo_debug.png" alt="Komodo depurando" title="Komodo depurando" width="658" height="516" class="aligncenter size-full wp-image-668" /></p>
<p>Tremendo no tener que depender de imprimir a pantalla suciamente cuando se necesita depurar algo complicado :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2009/01/02/depura-codigo-de-php-con-komodo-ide-y-xdebug/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Instalando Oracle 10g Enterprise en Ubuntu 8.10</title>
		<link>http://www.pablasso.com/2008/11/27/instalando-oracle-10g-enterprise-en-ubuntu-810</link>
		<comments>http://www.pablasso.com/2008/11/27/instalando-oracle-10g-enterprise-en-ubuntu-810#comments</comments>
		<pubDate>Thu, 27 Nov 2008 12:06:43 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/?p=543</guid>
		<description><![CDATA[La versión Express de Oracle 10g si que viene con soporte directo para Ubuntu, pero si por alguna mágica razón necesitas instalar la Enterprise, que solo viene con soporte oficial para Red Hat, SUSE y Oracle Linux. Seguiremos la sencilla guía de Taw.
Vamos a instalar la versión 10.2.0.1.0, así que la puedes ir bajando y [...]]]></description>
			<content:encoded><![CDATA[<p>La versión <a href="http://www.oracle.com/technology/software/products/database/xe/htdocs/102xelinsoft.html">Express de Oracle 10g</a> si que viene con soporte directo para Ubuntu, pero si por alguna mágica razón necesitas instalar la Enterprise, que solo viene con soporte oficial para Red Hat, SUSE y Oracle Linux. Seguiremos la sencilla <a href="http://t-a-w.blogspot.com/2007/11/installing-oracle-10g-enterprise.html">guía de Taw</a>.</p>
<p>Vamos a instalar la <a href="http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201linuxsoft.html">versión 10.2.0.1.0</a>, así que la puedes ir bajando y desempacando que pesa casi 700MB.</p>
<p>El instalador espera que los binarios de <em>basename</em> y <em>awk</em> esten en <em>/bin</em> y no en <em>/usr/bin</em>, asi que crearemos unos soft links.</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">ln</span> -s <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">basename</span> <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">basename</span>
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">ln</span> -s <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">awk</span></pre></div></div>

<p>SUSE y Red Hat utilizan el grupo <em>nobody</em> para el usuario <em>nobody</em>, pero los sistemas basados en Debian utilizan el grupo <em>nogroup</em>. Así que creamos el nuevo grupo.</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> addgroup nobody</pre></div></div>

<p>Ahora podemos correr el instalador gráfico, pero con un parámetro indicándole que ignore los pre-requisitos, sino detectara que estas utilizando una distribución no soportada oficialmente y cancelara la instalación. Si evitas instalar la base de datos desde este punto y solo instalar las herramientas la instalación durara mucho menos, pero si el tiempo no es problema para ti, créala de una vez y así te ahorras crear el listener y la base de datos manualmente.</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ .<span style="color: #000000; font-weight: bold;">/</span>runInstaller -ignoresysprereqs</pre></div></div>

<p>Al finalizar la instalación, el instalador te pedirá instalar un archivo de bash como root, ejecútalo con sudo tal cual te lo muestra y no tendrás problemas.</p>
<p>Probablemente tengas problemas con librerías faltantes, entonces es muy recomendable incluir las librerías que trae oracle y así te evitas estar compilandolas. Ademas de ejecutarla una vez puedes meterla a tu archivo <em>.bashrc</em> y que se cargue automáticamente cuando inicies sesión.</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ <span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">LD_LIBRARY_PATH=</span><span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>de<span style="color: #000000; font-weight: bold;">/</span>tu<span style="color: #000000; font-weight: bold;">/</span>instalacion<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>En mi caso también me dio problemas por una librería faltante llamada <em>libaio</em>, pero sin problemas se instala porque se encuentra también en los repositorios de ubuntu.</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> aptitude <span style="color: #c20cb9; font-weight: bold;">install</span> libaio-dev</pre></div></div>

<p>Listo! Ya tienes una instalación funcional de Oracle 10g Enterprise.</p>
<p>Ojo, que Oracle no te instalara los menús de accesos directos a la diferentes aplicaciones, pero aún asi tienes todo dentro del directorio <em>/bin</em>. Por mencionar algunos comandos útiles:</p>
<p>Para administrar (crear, borrar, editar) listeners y otras herramientas de red, como conectarte a una base de datos externa:</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ netca</pre></div></div>

<p>Para administrar tus bases de datos (crear, borrar, etc):</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ dbca</pre></div></div>

<p>Para iniciar o parar el database control:</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ emctl start dbconsole
$ emctl stop dbconsole</pre></div></div>

<p>Para iniciar o parar el servicio web de iSQL*Plus:</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ isqlplusctl start
$ isqlplusctl stop</pre></div></div>

<p>Para iniciar o parar listeners:</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ lsnrctl start
$ lsnrctl stop</pre></div></div>

<p>Para entrar a la consola de SQL*Plus</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ sqlplus</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2008/11/27/instalando-oracle-10g-enterprise-en-ubuntu-810/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Una embarradita de Ajax</title>
		<link>http://www.pablasso.com/2007/04/23/una-embarradita-de-ajax</link>
		<comments>http://www.pablasso.com/2007/04/23/una-embarradita-de-ajax#comments</comments>
		<pubDate>Tue, 24 Apr 2007 01:35:35 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/2007/04/23/una-embarradita-de-ajax</guid>
		<description><![CDATA[En estas épocas de tanto framework, lo mejor es simplemente bajarnos una libreria y empezar a utilizar sus funciones sin preocuparnos por lo que pasa detras, pero nunca esta demas aprender a hacerlo desde cero, no es tan complicado como comunmente se cree.
Introducción
La definición de Ajax según la Wikipedia:
&#8220;..es una técnica de desarrollo web para [...]]]></description>
			<content:encoded><![CDATA[<p>En estas épocas de tanto framework, lo mejor es simplemente bajarnos una libreria y empezar a utilizar sus funciones sin preocuparnos por lo que pasa detras, pero nunca esta demas aprender a hacerlo desde cero, no es tan complicado como comunmente se cree.</p>
<p><big><strong>Introducción</strong></big></p>
<p>La definición de <a href="http://es.wikipedia.org/wiki/AJAX">Ajax</a> según la Wikipedia:</p>
<blockquote><p>&#8220;..es una técnica de desarrollo web para crear aplicaciones interactivas. Éstas se ejecutan en el cliente, es decir, en el navegador del usuario, y mantiene comunicación asíncrona con el servidor en segundo plano.&#8221;</p></blockquote>
<p>Esta técnica no parte de nada nuevo, sino que se basa en las tecnologias existentes, como <a href="http://es.wikipedia.org/wiki/JavaScript">Javascript</a>, <a href="http://es.wikipedia.org/wiki/Document_Object_Model">DOM</a> y sobre todo el objeto <a href="http://es.wikipedia.org/wiki/XMLHttpRequest">XMLHttpRequest</a>, quien es el que se encarga de realizar las transacciones asíncronas y que el usuario no tenga que esperar por cada petición al servidor.</p>
<blockquote><p>&#8220;..De esta forma es posible realizar cambios sobre la misma página sin necesidad de recargarla. Esto significa aumentar la interactividad, velocidad y usabilidad en la misma.&#8221;</p></blockquote>
<p><big><strong>Un ejemplo básico de una aplicación Ajax</strong></big></p>
<p>Este ejemplo tiene 3 campos que se utilizan para la selección de un alumno, al hacer click sobre cualquiera de los campos, se manda llamar a un script de PHP, que conectandose a una base de datos devuelve la información del individuo seleccionado sin necesidad de recargar la página.</p>
<p>Es un ejemplo simple y que no tiene ninguna clase de comprobaciones con el fin de que sea sencillo de entender.</p>
<p>Se utilizan 2 archivos que realizan todo el trabajo:</p>
<p><strong><em>intro.html</em>:</strong></p>
<p>Un html que contiene nuestras 2 funciones básicas de javascript, con la primera función <em>obtenerAlumno()</em>, recibimos los datos provenientes del usuario y mandamos llamar al script de PHP que se encargara de sacar la información de la base de datos.</p>
<p>La  segunda función <em>callbackAlumnos()</em>, se ejecuta solamente cuando haya recibido la señal del que archivo de PHP termino su ejecución, en este caso tomamos los datos que el script de PHP nos regreso y se los asignamos al div <em>resultados</em>.</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
</pre></td><td class="code"><pre>&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Introduccion a Ajax&lt;/title&gt;
&nbsp;
&lt;script languague=&quot;Javascript&quot;&gt;
&nbsp;
/* esta funcion se encarga de iniciar la peticion asincrona */
function obtenerAlumno(id)
{
&nbsp;
	/* 
	* tratamos de crear un objeto XMLHttpRequest, 
	* si esto falla usamos ActiveX que es el caso de Internet Explorer 
	*/
	try {
		xmlhttp = window.XMLHttpRequest?new XMLHttpRequest(): new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
	}
	catch (e) {
		alert(&quot;oh noes! no se que navegador estas utilizando!&quot;);
	}
&nbsp;
	/* cuando la peticion al script de php se complete, llamaremos a la funcion callbackAlumo */
	xmlhttp.onreadystatechange = callbackAlumno;
	/* abrimos y mandamos una peticion al script de php, mandandole la id del alumno por get en la url */
	xmlhttp.open(&quot;GET&quot;, 'regresa_datos.php?id=' + id);
	xmlhttp.send(null);
}
&nbsp;
/* esta function se ejecuta cuando el script de php termina su labor */
function callbackAlumno() {
	/* finalmente buscamos el div con id resultados y lo llenamos con la respuesta del script php */
	document.getElementById(&quot;resultados&quot;).innerHTML = xmlhttp.responseText;
}
&nbsp;
&lt;/script&gt;
&nbsp;
&lt;/head&gt;
&lt;body&gt;
&lt;!-- unos simples inputs que mandan la id del resgistro que queremos --!&gt;
&lt;input type=&quot;radio&quot; onclick=&quot;obtenerAlumno('1')&quot; /&gt;Primer Alumno
&lt;input type=&quot;radio&quot; onclick=&quot;obtenerAlumno('2')&quot; /&gt;Segundo Alumno
&lt;input type=&quot;radio&quot; onclick=&quot;obtenerAlumno('3')&quot; /&gt;Tercer Alumno
&lt;p&gt;
&lt;div id=&quot;resultados&quot;&gt;&lt;/div&gt;
&lt;p&gt;
&nbsp;
&lt;/body&gt;
&lt;html&gt;</pre></td></tr></table></div>

<p><strong><em>regresa_datos.php:</em></strong></p>
<p>Este script de PHP recibe la id de algun alumno, lo busca en la base de datos e imprime su información en pantalla.</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="php"><span style="color: #ff0000">$id_alumno</span> <span style="color: #66cc66;">=</span>  <span style="color: #ff0000">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'id'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #000066;">mysql_connect</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'localhost'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'usuario'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'password'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
<span style="color: #000066;">mysql_select_db</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'base_datos'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #ff0000">$resultado</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">mysql_query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;select nombre, domicilio, email from alumnos where id={$id_alumno}&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #ff0000">$fila</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">mysql_fetch_object</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$resultado</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">&quot;Yo soy {$fila-&gt;nombre}, y vivo en {$fila-&gt;domicilio}. Mandame un mail a {$fila-&gt;email}!&quot;</span><span style="color: #66cc66;">;</span></pre></td></tr></table></div>

<p>Si son demasiado ociosos para crear la tabla de ejemplo, aqui les dejo la que utilize:</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="sql"><span style="color: #993333; font-weight: bold;">DROP</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #993333; font-weight: bold;">EXISTS</span> alumnos;
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> alumnos <span style="color: #66cc66;">&#40;</span>
id int <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span>,
nombre varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
codigo varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
domicilio varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
email varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">30</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
nacimiento date <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
<span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> alumnos <span style="color: #66cc66;">&#40;</span>nombre, codigo, domicilio, email, nacimiento<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Fulanito Perez'</span>, <span style="color: #ff0000;">'FP12345678'</span>, <span style="color: #ff0000;">'Av. Fulanita #123'</span>, <span style="color: #ff0000;">'fulanito@perez.com'</span>, <span style="color: #ff0000;">'1983-03-01'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> alumnos <span style="color: #66cc66;">&#40;</span>nombre, codigo, domicilio, email, nacimiento<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Homero Simpson'</span>, <span style="color: #ff0000;">'HS12345678'</span>, <span style="color: #ff0000;">'Av. Siempre Viva #123'</span>, <span style="color: #ff0000;">'homer@aol.com'</span>, <span style="color: #ff0000;">'1954-01-02'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> alumnos <span style="color: #66cc66;">&#40;</span>nombre, codigo, domicilio, email, nacimiento<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Don Benito'</span>, <span style="color: #ff0000;">'DJ12345678'</span>, <span style="color: #ff0000;">'Don Benito Street #123'</span>, <span style="color: #ff0000;">'elbeni@benilandia.com'</span>, <span style="color: #ff0000;">'1944-10-30'</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>Puedes ver este ejemplo funcionando <a href="http://files.pablasso.com/sandbox/intro_ajax/intro.html">aqui</a>.</p>
<p><big><strong>Conclusión</strong></big></p>
<p>Puedes hacer tu aplicación web mucho mas interactiva con el usuario con tan solo unas líneas mas de código, a pesar de que Ajax ya tiene algunos años desde que salio, todavia muchos desarrolladores lo desconocen o aún piensan que es muy complicado, es tiempo de cambiar eso!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2007/04/23/una-embarradita-de-ajax/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Creando graficas con Flash y PHP</title>
		<link>http://www.pablasso.com/2007/04/20/creando-graficas-con-flash-y-php</link>
		<comments>http://www.pablasso.com/2007/04/20/creando-graficas-con-flash-y-php#comments</comments>
		<pubDate>Fri, 20 Apr 2007 17:25:32 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/2007/04/20/creando-graficas-con-flash-y-php</guid>
		<description><![CDATA[PHP/SWF es una herramienta, casi tan anciana como su servidor, que te facilita la creación de graficas en flash que son creadas por medio de datos que contruyes con PHP.
Esta es una pequeña (muy pequeña.. borrador.. no preparada, etc) introducción al uso de  PHP/SWF que hize respondiendo a una pregunta en los foros de [...]]]></description>
			<content:encoded><![CDATA[<p>PHP/SWF es una herramienta, casi tan anciana como su servidor, que te facilita la creación de graficas en flash que son creadas por medio de datos que contruyes con PHP.</p>
<p>Esta es una pequeña (muy pequeña.. borrador.. no preparada, etc) introducción al uso de  PHP/SWF que hize respondiendo a una <a href="http://www.ciberpc.com/foros/f22/graficas-dinamicas-con-php-swf-chart-9048.html">pregunta</a> en los foros de CiberPC.</p>
<p><strong>1er paso:</strong> Crea el archivo que proveera los datos a la grafica, llamemosle <em>datos.php</em></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="php"><span style="color: #b1b100;">include</span> <span style="color: #ff0000;">'charts.php'</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
* Aqui van los datos con los que construimos el grafico
* el primer arreglo indica los rangos
* los siguientes arreglos indican los datos y sus valores
* el primer valor de los datos, indica el nombre de la columna
*/</span>
<span style="color: #ff0000">$chart</span> <span style="color: #66cc66;">&#91;</span> <span style="color: #ff0000;">'chart_data'</span> <span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">array</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #000066;">array</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">&quot;2004&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">&quot;2006&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">&quot;2006&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">&quot;2007&quot;</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
<span style="color: #000066;">array</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">&quot;Ordenadores&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">30</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">63</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
<span style="color: #000066;">array</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">&quot;Lavadoras&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">20</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">65</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">55</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
<span style="color: #000066;">array</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">&quot;Refrigeradores&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">56</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">21</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">90</span> <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* al terminar de construir tus arreglos, imprimelos */</span>
SendChartData <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000">$chart</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span></pre></td></tr></table></div>

<p><strong>2do paso:</strong> Crea el archivo que muestra los datos en pantalla, <em>llamelecomoquieras.php</em></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php"><span style="color: #b1b100;">include</span> <span style="color: #ff0000;">&quot;charts.php&quot;</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
* aqui le dices que inserte un objeto de flash y que obtenga los datos del archivo datos.php
* los ultimos numeros indican ancho y altura del objeto
*/</span>
<span style="color: #000066;">echo</span> InsertChart <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">&quot;charts.swf&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">&quot;charts_library&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">&quot;datos.php&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">500</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">150</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span></pre></td></tr></table></div>

<p><strong>Resultado:</strong> Un feo (por el momento), pero rapido gráfico de Flash que te permite hacer soluciones rapidas y ahorrarte tiempo.</p>
<p style="text-align: center"><img src="http://www.pablasso.com/wp-content/uploads/2007/04/swfphp.jpg" alt="PHPSWF" /></p>
<p>PHP/SWF nos provee de una serie de atributos muy ricos, podemos cambiar practicamente cualquier cosa de la apariencia de la gráfica, el limite solo es tu imaginación (o tu flojera).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2007/04/20/creando-graficas-con-flash-y-php/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Instalar un servidor DNS con TinyDNS (djbdns)</title>
		<link>http://www.pablasso.com/2006/08/25/instalar-un-servidor-dns-con-tinydns-djbdns</link>
		<comments>http://www.pablasso.com/2006/08/25/instalar-un-servidor-dns-con-tinydns-djbdns#comments</comments>
		<pubDate>Fri, 25 Aug 2006 23:47:28 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/2006/08/25/instalar-un-servidor-dns-con-tinydns-djbdns</guid>
		<description><![CDATA[Hace tiempo escribi una serie de howto&#8217;s para la empresa en donde hospedo mis sitios, los voy a ir traduciendo y extendiendo poco a poco en mi blog por si les interesa.
Esta instalación la hize en Gentoo Linux, pero fácilmente la puedes adaptar para tu distribución de linux favorita.
1. Introducción
Un servidor DNS o Servidor de [...]]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo escribi una serie de <a href="http://wiki.vpslink.com">howto&#8217;s</a> para la empresa en donde hospedo mis sitios, los voy a ir traduciendo y extendiendo poco a poco en mi blog por si les interesa.</p>
<p>Esta instalación la hize en Gentoo Linux, pero fácilmente la puedes adaptar para tu distribución de linux favorita.</p>
<p><strong><big>1. Introducción</big></strong></p>
<p>Un servidor <strong>DNS</strong> o <strong>Servidor de Nombre de Dominios</strong> (<em>Domain Name Server</em>) es utilizado para asociar un nombre (dominio) a una dirección IP, el objetivo de esto es que personas como tu y yo no tengamos que recordar cosas del tipo <a href="http://64.233.187.99">64.233.187.99</a>, sino que podemos recordar el simple <a href="http://www.google.com">google.com</a> y listo. Dicho esto, los nombres de dominio fueron pensados para hacernos la vida mas fácil a nosotros, a una computadora le da igual.</p>
<p>En este momento existen 2 principales competidores para servidores DNS en el mundo del código libre, <a href="http://www.isc.org/index.pl?/sw/bind/">BIND</a> y <a href="http://cr.yp.to/djbdns.html">djbdns</a> (también conocido como TinyDNS), siendo este último mas famoso por su sencilla y rapida configuración, asi como por ser mas ligero en memoria. BIND es mas usado todavia, pero ya se esta dejando ver su edad, ojala pronto le den una pulida. En lo personal uso TinyDNS, si bien no tiene demasiada carga, nunca me da problemas.</p>
<p><strong><big>2. Instalación</big></strong></p>
<p>Primero que nada, si aún no lo tienes, hay que instalar <a href="http://cr.yp.to/daemontools/svscan.html">svscan</a> que sirve como seguridad extra, por si algún dia se cae el TinyDNS que lo vuelva a levantar aútomaticamente.</p>
<blockquote><p>emerge supervise-scripts</p></blockquote>
<p>Ahora agregamos svscan al nivel de boteo de default, para que inicie cada vez que el servidor lo haga e iniciamos el servicio (puedes usar la herramienta eselect tambien si asi lo prefieres)</p>
<blockquote><p>rc-update add svscan default<br />
/etc/init.d/svscan start</p></blockquote>
<p>ahora podemos hacer la instalación de TinyDNS</p>
<blockquote><p>emerge djbdns</p></blockquote>
<p>¿dificil? ¿a poco no es portage una maravilla? :)</p>
<p><strong><big>3. Configuración</big></strong></p>
<p>Lo primero que tenemos que hacer es que TinyDNS se ligue a una dirección IP que tengamos en nuestro servidor, con los usuarios <em>tinydns</em> y <em>dnslog</em> que fueron creados durante la instalación, recuerda reemplazar <em>1.2.3.4</em> con tu dirección IP!</p>
<blockquote><p>tinydns-conf Gtinydns Gdnslog /etc/tinydns 1.2.3.4</p></blockquote>
<p>despues creamos un soft link para que svscan se encargue de cuidar nuestro servidor</p>
<blockquote><p>ln -s /etc/tinydns /service/tinydns</p></blockquote>
<p>djbdns tiene una característica de <a href="http://cr.yp.to/djbdns/dnscache.html">cacheado</a>, para hacer las cosas mas rápidas en un futuro, como mi servidor no es de gran demanda, no lo utilizo, pero vale la pena checarlo si tienes problemas de velocidad.</p>
<p>ahora es tiempo de crear nuestro primer registro, asi que lo relacionamos con nuestra IP y ejecutamos make para asegurar que se cumplan los cambios</p>
<blockquote><p>cd /service/tinydns/root<br />
./add-ns example.com 1.2.3.4<br />
make</p></blockquote>
<p>básicamente ya esta funcionando tu dominio, pero seguramente tendras que pulirlo mucho mas para apuntar a servicios como el email, tus direcciones del servidor dns o hacer subdominios, esto lo logras modificando el archivo <em>/service/tinydns/root/data</em>, como ejemplo puedes tomar esta configuración basica</p>
<blockquote><p><small>Zexample.com:example.com.:example.com.:2005100111:28800:7200:604800:3600:3600<br />
#servidor de dominio<br />
&#038;example.com::ns1.example.com.:3600<br />
&#038;example.com::ns2.example.com.:3600<br />
#dominio completo<br />
=example.com:1.2.3.4:3600<br />
#record MX (mail)<br />
example.com:1.2.3.4:a::60<br />
#adicionales<br />
+mail.example.com:1.2.3.4:3600<br />
+ns1.example.com:1.2.3.4:3600<br />
+ns2.example.com:1.2.3.4:3600<br />
+www.example.com:1.2.3.4:3600</small></p></blockquote>
<p>siempre recuerda ejecutar <em>make</em> despues de hacer cambios.</p>
<p>Eso es todo lo que se necesita para correr un servidor de dominios, ya tienes la base, extiendelo a tu gusto ya no dependes de los servicios de alguien mas!</p>
<p>Para referencia, <a href="http://www.dnsreport.com/">dnsreport</a> es un buen servicio que te dira que configuraste bien o mal, no olvides usarlo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2006/08/25/instalar-un-servidor-dns-con-tinydns-djbdns/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>OSx86 en una Dell Inspiron 6000</title>
		<link>http://www.pablasso.com/2006/07/25/osx86-en-una-dell-inspiron-6000</link>
		<comments>http://www.pablasso.com/2006/07/25/osx86-en-una-dell-inspiron-6000#comments</comments>
		<pubDate>Tue, 25 Jul 2006 23:10:17 +0000</pubDate>
		<dc:creator>pablasso</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[inspiron6000]]></category>
		<category><![CDATA[osx86]]></category>

		<guid isPermaLink="false">http://www.pablasso.com/2006/07/25/osx86-en-una-inspiron-6000</guid>
		<description><![CDATA[He tenido algunos problemas para hacer la instalación en mi laptop, pero poco a poco la he echado a andar, esto no pretende ser una guía, pero voy a hacer un resumen de los pasos que hize para no perderle la pista. Disculpen la calidad de las fotografías las tome con mi Nokia 6600 porque [...]]]></description>
			<content:encoded><![CDATA[<p>He tenido algunos problemas para hacer la instalación en mi laptop, pero poco a poco la he echado a andar, esto no pretende ser una guía, pero voy a hacer un resumen de los pasos que hize para no perderle la pista. Disculpen la calidad de las fotografías las tome con mi Nokia 6600 porque no tenia camara a la mano.</p>
<p>Mi Inspiron es una de las que trae video integrado con Intel Extreme Graphics II, por esa razón me ha dado problemas, si tuviera una ATI como la mayoria todo seria diferente ó como <a href="http://www.pablasso.com/2006/07/23/macos-x-para-x86">ya lo mencione</a>, la tarjeta inalambrica que trae de fábrica no funciona con MacOS X todavia, por lo que me decidi a comprar en eBay una Truemobile 1450, que esta comprobada que funciona y funciona muy bien n_nPude encontrar bastante informacion y ayuda en el <a href="http://osx86project.org/">sitio oficial del osx86</a>, ahi encuentras guias, wikis y mucha información muy útil, mas que nada estos dos temas me ayudaron bastante, <a href="http://forum.insanelymac.com/index.php?showtopic=11413">foro sobre la inspiron 6000</a>, <a href="http://forum.insanelymac.com/index.php?showtopic=889">sobre el chip de video 915 </a></p>
<p>Lo primero que hize fue conseguir la instalación para MacOS X pero parchada, ya que la versión original contiene un seguro (bastante debíl, por cierto, por algo a de ser), la puedes bajar de los muchos lugares donde se consiguen torrents, como por ejemplo, <a href="http://thepiratebay.org/">The Pirate Bay</a>, el release que me baje fue el 10.4.6, parcheado por JaS</p>
<p>Despues de quemar el ISO en un DVD me tope con el primer problema, debido a mi tarjeta de video, al arrancar con el dvd de instalación llega a una parte despues de la pantalla inicial de la manzana, en que mi maquina se queda atorada con una pantalla azul, muy a lo windows, 5 minutos de investigación me enseñaron que podria proseguir la instalación si conectaba un monitor externo a mi salida de video, lo hize y grata sorpresa, si continuo la instalación.</p>
<p><a title="conectando a un monitor externo" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_monitor.jpg" /><a title="conectando a un monitor externo" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_monitor.jpg" /></p>
<p><a title="conectando a un monitor externo" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_monitor.jpg"> </a><a title="conectando a un monitor externo" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_monitor.jpg"> </a><a title="conectando a un monitor externo" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_monitor.jpg"> </a><a title="conectando a un monitor externo" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_monitor.jpg"> </a></p>
<div style="text-align: center"><a title="conectando a un monitor externo" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_monitor.jpg"><img alt="conectando a un monitor externo" id="image90" style="width: 363px; height: 278px" src="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_monitor.jpg" /></a></div>
<p>A la hora de particionar, hay una herramienta para esto en la sección de Utilerias, debes de tomar en cuenta que la particion donde vas a instalar tu MacOS debe de ser una partición primaria, sino te va a ser mas dificil el bootear, despues de tener bien la partición, es importante que al seleccionar los paquetes a instalar, selecciones los parches de acuerdo a tu procesador, pon atención especial al &#8216;common&#8217;, el no colocarlo siendo mi procesador SSE2 me provoco tener que instalar de nuevo.</p>
<p>Ahi mismo te dice que debes de instalar para cada procesador, solo debes de saber si tu procesador es SSE2 o SSE3, para usuarios de linux, esto se sabe haciendo un simple &#8216;cat /proc/cpuinfo&#8217; viendo la sección de flags, para los usuarios de windows existen programas que te dan esa info, googleen y encontraran. Generalmente los pentium M(centrino) son SSE2 y los Pentium 4 son SSE3.</p>
<p><a title="eligiendo particiones" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_instalacion.jpg" /></p>
<p><a title="eligiendo particiones" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_instalacion.jpg"> </a><a title="eligiendo particiones" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_instalacion.jpg"> </a><a title="eligiendo particiones" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_instalacion.jpg"> </a><a title="eligiendo particiones" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_instalacion.jpg"> </a></p>
<div style="text-align: center"><a title="eligiendo particiones" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_instalacion.jpg"><img alt="eligiendo particiones" id="image91" style="width: 356px; height: 267px" src="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_instalacion.jpg" /></a></div>
<p>El proceso me tomo como 1 hora en mi laptop, pero de seguro es mas rapido en una PC con mejor procesador, y toma alrededor de los 6GB en total.</p>
<p>Terminada la instalación tuve que añadir unas lineas extras a mi grub, para que MacOS booteara sin afectar mi instalación de Ubuntu ni la de Windows, eso es muy sencillo agregando una nueva entrada como esta, mi partición fue la tercera del disco, tu adaptala como sea tu caso, en grub las particiones se nombran desde el 0.</p>
<blockquote><p>title           MacOS X<br />
root            (hd0,2)<br />
chainloader     +1</p></blockquote>
<p>La partición donde instalaste el MacOS debe de ser de booteo, cambiala con cfdisk en linux o fdisk en msdos, sino es asi, booteara en windows a la hora de seleccionar el MacOS (no me preguntes porque)</p>
<p>Justo cuando estaba pensando en lo facil que habia sido la instalación, cuando me estaba saboreando probar mi nuevo SO, Zaz! pantallazo azul! ya me parecia olia mucho a Microsoft todo esto, pero eso saca uno por usar plataformas que no estan hechas para ese SO.</p>
<p>Nuevamente fue culpa de mi tarjeta de video integrada, por alguna razón sigue dando bien el video, solo que por la interface incorrecta, trata de dar el video como en la instalación por la salida de video, a la fecha de escribir este post todavia no hay una solución por medio de software, si quieres bootear correctamente tienes que hacerlo con un monitor externo.</p>
<p>Si no quieres estar cargando tu monitor a todos lados, en mi caso creo que el cargar un CRT de 19&#8243; le quitaria todo lo &#8220;portatíl&#8221; al asunto, hay otra solución si bien algo sucia, funciona. Solo debes de colocar 2 pequeños cables para puentear tu salida de video en los pines 1-6 y 2-12, esto hara creer a tu laptop que tiene una salida hacia un monitor, no garantizo que esto sea del todo seguro, pero por lo menos a mi no me ha dado problemas. Puedes tomar de ejemplo este dibujo que hizo uno de los foreros de osx86</p>
<div style="text-align: center"><img id="image75" alt="dirty fix" style="width: 323px; height: 116px" src="http://www.pablasso.com/wp-content/uploads/2006/07/dirty_fix.gif" /></div>
<p><a title="cables en la salida del monitor" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_cables.jpg" /></p>
<p><a title="cables en la salida del monitor" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_cables.jpg"> </a><a title="cables en la salida del monitor" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_cables.jpg"> </a><a title="cables en la salida del monitor" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_cables.jpg"> </a><a title="cables en la salida del monitor" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_cables.jpg"> </a></p>
<div style="text-align: center"><a title="cables en la salida del monitor" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_cables.jpg"><img alt="cables en la salida del monitor" id="image92" style="width: 355px; height: 267px" src="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_cables.jpg" /></a></div>
<p>Ya con esto puedo bootear bien en mi nuevo, flamante y económico MacOS X, ahora el único problema que tengo es que el sistema se alenta despues de un par de minutos de funcionar o al tener varias aplicaciones abiertas, no se si esto se solucione hasta que haya soporte para mi driver o hasta que compre una nueva memoria RAM, por lo pronto me voy a comprar 1 ó 2 GB de RAM via eBay de nuevo y les cuento que pasó, por lo pronto de regreso al trabajo.</p>
<p><a title="al fin booteando" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_booting.jpg" /></p>
<p><a title="al fin booteando" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_booting.jpg"> </a><a title="al fin booteando" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_booting.jpg"> </a><a title="al fin booteando" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_booting.jpg"> </a><a title="al fin booteando" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_booting.jpg"> </a></p>
<div style="text-align: center"><a title="al fin booteando" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_booting.jpg"><img alt="al fin booteando" id="image93" style="width: 360px; height: 274px" src="http://www.pablasso.com/wp-content/uploads/2006/08/osx86_booting.jpg" /></a></div>
<p><a title="mi escritorio" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/desktop.jpg" /></p>
<p><a title="mi escritorio" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/desktop.jpg"> </a><a title="mi escritorio" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/desktop.jpg"> </a><a title="mi escritorio" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/desktop.jpg"> </a><a title="mi escritorio" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/desktop.jpg"> </a></p>
<div style="text-align: center"><a title="mi escritorio" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/08/desktop.jpg"><img alt="mi escritorio" id="image94" style="width: 364px; height: 232px" src="http://www.pablasso.com/wp-content/uploads/2006/08/desktop.jpg" /></a></div>
<p>== Actualización #1 ==</p>
<p>Al instalar los drivers de sonido (<a href="http://wiki.osx86project.org/wiki/index.php/Audio">ve esta guía</a>), o mas bien repararlo, porque ya los trae,  me soluciono el problema de la ralentización, ahora todo va muy bien, muchas veces tengo que conectar primero la maquina antes de prenderla porque sino arranca con el procesador a menos velocidad, pero eso ya es culpa del speedstep de intel</p>
<p>== Actualización #2 ==<br />
Dicho y hecho, me llego mi tarjeta inalámbrica de 20dlls, truemobile 1450, y la detecto sin tener que hacer modificaciones o instalar nada, igual en windows, solo falta ubuntu, pero creo que lo voy a quitar para poner Gentoo, ya tengo demasiado SO para mortales instalado n_n</p>
<p><a title="La tarjeta compatible" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/12/cambiando_wireless2.jpg" /></p>
<p><a title="La tarjeta compatible" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/12/cambiando_wireless2.jpg"> </a><a title="La tarjeta compatible" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/12/cambiando_wireless2.jpg"> </a></p>
<div style="text-align: center"><a title="La tarjeta compatible" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/12/cambiando_wireless2.jpg"><img alt="La tarjeta compatible" id="image174" style="width: 338px; height: 255px" src="http://www.pablasso.com/wp-content/uploads/2006/12/cambiando_wireless2.jpg" /></a></div>
<div style="text-align: center"><a title="La tarjeta compatible" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/12/cambiando_wireless2.jpg"> </a></div>
<div style="text-align: center"><a title="Cambiando Wireless" class="imagelink" href="http://www.pablasso.com/wp-content/uploads/2006/12/cambiando_wireless.jpg"><img alt="Cambiando Wireless" id="image173" style="width: 340px; height: 265px" src="http://www.pablasso.com/wp-content/uploads/2006/12/cambiando_wireless.jpg" /></a></div>
<p>== Actualización #3 ==</p>
<p>Otra cosa que arregle fue el modulo de administración de energía, ya que no se estaba mostrando las cargas de la pila automáticamente, lo cual tiene sentido, porque mi laptop es ACPI y apple hace todo para las nuevas dual core, como sea un chavo de osx86, escribio un driver para agregar soporte para ACPI.</p>
<p>Lo único que tienes que hacer es colocar el .bundle en el directorio <em>/System/Library/SystemConfiguration</em> sobreescribiendo el anterior y listo. Esta comprobado que funciona con 10.4.6 y 10.4.7</p>
<p><a href="http://files.pablasso.com/misc/PowerManagement.tar.gz">Parche para Powermanagement </a></p>
<div style="text-align: center"><img id="image85" alt="Powermanagement" src="http://www.pablasso.com/wp-content/uploads/2006/08/power_management.png" /></div>
<p>== Actualización #4 ==</p>
<p>Al parecer cuando hize la instalación no seleccione el parche para habilitar Quartz Extreme y Core Image (son caracteristicas que hacen que tu tarjeta de video haga mas cosas &#8220;bonitas&#8221;), eso lo solucione con este parche, ojo, solo sirve para tarjetas de video integrado con chipset del GMA900</p>
<p><a href="http://files.pablasso.com/misc/10.4.6.GMA900.Support.pkg.zip">Soporte para GMA900</a></p>
<p>funciona tanto para MacOS X 10.4.6 como para 10.4.7, talvez para futuras versiones tambien lo haga</p>
<div style="text-align: center"><img alt="gma900" id="image86" src="http://www.pablasso.com/wp-content/uploads/2006/08/QE%20&#038;%20CI.png" /></div>
<p>== Actualización #5 ==</p>
<p>No había probado mi OSX desde que instale una memoria adicional de 1GB a mi inspiron (para un total de 1.5GB) y la verdad es que ahora va excelente, no tiene problemas para correr programas pesados fluidamente como Eclipse o el mismo Office.</p>
<p>Estuve a punto de borrar esta partición, pero con esto y otras cosas (como el reciente lanzamiento de <a href="http://www.pablasso.com/2007/01/18/sshfs-para-mac">MacFUSE</a> y mi licencia pagada y sin usar de <a href="http://macromates.com/">textmate</a>) me han dado ganas de probar la actualización a 10.4.8 y seguir usandolo de vez en cuando junto con Ubuntu, ya veremos cuando tenga tiempo libre.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pablasso.com/2006/07/25/osx86-en-una-dell-inspiron-6000/feed</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
	</channel>
</rss>

