<?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>elBlëg - Interactividad, usabilidad y web &#187; Php</title>
	<atom:link href="http://www.elbleg.com/category/web-dev/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.elbleg.com</link>
	<description>Interactividad, usabilidad y web</description>
	<lastBuildDate>Thu, 19 Aug 2010 16:41:54 +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>Snippet: Favoritos recientes de Delicious con PHP</title>
		<link>http://www.elbleg.com/web-dev/snippet-favoritos-recientes-de-delicious-con-php.html</link>
		<comments>http://www.elbleg.com/web-dev/snippet-favoritos-recientes-de-delicious-con-php.html#comments</comments>
		<pubDate>Sat, 14 Nov 2009 07:18:26 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://www.elbleg.com/?p=254</guid>
		<description><![CDATA[Este snippet descarga y guarda en cache los bookmarks más recientes de una cuenta en específico en RSS desde el API de Delicious, luego los muestra en un UL de HTML.



function get_delicious()
{
	$cache = dirname(__FILE__) . '/caches/delicious';
	if(filemtime($cache) < (time() - 300))
	{
		@mkdir(dirname(__FILE__) . '/caches', 0777);
		$url = 'https://api.del.icio.us/v1/posts/recent?count=10';
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
		curl_setopt($ch, [...]]]></description>
			<content:encoded><![CDATA[<p>Este snippet descarga y guarda en cache los bookmarks más recientes de una cuenta en específico en RSS desde el API de Delicious, luego los muestra en un UL de HTML.</p>
<p><span id="more-254"></span></p>
<pre class="php" name="code">

function get_delicious()
{
	$cache = dirname(__FILE__) . '/caches/delicious';
	if(filemtime($cache) < (time() - 300))
	{
		@mkdir(dirname(__FILE__) . '/caches', 0777);
		$url = 'https://api.del.icio.us/v1/posts/recent?count=10';
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
		curl_setopt($ch, CURLOPT_TIMEOUT, 5);
		curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

		// agregá delicious.com tu usuario y password en esta línea:
		curl_setopt($ch, CURLOPT_USERPWD, 'usuario:password');
		$data = curl_exec($ch);
		curl_close($ch);
		$cachefile = fopen($cache, 'wb');
		fwrite($cachefile, $data);
		fclose($cachefile);
	}
	else
	{
		$data = file_get_contents($cache);
	}
	$xml = simplexml_load_string($data);

	$html = '
<ul>';
	foreach($xml as $item)
	{
		$html .= '
<li><a href="' . $item['href'] . '">' . $item['description'] . '</a> ' . $item['extended'] . '</li>

';
	}
	$html .= '
<li><a href="http://delicious.com/yeco">Mis bookmarks recientes</a></li>

';
	$html .= '</ul>

';
	echo $html;
}

// Mostralos
get_delicious();
</pre>
<p>Este snippet usa <a target="_blank" href="http://us.php.net/manual/en/ref.simplexml.php">SimpleXML</a>, propiedad que fué incluida en PHP5 para hacer la lectura de XML mucho más sencilla.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/web-dev/snippet-favoritos-recientes-de-delicious-con-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Detección de iPhone y iPod con PHP</title>
		<link>http://www.elbleg.com/web-dev/deteccion-de-iphone-y-ipod-con-php.html</link>
		<comments>http://www.elbleg.com/web-dev/deteccion-de-iphone-y-ipod-con-php.html#comments</comments>
		<pubDate>Wed, 17 Jun 2009 06:53:35 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod]]></category>

		<guid isPermaLink="false">http://www.elbleg.com/?p=101</guid>
		<description><![CDATA[Este pequeño script es útil para redireccionar usuarios de iPhone e iPod a una página en específico. Es útil si estas teniendo mucho trafico desde móviles y tu actual sitio no está optimizado para ello, o bien para redireccionar a la versión optimizada del sitio.


if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPod')
&#124;&#124; strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone'))
{
    header('Location: http://ejemplo.com/paginaparaiPhone');
  [...]]]></description>
			<content:encoded><![CDATA[<p>Este pequeño script es útil para redireccionar usuarios de iPhone e iPod a una página en específico. Es útil si estas teniendo mucho trafico desde móviles y tu actual sitio no está optimizado para ello, o bien para redireccionar a la versión optimizada del sitio.<br />
<span id="more-101"></span></p>
<pre name="code" class="php">
if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPod')
|| strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone'))
{
    header('Location: http://ejemplo.com/paginaparaiPhone');
    exit ();
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/web-dev/deteccion-de-iphone-y-ipod-con-php.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Comprime tu HTML con un poco de PHP</title>
		<link>http://www.elbleg.com/utilidades/comprime-tu-html-con-un-poco-de-php.html</link>
		<comments>http://www.elbleg.com/utilidades/comprime-tu-html-con-un-poco-de-php.html#comments</comments>
		<pubDate>Wed, 17 Jun 2009 06:23:44 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[optimización]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://www.elbleg.com/?p=88</guid>
		<description><![CDATA[Cuando hacemos código nos fascina tenerle un buen formato, bastante espacio en blanco, las sangrías adecuadas, bien comentado, limpio, claro e inmaculado. Lástima que para los usuarios finales esto no valga más que un pepino, solamente quieren el contenido y que cargue rápido. 
Así que te comparto este pequeño script en php, esta pequeña utilidad [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando hacemos código nos fascina tenerle un buen formato, bastante espacio en blanco, las sangrías adecuadas, bien comentado, limpio, claro e inmaculado. Lástima que para los usuarios finales esto no valga más que un pepino, solamente quieren el contenido y que cargue rápido. </p>
<p>Así que te comparto este pequeño script en php, esta pequeña utilidad te elimina todos los cambios de carro, tabs y te deja tu markup en una linea… Comprimiendo tu código y haciendo la carga e interpretación del browser un poco más rapida.<br />
<span id="more-88"></span></p>
<pre name="code" class="php">
&lt;?php
    //  inicia el buffer de salida
    ob_start('compress_html');
?&gt;

&lt;!-- Coloc&aacute; tu HTML ac&aacute; --&gt;

&lt;?php
    // Finaliza el buffer de salida y esc&uacute;pe el html comprimido
    ob_end_flush();

    //  esta funcion elimina los tabs, cambios de carro y espacios en blanco
    function compress_code($compress)
    {
        $i = array('/&gt;[^S ]+/s','/[^S ]+&lt;/s','/(s)+/s');
        $ii = array('&gt;','&lt;','1');
        return preg_replace($i, $ii, $compress);
    }
?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/utilidades/comprime-tu-html-con-un-poco-de-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar la librería GD en Mac OS X Leopard</title>
		<link>http://www.elbleg.com/utilidades/instalar-la-libreria-gd-en-mac-os-x-leopard.html</link>
		<comments>http://www.elbleg.com/utilidades/instalar-la-libreria-gd-en-mac-os-x-leopard.html#comments</comments>
		<pubDate>Mon, 30 Jun 2008 04:06:38 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[libgd]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://eldomo.net/yeco_blog/archives/instalar-la-libreria-gd-en-mac-os-x-leopard</guid>
		<description><![CDATA[
	Recientemente en el trabajo nos vimos creando un programita que requería de GD para funcionar&#8230; pero se me hacía un poco molesto tener que estar subiendo los archivos cada vez que se me antojaba probarlo&#8230; Así que&#8230; teniendo mi adorada mac un servidor integrado&#8230; php integrado&#8230; por qué no instalarle GD??



Manos a la obra, para [...]]]></description>
			<content:encoded><![CDATA[<p>
	Recientemente en el trabajo nos vimos creando un programita que requería de GD para funcionar&#8230; pero se me hacía un poco molesto tener que estar subiendo los archivos cada vez que se me antojaba probarlo&#8230; Así que&#8230; teniendo mi adorada mac un servidor integrado&#8230; php integrado&#8230; por qué no instalarle GD??<br />
<span id="more-71"></span>
</p>
<p>
Manos a la obra, para la siguiente receta necesitamos estos ingredientes:
</p>
<ul>
<li>Haber hecho un backup previo
	</li>
<li>Tener la última version del developer tools de apple (Xcode 3.0 como minimo). Los dev tools están en el DVD que venía con la mac.
	</li>
<li>X11 cliente&#8230; este ya está instalado en 10.5.x
	</li>
<li>X11SDK, que no es lo mismo que el cliente.
	</li>
<li>Revisar que efectivamente tienes el back up
	</li>
<li>No haber instalado nada relacionado con GD, libpng, libjpg o freetype anteriormente (o al menos saber cómo adaptar estas instrucciones a lo que tienes)
	</li>
</ul>
<p><br/><br/></p>
<h3>
	Instalando libjpeg<br />
</h3>
<ul>
<li>Creas un directorio temporal llamado recursos en la raíz del disco duro.
	</li>
<li>Descargas <a href="http://www.ijg.org/files/jpegsrc.v6b.tar.gz">libjpeg</a> y lo extraes en &#8220;recursos&#8221;.
	</li>
<li>Abres el terminal y logueas en root digitando &#8220;su&#8221;
	</li>
</ul>
<p>
	En caso de que no tengas habilitados los privilegios de administrador es fácil habilitarlos con la utilidad de directorios.app que se localiza en /Applications/Utilities&#8230; simplemente lo abres, das click en edit option → “Enable Root User” y luego asignando un password. </p>
<p>Luego en terminal escribes:
</p>
<pre>
cd /Recursos/jpeg-6b
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
</pre>
<p>
	Luego, para procesadores de 32 bit escribes:
</p>
<pre>
./configure --enable-shared
</pre>
<p>
	Y para los de 64 bits:
</p>
<pre>
MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch ppc
-arch ppc64 -arch i386 -arch x86_64 -g -Os
-pipe -no-cpp-precomp" CCFLAGS="-arch ppc
-arch ppc64 -arch i386 -arch x86_64 -g -Os
-pipe" CXXFLAGS="-arch ppc -arch ppc64 -arch i386
-arch x86_64 -g -Os  -pipe" LDFLAGS="-arch ppc
-arch ppc64 -arch i386 -arch x86_64 -bind_at_load"
./configure --enable-shared
</pre>
<p>
	Por ultimo escribes esto para instalarlo:
</p>
<pre>
make
mkdir -p /usr/local/include
mkdir -p /usr/local/bin
mkdir -p /usr/local/lib
mkdir -p /usr/local/man/man1
make install
</pre>
<p><br/><br />
<br/></p>
<h3>
	Instalando la librería GD<br />
</h3>
<p>
	Descargas <a href="http://www.opensource.apple.com/darwinsource/10.5/apache_mod_php-43/php-5.2.4.tar.bz2">PHP</a> y lo extraes en &#8220;Recursos&#8221; (php-5.2.4 es lo adecuado porque es la misma versión que viene preinstalada en Leopard). </p>
<p>De nuevo en terminal.app:</p>
<pre>
cd /Recursos/php-5.2.4/ext/gd
phpize
</pre>
<p>
	Para 32 Bits:
</p>
<pre>
./configure --with-zlib-dir=/usr --with-jpeg-dir=/usr/local/lib
--with-png-dir=/usr/X11R6 --with-freetype-dir=/usr/X11R6
--with-xpm-dir=/usr/X11R6
</pre>
<p>
	Para 64 Bits:
</p>
<pre>
MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch ppc -arch ppc64
-arch i386 -arch x86_64 -g -Os  -pipe -no-cpp-precomp"
CCFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g
-Os  -pipe" CXXFLAGS="-arch ppc -arch ppc64 -arch i386
-arch x86_64 -g -Os  -pipe" LDFLAGS="-arch ppc -arch ppc64
-arch i386 -arch x86_64 -bind_at_load" ./configure
--with-zlib-dir=/usr --with-jpeg-dir=/usr/local/lib
--with-png-dir=/usr/X11R6 --with-freetype-dir=/usr/X11R6
--with-xpm-dir=/usr/X11R6 --with-gd
</pre>
<p>
	Y luego escribes:
</p>
<pre>
make
make install
</pre>
<p><br/><br/></p>
<h3>
	Integramos al Apache<br />
</h3>
<p>
	Renombras el archivo php.ini.default a php.ini que se encuentra en /etc. </p>
<p>
Lo abres y le agregas esta linea:
</p>
<pre>
extension=gd.so
</pre>
<p>
	Luego buscas esta:</p>
<pre>
extension_dir = "./" </pre>
<p>Y la desactivas poniendole un punto y coma adelante.
<pre>>;extension_dir = "./" </pre>
<p><br/>Por último reinicias el Apache:
</p>
<pre>
apachectl restart
</pre>
<p>
	y creas un archivo llamado test.php que contenga esto:
</p>
<pre>
&lt;?
phpinfo();
?&gt;
</pre>
<p>Y si ves algo parecido a esto:</p>
<p><img src="http://i27.tinypic.com/166hukk.gif" alt="GD info" /></p>
<p>Estás listo.</p>
<p>Provecho</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/utilidades/instalar-la-libreria-gd-en-mac-os-x-leopard.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Flex + Apache + Php + mySQL + amfphp + tomcat +fds(lcds) juntos, sin problemas</title>
		<link>http://www.elbleg.com/actionscript/flexapachephpmysqlamfphptomcatfdslcds-sin-fisuras.html</link>
		<comments>http://www.elbleg.com/actionscript/flexapachephpmysqlamfphptomcatfdslcds-sin-fisuras.html#comments</comments>
		<pubDate>Fri, 16 May 2008 06:32:10 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://eldomo.net/yeco_blog/archives/flexapachephpmysqlamfphptomcatfdslcds-sin-fisuras</guid>
		<description><![CDATA[En estos momentos ando desarrollando una RIA bastante grande basada en Flex+AMFPHP y conexión con MySQL. Para desplegar el entorno de desarrollo de forma fácil, basta con instalar alguno de los paquetes recopilatorios que incluyen el entorno LAMP (como por ejemplo, XAMPP de los ApacheFriends).
Hasta aquí todo perfecto. El problema surge cuando queremos incorporar a [...]]]></description>
			<content:encoded><![CDATA[<p>En estos momentos ando desarrollando una RIA bastante grande basada en Flex+AMFPHP y conexión con MySQL. Para desplegar el entorno de desarrollo de forma fácil, basta con instalar alguno de los paquetes recopilatorios que incluyen el entorno LAMP (como por ejemplo, XAMPP de los ApacheFriends).</p>
<p>Hasta aquí todo perfecto. El problema surge cuando queremos incorporar a nuestro proyecto (en mayor o menor medida) algunos módulos basados en FDS (Flex Data Services), ahora conocido como LiveCycle Data Services. Esto nos obliga a montar un servidor de aplicaciones J2EE (como Tomcat) junto a nuestro Apache.<br />
<span id="more-70"></span><br />
La verdad es que para mi proyecto, dadas las dimensiones que ya tiene y a los tiempos de desarrollo tan ajustados, me resulta inviable plantear un refactoring del código para basar el proyecto totalmente en LCDS. Al menos para la primera revisión estable, he decidido mantener AMFPHP e incorporar LCDS para implementar un módulo de Reporting y quizás alguno más para generación de listados de datos y gráficas empresariales a tiempo real (mediante data-push).</p>
<p>Todo esto me hace plantear lo siguiente: ¿a caso no es posible, o incluso deseable, desarrollar un proyecto Flex en el que se incluyan partes con AMFPHP, LCDS e incluso Red5?</p>
<p>En un intento rápido, he tratado de cargar un módulo de generación de PDF existente en Tomcat desde la aplicación principal (basada en Flex+AMFPHP) sin muy buenos resultados.</p>
<p>El problema es que hay muchos problemas y me explico: el app principal corre en Apache (puerto 80) y tomcat en el 8080. Mi aplicación principal es un Flex compilado, mientras que la parte en LCDS es MXML compilado en el servidor. Al llamar de uno a otro, podemos tener problemas de violación de la sandbox y lo que es peor, problemas con los contextos:</p>
<p>En LCDS, configuramos la compilación, linkado, “destinations” y demás mediante ficheros de configuración xml. Concretamente, en el fichero services-config.xml especificamos los endpoints de cada uno de los canales con los que queremos trabajar. Esto es el extracto perteneciente a AMF:</p>
<p>[code]<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"><br />
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"></endpoint></channel-definition></p>
<properties>
<polling-enabled>false</polling-enabled> </properties> [/code]Como vemos, en el endpoint del canal, se indican una serie de “variables” que a posteriori se sustituirán por los valores correctos.</p>
<p>He observado que, cuando se llama al módulo desde la aplicación principal (en Apache), dicha información es desconocida y por lo tanto, el módulo no funciona ni para atrás.</p>
<p>Seguramente todo es más fácil de lo que pienso, pero ante todo soy desarrollador, NO administrador; por eso, aunque esos parámetros pueden indicarse tanto en el fichero flex-config.xml como en la propia linea de comandos del compilador, creo muy tedioso e indeseable el estar trasteando con esos parámetros. De hecho y por experiencia, creo que estar “chapuceando” las instalaciones para salir del paso se convierte en un problema insalvable a la larga.</p>
<p>Para mis necesidades, creo que la mejor solución es la siguiente: hacer hablar correctamente a Apache con Tomcat.</p>
<p>Para esto último, lo único que necesitamos es instalar Apache Tomcat Connector. Esto es simplemente un módulo de Apache como otro cualquiera que canaliza, según un fichero de reglas, todas las llamadas necesarias a Tomcat una vez recibidas por Apache y de forma transparente.</p>
<p>Esto nos proporciona enormes posibilidades no sólo para integrar en nuestras aplicaciones módulos de distintas procedencias de manera sencilla; sino que además nos permitirá servir aplicaciones J2EE desde varios servidores a través de Apache (Apache se convierte en una especie de “proxy”), habilitar mecanismos de balanceo de carga, etc….</p>
<p>Al grano….</p>
<h3>Instalación de Apache+PHP+MySQL+AMFPHP.</h3>
<p>Creo que este apartado no requiere de muchas explicaciones y hay montones de tutoriales por toda la red. En resumen y para los impacientes: descarga XAMPP para Mac Osx, Windows o Linux y descarga e instala AMFPHP como corresponda.</p>
<h3> Instalación de Apache Tomcat y LCDS</h3>
<p>- Descarga Apache Tomcat desde la web oficial e instala de la manera convencional. Arranca el servicio para comprobar que todo está OK y a continuación paralo nuevamente.</p>
<p>- Descarga el instalador de LiveCycle Data Services desde la web de Adobe.</p>
<p>- Inicia la instalación indicando que quieres una instalación sobre un servidor J2EE existente (no con el JRun integrado). Selecciona como directorio de instalación el directorio principal de aplicaciones de tu Tomcat (por ejemplo, D:\Tomcat_5.5_lcds\webapps). Esto añadirá a dicha carpeta varios ficheros .war que habilitarán LCDS sobre Tomcat.</p>
<p>- Inicia Tomcat y espera un pelín. Tomcat automáticamente se encargará de expandir los ficheros .war de LCDS, creando sobre nuestro directorio webapps correspondiente una nueva carpeta por cada fichero .war existente.</p>
<p>- Una vez compruebes de que todo está arrancado, abre las aplicaciones de ejemplo de LCDS para comprobar que todo está OK: http://localhost:8080/samples.</p>
<p>¡¡Ya casi estamos!!</p>
<h3>Instalación y configuración del Apache Tomcat Connector.</h3>
<p>Lo primero que deberemos hacer es descargar el módulo correspondiente a nuestra versión de Apache desde esta dirección.</p>
<p>Dentro encontrarás una serie de ficheros, entre los cuales están las librerías .so para nuestro Apache y que tienen la siguiente forma:</p>
<p>[code]mod_jk-apache-(version_apache).so[/code]</p>
<p>Tan sólo deberemos descargar el fichero correspondiente a la (version_apache) que tenemos instalada.</p>
<p>Ahora guardamos el fichero descargado en el directorio de módulos de apache (en Windows suele ser c:\apache\modules) y renombrar el fichero al nombre mod_jk.so. Este paso es muy importante si queremos evitar problemas a posteriori.</p>
<p>Para mantener las cosas en orden, vamos a crear un fichero de configuración .conf independiente del principal (htttpd.conf).</p>
<p>Creamos un nuevo fichero de texto llamado tomcat.conf con el siguiente contenido:</p>
<p>[code]# Carga del módulo apache<br />
LoadModule jk_module modules/mod_jk.so<br />
# Si tenemos instalado una versión de Apache &lt; 2.x quizás debamos<br />
# descomentar esta línea para habilitar<br />
# AddModule mod_jk.c<br />
# Ubicación del fichero de configuración del conector (workers.properties)<br />
# Es deseable que ubiques el fichero en el directorio conf para que esté cerca<br />
# del httpd.conf y lo tengamos todo controlado<br />
JkWorkersFile conf/workers.properties<br />
# Dónde poner el fichero de memoria compartida del módulo<br />
JkShmFile logs/mod_jk.shm<br />
# Dónde poner el fichero de log del módulo<br />
# Es deseable que ubiques el fichero en el directorio de logs de<br />
# Apache para tenerlo todo controlado<br />
JkLogFile logs/mod_jk.log<br />
# Especificamos el nivel de log [debug/error/info]<br />
JkLogLevel info<br />
# Especificamos el formato timestamp para el fichero de log<br />
JkLogStampFormat “[%a %b %d %H:%M:%S %Y] ”<br />
##################################################<br />
# REGLAS DE REDIRECCIÓN A TOMCAT<br />
##################################################<br />
# Aquí añadiremos tantas reglas de redirección como sean necesarias.<br />
# Es importante dejar claro que cada regla de redirección va dirigida a<br />
# un “worker” particular. Podemos tener tantos workers como queramos<br />
# y cada uno de ellos puede ser un Tomcat diferente.<br />
###################################################<br />
#<br />
# Enviamos todo para el contexto /samples al worker llamado “worker1″<br />
JkMount /samples/* worker1[/code]</p>
<p>Ahora creamos el fichero workers.properties en la ubicación que hayamos indicado en el fichero anterior y lo rellenamos con el siguiente contenido:</p>
<p>[code]#Definimos un worker real usando ajp13 (más sobre esto en la doc oficial)<br />
worker.list=worker1<br />
# Propiedades del worker1 (ajp13)<br />
worker.worker1.type=ajp13<br />
worker.worker1.host=localhost<br />
worker.worker1.port=8009[/code]</p>
<p>Por último, tan sólo nos queda incluir nuestro fichero de configuración para su carga con Apache:</p>
<p>Edita el fichero httpd.conf y añade al final del mismo las siguientes líneas:</p>
<p>[code]# Configuración del conector Apache-Tomcat<br />
Include conf/tomcat.conf[/code]</p>
<h3> Pruebas y conclusiones finales.</h3>
<p>Para probar que todo está OK, tan sólo debemos abrir http://localhost/samples. Si todo ha ido bien, ¡¡estamos viendo los ejemplos de LCDS sin usar el puerto 8080!!.</p>
<p>Fantástico, a mi me ha facilitado muchísimo el trabajo.</p>
<p>Si tienes algún problema, seguramente Apache ni te cargue correctamente. Intenta arrancar Apache desde consola para así poder ver posibles errores de sintaxis en alguno de los fichero que hemos creado. Lo más probable es que hayas descargado la versión del mod_jk.so errónea para tu versión de Apache.</p>
<p>Ahora podemos demostrar de manera muy rápida la integración y uso directo de Flex en el que cargamos un módulo en Tomcat+LCDS desde una aplicación con Flex+AMFPHP:</p>
<p>Código en aplicación ERP.swf (Apache+AMFPHP):</p>
<p>[as]<mx:moduleloader id="modPDFReportingModuleLoader"><br />
url=&#8221;http://localhost/samples/pdfgen/pdfgenModule.swf&#8221;<br />
height=&#8221;100%&#8221; width=&#8221;100%&#8221; x=&#8221;0&#8243;/&gt;<br />
<mx:script><br />
<!--[CDATA[<br />
import modules.ModPDFReporting;<br />
public function createModule():void {<br />
if (!modPDFReportingModuleLoader.url) {<br />
modPDFReportingModuleLoader.url = "http://localhost/samples/pdfgen/pdfgenModule.swf";<br />
return;<br />
}<br />
modPDFReportingModuleLoader.loadModule();<br />
}<br />
public function removeModule():void {<br />
modPDFReportingModuleLoader.unloadModule();<br />
}<br />
]]--></mx:script>[/as]<br />
Este es el contenido (simplificado) de pdfgenModule.swf:</mx:moduleloader></p>
<p>[as]<mx:module xmlns:mx="http://www.adobe.com/2006/mxml"><br />
<mx:script><br />
<!--[CDATA[<br />
import flash.net.navigateToURL;<br />
import mx.controls.Alert;<br />
import mx.rpc.events.FaultEvent;<br />
import mx.rpc.events.ResultEvent;<br />
import mx.graphics.ImageSnapshot;<br />
private function generatePDF():void<br />
{<br />
service.generatePDF(xmlModel);<br />
}<br />
private function resultHandler(event:ResultEvent):void<br />
{<br />
var url:String = event.result as String;<br />
navigateToURL(new URLRequest(url), "_blank");<br />
}<br />
private function faultHandler(event:FaultEvent):void<br />
{<br />
Alert.show(event.fault.toString(), "Error")<br />
}<br />
]]--><br />
</mx:script><br />
<mx:remoteobject id="service" destination="PDFService"><br />
fault=&#8221;faultHandler(event)&#8221;<br />
result=&#8221;resultHandler(event)&#8221; /></mx:remoteobject></mx:module>[/as]</p>
<p>Como podemos observar, en este código usamos LCDS para llamar a un destination de tomcat. Lo más importante es que ahora gracias a nuestro conector, el funcionamiento es transparente y se simplifica mucho la realización de módulos independientes e incluso, que varias personas trabajemos en cada parte sin saber muchos detalles acerca de la instalación y configuración puntual que haya sobre Apache, Tomcat, etc.</p>
<p>Si te sirve me cuentas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/actionscript/flexapachephpmysqlamfphptomcatfdslcds-sin-fisuras.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AJAX en 30 segundos</title>
		<link>http://www.elbleg.com/web-dev/ajax-en-30-segundos.html</link>
		<comments>http://www.elbleg.com/web-dev/ajax-en-30-segundos.html#comments</comments>
		<pubDate>Sat, 15 Dec 2007 20:47:38 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://eldomo.net/yeco_blog/archives/ajax-en-30-segundos</guid>
		<description><![CDATA[
Me parece que mucho material sobre AJAX un tanto alarmista&#8230;. no sé&#8230; lo complican demasiado, al menos a mi parecer. Muchas personas han estado utilizando métodos similares mucho antes de que a alguien se le ocurriera llamarlo AJAX. Y realmente no es tan complejo como muchos lo hacen ver.
Así que para muestra un boton:

function createRequestObject()
{
 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.elbleg.com/wp-content/uploads/2007/12/ajax.jpg" /></p>
<p>Me parece que mucho material sobre AJAX un tanto alarmista&#8230;. no sé&#8230; lo complican demasiado, al menos a mi parecer. Muchas personas han estado utilizando métodos similares mucho antes de que a alguien se le ocurriera llamarlo AJAX. Y realmente no es tan complejo como muchos lo hacen ver.<span id="more-60"></span></p>
<p>Así que para muestra un boton:</p>
<pre name="code" class="js">
function createRequestObject()
{
  var ro;
  var browser = navigator.appName;
  if(browser == &quot;Microsoft Internet Explorer&quot;)
  {
    ro = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
  }
  else
  {
    ro = new XMLHttpRequest();
  }
  return ro;
}
var http = createRequestObject();
function sndReq(action)
{
  http.open(&#039;get&#039;, &#039;rpc.php?action=&#039;+action);
  http.onreadystatechange = handleResponse;
  http.send(null);
}
function handleResponse()
{
  if(http.readyState == 4)
  {
    var response = http.responseText;
    var update = new Array();
    if(response.indexOf(&#039;|&#039;) != -1)
    {
      update = response.split(&#039;|&#039;);
      document.getElementById(update[0]).innerHTML = update[1];
    }
  }
}
</pre>
<p>Esto crea varios objetos para recibir y enviar la petición así como una función para manejar la respuesta. Podés incluir este js en tu página si querés. Ahora.. para hacerlo funcionar  es necesario ejecutarlo con un evento onClick o a un href común como este:</p>
<pre name="code" class="xml">
&lt;a href=&quot;javascript:sndReq(&#039;foo&#039;)&quot; xhref=&quot;javascript:sndReq(&#039;foo&#039;)&quot;&gt;[foo]&lt;/a&gt;
</pre>
<p>Esto significa que cuando alguien haga clic en esta liga lo que sucederá será es que se envie una solicitud a rpc.php?action=foo.</p>
<p>Y en rpc.php deberías tener algo como esto:</p>
<pre name="code" class="php">
switch($_REQUEST['action']) {
case 'foo':
/* HACER ALGO! */
echo "foo|foo done";
break;

}
</pre>
<p>Ahora&#8230; analicemos un segundo el handleResponse. Lo que hace es que parsea el string  “foo | foo done” y lo corta en el &#8220;|&#8221; y usa lo que sea que esté antes del &#8220;|&#8221; como el ID del elemento DOM en la página y lo que esté despues como el nuevo innerHTML de ese elemento.</p>
<p>Esto significa que si tenés un div como este en la página:</p>
<pre name="code" class="xml">
&lt;p id=&quot;foo&quot;&gt;&amp;nbsp;&lt;/p&gt;
</pre>
<p>Cuando des clic en el link, dinámicamente va a cambiar a:</p>
<pre name="code" class="xml">
&lt;p id=&quot;foo&quot;&gt;foo done&lt;/p&gt;
</pre>
<p>Y eso es todo. Lo que sigue es solo agregar  y construir sobre esto. Reemplazando la simple respuesta &#8220;id | contenido &#8221; con una sintaxis XML más rica  y/o hacer la petición más compleja tambien. Antes de instalar a ciegas una librería AJAX, dale un vistazo para ver si hace lo que necesitas, que muchas veces son más de lo que se requiere y el usuario termina descargandolas gratuitamente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/web-dev/ajax-en-30-segundos.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WOS: Servidor web en una llave USB</title>
		<link>http://www.elbleg.com/utilidades/wos-servidor-web-en-una-llave-usb.html</link>
		<comments>http://www.elbleg.com/utilidades/wos-servidor-web-en-una-llave-usb.html#comments</comments>
		<pubDate>Tue, 26 Jun 2007 22:14:31 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://eldomo.net/yeco_blog/archives/wos-servidor-web-en-una-llave-usb</guid>
		<description><![CDATA[Si eres de los que está todo el día itinerante, si necesitas tener un servidor web siempre a mano o si, simplemente, quieres poder llevar a cualquier parte un Wiki o un CMS cualquiera que dependa de PHP y MySQL, Web on Stick te vendrá como anillo al dedo.

WOS es un servidor que podrás llevar [...]]]></description>
			<content:encoded><![CDATA[<p>Si eres de los que está todo el día itinerante, si necesitas tener un servidor web siempre a mano o si, simplemente, quieres poder llevar a cualquier parte un Wiki o un CMS cualquiera que dependa de PHP y MySQL, Web on Stick te vendrá como anillo al dedo.<br />
<span id="more-42"></span><br />
WOS es un servidor que podrás llevar en una llave USB y ejecutar en cualquier equipo windows (desde el 98 al Vista) al que conectes la llave, sin necesidad de instalar nada<br />
Se trata de una solución muy completa que incorpora Apache, MySQL, PHP 4 y 5 e ImageMagik y, opcionalmente, muchos CMS instalados (Typo 3, WordPress, Joomla, Mediawiki, PHPmyadmin…)</p>
<p>Como bien dicen en Tripix, donde me enteré de la existencia de este interesantísimo programa, es ideal para cuando un cliente nos pide “Una copia de la web en CD”</p>
<p><strong>WOS:</strong> <a href="http://www.chsoftware.net/en/useware/wos/wos.htm">http://www.chsoftware.net/en/useware/wos/wos.htm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/utilidades/wos-servidor-web-en-una-llave-usb.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Libros gratis!!</title>
		<link>http://www.elbleg.com/utilidades/libros-gratis.html</link>
		<comments>http://www.elbleg.com/utilidades/libros-gratis.html#comments</comments>
		<pubDate>Sun, 03 Jun 2007 21:54:30 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[Css]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Utilidades]]></category>

		<guid isPermaLink="false">http://eldomo.net/yeco_blog/?p=14</guid>
		<description><![CDATA[deambulando por ahi me encontré con este sitio http://www.librosweb.es/ y consiste en libros relacionados a la programación y diseño, traducidos y además gratis.
me parece una gran iniciativa y aunque por ahora la lista disponible no es muy grande, es cuestion de tiempo para que se pueda encontrar de todo por ahi.
no olvides darte la vuelta.
http://www.librosweb.es/
]]></description>
			<content:encoded><![CDATA[<p>deambulando por ahi me encontré con este sitio <a targer="_blank" href="http://www.librosweb.es/">http://www.librosweb.es/</a> y consiste en libros relacionados a la programación y diseño, traducidos y además gratis.</p>
<p>me parece una gran iniciativa y aunque por ahora la lista disponible no es muy grande, es cuestion de tiempo para que se pueda encontrar de todo por ahi.</p>
<p>no olvides darte la vuelta.</p>
<p><a targer="_blank" href="http://www.librosweb.es/">http://www.librosweb.es/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/utilidades/libros-gratis.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Amfphp: llamadas remotas desde PHP</title>
		<link>http://www.elbleg.com/actionscript/amfphp-llamadas-remotas-desde-php.html</link>
		<comments>http://www.elbleg.com/actionscript/amfphp-llamadas-remotas-desde-php.html#comments</comments>
		<pubDate>Sun, 03 Jun 2007 21:41:16 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://eldomo.net/yeco_blog/?p=13</guid>
		<description><![CDATA[Bien&#8230; estos últimos días me he visto en la necesidad de investigar bastante sobre comunicación de Flash con una base de datos en el servidor&#8230; y leyendo&#8230; vi que amfphp es una muy buena opción, para quienes no tenemos $$$ suficiente para pagarle a adobe una licencia de Flash remoting y además no tenemos un [...]]]></description>
			<content:encoded><![CDATA[<p>Bien&#8230; estos últimos días me he visto en la necesidad de investigar bastante sobre comunicación de Flash con una base de datos en el servidor&#8230; y leyendo&#8230; vi que <strong>amfphp</strong> es una muy buena opción, para quienes no tenemos $$$ suficiente para pagarle a adobe una licencia de Flash remoting y además no tenemos un server ColdFusion.<br />
<span id="more-16"></span><br />
Amfphp es un RPC  que nos permite comunicar datos entre el cliente (Flash, Flex, &#8230;) y el servidor (PHP).</p>
<p>Se trata de llamar a un método de un objeto local con varios parámetros y una función de vuelta y recibir los resultados. No hay que preocuparse de cómo se envian o reciben los datos, el cliente y el servidor (Flash y PHP) están sincornizados para ello. Te permite preocuparte sobre las características de tu aplicación más que por como se implementa, a parte de ofrecer un navegador que permite realizar los servicios y probrarlos antes de que se empiece a desarrollar el cliente.</p>
<p>Permite conectar PHP con: Flash y Flex con Remoting, JavaScript y Ajax con JSON y clientes XML con XML-RPC. Y entre las características que nos ofrece, nos encontramos con que es compatible con PHP4 y PHP5, sin necesidades de extensiones, es rápido y ligero, ofrece herramientas para ayudarnos en el desarrollo y es posible incluirlo en el framework que usemos.</p>
<p>Ejemplos de desarrollo usando Amfphp que nos pueden ayudar:</p>
<ul>
<li><a target="_blank" href="http://www.flash-db.com/Tutorials/update/">Editar una tabla</a></li>
<li><a target="_blank" href="http://www.flash-creations.com/notes/servercomm_remoting_amfphp.php">Base de datos</a></li>
<li><a target="_blank" href="http://groups.drupal.org/node/2768">Obtener datos de Drupal</a></li>
<li><a target="_blank" href="http://klr20mg.com/awi/">AWI &#8211; Amfphp WordPress Integration</a></li>
<li><a target="_blank" href="http://www.flash-db.com/Tutorials/form/">Formularios</a></li>
<li><a target="_blank" href="http://flash-db.com/Tutorials/hello/flashamfphp.php">Hello World</a></li>
<li><a target="_blank" href="http://flash-db.com/Tutorials/store/ShoppingTutorial.php?page=6">Tienda online</a></li>
</ul>
<p>Podés descargar el Amfphp <a "_blank" href="http://www.amfphp.org/">acá</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/actionscript/amfphp-llamadas-remotas-desde-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CodeIgniter</title>
		<link>http://www.elbleg.com/opensource/codeigniter.html</link>
		<comments>http://www.elbleg.com/opensource/codeigniter.html#comments</comments>
		<pubDate>Sat, 12 May 2007 02:12:31 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Php]]></category>

		<guid isPermaLink="false">http://eldomo.net/yeco_blog/?p=8</guid>
		<description><![CDATA[CodeIgniter is a powerful PHP framework with a very small footprint, built for PHP coders who need a simple and elegant toolkit to create full-featured web applications. If you’re a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you’re tired of ponderously large and thoroughly undocumented [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><a target=_blank href="http://codeigniter.com/">CodeIgniter</a> is a powerful PHP framework with a very small footprint, built for PHP coders who need a simple and elegant toolkit to create full-featured web applications. If you’re a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you’re tired of ponderously large and thoroughly undocumented frameworks.</p></blockquote>
<p>Veamos qué tan cierto es en su <a target=_blank href="http://codeigniter.com/">site</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/opensource/codeigniter.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
