<?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>República I.T. &#187; Programación</title>
	<atom:link href="http://www.republicait.com/categorias/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.republicait.com</link>
	<description>Progamación, Tecnología y mucho más...</description>
	<lastBuildDate>Thu, 20 May 2010 20:22:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Asignación de Permisos con Operadores Binarios</title>
		<link>http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/</link>
		<comments>http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 04:50:38 +0000</pubDate>
		<dc:creator>dcamargo.n</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[operadores binarios]]></category>
		<category><![CDATA[permisos]]></category>

		<guid isPermaLink="false">http://www.republicait.com/?p=312</guid>
		<description><![CDATA[En este post veremos como utilizar operaciones binarias para la asignación de permisos y la verificación de los mismos. Ejemplo escrito en PHP]]></description>
			<content:encoded><![CDATA[<h3>Introducción</h3>
<p>En este post veremos como utilizar operaciones binarias para la asignación de permisos y la verificación de los mismos.</p>
<h3>Un Poco de Historia</h3>
<h4>Números Binarios</h4>
<p>Las operaciones realizadas por una computadora son hechas a base de los bit 1 y 0, cada número decimal puede ser representado en su respectivo número binario.<br />
Asi por ejemplo vemos la siguiente tabla, la cual usaremos para trabajar con los permisos:</p>
<table>
<tbody>
<tr>
<td></td>
<td>2<sup>4</sup></td>
<td>2<sup>3</sup></td>
<td>2<sup>2</sup></td>
<td>2<sup>1</sup></td>
<td>2<sup>0</sup></td>
</tr>
<tr>
<td>2</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>4</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>8</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>16</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
<h4>Operadores Binarios</h4>
<ul>
<li><strong>Operador lógico AND (&amp;):</strong>El operador lógico AND compara si dos bits estan encendidos, osea si su valor es 1, si ambos bits estan encendidos el resultado sera 1, en caso contrario, el resultado sera 0.</li>
<li><strong>Operador lógico OR (|):</strong>El operador lógico OR compara si alguno de los bits se encuentran encedidos, si algunos de los bits esta encendido retorna 1, a diferencia del AND, el OR solo retorna 0 cuando ambos bits se encuentran apagados.</li>
<li><strong>Operador lógico NOT (~):</strong>El operador lógico NOT convierte el valor del bit actual a su valor opuesto, osea de 1 lo coloca en 0 y viceversa.</li>
</ul>
<h4>Tabla de la Verdad</h4>
<p>Sean A y B dos bits con el valor de 1 y 0 respectivamente, las tablas de verdad para los operadores lógicos serian las siguientes:<br />
<em>A=1, B=0</em></p>
<table>
<tbody>
<tr>
<td>
<table>
<tbody>
<tr>
<td>AND (&amp;)</td>
<td>A</td>
<td>B</td>
</tr>
<tr>
<td>A</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>B</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
</td>
<td>
<table>
<tbody>
<tr>
<td>OR (|)</td>
<td>A</td>
<td>B</td>
</tr>
<tr>
<td>A</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>B</td>
<td>1</td>
<td>0</td>
</tr>
</tbody>
</table>
</td>
<td>
<table>
<tbody>
<tr>
<td></td>
<td></td>
<td>NOT (~)</td>
</tr>
<tr>
<td>A</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>B</td>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h3>Los valores TRUE y FALSE en PHP</h3>
<p>En PHP la evulacion de que alguna condicion sea cierta o falsa es un poco complicada, técnicamente hablando, en PHP cualquiera expresion es cierta (TRUE) si el resultado final es <strong>DISTINTO</strong> de los siguientes valores:</p>
<ul>
<li>false</li>
<li>0 (cero entero)</li>
<li>0.0 (cero flotante)</li>
<li>La cadena &#8220;0&#8243;</li>
<li>Una cadena vacía</li>
<li>Un arreglo con cero elementos</li>
<li>NULL</li>
</ul>
<p>Para una mayor referencia, visita la documentación de PHP en linea</p>
<ul>
<li><a href="http://www.php.net/manual/en/language.types.boolean.php" target="_blank">PHP Booleans</a></li>
<li><a href="http://www.php.net/manual/en/types.comparisons.php" target="_blank">PHP type comparisions</a></li>
</ul>
<h3>Permisos y Operadores Binarios</h3>
<p>En base a los puntos previos de los operadores binarios y como PHP evalua los valores TRUE y FALSE, vamos a demostrar como se pueden asignar permisos de escritura (WRITE), edición (EDIT) y de eliminar (DELETE).</p>
<h4>Script PHP</h4>
<pre class="brush:php">&lt;?php
/**
* Asignacion de permisos utilizando operadores binarios
* WRITE		= 2 (0010 en binario)
* EDIT		= 4 (0100 en binario)
* DELETE	= 8 (1000 en binario)
*/
define('WRITE',	2);
define('EDIT',	4);
define('DELETE',8);

//Asignamos los permisos de WRITE y EDIT a la variable $perm
$perm = WRITE | EDIT; //el valor asignado es 0110 (operador or)

//Verificamos cada permiso
if($perm &amp; WRITE){ // 0110 &amp; 0010 = 0010
echo 'WRITE asignado&lt;br /&gt;';
}
if($perm &amp; EDIT){ // 0110 &amp; 0100 = 0100
echo 'EDIT asignado&lt;br /&gt;';
}
if($perm &amp; DELETE){ //0110 &amp; 1000 = 0000
echo 'DELETE asignado&lt;br /&gt;';
}

//Ahora verificamos la negacion de los permisos
//  $perm = 0110, ~$perm = 1001

if(~$perm &amp; WRITE){ // 1001 &amp; 0010 = 0000
echo 'WRITE no esta asignado&lt;br /&gt;';
}
if(~$perm &amp; EDIT){ // 1001 &amp; 0100 = 0000
echo 'EDIT no esta asignado&lt;br /&gt;';
}
if(~$perm &amp; DELETE){ // 1001 &amp; 1000 = 1000
echo 'DELETE no esta asignado&lt;br /&gt;';
}
?&gt;</pre>
<p>Resultado al ejecutar el script:<br />
<code><br />
WRITE asignado<br />
EDIT asignado<br />
DELETE no esta asignado<br />
</code></p>
<blockquote><p>Nota: En PHP se hace facil este uso dado que la cadena &#8220;0000&#8243; al final es evaluada a false, mientras que en las otras cadenas seran evaluadas a true dado que tiene al menos un valor que la hace distinto de cero.</p></blockquote>
Términos de búsqueda<ul><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="asignacion de permisos">asignacion de permisos</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="Asignación con AND binario &=">Asignación con AND binario &=</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="operadores logico y sus respetiva tablas">operadores logico y sus respetiva tablas</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="operadores logicos BINARio">operadores logicos BINARio</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="pantalla asignaion permisos">pantalla asignaion permisos</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="Pantalla para asignación de permisos">Pantalla para asignación de permisos</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="permisos bcon binarios en php">permisos bcon binarios en php</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="permisos en binario">permisos en binario</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="permisos en binario ejemplo">permisos en binario ejemplo</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="permisos PHP binario">permisos PHP binario</a></li></ul><!-- SEO SearchTerms Tagging 2 plugin took 3.14 ms -->]]></content:encoded>
			<wfw:commentRss>http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Detectar Acceso Móvil con ASP</title>
		<link>http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/</link>
		<comments>http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 21:44:36 +0000</pubDate>
		<dc:creator>dcamargo.n</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[móvil]]></category>

		<guid isPermaLink="false">http://www.republicait.com/?p=296</guid>
		<description><![CDATA[Este es un pequeño artículo de como detectar si se esta accediendo desde un dispositivo movil con un script ASP. La idea general es poder utilizar el script desde cualquier servidor que soporte la ejecucion de paginas ASP y/o ASP .Net.]]></description>
			<content:encoded><![CDATA[<h3>Introducción</h3>
<p>Este es un pequeño artículo de como detectar si se esta accediendo desde un dispositivo movil con un script ASP. La idea general es poder utilizar el script desde cualquier servidor que soporte la ejecucion de paginas ASP y/o ASP .Net.</p>
<blockquote><p><strong>Nota:</strong> Este script esta basado en: <a href="http://www.codeproject.com/KB/aspnet/mobiledetect.aspx" target="_blank">http://www.codeproject.com/KB/aspnet/mobiledetect.aspx</a></p>
<p>A diferencia del script original, este script remueve la verificación por la propiedad IsMobileDevice lo que impide que se ejecute en versiones anteriores del .Net Framework</p></blockquote>
<h3>Script Completo:</h3>
<pre class="brush:csharp">&lt;%@ Page Language="C#" AutoEventWireup="true" ContentType="text/plain" %&gt;
&lt;script type="text/C#" runat="server"&gt;
void Page_Load(object sender, EventArgs e)
{
    // Variable para almacenar el resultado de la deteccion
    bool isMobile = false;

    //Obtenemos el contexto actual
    HttpContext context = HttpContext.Current;

    //Variable que almacena la firma del navegador
    string userAgent = context.Request.ServerVariables["HTTP_USER_AGENT"];

    //Verificamos primero por la variable HTTP_X_WAP_PROFILE
    if (context.Request.ServerVariables["HTTP_X_WAP_PROFILE"] != null)
    {
        isMobile = true;
    }

    //Procedemos a verificar la firma del navegador
    else if (userAgent != null)
    {
        //Lista posible de dispositivos
        string[] mobiles =
        {
            "midp", "j2me", "avant", "docomo",
            "novarra", "palmos", "palmsource",
            "240x320", "opwv", "chtml",
            "pda", "windows ce", "mmp/",
            "blackberry", "mib/", "symbian",
            "wireless", "nokia", "hand", "mobi",
            "phone", "cdm", "up.b", "audio",
            "SIE-", "SEC-", "samsung", "HTC",
            "mot-", "mitsu", "sagem", "sony"
            , "alcatel", "lg", "eric", "vx",
            "NEC", "philips", "mmm", "xx",
            "panasonic", "sharp", "wap", "sch",
            "rover", "pocket", "benq", "java",
            "pt", "pg", "vox", "amoi",
            "bird", "compal", "kg", "voda",
            "sany", "kdd", "dbt", "sendo",
            "sgh", "gradi", "jb", "dddi",
            "moto", "iphone"
        };

        //Recorremos el arreglo de los dispositivos
        // y verificamos vs la firma del navegador
        foreach (string mobile in mobiles)
        {
            if (userAgent.ToLower().IndexOf(mobile.ToLower()) != -1)
            {
                isMobile = true;
                break;
            }
        }
    }
    //Imprimimos el resultado
    Response.Write("UserAgent: " + userAgent.ToLower() + "\n");
    Response.Write("IsMobile: " + isMobile + "\n");
    Response.Write(".Net Framework: "+Environment.Version.ToString());
}
&lt;/script&gt;</pre>
<p><strong>Muestra de la salida obtenida</strong></p>
<p><code>UserAgent: mozilla/5.0 (windows; u; windows nt 6.1; es-es; rv:1.9.1.5) gecko/20091102 firefox/3.5.5 (.net clr 3.5.30729)<br />
IsMobile: False<br />
.Net Framework: 2.0.50727.4927</code></p>
<blockquote><p><strong>Nota:</strong> En este ejemplo utilize el metodo indexOf para comprobar el userAgent vs el dispositivo, como sugerencia, se puede utilizar expresiones regulares para hacer el script mas completo.</p></blockquote>
Términos de búsqueda<ul><li><a href="http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/" title="detectar navegador movil asp">detectar navegador movil asp</a></li><li><a href="http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/" title="detectar dispositivo movil asp">detectar dispositivo movil asp</a></li><li><a href="http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/" title="detectar si un navegador es movil o no">detectar si un navegador es movil o no</a></li><li><a href="http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/" title="detectar dispositivo movil c#">detectar dispositivo movil c#</a></li><li><a href="http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/" title="detectar movil asp">detectar movil asp</a></li><li><a href="http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/" title="asp detectar navegador movil">asp detectar navegador movil</a></li><li><a href="http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/" title="detectar acceso desde movil">detectar acceso desde movil</a></li><li><a href="http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/" title="aspx detectar navegador movil">aspx detectar navegador movil</a></li><li><a href="http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/" title="detectar movil symfony">detectar movil symfony</a></li><li><a href="http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/" title="asp detectar dispositivos moviles">asp detectar dispositivos moviles</a></li></ul><!-- SEO SearchTerms Tagging 2 plugin took -996.689 ms -->]]></content:encoded>
			<wfw:commentRss>http://www.republicait.com/2009/11/10/detectar-acceso-movil-asp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Captura de pantalla de una WEB utilizando WordPress</title>
		<link>http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/</link>
		<comments>http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 14:45:45 +0000</pubDate>
		<dc:creator>dcamargo.n</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[screenshot]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://www.republicait.com/?p=286</guid>
		<description><![CDATA[En este artículo veremos como tomar el screenshot de página WEB utilizando el servicio de toma de pantallas de Wordpress.]]></description>
			<content:encoded><![CDATA[<p>En este artículo veremos como tomar el screenshot de página WEB utilizando el servicio de toma de pantallas de WordPress.</p>
<p>La URL donde se encuentra este servicio es:</p>
<pre>http://s.wordpress.com/mshots/v1/</pre>
<p>El formato para indicar cual es la página WEB de donde capturar la pantalla es:</p>
<pre>http://s.wordpress.com/mshots/v1/{DIRECCION_URL}?w={WIDTH}</pre>
<p>Donde <code>{DIRECCION_URL}</code> es la dirección URL codificada y <code>{WIDTH}</code> representa el tamaño de la imagen que deseamos generar, asi por ejemplo, si deseamos tomar un screenshot de Google cuyo tamaño sea de 500px el formato seria:</p>
<pre>http://s.wordpress.com/mshots/v1/http%3A%2F%2Fgoogle.com%2F?w=500</pre>
<p>Este servicio lo podemos integrar desde nuestro propio sitio WEB mediante un script PHP el cual reciba como parametros la URL y el tamaño de la imagen.</p>
<p>Ejemplo:</p>
<pre class="brush:php">&lt;?php
//Direccion URL del servicio de wordpress
define('SERVICE_URL','http://s.wordpress.com/mshots/v1/');

/**
* Funcion para tomar screenshots utilizando el servicio de wordpress
* @param string $url
* @param int $width
* @return string
*/
function takeScreenshot($url,$width)
{
    $url = urlencode($url);
    $request = SERVICE_URL."{$url}?w={$width}";
    return $request;
}
?&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Captura de Pantalla de una WEB&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;img src="&lt;?php echo takeScreenshot('http://www.google.com',500); ?&gt;" /&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
Términos de búsqueda<ul><li><a href="http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/" title="que son webs mShots">que son webs mShots</a></li><li><a href="http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/" title="capturar pantalla con jquery">capturar pantalla con jquery</a></li><li><a href="http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/" title="asp capturar pantallazo pagina web">asp capturar pantallazo pagina web</a></li><li><a href="http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/" title="que es un webs mShots">que es un webs mShots</a></li><li><a href="http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/" title="que es mShots">que es mShots</a></li><li><a href="http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/" title="plugin wordpress captura web">plugin wordpress captura web</a></li><li><a href="http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/" title="mshots">mshots</a></li><li><a href="http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/" title="jquery captura pantalla de una web">jquery captura pantalla de una web</a></li><li><a href="http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/" title="formato de la pantalla en la web">formato de la pantalla en la web</a></li><li><a href="http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/" title="en html capturar la pantalla">en html capturar la pantalla</a></li></ul><!-- SEO SearchTerms Tagging 2 plugin took 4.506 ms -->]]></content:encoded>
			<wfw:commentRss>http://www.republicait.com/2009/09/22/captura-pantalla-web-wordpress/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>¿Cómo tomar el screenshot de una WEB?</title>
		<link>http://www.republicait.com/2009/09/20/tomar-screenshot-web/</link>
		<comments>http://www.republicait.com/2009/09/20/tomar-screenshot-web/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 15:30:44 +0000</pubDate>
		<dc:creator>dcamargo.n</dc:creator>
				<category><![CDATA[Configuración]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[ImageMagick]]></category>
		<category><![CDATA[screenshot]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[X11]]></category>
		<category><![CDATA[Xvfb]]></category>

		<guid isPermaLink="false">http://www.republicait.com/?p=264</guid>
		<description><![CDATA[En este post veremos como tomar un screenshot de una página web utilizando la linea de comandos de Linux.]]></description>
			<content:encoded><![CDATA[<h3>Introducción</h3>
<p>En este post veremos como tomar un screenshot de una página web utilizando la linea de comandos de Linux.<br />
Los requerimientos necesarios son:</p>
<ul>
<li>Sistema operativo Linux</li>
<li>Framebuffer Virtual del Servidor X (Xvfb)</li>
<li>Navegador Firefox</li>
<li>ImageMagick</li>
</ul>
<h3>Xvfb</h3>
<p>En el Sistema Windows X, Xvfb es un servidor X11 que realiza todas las operaciones gráficas en memoria sin necesidad de utilizar una pantalla. Con esta herramienta vamos a crear una especie de pantalla virtual para iniciar Firefox en ella y luego tomar el screenshot.</p>
<p>En la siguiente imagen se muestra como installar Xvfb</p>
<div id="attachment_267" class="wp-caption aligncenter" style="width: 592px"><a href="http://www.republicait.com/wp-content/uploads/2009/09/xvfb-install.png"><img class="size-full wp-image-267  " title="xvfb-install" src="http://www.republicait.com/wp-content/uploads/2009/09/xvfb-install.png" alt="Instalando Xvfb" width="582" height="350" /></a><p class="wp-caption-text">Instalando Xvfb</p></div>
<p>Una vez instalado, procedemos a editar el siguiente archivo <code>/etc/dbus-1/system.d/xorg-server.conf</code> para poder arrancar nuesta pantalla virtual</p>
<p>El contenido actual es:</p>
<pre class="brush:xml">&lt;!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"&gt;
&lt;busconfig&gt;
 &lt;policy context="default"&gt;
 &lt;allow own="org.x.config.display0"/&gt;
 &lt;allow send_destination="org.x.config.display0"/&gt;
 &lt;allow send_interface="org.x.config.display0"/&gt;
 &lt;allow own="org.x.config.display1"/&gt;
 &lt;allow send_destination="org.x.config.display1"/&gt;
 &lt;allow send_interface="org.x.config.display1"/&gt;
 &lt;/policy&gt;
&lt;/busconfig&gt;</pre>
<p>Agregamos la pantalla numero 2:</p>
<pre class="brush:xml">&lt;!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"&gt;
&lt;busconfig&gt;
 &lt;policy context="default"&gt;
 &lt;allow own="org.x.config.display0"/&gt;
 &lt;allow send_destination="org.x.config.display0"/&gt;
 &lt;allow send_interface="org.x.config.display0"/&gt;
 &lt;allow own="org.x.config.display1"/&gt;
 &lt;allow send_destination="org.x.config.display1"/&gt;
 &lt;allow send_interface="org.x.config.display1"/&gt;
 &lt;allow own="org.x.config.display2"/&gt;
 &lt;allow send_destination="org.x.config.display2"/&gt;
 &lt;allow send_interface="org.x.config.display2"/&gt;
 &lt;/policy&gt;
&lt;/busconfig&gt;</pre>
<p>Ahora el siguiente paso es iniciar nuestra pantalla virtual, ejecutamos el siguiente commando:</p>
<p><code>$ Xvfb :2 -ac -screen :0 1024x768x24 2&gt;&amp;1 &gt; /dev/null &amp;</code></p>
<p>Esto nos debe iniciar nuestro servicio de Xvfb, para verificar que se esta ejecutando ejecutamos el siguiente comando:</p>
<p><code>$ ps auxx | grep Xvfb</code></p>
<h3>Firefox</h3>
<p>El siguiente paso ahora es iniciar Firefox en nuestra pantalla virtual y como parametro le pasamos la URL que debe cargar</p>
<p><code>$ firefox --display=:2 http://www.google.com -silent -nosplash -fullscreen 2&gt;&amp;1 &gt; /dev/null &amp;</code></p>
<p>Verificamos si en efecto se creo el proceso:</p>
<p><code>$ ps auxx | grep firefox</code></p>
<p>Luego procedemos a tomar el screenshot con el siguiente comando:</p>
<p><code>$ xwd -root -out -display :2 screen.xwd</code></p>
<h3>ImageMagick</h3>
<p>ImageMagick es una herramienta para manipular imagenes mediante linea de comandos.</p>
<p>Procedemos a installar ImageMagick</p>
<div id="attachment_272" class="wp-caption aligncenter" style="width: 602px"><a href="http://www.republicait.com/wp-content/uploads/2009/09/install-imagemagick.png"><img class="size-full wp-image-272 " title="install-imagemagick" src="http://www.republicait.com/wp-content/uploads/2009/09/install-imagemagick.png" alt="Instalando ImageMagick" width="592" height="367" /></a><p class="wp-caption-text">Instalando ImageMagick</p></div>
<p>Luego convertimos la imagen capturada a otro formato, como PNG por ejemplo.</p>
<p><code>$ convert screen.xwd screen.png</code></p>
<p>Resultado Final:</p>
<p style="text-align: center;">
<div id="attachment_279" class="wp-caption aligncenter" style="width: 594px"><a href="http://www.republicait.com/wp-content/uploads/2009/09/screen.png"><img class="size-full wp-image-279  " title="screen" src="http://www.republicait.com/wp-content/uploads/2009/09/screen.png" alt="Resultado del Screenshot" width="584" height="328" /></a><p class="wp-caption-text">Resultado del Screenshot</p></div>
<p>Para finalizar, hay que cerrar los procesos de firefox y Xvfb</p>
<p><code>$ kill `pidof firefox`</code></p>
<p><code>$ kill `pidof Xvfb`</code></p>
<h3>Script Completo</h3>
<p>A continuación un pequeño script con el código para tomar el screenshot, como parámetro se le pasa la URL:</p>
<pre class="brush:shell">DISPLAY_NUMBER=:2
Xvfb $DISPLAY_NUMBER -ac -screen :0 1024x768x24 2&gt;&amp;1 &gt; /dev/null &amp;
sleep 10
firefox --display=$DISPLAY_NUMBER $1 -silent -nosplash -fullscreen 2&gt;&amp;1 &gt; /dev/null &amp;
sleep 10
xwd -root -out -display $DISPLAY_NUMBER screen.xwd
convert screen.xwd screen.png
rm screen.xwd
kill `pidof firefox`
kill `pidof Xvbf`
echo "[DONE]"</pre>
<p>Para ejecutarlo:</p>
<p><code>$ ./take-screenshot http://www.google.com</code></p>
<h3>Notas Finales</h3>
<p>Como firefox se esta ejecutando en una pantalla virtual y no lo estamos cerrando de forma correcta (matando el proceso), es necesario eliminar el archivo que pide la restauracion de firefox.</p>
<p><code>$ rm /home/{USER_HOME}/.mozilla/firefox/{PROFILE_NAME}.default/sessionstore.js</code></p>
<p>Donde <code>{USER_HOME}</code> es el usuario donde se esta ejecutando firefox y <code>{PROFILE_NAME}</code> es el nombre del profile que se creo cuando se ejecuto firefox.</p>
Términos de búsqueda<ul><li><a href="http://www.republicait.com/2009/09/20/tomar-screenshot-web/" title="screenshot javascript">screenshot javascript</a></li><li><a href="http://www.republicait.com/2009/09/20/tomar-screenshot-web/" title="graficar en linux con xorg xvfb">graficar en linux con xorg xvfb</a></li><li><a href="http://www.republicait.com/2009/09/20/tomar-screenshot-web/" title="script firefox tomar foto">script firefox tomar foto</a></li><li><a href="http://www.republicait.com/2009/09/20/tomar-screenshot-web/" title="script para tomas foto de pantalla firefox">script para tomas foto de pantalla firefox</a></li><li><a href="http://www.republicait.com/2009/09/20/tomar-screenshot-web/" title="tomar pantallazos con javascript">tomar pantallazos con javascript</a></li><li><a href="http://www.republicait.com/2009/09/20/tomar-screenshot-web/" title="tomar Screen completo de web">tomar Screen completo de web</a></li><li><a href="http://www.republicait.com/2009/09/20/tomar-screenshot-web/" title="tomar screen de web">tomar screen de web</a></li><li><a href="http://www.republicait.com/2009/09/20/tomar-screenshot-web/" title="tomar screen en javascript">tomar screen en javascript</a></li><li><a href="http://www.republicait.com/2009/09/20/tomar-screenshot-web/" title="tomar screenshots con mozilla firefox">tomar screenshots con mozilla firefox</a></li><li><a href="http://www.republicait.com/2009/09/20/tomar-screenshot-web/" title="tomar screenshots en mozilla">tomar screenshots en mozilla</a></li></ul><!-- SEO SearchTerms Tagging 2 plugin took 3.704 ms -->]]></content:encoded>
			<wfw:commentRss>http://www.republicait.com/2009/09/20/tomar-screenshot-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHING</title>
		<link>http://www.republicait.com/2009/02/24/phing/</link>
		<comments>http://www.republicait.com/2009/02/24/phing/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 01:07:26 +0000</pubDate>
		<dc:creator>dcamargo.n</dc:creator>
				<category><![CDATA[Configuración]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[builders]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.republicait.com/?p=171</guid>
		<description><![CDATA[PHING (PHing Is Not GNU make), es una herramienta basada en el constructor (builder) de aplicaciones Java, Apache Ant, con la diferencia de que PHING es para construir aplicaciones escritas en PHP.]]></description>
			<content:encoded><![CDATA[<h3 style="text-align: justify;">
<div class="mceTemp mceIEcenter">
<dl id="attachment_172" class="wp-caption aligncenter" style="width: 221px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-172" title="phing logo" src="http://www.republicait.com/wp-content/uploads/2009/02/logo.png" alt="phing logo" width="211" height="74" /></dt>
</dl>
</div>
</h3>
<h3>Introducción</h3>
<p style="text-align: justify;">PHING (<strong>PH</strong>ing <strong>I</strong>s <strong>N</strong>ot <strong>G</strong>NU make), es una herramienta basada en el constructor (builder) de aplicaciones Java, <a href="http://ant.apache.org/" target="_blank">Apache Ant</a>, con la diferencia de que PHING es para construir aplicaciones escritas en PHP.</p>
<p style="text-align: justify;">La estructura de la aplicación se describe en un archivo XML llamado <code>build.xml</code>, en este archivo podemos encontrar el nombre de la aplicación a construir, una descripción de la misma, la carpeta donde se encuentra nuestro código fuente, la carpeta de destino que contendrá la última versión de la aplicación y las tareas (tasks) que este debe ejecutar.</p>
<p style="text-align: justify;">Esta herramienta es muy útil, por lo general, cuando se tiene una ruta  específica de un conjunto de librerías de utilidades que pueden formar parte de cualquier aplicación. Se puede hacer referencia a esta ruta desde su IDE de PHP, pero luego, tenie que asegurarse de copiarla cuando ya tiene su producto final.</p>
<p style="text-align: justify;">También cuando se trabaja con diferentes configuraciones, ya sea el servidor de desarrollo o el de producción debe asegurarse de copiar y/o subir la configuración correcta, esto sin tomar en cuenta que la PC del programador pueda tener otra configuración. Este problema se resuelve con PHING, ya que a la hora de construir la aplicación solo basta con decirle que configuración debe cargar.</p>
<p>Enlace de descarga: <a href="http://phing.info/trac/wiki/Users/Download" target="_blank">http://phing.info/trac/wiki/Users/Download</a></p>
<p>Instalación y Documentación: <a href="http://phing.info/docs/guide/current/" target="_blank">http://phing.info/docs/guide/current/</a></p>
<h3>Ejemplo del archivo build.xml</h3>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project
	name="Proyecto de prueba"
	default="stage"
	basedir="."
	description="Archivo Build del Proyecto de Prueba"&gt;

	&lt;!--  Ruta que contendra la aplicacion web final --&gt;
	&lt;property name="build.dir" value="../build" /&gt;

	&lt;!-- Ruta de los archivos fuentes --&gt;
	&lt;property name="src.dir" value="./app" /&gt;

	&lt;!--
	PHP COMMONS LIBS - PCL
	Configuracion de la libreria de utilidades comunes

	pcl.src.dir:
	Es la ruta donde se encuentra los archivos fuente de PCL

	pcl.out.dir:
	Es la ruta donde se copiara las utiliades dentro de la aplicacion
	--&gt;
	&lt;property name="pcl.src.dir" value="../PCL" /&gt;
	&lt;property name="pcl.out.dir" value="${build.dir}/libs/PCL" /&gt;

	&lt;!-- Incluye los archivos fuente de la aplicacion --&gt;
	&lt;fileset dir="${src.dir}" id="srcfiles"&gt;
		&lt;include name="**" /&gt;
	&lt;/fileset&gt;

	&lt;!--
	- Incluye los archivos del proyecto PCL
	- Excluye archivos de Zend Studio for Eclipse (ZSE) - opcional
	--&gt;
	&lt;fileset dir="${pcl.src.dir}" id="pclfiles"&gt;
		&lt;include name="**" /&gt;
		&lt;exclude name=".cache/**" /&gt;
		&lt;exclude name=".settings/**" /&gt;
		&lt;exclude name=".project" /&gt;
	&lt;/fileset&gt;

	&lt;!-- Prepara el directorio de destino --&gt;
	&lt;target
		name="init"
		description="Preparando el directorio destino ==&gt; ${build.dir}"&gt;

		&lt;echo message="Preparando el directorio ${build.dir}" /&gt;
		&lt;delete dir="${build.dir}" failonerror="true" /&gt;
		&lt;mkdir dir="${build.dir}" /&gt;
		&lt;mkdir dir="${build.dir}/libs"/&gt;
		&lt;!--
		Crea el directorio de destino de PCL
		--&gt;
		&lt;mkdir dir="${pcl.out.dir}" /&gt;
	&lt;/target&gt;

	&lt;!-- Construye la aplicacion WEB PHP --&gt;
	&lt;target
		name="build"
		depends="init"
		description="Construye la aplicacion WEB"&gt;

		&lt;!--
		Copia los archivos fuentes de la aplicacion
		--&gt;
		&lt;echo message="Copiando archivos desde ${src.dir}" /&gt;
		&lt;copy todir="${build.dir}"&gt;
			&lt;fileset refid="srcfiles" /&gt;
		&lt;/copy&gt;

		&lt;!--
		Copia los archivos de configuracion de la aplicacion
		--&gt;
		&lt;echo message="Copiando configuracion desde ${config.dir}" /&gt;
		&lt;copy todir="${build.dir}"&gt;
			&lt;fileset dir="${config.dir}"&gt;
				&lt;include name="**" /&gt;
			&lt;/fileset&gt;
		&lt;/copy&gt;

		&lt;!--
		Copia los archivos de PCL dentro de la carpeta de destino
		--&gt;
		&lt;echo message="Copiando archivos PCL desde ${pcl.src.dir}" /&gt;
		&lt;copy todir="${pcl.out.dir}"&gt;
			&lt;fileset refid="pclfiles" /&gt;
		&lt;/copy&gt;
	&lt;/target&gt;

	&lt;!-- Carga la configuracion del servidor de desarrollo de la aplicación --&gt;
	&lt;target
		name="stage"
		description="Construir con la configuracion de desarrollo"&gt;

		&lt;!--
		Llamado a build con la configuracion de desarrollo
		--&gt;
		&lt;phingcall target="build"&gt;
			&lt;property name="config.dir" value="./config/stage" /&gt;
		&lt;/phingcall&gt;

		&lt;echo message="-----------------------------------" /&gt;
		&lt;echo message="  APLICACION CONSTRUIDA CON EXITO  " /&gt;
		&lt;echo message="CONFIGURACION DE DESARROLLO CARGADA" /&gt;
		&lt;echo message="-----------------------------------" /&gt;
	&lt;/target&gt;

	&lt;!-- Carga la configuración del servidor de produccion de la aplicacion --&gt;
	&lt;target
		name="production"
		description="Construir con la configuracion de produccion"&gt;

		&lt;!--
		Llamado a phing con la configuracion de produccion
		--&gt;
		&lt;phingcall target="build"&gt;
			&lt;property name="config.dir" value="./config/production" /&gt;
		&lt;/phingcall&gt;

		&lt;echo message="-----------------------------------" /&gt;
		&lt;echo message="  APLICACION CONSTRUIDA CON EXITO  " /&gt;
		&lt;echo message="CONFIGURACION DE PRODUCCION CARGADA" /&gt;
		&lt;echo message="-----------------------------------" /&gt;
	&lt;/target&gt;
&lt;/project&gt;</pre>
<p style="text-align: justify;">Para construir la aplicación con este archivo, nos vamos por linea de comandos hasta la ruta donde se encuentra nuestro proyecto y ejecutamos:</p>
<pre>Carga la configuración stage por defecto

<code>{RUTA_DEL_PROYECTO}&gt; phing</code>

Carga la configuración de produccion

<code>{RUTA_DEL_PROYECTO}&gt; phing production</code></pre>
<h3>Integracion del PHING con ZSE</h3>
<p style="text-align: justify;">Podemos crear un proyecto en el ZSE que contenga nuestro archivo build.xml y ejecutar el PHING desde el ZSE para construir nuestro proyecto.</p>
<p>Para esto nos vamos al menú <code>Project -&gt; Properties -&gt; Builders -&gt; New... -&gt; Program -&gt; OK</code></p>
<p>Name: Phing</p>
<p>Location: <code>{RUTA_DE_INSTALACIÓN_DEL_PHING}</code></p>
<p>Working Directory: <code>{RUTA_DEL_PROYECTO}</code></p>
<p>Arguments: Aqui se puede colocar que configuración se desea cargar, por defecto toma <code>stage (desarrollo)</code></p>
<div class="mceTemp mceIEcenter">
<dl id="attachment_179" class="wp-caption aligncenter" style="width: 510px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-179" title="phing zse configuration" src="http://www.republicait.com/wp-content/uploads/2009/02/phing-zse-config.jpg" alt="phing and zse" width="500" height="402" /></dt>
</dl>
</div>
Términos de búsqueda<ul><li><a href="http://www.republicait.com/2009/02/24/phing/" title="phing">phing</a></li><li><a href="http://www.republicait.com/2009/02/24/phing/" title="que es phing">que es phing</a></li><li><a href="http://www.republicait.com/2009/02/24/phing/" title="copiar archivo de ruta en dir en java">copiar archivo de ruta en dir en java</a></li><li><a href="http://www.republicait.com/2009/02/24/phing/" title="phing build xml">phing build xml</a></li><li><a href="http://www.republicait.com/2009/02/24/phing/" title="proyecto maven no encuentra xml properties dentro de la carpeta conf">proyecto maven no encuentra xml properties dentro de la carpeta conf</a></li></ul><!-- SEO SearchTerms Tagging 2 plugin took 2.221 ms -->]]></content:encoded>
			<wfw:commentRss>http://www.republicait.com/2009/02/24/phing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Herramientas para un servidor de desarrollo</title>
		<link>http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/</link>
		<comments>http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 03:33:05 +0000</pubDate>
		<dc:creator>dcamargo.n</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Servidores]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[red5]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.republicait.com/?p=123</guid>
		<description><![CDATA[En este artículo veremos algunos programas y herramientas que nos serán muy útiles a la hora de preparar una pc para que funcione como nuestro servidor de desarrollo.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">En este artículo veremos algunos programas y herramientas que nos serán muy útiles a la hora de preparar una pc para que funcione como nuestro servidor de desarrollo.</p>
<p style="text-align: justify;">Cada una de estas herramientas realizan una tarea especifica distinta una de la otra, por lo cual le brinda a nuestro servidor una variedad de funcionalidades para poder desarrollar nuestra aplicación ya sea en java, php, ruby, etc.</p>
<blockquote style="text-align: justify;">
<p style="text-align: justify;"><strong>Nota:</strong> Todas estas herramientas que mencionaremos son gratis, free, sin costos.</p>
</blockquote>
<p style="text-align: justify;">
<h3 style="text-align: justify;">1. Sistema Operativo</h3>
<h4 style="text-align: justify;"><a href="http://www.ubuntu.com/products/whatIsubuntu/serveredition" target="_blank"><img class="size-full wp-image-126 alignleft" title="Ubuntu logo" src="http://www.republicait.com/wp-content/uploads/2009/01/icon-ubuntu.png" alt="Ubuntu logo" width="40" height="40" /></a></p>
<p><a href="http://www.ubuntu.com/products/whatIsubuntu/serveredition" target="_blank">Ubuntu Server Edition</a></h4>
<p style="text-align: justify;">Ubuntu Server Edition es una distribución de Linux basada en <a href="http://www.debian.org/index.es.html" target="_blank">Debian</a> la cual utilizaremos como el sistema operativo de nuestro servidor de desarrollo, para obtenerla, debes dirigirte a su <a href="http://www.ubuntu.com/getubuntu/download" target="_blank">página descargas</a> la cual ofrece distintas formas de poder descargar esta distribución.</p>
<p style="text-align: justify;">Cabe destacar que esta distribución no ofrece un entorno de escritorio visual por defecto, como por ejemplo <a href="http://www.gnome.org/" target="_blank">Gnome</a> dado que esta orientado para un entorno de servidor y los gráficos pueden reducir la disponibilidad de recursos de nuestra pc.</p>
<p style="text-align: justify;">Algunas otras opciones:</p>
<ul style="text-align: justify;">
<li>Fedora Project</li>
<li>Debian</li>
<li>OpenSolaris</li>
</ul>
<h3 style="text-align: justify;">2. Accesibilidad</h3>
<h4 style="text-align: justify;"><a href="http://www.proftpd.org/" target="_blank">ProFTPD</a></h4>
<p style="text-align: justify;">ProfFTPD es un servidor FTP orientado principalmente a plataformas Linux, la instalación y configuración no requiere de una gran experiencia bajo el entorno Linux, su archivo de configuración proporciona comentarios que les sirve de ayuda para saber que sección estan afectando.</p>
<h4 style="text-align: justify;"><a href="http://www.openssh.com/index.html" target="_blank">OpenSSH</a></h4>
<p style="text-align: justify;">OpenSSH es una herramienta con la cual se pueden establecer una conexión segura con el servidor mediante el protocolo SSH, dado que nuestro sistema operativo es Linux, esta es una excelente herramienta para poder utilizar la consola o terminal de nuestro servidor desde cualquier punto.</p>
<h3 style="text-align: justify;">3. Servidores WEB</h3>
<h4>
<div class="mceTemp">
<dl id="attachment_153" class="wp-caption alignleft" style="width: 99px;">
<dt class="wp-caption-dt"><a href="http://httpd.apache.org/" target="_blank"><img class="size-full wp-image-153" title="apache logo" src="http://www.republicait.com/wp-content/uploads/2009/01/apache.jpg" alt="apache logo" width="89" height="40" /> </a></dt>
</dl>
</div>
<p><a href="http://httpd.apache.org/" target="_blank">Apache HTTP Server Project</a></h4>
<p style="text-align: justify;">Apache es un servidor WEB desarrollado y mantenido por <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> con el proposito de ofrecer un servidor de alto rendimiento, sin costos, configurable y con funcionalidades o modulos que se pueden adaptar para la generación de páginas WEB dinámicas desde un lenguaje o script de programación, como por ejemplo PHP. Una alternativa para el servidor apache es: <a href="http://www.lighttpd.net/" target="_blank">Ligth HTTPd</a>.</p>
<h4>
<div class="mceTemp">
<dl id="attachment_155" class="wp-caption alignleft" style="width: 67px;">
<dt class="wp-caption-dt"><a href="http://tomcat.apache.org/" target="_blank"><img class="size-full wp-image-155" title="tomcat logo" src="http://www.republicait.com/wp-content/uploads/2009/01/tomcat.gif" alt="tomcat logo" width="57" height="40" /></a></dt>
</dl>
</div>
<p><a href="http://tomcat.apache.org/" target="_blank">Apache Tomcat</a></h4>
<p style="text-align: justify;">Apache Tomcat es un servidor WEB orientado para servir aplicaciones desarrolladas con el lenguaje de progrmación Java utilizando las tecnologias <a href="http://java.sun.com/products/servlet/index.jsp" target="_blank">Java Servlets</a> y <a href="http://java.sun.com/products/jsp/">Java Server Pages</a>, forma tambien parte del Apache Software Foundation. Una alternativa al servidor apache tomcat es <a href="http://www.caucho.com/" target="_blank">Resin</a>.</p>
<h4>
<div class="mceTemp">
<dl id="attachment_158" class="wp-caption alignleft" style="width: 111px;">
<dt class="wp-caption-dt"><a href="http://osflash.org/red5" target="_blank"><img class="size-full wp-image-158" title="red5 logo" src="http://www.republicait.com/wp-content/uploads/2009/01/red5logo.png" alt="red5 logo" width="101" height="40" /></a></dt>
</dl>
</div>
<p><a href="http://osflash.org/red5" target="_blank">Red5</a></h4>
<p style="text-align: justify;">Red5 es un servidor WEB desarrollado en Java como una alternativa al <a href="http://www.adobe.com/es/products/flashmediaserver/" target="_blank">Flash Media Server (FMS)</a> para el desarrollo de aplicaciones WEB utilizando la tecnología <a href="http://www.adobe.com/es/products/flex/" target="_blank">Adobe Flex</a>, como por ejemplo, el desarrollo de aplicaciones de Streaming utilizando el protocolo <a href="http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol" target="_blank">RTMP</a>.</p>
<h3>4. Programación</h3>
<h4>Interpretes</h4>
<p style="text-align: justify;">Dado que el sistema operativo seleccionado para el servidor es una distribución Linux, estas en su mayoría brinda soporte para los siguientes lenguajes interpretados:</p>
<ul>
<li>PHP</li>
<li>Perl</li>
<li>Python</li>
<li>Ruby</li>
</ul>
<p style="text-align: justify;">En caso tal no soporte alguno de los lenguajes mencionados, Ubuntu consta con un <a href="http://doc.ubuntu-es.org/Repositorios_desde_Ubuntu" target="_blank">repositorio de programas</a> en el cual puedes encontrar el intérprete necesario.</p>
<h4>Compiladores</h4>
<p style="text-align: justify;">Actualmente en las mayorías de las distribuciones Linux existe una coleccion de compiladores conocida como <a href="http://gcc.gnu.org/" target="_blank">GCC (<em>GNU Compiler Collection</em>)</a>, el cual brinda soporte a distintos lengajes como C/C++ y Java.</p>
<h3>5. Bases de Datos</h3>
<h4>
<div class="mceTemp">
<dl id="attachment_163" class="wp-caption alignleft" style="width: 77px;">
<dt class="wp-caption-dt"><a href="http://dev.mysql.com/downloads/mysql/5.1.html" target="_blank"><img class="size-full wp-image-163" title="MySQL Logo" src="http://www.republicait.com/wp-content/uploads/2009/01/logo_mysql_sun_a.gif" alt="MySQL Logo" width="67" height="40" /></a></dt>
</dl>
</div>
<p><a href="http://dev.mysql.com/downloads/mysql/5.1.html" target="_blank">Mysql Community Server</a></h4>
<p style="text-align: justify;">MySQL es un<em> </em>servidor de base de datos de alto rendimiento, conocido también como RDBMS (<em>Relational Data Base Management System</em>) desarrollado actualmente por Sun Microsystems. La versión <em>Community</em>, es la versión gratis del servidor. MySQL es compatible con la mayoría de los lenguajes de programación y puede ser accedido desde una aplicación de escritorio o WEB.</p>
<p style="text-align: justify;">Otras bases de datos que se pueden instalar son:</p>
<ul>
<li><a href="http://db.apache.org/derby/" target="_blank">Apache Derby</a></li>
<li><a href="http://hsqldb.org/" target="_blank">HSQLDB</a></li>
<li><a href="http://www.postgresql.org/" target="_blank">PostgreSQL</a></li>
</ul>
Términos de búsqueda<ul><li><a href="http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/" title="herramientas de un servidor">herramientas de un servidor</a></li><li><a href="http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/" title="aplicacion flex en servidor fedora">aplicacion flex en servidor fedora</a></li><li><a href="http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/" title="red5 y apache tomcat">red5 y apache tomcat</a></li><li><a href="http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/" title="red5 postgresql">red5 postgresql</a></li><li><a href="http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/" title="protocolo rtmp en servidores linux">protocolo rtmp en servidores linux</a></li><li><a href="http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/" title="instalar un servidor de desarrollo java en fedora">instalar un servidor de desarrollo java en fedora</a></li><li><a href="http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/" title="instalar derby en eclipse (fedora)">instalar derby en eclipse (fedora)</a></li><li><a href="http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/" title="instalar apache derby en fedora con yum">instalar apache derby en fedora con yum</a></li><li><a href="http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/" title="herramientas servidor apache">herramientas servidor apache</a></li><li><a href="http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/" title="herramientas servidor">herramientas servidor</a></li></ul><!-- SEO SearchTerms Tagging 2 plugin took 3.373 ms -->]]></content:encoded>
			<wfw:commentRss>http://www.republicait.com/2009/01/17/herramientas-para-un-servidor-de-desarrollo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando un ambiente de desarrollo &#8211; Parte IV</title>
		<link>http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-4/</link>
		<comments>http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-4/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 16:51:53 +0000</pubDate>
		<dc:creator>dcamargo.n</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[zend studio for eclipse]]></category>

		<guid isPermaLink="false">http://www.republicait.com/?p=96</guid>
		<description><![CDATA[En esta sección veremos como configurar el Zend Studio for Eclipse para que podamos acceder a nuestro servidor MySQL.]]></description>
			<content:encoded><![CDATA[<h3>Introducción</h3>
<p>En esta sección veremos como configurar el ZSE para que funcione con MySQL.</p>
<h3>Zend Studio for Eclipse y MySQL</h3>
<p style="text-align: justify;">Lo primero que tenemos que hacer es abrir la vista del explorador de fuentes de datos, para esto nos vamos al menu <code>Window -&gt; Show View -&gt; Other...</code>, seleccionamos la carpeta <code>Connectivity -&gt; Data Source Explorer</code></p>
<div id="attachment_100" class="wp-caption aligncenter" style="width: 290px"><img class="size-full wp-image-100" title="Zend Studio for Eclipse - Show View" src="http://www.republicait.com/wp-content/uploads/2009/01/zse-view-others.jpg" alt="Zend Studio for Eclipse - Show View" width="280" height="414" /><p class="wp-caption-text">Zend Studio for Eclipse - Show View</p></div>
<p style="text-align: justify;">Ahora creamos nuestra conexión con el servidor MySQL, para esto, damos click derecho sobre la carpeta <code>SQL Databases</code> y seleccionamos <code>New...</code>, esto nos mostrará el asistente para establecer la conexión, lo que haremos es conectarnos con la base de datos de prueba de MySQL test. En el <code>Connection Name</code> colocamos <code>MySQL Test</code>, en <code>URL</code> colocamos <code>jdbc:mysql://localhost:3306/test</code>, en <code>User root</code> y el <code>Password</code> lo dejamos en blanco. Luego damos click en <code>Test connection</code> para confirmar los parametros de la conexión y si todo esta bien, damos click en <code>Finish</code>.<span id="more-96"></span></p>
<div id="attachment_101" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-101" title="Zend Studio for Eclipse - New Database Connection Wizard" src="http://www.republicait.com/wp-content/uploads/2009/01/zse-new-db-con.jpg" alt="Zend Studio for Eclipse - New Database Connection Wizard" width="500" height="441" /><p class="wp-caption-text">Zend Studio for Eclipse - New Database Connection Wizard</p></div>
<blockquote><p><strong>Nota:</strong> Por defecto, la instalación del paquete XAMPP crea el usuario root sin contraseña</p></blockquote>
<p style="text-align: justify;">Una vez creada nuestra configuración, damos click derecho sobre <code>MySQL Test</code> y seleccionamos <code>Connect</code>, navegamos hasta <code>SQL Databases -&gt; MySQL Test (MySQL v. {VERSION}) -&gt; MySQL Test -&gt; Schemas -&gt; MySQL Test -&gt; Tables</code>, damos click derecho sobre la carpeta <code>Tables</code> y seleccionamos <code>New Table...</code>, esto nos mostrará el asistente para crear una nueva tabla, dejamos los valores iniciales por defecto y damos click en <code>Next</code> para crear los campos de nuestra tabla. Creamos una tabla de prueba con dos campos, id de tipo INTEGER UNSIGNED y value tipo VARCHAR de 30 caracteres.</p>
<p style="text-align: justify;">
<div id="attachment_103" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-103" title="Zend Studio for Eclipse - New Table Wizard" src="http://www.republicait.com/wp-content/uploads/2009/01/zse-new-table-wizard.jpg" alt="Zend Studio for Eclipse - New Table Wizard" width="500" height="503" /><p class="wp-caption-text">Zend Studio for Eclipse - New Table Wizard</p></div>
<p style="text-align: justify;">Damos click en <code>Next</code> para crear nuestra llave primaria, en el nombre colocamos <code>PRIMARY KEY</code>, seleccionamos el campo <code>id</code> y damos click en <code>Finish</code>. Se generará automaticamente las sentencias <code>DDL</code> para la creación de nuestra tabla.</p>
<pre class="brush:sql">CREATE TABLE test_table (
	id INTEGER UNSIGNED NOT NULL,
	value VARCHAR(30) NOT NULL,
	PRIMARY KEY (id)
);</pre>
<p>Para ejecutar estas sentencias, damos click derecho sobre el código DDL y seleccionamos Execute All</p>
<div id="attachment_106" class="wp-caption aligncenter" style="width: 477px"><img class="size-full wp-image-106" title="Zend Studio for Eclipse - SQL Editor" src="http://www.republicait.com/wp-content/uploads/2009/01/zse-sqleditor-execute.jpg" alt="Zend Studio for Eclipse - SQL Editor" width="467" height="404" /><p class="wp-caption-text">Zend Studio for Eclipse - SQL Editor</p></div>
<p style="text-align: justify;">Una vez ejecutadas las sentencias, refrescamos la carpeta <code>Tables</code> de nuestro explorador de datos para que se muestre la tabla que acabamos de crear.</p>
<div id="attachment_108" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-108" title="Zend Studio for Eclipse - Data Source Explorer View" src="http://www.republicait.com/wp-content/uploads/2009/01/zse-dse-view.jpg" alt="Zend Studio for Eclipse - Data Source Explorer View" width="500" height="217" /><p class="wp-caption-text">Zend Studio for Eclipse - Data Source Explorer View</p></div>
<p>Con esto tenemos un ambiente configurado listo para:</p>
<ul>
<li>Depurar una aplicación Web.</li>
<li>Trabajar en conjunto con otros programadores.</li>
<li>Acceso directo a la base de datos.</li>
</ul>
Términos de búsqueda<ul><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-4/" title="ambiente connection">ambiente connection</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-4/" title="Ambiente Connection Execute">Ambiente Connection Execute</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-4/" title="como hacer logueo en eclipse con sentencias de mysql">como hacer logueo en eclipse con sentencias de mysql</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-4/" title="conexion ext js mysql">conexion ext js mysql</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-4/" title="eclipse sql editor">eclipse sql editor</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-4/" title="extjs crear login password">extjs crear login password</a></li></ul><!-- SEO SearchTerms Tagging 2 plugin took 3.106 ms -->]]></content:encoded>
			<wfw:commentRss>http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando un ambiente de desarrollo &#8211; Parte III</title>
		<link>http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/</link>
		<comments>http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 13:36:22 +0000</pubDate>
		<dc:creator>dcamargo.n</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[svn commit]]></category>

		<guid isPermaLink="false">http://www.republicait.com/?p=70</guid>
		<description><![CDATA[En esta sección veremos como configurar el Zend Studio for Eclipse para llevar acabo un proceso de depuración de nuestra aplicación con Zend Debugger.]]></description>
			<content:encoded><![CDATA[<h3>Introducción</h3>
<p>En esta sección veremos como configurar el ZSE con Zend Debugger.</p>
<h3>ZSE y Zend Debugger</h3>
<p style="text-align: justify;">El siguiente paso es configurar el ZSE con el Zend Debugger, por defecto, el ZSE ya viene con los valores predeterminados del Zend Debugger, lo que haremos es verificar esos datos, para esto nos vamos al menu <code>Window -&gt; Preferences</code>, luego navegamos en el arbol hasta el nodo <code>PHP -&gt; Debug -&gt; Installed Debuggers</code>, damos click en <code>Zend Debugger</code> y presionamos el boton <code>Configure</code> para ver sus parametros.</p>
<div id="attachment_74" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-74" title="Zend Studio for Eclipse - Zend Debugger Preferences" src="http://www.republicait.com/wp-content/uploads/2008/12/zse-zd-configuration.jpg" alt="Zend Studio for Eclipse - Zend Debugger Preferences" width="500" height="521" /><p class="wp-caption-text">Zend Studio for Eclipse - Zend Debugger Preferences</p></div>
<p>Dejamos estos valores por defecto.<span id="more-70"></span></p>
<p style="text-align: justify;">El archivo dummy.php es el que establece la conexión con el debugger el cual debemos crear bajo la ruta <code>C:\xampp\htdocs\local.testapp.com</code> con las siguientes líneas de codigo:</p>
<pre class="brush:php">&lt;?php
@ini_set('zend_monitor.enable', 0);
if(@function_exists('output_cache_disable')) {
    @output_cache_disable();
}
if(isset($_GET['debugger_connect']) &amp;&amp; $_GET['debugger_connect'] == 1) {
    if(function_exists('debugger_connect'))  {
        debugger_connect();
        exit();
    } else {
        echo "No connector is installed.";
    }
}
?&gt;</pre>
<p style="text-align: justify;">Ahora vamos crear nuestro archivo <code>testdebug.php</code>, para esto damos click derecho sobre la carpeta <code>testapp [trunk]</code> y nos vamos al menu <code>New -&gt; PHP File</code>, en <code>File Name</code> colocamos <code>testdebug.php</code> y damos click en <code>Finish</code>, hacemos doble click sobre el archivo creado y agregamos las siguientes líneas de codigo:</p>
<pre class="brush:php">&lt;?php
$str = 'Debugger test';
$pattern = '^Deb.*$';
$match = ereg($pattern,$str);
if($match)
{
    echo 'Match';
}
else
{
    echo 'Doesn\'t Match';
}
?&gt;</pre>
<p style="text-align: justify;">Ahora procedemos a crear una configuration para depurar nuestro archivo, para esto nos vamos al menu <code>Run -&gt; Debug Configurations...</code> y damos doble click sobre <code>PHP Web Page</code>, como nombre colocamos <code>TESTAPP-DEBUG-CONFIG</code>; creamos un nuevo servidor PHP que apunte a nuestro host virtual, damos click en el boton <code>New</code>, como nombre colocamos <code>TESTAPP-LOCAL-SERVER</code> y en la URL colocamos <code>http://local.testapp.com</code> y damos click en <code>Finish</code></p>
<div id="attachment_76" class="wp-caption aligncenter" style="width: 550px"><img class="size-full wp-image-76" title="Zend Studio for Eclipse - Debug Configuration" src="http://www.republicait.com/wp-content/uploads/2008/12/zse-debugger-configuration.jpg" alt="Zend Studio for Eclipse - Debug Configuration" width="540" height="419" /><p class="wp-caption-text">Zend Studio for Eclipse - Debug Configuration</p></div>
<p>Damos click en Test Debugger y debemos obtener el mensaje de confirmación</p>
<div id="attachment_79" class="wp-caption aligncenter" style="width: 513px"><img class="size-full wp-image-79" title="Zend Studio for Eclipse - Debugger Success" src="http://www.republicait.com/wp-content/uploads/2008/12/zse-debugger-confirmation.jpg" alt="Zend Studio for Eclipse - Debugger Success" width="503" height="295" /><p class="wp-caption-text">Zend Studio for Eclipse - Debugger Success</p></div>
<p style="text-align: justify;">El siguiente paso es especificar el archivo a depurar, para esto hacemos click en <code>Browse</code> y seleccionamos <code>testapp -&gt; testdebug.php</code>, le quitamos el check a <code>Break at First Line</code>, damos click en <code>Apply</code> y luego en <code>Close</code>.</p>
<div id="attachment_80" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-80" title="Zend Studio for Eclipse - Debugger Configuration Preview" src="http://www.republicait.com/wp-content/uploads/2008/12/zse-debugger-configuration-preview.jpg" alt="Zend Studio for Eclipse - Debugger Configuration Preview" width="500" height="385" /><p class="wp-caption-text">Zend Studio for Eclipse - Debugger Configuration Preview</p></div>
<p style="text-align: justify;">Ahora creamos un <code>break point</code> en nuestro archivo, para esto hacemos doble click sobre cualquier número de línea a la izquierda del código, el <code>break point</code> se debe marcar con un círculo azul. Para iniciar la depuración nos vamos a nuestro ícono del <code>debug</code> y seleccionamos la configuración <code>TESTAPP-DEBUG-CONFIG</code></p>
<div id="attachment_85" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-85" title="Zend Studio for Eclipse - Starting the debugger" src="http://www.republicait.com/wp-content/uploads/2009/01/zse-debugger-start.jpg" alt="Zend Studio for Eclipse - Starting the debugger" width="500" height="321" /><p class="wp-caption-text">Zend Studio for Eclipse - Starting the debugger</p></div>
<p style="text-align: justify;">Al darle click a nuestra configuración, se nos preguntará si deseamos abrir la perspectiva del debugger y le damos <code>Yes</code>, con esto se abre la perspectiva del debugger y estamos listos para depurar nuestro archivo. En esta perspectiva se puede ver diferentes aspectos de nuestro archivo, como por ejemplo valores que toman las variables en tiempo de ejecución hasta el <code>break point</code>, los procesos que se estan ejecutando, etc.</p>
<div id="attachment_87" class="wp-caption aligncenter" style="width: 540px"><img class="size-full wp-image-87" title="Zend Studio for Eclipse - Debugger Perspective" src="http://www.republicait.com/wp-content/uploads/2009/01/zse-debugger-perspective.jpg" alt="Zend Studio for Eclipse - Debugger Perspective" width="530" height="377" /><p class="wp-caption-text">Zend Studio for Eclipse - Debugger Perspective</p></div>
<p style="text-align: justify;">Ya que tenemos todo funcionando, es hora de agregar nuestro archivo al repositorio, para esto, damos click derecho sobre el archivo y nos vamos a <code>Team -&gt; Add to Version Control</code>, inmediatemente veremos que nuestro archivo aparece ahora con un símbolo de más, una vez agregado, le damos un commit a nuestro archivo para que este disponible para los demas programadores, para esto damos click derecho sobre el archivo y nos vamos a <code>Team -&gt; Commit...</code>, escribimos un comentario y damos <code>OK</code>, en caso tal el repositorio este restringido por cuentas de usuario, se les pedirá sus credenciales para hacer el <code>Commit<code>.</code></code></p>
<div id="attachment_92" class="wp-caption aligncenter" style="width: 483px"><img class="size-full wp-image-92" title="Zend Studio for Eclipse - SVN Commit" src="http://www.republicait.com/wp-content/uploads/2009/01/zse-svn-commit-wizard.jpg" alt="Zend Studio for Eclipse - SVN Commit" width="473" height="413" /><p class="wp-caption-text">Zend Studio for Eclipse - SVN Commit</p></div>
<p style="text-align: justify;">Para ver el historial de los cambios realizados, damos click derecho sobre el archivo y nos vamos al menu <code>Team -&gt; Show History</code></p>
<div id="attachment_93" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-93" title="Zend Studio for Eclipse - SVN History" src="http://www.republicait.com/wp-content/uploads/2009/01/zse-svn-history.jpg" alt="Zend Studio for Eclipse - SVN History" width="500" height="189" /><p class="wp-caption-text">Zend Studio for Eclipse - SVN History</p></div>
Términos de búsqueda<ul><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/" title="zend studio debugger">zend studio debugger</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/" title="debug zend studio">debug zend studio</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/" title="zend studio svn">zend studio svn</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/" title="Configurar Zend Studio">Configurar Zend Studio</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/" title="debug zendstudio">debug zendstudio</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/" title="zend studio debug">zend studio debug</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/" title="como configurar el zend para depurar">como configurar el zend para depurar</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/" title="fichero dummy zend development">fichero dummy zend development</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/" title="function_exists(debugger_connect)">function_exists(debugger_connect)</a></li><li><a href="http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/" title="eclipse debug xampp">eclipse debug xampp</a></li></ul><!-- SEO SearchTerms Tagging 2 plugin took 3.717 ms -->]]></content:encoded>
			<wfw:commentRss>http://www.republicait.com/2009/01/01/configurando-un-ambiente-de-desarrollo-parte-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Configurando un ambiente de desarrollo &#8211; Parte II</title>
		<link>http://www.republicait.com/2008/12/31/configurando-un-ambiente-de-desarrollo-parte-2/</link>
		<comments>http://www.republicait.com/2008/12/31/configurando-un-ambiente-de-desarrollo-parte-2/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 05:10:18 +0000</pubDate>
		<dc:creator>dcamargo.n</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[subclipse]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[zend studio for eclipse]]></category>

		<guid isPermaLink="false">http://www.republicait.com/?p=33</guid>
		<description><![CDATA[En esta parte veremos como configurar el Zend Studio for Eclipse con Subclipse y llevar acabo acciones relacionadas con Subversión]]></description>
			<content:encoded><![CDATA[<h3>Introducción</h3>
<p>En esta parte veremos como configurar el Zend Studio for Eclipse con Subclipse.</p>
<p>Algunos requisitos/conocimientos que se deben tener en cuenta:</p>
<ul>
<li>Algun acceso a un servidor de subversion (svnserve) con una cuenta de usuario válida.</li>
<li>Los comandos checkout, commit, update de subversion.</li>
</ul>
<h3>Zend Studio for Eclipse (ZSE)</h3>
<p style="text-align: justify;">Zend Studio for Eclipse (ZSE) es un IDE propietario desarrollado por <a href="http://www.zend.com/" target="_blank">Zend Technologies</a> basado en <a href="http://www.eclipse.org/">Eclipse</a>. ZSE esta diseñado para el desarrollo de aplicaciones ricas en Internet (RIA&#8217;s) utilizando PHP como su lenguaje de programación.<span id="more-33"></span></p>
<p style="text-align: justify;">Zend tambien ofrece una herramienta gratuita basada en Eclipse conocida como <a href="http://www.zend.com/en/community/pdt" target="_blank">PDT (PHP Development Tools)</a>. Nos enfocamos en el uso de ZSE dado que el PDT ya viene configurado con el Zend Debugger. Puedes obtener el ZSE en el siguiente enlace <a href="http://www.zend.com/en/products/studio/" target="_blank">http://www.zend.com/en/products/studio/</a></p>
<p style="text-align: justify;">Una vez obtenemos el ZSE, seguimos los pasos del instalador y luego abrimos el <code>DefaultWorkspace</code> que se genera con el ZSE.</p>
<p style="text-align: center;">
<div id="attachment_44" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-44" title="Zend Studio for Eclipse Home" src="http://www.republicait.com/wp-content/uploads/2008/12/zse-home.jpg" alt="Zend Studio for Eclipse Home" width="500" height="303" /><p class="wp-caption-text">Zend Studio for Eclipse Home</p></div>
<h3>Subclipse</h3>
<p>Subclipse es un plugin para Eclipse desarrollado por <a href="http://www.tigris.org/" target="_blank">Tigris</a> con la finalidad de agregar las funcionalidades y herramientas de trabajar con <a href="http://subversion.tigris.org/" target="_blank">Subversion</a></p>
<p>Para instalarlo como plugin del ZSE, lo podemos hacer siguiendo los mismos pasos como si fuera para Eclipse, la guía se encuentra en la siguiente dirección <a href="http://subclipse.tigris.org/install.html" target="_blank">http://subclipse.tigris.org/install.html</a>. Realizar los pasos del 1 al 11.</p>
<p>Una vez reiciniciado el ZSE, procedemos a crear nuestro proyecto utilizando el comando checkout del subversion.</p>
<h4>Paso 1: Cambiar de workspace</h4>
<p>Para esto nos vamos al menu <code>File -&gt; Switch Workspace -&gt; Other</code> y colocamos la ruta de nuestro host virutal y presionamos OK</p>
<div id="attachment_53" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-53" title="Zend Studio for Eclipse Workspace" src="http://www.republicait.com/wp-content/uploads/2008/12/zse-workspace-change.jpg" alt="Zend Studio for Eclipse Workspace" width="500" height="303" /><p class="wp-caption-text">Zend Studio for Eclipse Workspace</p></div>
<p>Esto nos reiniciara el ZSE, una vez cargado, cerramos la ventana de Welcome, quedando disponible nuestro entorno de trabajo.</p>
<h4>Paso 2: Checkout de nuestro proyecto</h4>
<p>En este paso accederemos a nuestro repositorio (previamente configurado) y cargaremos los archivos de trabajo dentro de nuestra carpeta, para esto nos vamos al menu: <code>File -&gt; New -&gt; Other</code>. Aparecerá el asistente para crear un nuevo proyecto.</p>
<p>Seleccionamos la segunda carpeta <code>SVN</code>, damos click a <code>Checkout Projects from SVN</code> y damos click en <code>Next.</code></p>
<div id="attachment_56" class="wp-caption aligncenter" style="width: 516px"><img class="size-full wp-image-56" title="Zend Studio for Eclipse New Wizard" src="http://www.republicait.com/wp-content/uploads/2008/12/zse-wizards-new.jpg" alt="Zend Studio for Eclipse New Wizard" width="506" height="512" /><p class="wp-caption-text">Zend Studio for Eclipse New Wizard</p></div>
<blockquote><p><strong>Nota:</strong> Actualmente aparecen dos carpetas de SVN, esto se debe a que el ZSE trae por defecto otros plugins para trabajar con subversion.</p></blockquote>
<p style="text-align: justify;">En la siguiente ventana seleccionamos <code>Create a new repository location</code> y damos click en <code>Next</code>. Colocamos la direccion url de nuestro proyecto, por ejemplo <code>svn://yoursvnserver.com/testapp</code> y damos click en <code>Next</code>. Luego damos click en la carpeta <code>trunk</code> y presionamos <code>Next</code>.</p>
<p style="text-align: justify;">
<div id="attachment_58" class="wp-caption aligncenter" style="width: 516px"><img class="size-full wp-image-58" title="Zend Studio for Eclipse - Subclipe checkout wizard" src="http://www.republicait.com/wp-content/uploads/2008/12/zse-svn-checkout-wizard.jpg" alt="Zend Studio for Eclipse - Subclipe checkout wizard" width="506" height="512" /><p class="wp-caption-text">Zend Studio for Eclipse - Subclipe checkout wizard</p></div>
<p style="text-align: justify;">En la siguiente ventana seleccionamos <code>Check out as project configured using the New Project Wizard</code> y damos click en <code>Finish</code>. Nuevamente se abre el asistente de nuevo proyecto, esta vez seleccionamos la carpeta <code>PHP</code>, damos click en <code>PHP Project</code> y luego en <code>Next</code>.</p>
<div id="attachment_60" class="wp-caption aligncenter" style="width: 516px"><img class="size-full wp-image-60" title="Zend Studio for Eclipse - PHP Project Wizard" src="http://www.republicait.com/wp-content/uploads/2008/12/zse-php-project-wizard.jpg" alt="Zend Studio for Eclipse - PHP Project Wizard" width="506" height="512" /><p class="wp-caption-text">Zend Studio for Eclipse - PHP Project Wizard</p></div>
<p style="text-align: justify;">Luego, en la siguiente ventana, colocamos <code>testapp</code> en <code>Project name</code> y damos click en <code>Finish</code>. En caso tal se nos solicite la confirmación de <code>overwrite</code>, presionamos <code>OK</code>. El resultado final debe lucir así:</p>
<div id="attachment_61" class="wp-caption aligncenter" style="width: 516px"><img class="size-full wp-image-61" title="Zend Studio for Eclipse - PHP Explorer View" src="http://www.republicait.com/wp-content/uploads/2008/12/zse-view-php-explorer.jpg" alt="Zend Studio for Eclipse - PHP Explorer View" width="506" height="512" /><p class="wp-caption-text">Zend Studio for Eclipse - PHP Explorer View</p></div>
Términos de búsqueda<ul><li><a href="http://www.republicait.com/2008/12/31/configurando-un-ambiente-de-desarrollo-parte-2/" title="crear carpeta trunk eclipse svn">crear carpeta trunk eclipse svn</a></li><li><a href="http://www.republicait.com/2008/12/31/configurando-un-ambiente-de-desarrollo-parte-2/" title="virtual host zend debian">virtual host zend debian</a></li></ul><!-- SEO SearchTerms Tagging 2 plugin took 0.968 ms -->]]></content:encoded>
			<wfw:commentRss>http://www.republicait.com/2008/12/31/configurando-un-ambiente-de-desarrollo-parte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando un ambiente de desarrollo &#8211; Parte I</title>
		<link>http://www.republicait.com/2008/12/30/configurando-un-ambiente-de-desarrollo-parte-1/</link>
		<comments>http://www.republicait.com/2008/12/30/configurando-un-ambiente-de-desarrollo-parte-1/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 14:42:35 +0000</pubDate>
		<dc:creator>dcamargo.n</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[virtual host]]></category>
		<category><![CDATA[xampp]]></category>
		<category><![CDATA[zend debugger]]></category>

		<guid isPermaLink="false">http://www.republicait.com/?p=1</guid>
		<description><![CDATA[Este artículo es una introducción de como configurar un ambiente de desarrollo de una aplicación WEB basada en php, apache y mysql utilizando XAMPP, Zend Debugger, Zend Studio for Eclipse y Subclipse sobre una plataforma Windows]]></description>
			<content:encoded><![CDATA[<h3>Introducción</h3>
<p style="text-align: justify;">En este artículo mencionare como configurar un ambiente de desarrollo de una aplicación WEB basada en php, apache y mysql utilizando las siguiente herramientas sobre una plataforma Windows:</p>
<ul>
<li>XAMPP</li>
<li>Zend debugger</li>
<li>Zend Studio for Eclipse (ZSE)</li>
<li>Subclipse</li>
</ul>
<p>Este artículo se divide en 3 partes:</p>
<ul>
<li>Parte I: Configuración de xampp con el Zend Debugger y creando el host virtual de trabajo con Apache.</li>
<li>Parte II: Configuración del ZSE y Subclipse.</li>
<li>Parte III: Configuración del ZSE con el Zend Debugger y ejemplos.</li>
<li>Parte IV: Configuración del ZSE con MySQL.</li>
</ul>
<p>Se asume que tiene conocimientos basicos acerca de:</p>
<ol>
<li>Programación WEB.</li>
<li>Servidores Web</li>
<li>Base de Datos</li>
<li>Subversion</li>
</ol>
<h3>XAMPP</h3>
<p style="text-align: justify;">XAMPP es un paquete preconfigurado conformado por el servidor de base de datos MySQL, el servidor Web Apache  y los ejecutables o intérpretes de los lenguajes de script PHP y PERL. Este paquete lo puedes descargar siguiendo este enlace <a href="http://www.apachefriends.org/download.php?xampp-win32-1.7.0-installer.exe" target="_blank">http://www.apachefriends.org/download.php?xampp-win32-1.7.0-installer.exe</a>. Seguimos los pasos del instalador para tenerlo listo y configurado.<span id="more-1"></span></p>
<blockquote><p><strong>Nota:</strong> Los usuarios de Windows Vista, el paquete puede tener problemas con el UAC.</p></blockquote>
<p style="text-align: justify;">Una vez instalado escribimos en nuestro navegador <code>http://localhost/xampp/phpinfo.php</code> y nos debe aparecer una ventana con la información de la configuración de PHP:</p>
<div id="attachment_16" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-16" title="PHP Info" src="http://www.republicait.com/wp-content/uploads/2008/12/php-info.jpg" alt="PHP Info" width="400" height="308" /><p class="wp-caption-text">PHP Info</p></div>
<h3>Zend Debugger</h3>
<p style="text-align: justify;">Zend Debugger es un servidor que utilizaremos para depurar nuestras aplicaciones hechas con PHP. Se instala como una extensión de PHP. Dado que estamos bajo una plataforma Windows, debemos asegurarnos de escojer la version correcta del debugger, para nuestro caso, el archivo se llama (actualmente)<code> ZendDebugger-{VERSION}-cygwin_nt-i386.zip</code>. Puedes descargarlo siguiendo este enlace <a href="http://downloads.zend.com/pdt/server-debugger/" target="_blank">http://downloads.zend.com/pdt/server-debugger/</a>. Una vez descargado lo descomprimimos en una carpeta temporal.</p>
<blockquote><p><strong>Nota:</strong> Antes de instalar el debugger debemos fijarnos en la versión de PHP que esta instalada y el valor de la configuración <code>Thread Safety</code>. Esto valores se pueden verificar entrando a nuestra página <code>http://localhost/xampp/phpinfo.php</code></p></blockquote>
<p style="text-align: justify;">Una vez con los archivos descomprimidos, entramos a la carpeta  con el nombre de la versión de PHP instalado con el postfijo <code>_comp</code>, en caso tal el valor de  <code>Thread Safety</code>, sea <code>Disabled</code>, debemos escojer la carpeta <code>{PHP_VERSION}_nts_comp</code></p>
<div id="attachment_22" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-22" title="Zend Debugger Folders" src="http://www.republicait.com/wp-content/uploads/2008/12/zend-debugger-folders.jpg" alt="Zend Debugger Folders" width="400" height="308" /><p class="wp-caption-text">Zend Debugger Folders</p></div>
<p style="text-align: justify;">Dentro de la carpeta correcta, copiamos el archivo <code>ZendDebugger.dll</code> a la carpeta de extensiones de PHP, este valor lo podemos encontrar en el phpinfo, la propiedad <code>extension_dir</code>.</p>
<p style="text-align: justify;">El siguiente paso es configurar nuestro archivo <code>php.ini</code>, para saber donde se encuentra este archivo, nos fijamos en el valor de la propiedad <code>Loaded Configuration File</code> de nuestro <code>phpinfo</code>, usualmente está ubicado en la ruta <code>{XAMPP_INSTALLED_DIR}/apache/bin (ejemplo: C:\xampp\apache\bin)</code>. Lo primero es deshabilitar las siguientes líneas:</p>
<pre class="brush:plain">[Zend]
;zend_extension_ts = "C:\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"
;zend_extension_manager.optimizer_ts = "C:\xampp\php\zendOptimizer\lib\Optimizer"
;zend_optimizer.enable_loader = 0
;zend_optimizer.optimization_level=15
;zend_optimizer.license_path =
; Local Variables:
; tab-width: 4
; End:</pre>
<p>Luego agregamos las siguientes líneas para habilitar la extension con el debugger:</p>
<pre class="brush:plain">zend_extension_ts = "C:\xampp\php\ext\ZendDebugger.dll"
zend_debugger.allow_hosts=127.0.0.1
zend_debugger.expose_remotely=always</pre>
<p>Lo cual nos daría como resultado la siguiente configuración:</p>
<pre class="brush:plain">[Zend]
zend_extension_ts = "C:\xampp\php\ext\ZendDebugger.dll"
zend_debugger.allow_hosts=127.0.0.1
zend_debugger.expose_remotely=always
;zend_extension_ts = "C:\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"
;zend_extension_manager.optimizer_ts = "C:\xampp\php\zendOptimizer\lib\Optimizer"
;zend_optimizer.enable_loader = 0
;zend_optimizer.optimization_level=15
;zend_optimizer.license_path =
; Local Variables:
; tab-width: 4
; End:</pre>
<p>Guardamos los cambios y reiniciamos el servidor apache.</p>
<blockquote><p><strong>Nota:</strong> No sobreescribo el valor de la propiedad zend_extension_ts para tener un respaldo de su valor inicial</p>
<p><strong>Nota:</strong> En caso tal el valor de <code>Thread Safety</code> sea <code>Disabled</code>, la propiedad a cambiar debería ser <code>zend_extension</code>, el postfijo <code>_ts</code> es un acronímo de <code>Thread Safety</code>.</p></blockquote>
<p style="text-align: justify;">Una vez reiniciado el servidor apache, verificamos en nuestro phpinfo si la extension ha sido cargada con exito, para esto nos fijamos en la información del Zend Engine</p>
<div id="attachment_24" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-24" title="Zend Debugger enabled in the Zend Engine" src="http://www.republicait.com/wp-content/uploads/2008/12/zend-debugger-php-info-1.jpg" alt="Zend Debugger enabled in the Zend Engine" width="400" height="54" /><p class="wp-caption-text">Zend Debugger enabled in the Zend Engine</p></div>
<p>La otra opción es buscar la sección de configuración del Zend Debugger:</p>
<div id="attachment_25" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-25" title="Zend Debugger configuration section" src="http://www.republicait.com/wp-content/uploads/2008/12/zend-debugger-php-info-2.jpg" alt="Zend Debugger configuration section" width="400" height="308" /><p class="wp-caption-text">Zend Debugger configuration section</p></div>
<h3>Host Virtuales con Apache</h3>
<p style="text-align: justify;">El término host virtual se emplea cuando un mismo servidor Web puede servir mas de un solo host, pareciendo multiples dominios. Así por ejemplo, local.testsvn.com y local.zendtest.com pueden parecer diferentes dominios pero residen bajo el mismo servidor.</p>
<p style="text-align: justify;">Para nuestro ejemplo, crearemos un host virtual que contendrá los archivos  de nuestra aplicación Web, lo creamos bajo la ruta <code>{XAMPP_INSTALLED_DIR}/htdocs/local.testapp.com</code>.</p>
<p style="text-align: justify;">El contenido del archivo <code>{XAMPP_INSTALLED_DIR}/apache/conf/extra/httpd-vhosts.conf</code> debe verse algo como</p>
<pre class="brush:plain">#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any &lt;VirtualHost&gt; block.
#
&lt;VirtualHost *:80&gt;
ServerAdmin admin@localhost
DocumentRoot C:\xampp\htdocs
ServerName localhost
##    ServerAlias www.dummy-host.example.com
ErrorLog logs/error.log
CustomLog logs/access.log common
&lt;/VirtualHost&gt;

&lt;VirtualHost *:80&gt;
ServerAdmin admin@local.testapp.com
DocumentRoot C:\xampp\htdocs\local.testapp.com
ServerName local.testapp.com
#ErrorLog logs/dummy-host2.example.com-error_log
#CustomLog logs/dummy-host2.example.com-access_log common
&lt;/VirtualHost&gt;</pre>
<p>Hay que agregar el nombre de nuestro host virtual en el archivo <code>hosts</code> de Windows ubicado en <code>%WINDIR%\System32\drivers\etc</code>, el cual quedaria algo como:</p>
<pre class="brush:plain">#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

127.0.0.1       localhost
127.0.0.1       local.testapp.com</pre>
<p style="text-align: justify;">Una vez configurados ambos archivos, reiniciamos nuestro servidor Apache y escribimos en el navegador <code>http://local.testapp.com/</code> y si todo esta bien, nos debe cargar la lista de directorios por default.</p>
<blockquote><p><strong>Nota:</strong> No se recomienda colocar host virtuales dentro del <code>DOCUMENT_ROOT</code> del servidor</p></blockquote>
<p>Para más información acerca de hosts virtuales con Apache, puede dirigirse a este enlace <a href="http://httpd.apache.org/docs/1.3/vhosts/" target="_blank">http://httpd.apache.org/docs/1.3/vhosts/</a></p>
Términos de búsqueda<ul><li><a href="http://www.republicait.com/2008/12/30/configurando-un-ambiente-de-desarrollo-parte-1/" title="como sobreescribo un operador en c#">como sobreescribo un operador en c#</a></li><li><a href="http://www.republicait.com/2008/12/30/configurando-un-ambiente-de-desarrollo-parte-1/" title="host virtuales en tomcat zip">host virtuales en tomcat zip</a></li><li><a href="http://www.republicait.com/2008/12/30/configurando-un-ambiente-de-desarrollo-parte-1/" title="modificar configuracion Thread Safety php de hosting">modificar configuracion Thread Safety php de hosting</a></li><li><a href="http://www.republicait.com/2008/12/30/configurando-un-ambiente-de-desarrollo-parte-1/" title="php thread safe">php thread safe</a></li><li><a href="http://www.republicait.com/2008/12/30/configurando-un-ambiente-de-desarrollo-parte-1/" title="phpinfo temporal">phpinfo temporal</a></li><li><a href="http://www.republicait.com/2008/12/30/configurando-un-ambiente-de-desarrollo-parte-1/" title="red5 host virtuales">red5 host virtuales</a></li></ul><!-- SEO SearchTerms Tagging 2 plugin took 2.385 ms -->]]></content:encoded>
			<wfw:commentRss>http://www.republicait.com/2008/12/30/configurando-un-ambiente-de-desarrollo-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
